summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/amd64/stand/boot/conf.c4
-rw-r--r--sys/arch/amd64/stand/cdboot/conf.c4
-rw-r--r--sys/arch/amd64/stand/libsa/memprobe.c44
-rw-r--r--sys/arch/amd64/stand/pxeboot/conf.c4
4 files changed, 46 insertions, 10 deletions
diff --git a/sys/arch/amd64/stand/boot/conf.c b/sys/arch/amd64/stand/boot/conf.c
index 49e06f6a877..8759b7ba036 100644
--- a/sys/arch/amd64/stand/boot/conf.c
+++ b/sys/arch/amd64/stand/boot/conf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: conf.c,v 1.6 2005/05/03 13:18:05 tom Exp $ */
+/* $OpenBSD: conf.c,v 1.7 2005/05/28 05:47:33 weingart Exp $ */
/*
* Copyright (c) 1996 Michael Shalayeff
@@ -42,7 +42,7 @@
#include <biosdev.h>
#include <dev/cons.h>
-const char version[] = "2.10";
+const char version[] = "2.11";
int debug = 1;
diff --git a/sys/arch/amd64/stand/cdboot/conf.c b/sys/arch/amd64/stand/cdboot/conf.c
index c106ed59413..4913b62ab00 100644
--- a/sys/arch/amd64/stand/cdboot/conf.c
+++ b/sys/arch/amd64/stand/cdboot/conf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: conf.c,v 1.5 2005/05/03 13:18:05 tom Exp $ */
+/* $OpenBSD: conf.c,v 1.6 2005/05/28 05:47:33 weingart Exp $ */
/*
* Copyright (c) 2004 Tom Cosgrove
@@ -42,7 +42,7 @@
#include <biosdev.h>
#include <dev/cons.h>
-const char version[] = "1.04";
+const char version[] = "1.05";
int debug = 1;
diff --git a/sys/arch/amd64/stand/libsa/memprobe.c b/sys/arch/amd64/stand/libsa/memprobe.c
index 58084c5f7d9..a8a81d14a18 100644
--- a/sys/arch/amd64/stand/libsa/memprobe.c
+++ b/sys/arch/amd64/stand/libsa/memprobe.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memprobe.c,v 1.3 2005/05/03 13:18:05 tom Exp $ */
+/* $OpenBSD: memprobe.c,v 1.4 2005/05/28 05:47:33 weingart Exp $ */
/*
* Copyright (c) 1997-1999 Michael Shalayeff
@@ -344,16 +344,51 @@ memprobe(void)
if(im->addr < IOM_BEGIN)
cnvmem = max(cnvmem,
im->addr + im->size) / 1024;
- if(im->addr >= IOM_END)
+ if(im->addr >= IOM_END
+ && (im->addr/1024) == (extmem + 1024)) {
extmem += im->size / 1024;
+ }
}
}
+ /* Adjust extmem to be no more than 4G (which it usually is not
+ * anyways). In order for an x86 type machine (amd64/etc) to use
+ * more than 4GB of memory, it will need to grok and use the bios
+ * memory map we pass it. Note that above we only count CONTIGUOUS
+ * memory from the 1MB boundary on for extmem (think I/O holes).
+ *
+ * extmem is in KB, and we have 4GB - 1MB (base/io hole) worth of it.
+ */
+ if(extmem > 4*1024*1024 - 1024)
+ extmem = 4*1024*1024 - 1024;
+
/* Check if gate A20 is on */
printf("a20=o%s] ", checkA20()? "n" : "ff!");
}
#endif
+/*
+ * XXX - A hack until libgcc has the appropriate div/mod functions so
+ * that we can use -DLIBSA_LONGLONG_PRINTF and simply print out the
+ * 64-bit vars directly.
+ */
+static const char *
+int64_str(u_int64_t num)
+{
+ static char buf[17], *p;
+ u_int32_t i;
+
+ buf[16] = '\0';
+ for(p = buf + 15, i = 0; i < 16; p--,i++) {
+ *p = "0123456789abcdef"[num & 0xF];
+ num >>= 4;
+ if(num == 0)
+ break;
+ }
+
+ return p;
+}
+
void
dump_biosmem(bios_memmap_t *tm)
{
@@ -369,8 +404,9 @@ dump_biosmem(bios_memmap_t *tm)
* If/when we do, libsa may need to be updated some...
*/
for(p = tm; p->type != BIOS_MAP_END; p++) {
- printf("Region %ld: type %u at 0x%x for %uKB\n",
- (long)(p - tm), p->type, (u_int)p->addr,
+ printf("Region %ld: type %u at 0x%s for %uKB\n",
+ (long)(p - tm), p->type,
+ int64_str(p->addr),
(u_int)(p->size / 1024));
if(p->type == BIOS_MAP_FREE)
diff --git a/sys/arch/amd64/stand/pxeboot/conf.c b/sys/arch/amd64/stand/pxeboot/conf.c
index 3bd457cbefb..345a607072f 100644
--- a/sys/arch/amd64/stand/pxeboot/conf.c
+++ b/sys/arch/amd64/stand/pxeboot/conf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: conf.c,v 1.7 2005/05/03 13:18:05 tom Exp $ */
+/* $OpenBSD: conf.c,v 1.8 2005/05/28 05:47:33 weingart Exp $ */
/*
* Copyright (c) 2004 Tom Cosgrove
@@ -45,7 +45,7 @@
#include "pxeboot.h"
#include "pxe_net.h"
-const char version[] = "1.06";
+const char version[] = "1.07";
int debug = 0;
#undef _TEST