[BACK]Return to biosvar.h CVS log [TXT][DIR] Up to [local] / sys / arch / i386 / include

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