New, optional, method to get size of extended memory.
It will be used for getextmem() if EXTENDED_MEMDETECT is defined. Worked on all tested machines. Thanks to all testers, especially Martin Husemann!
This commit is contained in:
parent
80b4ae52e8
commit
2092d92ef2
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: biosmem.S,v 1.3 1997/06/13 13:43:05 drochner Exp $ */
|
||||
/* $NetBSD: biosmem.S,v 1.4 1997/08/14 15:22:01 drochner Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996
|
||||
|
@ -69,7 +69,7 @@ ENTRY(getbasemem)
|
|||
|
||||
/* get mem above 1M, in kByte */
|
||||
|
||||
ENTRY(getextmem)
|
||||
ENTRY(getextmem1)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
pushl %ebx
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
/* $NetBSD: biosmemx.S,v 1.1 1997/08/14 15:22:00 drochner Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997
|
||||
* Matthias Drochner. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed for the NetBSD Project
|
||||
* by Matthias Drochner.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define data32 .byte 0x66
|
||||
|
||||
.text
|
||||
|
||||
/* int getextmem2(int buffer[2])
|
||||
return: 0=OK, -1=error
|
||||
buffer[0]: extmem kBytes below 16M (max 15M/1024)
|
||||
buffer[1]: extmem above 16M, in 64k units
|
||||
*/
|
||||
ENTRY(getextmem2)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
pushl %ebx
|
||||
pushl %ecx
|
||||
pushl %edx
|
||||
push %esi
|
||||
push %edi
|
||||
|
||||
call _C_LABEL(prot_to_real)
|
||||
|
||||
data32
|
||||
movl $0xe801, %eax
|
||||
int $0x15
|
||||
jc err2
|
||||
|
||||
data32
|
||||
movl $0, %ecx
|
||||
jmp ok2
|
||||
err2:
|
||||
data32
|
||||
movl $-1, %ecx
|
||||
ok2:
|
||||
data32
|
||||
movl %eax, %edx
|
||||
|
||||
data32
|
||||
call _C_LABEL(real_to_prot)
|
||||
|
||||
movl 8(%ebp), %eax
|
||||
movl %edx, (%eax)
|
||||
movl %ebx, 4(%eax)
|
||||
|
||||
movl %ecx, %eax
|
||||
|
||||
pop %edi
|
||||
pop %esi
|
||||
popl %edx
|
||||
popl %ecx
|
||||
popl %ebx
|
||||
popl %ebp
|
||||
ret
|
||||
|
||||
/* int getmementry(int iterator, buffer[5])
|
||||
return: new iterator, 0=end of list or error
|
||||
buffer[0]: start of memory chunk
|
||||
buffer[2]: length (bytes)
|
||||
buffer[4]: type
|
||||
*/
|
||||
ENTRY(getmementry)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
pushl %ebx
|
||||
pushl %ecx
|
||||
pushl %edx
|
||||
push %esi
|
||||
push %edi
|
||||
|
||||
movl 8(%ebp), %ebx
|
||||
movl $20, %ecx
|
||||
movl $0x534d4150, %edx # "SMAP"
|
||||
movl 12(%ebp), %edi
|
||||
|
||||
call _C_LABEL(prot_to_real)
|
||||
|
||||
data32
|
||||
movl $0xe820, %eax
|
||||
int $0x15
|
||||
|
||||
jnc ok
|
||||
data32
|
||||
movl $0, %ebx
|
||||
|
||||
ok:
|
||||
data32
|
||||
call _C_LABEL(real_to_prot)
|
||||
|
||||
movl %ebx, %eax
|
||||
|
||||
pop %edi
|
||||
pop %esi
|
||||
popl %edx
|
||||
popl %ecx
|
||||
popl %ebx
|
||||
popl %ebp
|
||||
ret
|
|
@ -0,0 +1,66 @@
|
|||
/* $NetBSD: getextmemx.c,v 1.1 1997/08/14 15:22:00 drochner Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997
|
||||
* Matthias Drochner. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed for the NetBSD Project
|
||||
* by Matthias Drochner.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Try 2 more fancy BIOS calls to get the size of extended
|
||||
memory besides the classical int15/88, take maximum.
|
||||
needs lowlevel parts from biosmemx.S and biosmem.S
|
||||
*/
|
||||
|
||||
#include <lib/libsa/stand.h>
|
||||
#include "libi386.h"
|
||||
|
||||
extern int getextmem2 __P((int*));
|
||||
extern int getmementry __P((int, int*));
|
||||
|
||||
int getextmemx()
|
||||
{
|
||||
int buf[5], i;
|
||||
int extmem = getextmem1();
|
||||
|
||||
if(!getextmem2(buf) && buf[0] <= 15 * 1024) {
|
||||
int help = buf[0];
|
||||
if(help == 15 * 1024)
|
||||
help += buf[1] * 64;
|
||||
if(extmem < help)
|
||||
extmem = help;
|
||||
}
|
||||
|
||||
for(i = 0; (i = getmementry(i, buf)) != 0;) {
|
||||
if((buf[4] == 1 && buf[0] == 0x100000)
|
||||
&& extmem < buf[2] / 1024)
|
||||
extmem = buf[2] / 1024;
|
||||
}
|
||||
|
||||
return(extmem);
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: libi386.h,v 1.3 1997/06/13 17:49:25 drochner Exp $ */
|
||||
/* $NetBSD: libi386.h,v 1.4 1997/08/14 15:22:01 drochner Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996
|
||||
|
@ -48,7 +48,13 @@ int netbsd_opt __P((char));
|
|||
|
||||
void delay __P((int));
|
||||
int getbasemem __P((void));
|
||||
int getextmem __P((void));
|
||||
int getextmemx __P((void));
|
||||
int getextmem1 __P((void));
|
||||
#ifdef EXTENDED_MEMDETECT
|
||||
#define getextmem() getextmemx()
|
||||
#else
|
||||
#define getextmem() getextmem1()
|
||||
#endif
|
||||
void reboot __P((void));
|
||||
void gateA20 __P((void));
|
||||
|
||||
|
|
Loading…
Reference in New Issue