summaryrefslogtreecommitdiffstats
path: root/sys/boot/common
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2009-12-31 12:17:38 +0000
committernyan <nyan@FreeBSD.org>2009-12-31 12:17:38 +0000
commit0a4c3bb56fc9095d9ea28c80b65f9b3ff2bd3dd7 (patch)
tree54832b668a3e92a7b5cb6e60466ddc2880144af8 /sys/boot/common
parentb0893959b01cee764be74e3129c8344958da41c8 (diff)
downloadFreeBSD-src-0a4c3bb56fc9095d9ea28c80b65f9b3ff2bd3dd7.zip
FreeBSD-src-0a4c3bb56fc9095d9ea28c80b65f9b3ff2bd3dd7.tar.gz
Don't use 15M-16M area on pc98. It's reserved for some devices.
MFC after: 2 week
Diffstat (limited to 'sys/boot/common')
-rw-r--r--sys/boot/common/module.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/boot/common/module.c b/sys/boot/common/module.c
index 098e39a..18ba1b5 100644
--- a/sys/boot/common/module.c
+++ b/sys/boot/common/module.c
@@ -351,6 +351,9 @@ file_loadraw(char *type, char *name)
char *cp;
int fd, got;
vm_offset_t laddr;
+#ifdef PC98
+ struct stat st;
+#endif
/* We can't load first */
if ((file_findfile(NULL, NULL)) == NULL) {
@@ -372,6 +375,14 @@ file_loadraw(char *type, char *name)
return(CMD_ERROR);
}
+#ifdef PC98
+ /* We cannot use 15M-16M area on pc98. */
+ if (loadaddr < 0x1000000 &&
+ fstat(fd, &st) == 0 &&
+ (st.st_size == -1 || loadaddr + st.st_size > 0xf00000))
+ loadaddr = 0x1000000;
+#endif
+
laddr = loadaddr;
for (;;) {
/* read in 4k chunks; size is not really important */
@@ -477,6 +488,14 @@ mod_loadkld(const char *kldname, int argc, char *argv[])
;
do {
+#ifdef PC98
+ /* We cannot use 15M-16M area on pc98. */
+ struct stat st;
+ if (loadaddr < 0x1000000 &&
+ stat(filename, &st) == 0 &&
+ (st.st_size == -1 || loadaddr + st.st_size > 0xf00000))
+ loadaddr = 0x1000000;
+#endif
err = file_load(filename, loadaddr, &fp);
if (err)
break;
OpenPOWER on IntegriCloud