Annotation of sys/arch/amd64/include/biosvar.h, Revision 1.1
1.1 ! nbrk 1: /* XXX - DSR */
! 2: /* $OpenBSD: biosvar.h,v 1.7 2006/05/20 22:36:33 deraadt Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1997-1999 Michael Shalayeff
! 6: * All rights reserved.
! 7: *
! 8: * Redistribution and use in source and binary forms, with or without
! 9: * modification, are permitted provided that the following conditions
! 10: * are met:
! 11: * 1. Redistributions of source code must retain the above copyright
! 12: * notice, this list of conditions and the following disclaimer.
! 13: * 2. Redistributions in binary form must reproduce the above copyright
! 14: * notice, this list of conditions and the following disclaimer in the
! 15: * documentation and/or other materials provided with the distribution.
! 16: * 3. The name of the author may not be used to endorse or promote products
! 17: * derived from this software without specific prior written permission.
! 18: *
! 19: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 20: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 21: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 22: * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
! 23: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
! 24: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
! 25: * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 26: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
! 27: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
! 28: * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
! 29: * THE POSSIBILITY OF SUCH DAMAGE.
! 30: */
! 31:
! 32: #ifndef _I386_BIOSVAR_H_
! 33: #define _I386_BIOSVAR_H_
! 34: #pragma pack(1)
! 35:
! 36: /* some boxes put apm data seg in the 2nd page */
! 37: #define BOOTARG_OFF (NBPG*2)
! 38: #define BOOTARG_LEN (NBPG*1)
! 39: #define BOOTBIOS_ADDR (0x7c00)
! 40:
! 41: /* BIOS configure flags */
! 42: #define BIOSF_BIOS32 0x0001
! 43: #define BIOSF_PCIBIOS 0x0002
! 44: #define BIOSF_PROMSCAN 0x0004
! 45: #define BIOSF_SMBIOS 0x0006
! 46:
! 47: /* BIOS media ID */
! 48: #define BIOSM_F320K 0xff /* floppy ds/sd 8 spt */
! 49: #define BIOSM_F160K 0xfe /* floppy ss/sd 8 spt */
! 50: #define BIOSM_F360K 0xfd /* floppy ds/sd 9 spt */
! 51: #define BIOSM_F180K 0xfc /* floppy ss/sd 9 spt */
! 52: #define BIOSM_ROMD 0xfa /* ROM disk */
! 53: #define BIOSM_F120M 0xf9 /* floppy ds/hd 15 spt 5.25" */
! 54: #define BIOSM_F720K 0xf9 /* floppy ds/dd 9 spt 3.50" */
! 55: #define BIOSM_HD 0xf8 /* hard drive */
! 56: #define BIOSM_F144K 0xf0 /* floppy ds/hd 18 spt 3.50" */
! 57: #define BIOSM_OTHER 0xf0 /* any other */
! 58:
! 59: /*
! 60: * BIOS memory maps
! 61: */
! 62: #define BIOS_MAP_END 0x00 /* End of array XXX - special */
! 63: #define BIOS_MAP_FREE 0x01 /* Usable memory */
! 64: #define BIOS_MAP_RES 0x02 /* Reserved memory */
! 65: #define BIOS_MAP_ACPI 0x03 /* ACPI Reclaim memory */
! 66: #define BIOS_MAP_NVS 0x04 /* ACPI NVS memory */
! 67:
! 68: /*
! 69: * Optional ROM header
! 70: */
! 71: typedef
! 72: struct bios_romheader {
! 73: u_int16_t signature; /* 0xaa55 */
! 74: u_int8_t len; /* length in pages (512 bytes) */
! 75: u_int32_t entry; /* initialization entry point */
! 76: u_int8_t reserved[19];
! 77: u_int16_t pnpheader; /* offset to PnP expansion header */
! 78: } *bios_romheader_t;
! 79:
! 80: /*
! 81: * BIOS32
! 82: */
! 83: typedef
! 84: struct bios32_header {
! 85: u_int32_t signature; /* 00: signature "_32_" */
! 86: u_int32_t entry; /* 04: entry point */
! 87: u_int8_t rev; /* 08: revision */
! 88: u_int8_t length; /* 09: header length */
! 89: u_int8_t cksum; /* 0a: modulo 256 checksum */
! 90: u_int8_t reserved[5];
! 91: } *bios32_header_t;
! 92:
! 93: typedef
! 94: struct bios32_entry_info {
! 95: paddr_t bei_base;
! 96: psize_t bei_size;
! 97: paddr_t bei_entry;
! 98: } *bios32_entry_info_t;
! 99:
! 100: typedef
! 101: struct bios32_entry {
! 102: u_int32_t offset;
! 103: u_int16_t segment;
! 104: } *bios32_entry_t;
! 105:
! 106: #define BIOS32_START 0xe0000
! 107: #define BIOS32_SIZE 0x20000
! 108: #define BIOS32_END (BIOS32_START + BIOS32_SIZE - 0x10)
! 109:
! 110: #define BIOS32_MAKESIG(a, b, c, d) \
! 111: ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
! 112: #define BIOS32_SIGNATURE BIOS32_MAKESIG('_', '3', '2', '_')
! 113: #define PCIBIOS_SIGNATURE BIOS32_MAKESIG('$', 'P', 'C', 'I')
! 114: #define SMBIOS_SIGNATURE BIOS32_MAKESIG('_', 'S', 'M', '_')
! 115:
! 116: /*
! 117: * CTL_BIOS definitions.
! 118: */
! 119: #define BIOS_DEV 1 /* int: BIOS boot device */
! 120: #define BIOS_DISKINFO 2 /* struct: BIOS boot device info */
! 121: #define BIOS_CKSUMLEN 3 /* int: disk cksum block count */
! 122: #define BIOS_MAXID 4 /* number of valid machdep ids */
! 123:
! 124: #define CTL_BIOS_NAMES { \
! 125: { 0, 0 }, \
! 126: { "biosdev", CTLTYPE_INT }, \
! 127: { "diskinfo", CTLTYPE_STRUCT }, \
! 128: { "cksumlen", CTLTYPE_INT }, \
! 129: }
! 130:
! 131: #define BOOTARG_MEMMAP 0
! 132: typedef struct _bios_memmap {
! 133: u_int64_t addr; /* Beginning of block */
! 134: u_int64_t size; /* Size of block */
! 135: u_int32_t type; /* Type of block */
! 136: } bios_memmap_t;
! 137:
! 138: /* Info about disk from the bios, plus the mapping from
! 139: * BIOS numbers to BSD major (driver?) number.
! 140: *
! 141: * Also, do not bother with BIOSN*() macros, just parcel
! 142: * the info out, and use it like this. This makes for less
! 143: * of a dependance on BIOSN*() macros having to be the same
! 144: * across /boot, /bsd, and userland.
! 145: */
! 146: #define BOOTARG_DISKINFO 1
! 147: typedef struct _bios_diskinfo {
! 148: /* BIOS section */
! 149: int bios_number; /* BIOS number of drive (or -1) */
! 150: u_int bios_cylinders; /* BIOS cylinders */
! 151: u_int bios_heads; /* BIOS heads */
! 152: u_int bios_sectors; /* BIOS sectors */
! 153: int bios_edd; /* EDD support */
! 154:
! 155: /* BSD section */
! 156: dev_t bsd_dev; /* BSD device */
! 157:
! 158: /* Checksum section */
! 159: u_int32_t checksum; /* Checksum for drive */
! 160:
! 161: /* Misc. flags */
! 162: u_int32_t flags;
! 163: #define BDI_INVALID 0x00000001 /* I/O error during checksumming */
! 164: #define BDI_GOODLABEL 0x00000002 /* Had SCSI or ST506/ESDI disklabel */
! 165: #define BDI_BADLABEL 0x00000004 /* Had another disklabel */
! 166: #define BDI_EL_TORITO 0x00000008 /* 2,048-byte sectors */
! 167: #define BDI_PICKED 0x80000000 /* kernel-only: cksum matched */
! 168:
! 169: } bios_diskinfo_t;
! 170:
! 171: #define BOOTARG_APMINFO 2
! 172: typedef struct _bios_apminfo {
! 173: /* APM_CONNECT returned values */
! 174: u_int apm_detail;
! 175: u_int apm_code32_base;
! 176: u_int apm_code16_base;
! 177: u_int apm_code_len;
! 178: u_int apm_data_base;
! 179: u_int apm_data_len;
! 180: u_int apm_entry;
! 181: u_int apm_code16_len;
! 182: } bios_apminfo_t;
! 183:
! 184: #define BOOTARG_CKSUMLEN 3 /* u_int32_t */
! 185:
! 186: #define BOOTARG_PCIINFO 4
! 187: typedef struct _bios_pciinfo {
! 188: /* PCI BIOS v2.0+ - Installation check values */
! 189: u_int32_t pci_chars; /* Characteristics (%eax) */
! 190: u_int32_t pci_rev; /* BCD Revision (%ebx) */
! 191: u_int32_t pci_entry32; /* PM entry point for PCI BIOS */
! 192: u_int32_t pci_lastbus; /* Number of last PCI bus */
! 193: } bios_pciinfo_t;
! 194:
! 195: #define BOOTARG_CONSDEV 5
! 196: typedef struct _bios_consdev {
! 197: dev_t consdev;
! 198: int conspeed;
! 199: } bios_consdev_t;
! 200:
! 201: #define BOOTARG_BOOTMAC 7
! 202: typedef struct _bios_bootmac {
! 203: char mac[6];
! 204: } bios_bootmac_t;
! 205:
! 206: #if defined(_KERNEL) || defined (_STANDALONE)
! 207:
! 208: #ifdef _LOCORE
! 209: #define DOINT(n) int $0x20+(n)
! 210: #else
! 211: #define DOINT(n) "int $0x20+(" #n ")"
! 212:
! 213: extern volatile struct BIOS_regs {
! 214: u_int32_t biosr_ax;
! 215: u_int32_t biosr_cx;
! 216: u_int32_t biosr_dx;
! 217: u_int32_t biosr_bx;
! 218: u_int32_t biosr_bp;
! 219: u_int32_t biosr_si;
! 220: u_int32_t biosr_di;
! 221: u_int32_t biosr_ds;
! 222: u_int32_t biosr_es;
! 223: } BIOS_regs;
! 224:
! 225: #ifdef _KERNEL
! 226: #include <machine/bus.h>
! 227:
! 228: struct bios_attach_args {
! 229: char *bios_dev;
! 230: u_int bios_func;
! 231: bus_space_tag_t bios_iot;
! 232: bus_space_tag_t bios_memt;
! 233: union {
! 234: void *_p;
! 235: bios_apminfo_t *_bios_apmp;
! 236: } _;
! 237: };
! 238:
! 239: #define bios_apmp _._bios_apmp
! 240:
! 241: struct consdev;
! 242: struct proc;
! 243:
! 244: int bios_sysctl(int *, u_int, void *, size_t *, void *, size_t, struct proc *);
! 245:
! 246: void bioscnprobe(struct consdev *);
! 247: void bioscninit(struct consdev *);
! 248: void bioscnputc(dev_t, int);
! 249: int bioscngetc(dev_t);
! 250: void bioscnpollc(dev_t, int);
! 251: void bios_getopt(void);
! 252: bios_diskinfo_t *bios_getdiskinfo(dev_t);
! 253:
! 254: /* bios32.c */
! 255: int bios32_service(u_int32_t, bios32_entry_t, bios32_entry_info_t);
! 256:
! 257: extern u_int bootapiver;
! 258: extern bios_memmap_t *bios_memmap;
! 259:
! 260: #endif /* _KERNEL */
! 261: #endif /* _LOCORE */
! 262: #endif /* _KERNEL || _STANDALONE */
! 263:
! 264: #pragma pack()
! 265: #endif /* _I386_BIOSVAR_H_ */
CVSweb