diff options
| author | Mike Smith <msmith@FreeBSD.org> | 1999-07-29 01:49:19 +0000 |
|---|---|---|
| committer | Mike Smith <msmith@FreeBSD.org> | 1999-07-29 01:49:19 +0000 |
| commit | 496027bf086df8db5d4c13cff8268b2d37fdaaf5 (patch) | |
| tree | 47f4431a200e5c5793c6af8b80d212eb605e86a0 /sys/amd64/include/pc | |
| parent | 8799702cbccdff5844e5bd682d20aaed811a504e (diff) | |
Notes
Diffstat (limited to 'sys/amd64/include/pc')
| -rw-r--r-- | sys/amd64/include/pc/bios.h | 88 |
1 files changed, 75 insertions, 13 deletions
diff --git a/sys/amd64/include/pc/bios.h b/sys/amd64/include/pc/bios.h index 4e47eae7ee93..0c88a4d0e7d0 100644 --- a/sys/amd64/include/pc/bios.h +++ b/sys/amd64/include/pc/bios.h @@ -1,5 +1,6 @@ /*- * Copyright (c) 1997 Michael Smith + * Copyright (c) 1998 Jonathan Lemon * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: bios.h,v 1.1 1997/08/01 06:04:59 msmith Exp $ + * $Id: bios.h,v 1.2 1997/08/04 03:31:23 msmith Exp $ */ /* @@ -59,17 +60,6 @@ extern int bios32_SDlookup(struct bios32_SDentry *ent); extern u_int32_t bios_sigsearch(u_int32_t start, u_char *sig, int siglen, int paralen, int sigofs); -/* - * Call a 32-bit BIOS function - */ -struct bios32_args { - u_long eax; - u_long ebx; - u_long ecx; - u_long edx; -}; -extern void bios32(caddr_t func_addr, struct bios32_args *args); - #define BIOS_PADDRTOVADDR(x) (((x) - ISA_HOLE_START) + atdevbase) #define BIOS_VADDRTOPADDR(x) (((x) - atdevbase) + ISA_HOLE_START) @@ -108,5 +98,77 @@ extern struct bios32_SDentry PCIbios; extern struct SMBIOS_table *SMBIOS_table; extern struct DMI_table *DMI_table; +struct segment_info { + u_int base; + u_int limit; +}; + +#define BIOSCODE_FLAG 0x01 +#define BIOSDATA_FLAG 0x02 +#define BIOSUTIL_FLAG 0x04 +#define BIOSARGS_FLAG 0x08 + +struct bios_segments { + u_int generation; + struct segment_info code32; /* 32-bit code (mandatory) */ + struct segment_info code16; /* 16-bit code */ + struct segment_info data; /* 16-bit data */ + struct segment_info util; /* 16-bit utility */ + struct segment_info args; /* 16-bit args */ +}; + +struct bios_regs { + u_int eax; + u_int ebx; + u_int ecx; + u_int edx; + u_int esi; + u_int edi; +}; + +struct bios_args { + u_int entry; /* entry point of routine */ + struct bios_regs r; + struct bios_segments seg; +}; + +/* + * format specifiers and defines for bios16() + * s = short (16 bits) + * i = int (32 bits) + * p = pointer (converted to seg:offset) + * C,D,U = selector (corresponding to code/data/utility segment) + */ +#define PNP_COUNT_DEVNODES "sppD", 0x00 +#define PNP_GET_DEVNODE "sppsD", 0x01 +#define PNP_SET_DEVNODE "sppsD", 0x02 +#define PNP_GET_EVENT "spD", 0x03 +#define PNP_SEND_MSG "ssD", 0x04 +#define PNP_GET_DOCK_INFO "spD", 0x05 + +#define PNP_SEL_PRIBOOT "ssiiisspD", 0x07 +#define PNP_GET_PRIBOOT "sspppppD", 0x08 +#define PNP_SET_RESINFO "spD", 0x09 +#define PNP_GET_RESINFO "spD", 0x0A +#define PNP_GET_APM_ID "sppD", 0x0B + +#define PNP_GET_ISA_INFO "spD", 0x40 +#define PNP_GET_ECSD_INFO "spppD", 0x41 +#define PNP_READ_ESCD "spUD", 0x42 +#define PNP_WRITE_ESCD "spUD", 0x43 + +#define PNP_GET_DMI_INFO "spppppD", 0x50 +#define PNP_GET_DMI "sppUD", 0x51 + +#define PNP_BOOT_CHECK "sp", 0x60 +#define PNP_COUNT_IPL "sppp", 0x61 +#define PNP_GET_BOOTPRI "spp", 0x62 +#define PNP_SET_BOOTPRI "sp", 0x63 +#define PNP_GET_LASTBOOT "sp", 0x64 +#define PNP_GET_BOOTFIRST "sp", 0x65 +#define PNP_SET_BOOTFIRST "sp", 0x66 - +extern int bios16(struct bios_args *, char *, ...); +extern int bios16_call(struct bios_regs *, char *); +extern int bios32(struct bios_regs *, u_int, u_short); +extern void set_bios_selectors(struct bios_segments *, int); |
