root/arch/i386/include/biosvar.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. bios_romheader_t
  2. bios32_header_t
  3. bios32_entry_info_t
  4. bios32_entry_t
  5. bios_memmap_t
  6. bios_diskinfo_t
  7. bios_apminfo_t
  8. bios_pciinfo_t
  9. bios_consdev_t
  10. bios_bootmac_t

    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_ */

/* [<][>][^][v][top][bottom][index][help] */