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

Annotation of sys/arch/i386/include/mp.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: mp.h,v 1.2 2004/06/13 21:49:16 niklas Exp $   */
                      2:
                      3: /*-
                      4:  * Copyright (c) 1996 SigmaSoft, Th. Lockert <tholo@sigmasoft.com>
                      5:  * Copyright (c) 2000 Niklas Hallqvist.
                      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. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *     This product includes software developed by SigmaSoft, Th.  Lockert.
                     19:  * 4. The name of the author may not be used to endorse or promote products
                     20:  *    derived from this software without specific prior written permission.
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
                     23:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
                     24:  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
                     25:  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
                     26:  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
                     27:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
                     28:  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
                     29:  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
                     30:  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
                     31:  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     32:  */
                     33:
                     34: #ifndef _MACHINE_MP_H
                     35: #define _MACHINE_MP_H
                     36:
                     37: /*
                     38:  * Configuration structures as defined in the Intel MP specification,
                     39:  * version 1.4
                     40:  */
                     41:
                     42: /*
                     43:  * MP Floating Pointer structure; must be located on 16-byte boundary
                     44:  */
                     45: struct mp_float {
                     46:        u_int8_t        signature[4];
                     47: #define        MPF_SIGNATURE   "_MP_"
                     48:        u_int32_t       pointer;
                     49:        u_int8_t        length;
                     50:        u_int8_t        revision;
                     51:        u_int8_t        checksum;
                     52:        u_int8_t        feature1;
                     53: #define        MP_CONF_EXTENDED        0
                     54: #define        MP_CONF_2_ISA           1
                     55: #define        MP_CONF_2_EISA_NO_8     2
                     56: #define        MP_CONF_2_EISA          3
                     57: #define        MP_CONF_2_MCA           4
                     58: #define        MP_CONF_2_ISA_PCI       5
                     59: #define        MP_CONF_2_EISA_PCI      6
                     60: #define        MP_CONF_2_MCA_PCI       7
                     61:        u_int8_t        feature2;
                     62: #define        MP_IMCR         0x80
                     63:        u_int8_t        feature3;
                     64:        u_int8_t        feature4;
                     65:        u_int8_t        feature5;
                     66: };
                     67:
                     68: /*
                     69:  * MP configuration table header
                     70:  */
                     71: struct mp_conf {
                     72:        u_int8_t        signature[4];
                     73: #define        MPC_SIGNATURE   "PCMP"
                     74:        u_int16_t       length;
                     75:        u_int8_t        revision;
                     76:        u_int8_t        checksum;
                     77:        u_int8_t        oem[8];
                     78:        u_int8_t        product[12];
                     79:        u_int32_t       oem_pointer;
                     80:        u_int16_t       oem_length;
                     81:        u_int16_t       entry_count;
                     82:        u_int32_t       local_apic;
                     83:        u_int16_t       ext_length;
                     84:        u_int8_t        et_checksum;
                     85:        u_int8_t        reserved;
                     86: };
                     87:
                     88: /*
                     89:  * Processor entry
                     90:  */
                     91: struct mp_proc {
                     92:        u_int8_t        type;
                     93: #define        MP_PROCESSOR    0
                     94:        u_int8_t        local_apic;
                     95:        u_int8_t        apic_version;
                     96:        u_int8_t        flags;
                     97: #define        MP_ENABLE       0x01
                     98: #define        MP_BOOTCPU      0x02
                     99:        u_int32_t       cpu_signature;
                    100: #define        MP_STEPPING     0x0000000F
                    101: #define        MP_MODEL        0x000000F0
                    102: #define        MP_FAMILY       0x00000F00
                    103:        u_int32_t       feature_flags;
                    104: #define        MP_FP           0x00000001
                    105: #define        MP_MCE          0x00000080
                    106: #define        MP_CX8          0x00000100
                    107: #define        MP_APIC         0x00000200
                    108:        u_int32_t       reserved1;
                    109:        u_int32_t       reserved2;
                    110: };
                    111:
                    112: /*
                    113:  * Bus entry
                    114:  */
                    115: struct mp_bus {
                    116:        u_int8_t        type;
                    117: #define        MP_BUS          1
                    118:        u_int8_t        bus_id;
                    119:        u_int8_t        bustype[6]      __attribute((packed));
                    120: #define        MP_BUS_CBUS     "CBUS  "
                    121: #define        MP_BUS_CBUSII   "CBUSII"
                    122: #define        MP_BUS_EISA     "EISA  "
                    123: #define        MP_BUS_FUTURE   "FUTURE"
                    124: #define        MP_BUS_INTERN   "INTERN"
                    125: #define        MP_BUS_ISA      "ISA   "
                    126: #define        MP_BUS_MBI      "MBI   "
                    127: #define        MP_BUS_MBII     "MBII  "
                    128: #define        MP_BUS_MCA      "MCA   "
                    129: #define        MP_BUS_MPI      "MPI   "
                    130: #define        MP_BUS_MPSA     "MPSA  "
                    131: #define        MP_BUS_NUBUS    "NUBUS "
                    132: #define        MP_BUS_PCI      "PCI   "
                    133: #define        MP_BUS_PCCARD   "PCMCIA"
                    134: #define        MP_BUS_TC       "TC    "
                    135: #define        MP_BUS_VLB      "VL    "
                    136: #define        MP_BUS_VME      "VME   "
                    137: #define        MP_BUS_XPRESS   "XPRESS"
                    138: };
                    139:
                    140: /*
                    141:  * I/O APIC entry
                    142:  */
                    143: struct mp_apic {
                    144:        u_int8_t        type;
                    145: #define        MP_IOAPIC       2
                    146:        u_int8_t        apic_id;
                    147:        u_int8_t        apic_version;
                    148:        u_int8_t        apic_flags;
                    149: #define        MP_APIC_ENABLE  0x80
                    150:        u_int32_t       apic_address;
                    151: };
                    152:
                    153: /*
                    154:  * I/O Interrupt Assignment entry
                    155:  * Local Interrupt Assignment entry
                    156:  */
                    157: struct mp_irq {
                    158:        u_int8_t        type;
                    159: #define        MP_INTSRC       3
                    160: #define        MP_LOCINTSRC    4
                    161:        u_int8_t        irqtype;
                    162: #define        MP_INT_NORMAL   0
                    163: #define        MP_INT_NMI      1
                    164: #define        MP_INT_SMI      2
                    165: #define        MP_INT_EXT      3
                    166:        u_int16_t       irqflags;
                    167:        u_int8_t        bus_id;
                    168:        u_int8_t        source_irq;
                    169:        u_int8_t        destination_apic;
                    170: #define        MP_ALL_APIC     0xFF
                    171:        u_int8_t        apic_intr;
                    172: };
                    173:
                    174: /*
                    175:  * System Address Space Mapping entry
                    176:  */
                    177: struct mp_map {
                    178:        u_int8_t        type;
                    179: #define        MP_SYSMAP       128
                    180:        u_int8_t        length;
                    181:        u_int8_t        bus;
                    182:        u_int8_t        address_type;
                    183: #define        MP_ADDR_IO      0
                    184: #define        MP_ADDR_MEM     1
                    185: #define        MP_ADDR_PRE     2
                    186:        u_int64_t       address_base;
                    187:        u_int64_t       address_length;
                    188: };
                    189:
                    190: /*
                    191:  * Bus Hierarchy Descriptor entry
                    192:  */
                    193: struct mp_bushier {
                    194:        u_int8_t        type;
                    195: #define        MP_BUSHIER      129
                    196:        u_int8_t        length;
                    197:        u_int8_t        bus_id;
                    198:        u_int8_t        bus_info;
                    199: #define        MP_BUS_SUB      0x01
                    200:        u_int8_t        parent;
                    201:        u_int8_t        reserved1;
                    202:        u_int16_t       reserved2;
                    203: };
                    204:
                    205: /*
                    206:  * Compatibility Bus Address Space Modifier entry
                    207:  */
                    208: struct mp_buscompat {
                    209:        u_int8_t        type;
                    210: #define        MP_BUSCOMPAT    130
                    211:        u_int8_t        length;
                    212:        u_int8_t        bus_id;
                    213:        u_int8_t        modifier;
                    214: #define        MP_COMPAT_SUB   0x01
                    215:        u_int32_t       range;
                    216: };
                    217:
                    218: #ifdef _KERNEL
                    219: extern int napics;
                    220: #endif /* _KERNEL */
                    221:
                    222: #endif /* _MACHINE_MP_H */

CVSweb