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