- Initialize the vm86 structure to a known-good state. Specifically, always
set the %eflags used during a BIOS call via BTX to 0x202. Previously the flags field was uninitialized garbage, and thus it was "random" if interrupts were enabled or not during BIOS calls. - Use constants from <machine/psl.h> for fields in %eflags. MFC after: 3 days
This commit is contained in:
parent
5e78f5a5d4
commit
be7768ee54
@ -24,6 +24,7 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <machine/bootinfo.h>
|
||||
#include <machine/elf.h>
|
||||
#include <machine/psl.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
@ -83,8 +84,8 @@ __FBSDID("$FreeBSD$");
|
||||
#define NDEV 3
|
||||
#define MEM_BASE 0x12
|
||||
#define MEM_EXT 0x15
|
||||
#define V86_CY(x) ((x) & 1)
|
||||
#define V86_ZR(x) ((x) & 0x40)
|
||||
#define V86_CY(x) ((x) & PSL_C)
|
||||
#define V86_ZR(x) ((x) & PSL_Z)
|
||||
|
||||
#define DRV_HARD 0x80
|
||||
#define DRV_MASK 0x7f
|
||||
@ -237,6 +238,7 @@ main(void)
|
||||
|
||||
dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
|
||||
v86.ctl = V86_FLAGS;
|
||||
v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
|
||||
dsk.drive = *(uint8_t *)PTOV(ARGS);
|
||||
dsk.type = dsk.drive & DRV_HARD ? TYPE_AD : TYPE_FD;
|
||||
dsk.unit = dsk.drive & DRV_MASK;
|
||||
|
@ -23,6 +23,7 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <machine/bootinfo.h>
|
||||
#include <machine/elf.h>
|
||||
#include <machine/psl.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
@ -81,8 +82,8 @@ __FBSDID("$FreeBSD$");
|
||||
#define NDEV 3
|
||||
#define MEM_BASE 0x12
|
||||
#define MEM_EXT 0x15
|
||||
#define V86_CY(x) ((x) & 1)
|
||||
#define V86_ZR(x) ((x) & 0x40)
|
||||
#define V86_CY(x) ((x) & PSL_C)
|
||||
#define V86_ZR(x) ((x) & PSL_Z)
|
||||
|
||||
#define DRV_HARD 0x80
|
||||
#define DRV_MASK 0x7f
|
||||
@ -235,6 +236,7 @@ main(void)
|
||||
|
||||
dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
|
||||
v86.ctl = V86_FLAGS;
|
||||
v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
|
||||
dsk.drive = *(uint8_t *)PTOV(ARGS);
|
||||
dsk.type = dsk.drive & DRV_HARD ? TYPE_AD : TYPE_FD;
|
||||
dsk.unit = dsk.drive & DRV_MASK;
|
||||
|
@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <stand.h>
|
||||
#include <string.h>
|
||||
#include <machine/bootinfo.h>
|
||||
#include <machine/psl.h>
|
||||
#include <sys/reboot.h>
|
||||
|
||||
#include "bootstrap.h"
|
||||
@ -86,6 +87,10 @@ main(void)
|
||||
initial_bootdev = kargs->bootdev;
|
||||
initial_bootinfo = kargs->bootinfo ? (struct bootinfo *)PTOV(kargs->bootinfo) : NULL;
|
||||
|
||||
/* Initialize the v86 register set to a known-good state. */
|
||||
bzero(&v86, sizeof(v86));
|
||||
v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
|
||||
|
||||
/*
|
||||
* Initialise the heap as early as possible. Once this is done, malloc() is usable.
|
||||
*/
|
||||
|
@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <stand.h>
|
||||
#include <string.h>
|
||||
#include <machine/bootinfo.h>
|
||||
#include <machine/psl.h>
|
||||
#include <sys/reboot.h>
|
||||
|
||||
#include "bootstrap.h"
|
||||
@ -86,6 +87,10 @@ main(void)
|
||||
initial_bootdev = kargs->bootdev;
|
||||
initial_bootinfo = kargs->bootinfo ? (struct bootinfo *)PTOV(kargs->bootinfo) : NULL;
|
||||
|
||||
/* Initialize the v86 register set to a known-good state. */
|
||||
bzero(&v86, sizeof(v86));
|
||||
v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
|
||||
|
||||
/*
|
||||
* Initialise the heap as early as possible. Once this is done, malloc() is usable.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user