diff options
author | msmith <msmith@FreeBSD.org> | 1999-08-02 18:46:34 +0000 |
---|---|---|
committer | msmith <msmith@FreeBSD.org> | 1999-08-02 18:46:34 +0000 |
commit | d501bf979dbd77896c8687796c0ea62f46c2938a (patch) | |
tree | f620d08bfd11508fa01fd9aa348fe06450ede118 /sys/i386/apm | |
parent | 4983311c1d14d77e292b8efa4b7b4303db8537f3 (diff) | |
download | FreeBSD-src-d501bf979dbd77896c8687796c0ea62f46c2938a.zip FreeBSD-src-d501bf979dbd77896c8687796c0ea62f46c2938a.tar.gz |
Don't trust the segment limits that the BIOS reports; instead give it
as much space as possible to avoid lossage due to sloppy BIOS
programming.
Diffstat (limited to 'sys/i386/apm')
-rw-r--r-- | sys/i386/apm/apm.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/sys/i386/apm/apm.c b/sys/i386/apm/apm.c index cf75c0f..ede4252 100644 --- a/sys/i386/apm/apm.c +++ b/sys/i386/apm/apm.c @@ -15,7 +15,7 @@ * * Sep, 1994 Implemented on FreeBSD 1.1.5.1R (Toshiba AVS001WD) * - * $Id: apm.c,v 1.96 1999/07/30 08:24:19 msmith Exp $ + * $Id: apm.c,v 1.97 1999/07/30 19:34:58 msmith Exp $ */ #include "opt_devfs.h" @@ -747,9 +747,9 @@ apm_probe(device_t dev) sc->bios.seg.code32.base = (vmf.vmf_ax << 4) + APM_KERNBASE; sc->bios.seg.code32.limit = 0xffff; sc->bios.seg.code16.base = (vmf.vmf_cx << 4) + APM_KERNBASE; - sc->bios.seg.code16.limit = vmf.vmf_si; + sc->bios.seg.code16.limit = 0xffff; sc->bios.seg.data.base = (vmf.vmf_dx << 4) + APM_KERNBASE; - sc->bios.seg.data.limit = vmf.vmf_di; + sc->bios.seg.data.limit = 0xffff; sc->bios.entry = vmf.vmf_ebx; sc->connectmode = APM_PROT32CONNECT; } else { @@ -762,17 +762,12 @@ apm_probe(device_t dev) return (ENXIO); } sc->bios.seg.code16.base = (vmf.vmf_ax << 4) + APM_KERNBASE; - sc->bios.seg.code16.limit = vmf.vmf_si; + sc->bios.seg.code16.limit = 0xffff; sc->bios.seg.data.base = (vmf.vmf_cx << 4) + APM_KERNBASE; - sc->bios.seg.data.limit = vmf.vmf_di; + sc->bios.seg.data.limit = 0xffff; sc->bios.entry = vmf.vmf_bx; sc->connectmode = APM_PROT16CONNECT; } - if (apm_version == 0x100) { - /* APM v1.0 does not set SI/DI */ - sc->bios.seg.code16.limit = 0xffff; - sc->bios.seg.data.limit = 0xffff; - } return(0); } |