Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[linux-2.6] / include / asm-x86 / mpspec_def.h
1 #ifndef __ASM_MPSPEC_DEF_H
2 #define __ASM_MPSPEC_DEF_H
3
4 /*
5  * Structure definitions for SMP machines following the
6  * Intel Multiprocessing Specification 1.1 and 1.4.
7  */
8
9 /*
10  * This tag identifies where the SMP configuration
11  * information is. 
12  */
13  
14 #define SMP_MAGIC_IDENT (('_'<<24)|('P'<<16)|('M'<<8)|'_')
15
16 #define MAX_MPC_ENTRY 1024
17 #define MAX_APICS      256
18
19 struct intel_mp_floating
20 {
21         char mpf_signature[4];          /* "_MP_"                       */
22         unsigned long mpf_physptr;      /* Configuration table address  */
23         unsigned char mpf_length;       /* Our length (paragraphs)      */
24         unsigned char mpf_specification;/* Specification version        */
25         unsigned char mpf_checksum;     /* Checksum (makes sum 0)       */
26         unsigned char mpf_feature1;     /* Standard or configuration ?  */
27         unsigned char mpf_feature2;     /* Bit7 set for IMCR|PIC        */
28         unsigned char mpf_feature3;     /* Unused (0)                   */
29         unsigned char mpf_feature4;     /* Unused (0)                   */
30         unsigned char mpf_feature5;     /* Unused (0)                   */
31 };
32
33 struct mp_config_table
34 {
35         char mpc_signature[4];
36 #define MPC_SIGNATURE "PCMP"
37         unsigned short mpc_length;      /* Size of table */
38         char  mpc_spec;                 /* 0x01 */
39         char  mpc_checksum;
40         char  mpc_oem[8];
41         char  mpc_productid[12];
42         unsigned long mpc_oemptr;       /* 0 if not present */
43         unsigned short mpc_oemsize;     /* 0 if not present */
44         unsigned short mpc_oemcount;
45         unsigned long mpc_lapic;        /* APIC address */
46         unsigned long reserved;
47 };
48
49 /* Followed by entries */
50
51 #define MP_PROCESSOR    0
52 #define MP_BUS          1
53 #define MP_IOAPIC       2
54 #define MP_INTSRC       3
55 #define MP_LINTSRC      4
56 #define MP_TRANSLATION  192  /* Used by IBM NUMA-Q to describe node locality */
57
58 struct mpc_config_processor
59 {
60         unsigned char mpc_type;
61         unsigned char mpc_apicid;       /* Local APIC number */
62         unsigned char mpc_apicver;      /* Its versions */
63         unsigned char mpc_cpuflag;
64 #define CPU_ENABLED             1       /* Processor is available */
65 #define CPU_BOOTPROCESSOR       2       /* Processor is the BP */
66         unsigned long mpc_cpufeature;           
67 #define CPU_STEPPING_MASK 0x0F
68 #define CPU_MODEL_MASK  0xF0
69 #define CPU_FAMILY_MASK 0xF00
70         unsigned long mpc_featureflag;  /* CPUID feature value */
71         unsigned long mpc_reserved[2];
72 };
73
74 struct mpc_config_bus
75 {
76         unsigned char mpc_type;
77         unsigned char mpc_busid;
78         unsigned char mpc_bustype[6];
79 };
80
81 /* List of Bus Type string values, Intel MP Spec. */
82 #define BUSTYPE_EISA    "EISA"
83 #define BUSTYPE_ISA     "ISA"
84 #define BUSTYPE_INTERN  "INTERN"        /* Internal BUS */
85 #define BUSTYPE_MCA     "MCA"
86 #define BUSTYPE_VL      "VL"            /* Local bus */
87 #define BUSTYPE_PCI     "PCI"
88 #define BUSTYPE_PCMCIA  "PCMCIA"
89 #define BUSTYPE_CBUS    "CBUS"
90 #define BUSTYPE_CBUSII  "CBUSII"
91 #define BUSTYPE_FUTURE  "FUTURE"
92 #define BUSTYPE_MBI     "MBI"
93 #define BUSTYPE_MBII    "MBII"
94 #define BUSTYPE_MPI     "MPI"
95 #define BUSTYPE_MPSA    "MPSA"
96 #define BUSTYPE_NUBUS   "NUBUS"
97 #define BUSTYPE_TC      "TC"
98 #define BUSTYPE_VME     "VME"
99 #define BUSTYPE_XPRESS  "XPRESS"
100
101 struct mpc_config_ioapic
102 {
103         unsigned char mpc_type;
104         unsigned char mpc_apicid;
105         unsigned char mpc_apicver;
106         unsigned char mpc_flags;
107 #define MPC_APIC_USABLE         0x01
108         unsigned long mpc_apicaddr;
109 };
110
111 struct mpc_config_intsrc
112 {
113         unsigned char mpc_type;
114         unsigned char mpc_irqtype;
115         unsigned short mpc_irqflag;
116         unsigned char mpc_srcbus;
117         unsigned char mpc_srcbusirq;
118         unsigned char mpc_dstapic;
119         unsigned char mpc_dstirq;
120 };
121
122 enum mp_irq_source_types {
123         mp_INT = 0,
124         mp_NMI = 1,
125         mp_SMI = 2,
126         mp_ExtINT = 3
127 };
128
129 #define MP_IRQDIR_DEFAULT       0
130 #define MP_IRQDIR_HIGH          1
131 #define MP_IRQDIR_LOW           3
132
133
134 struct mpc_config_lintsrc
135 {
136         unsigned char mpc_type;
137         unsigned char mpc_irqtype;
138         unsigned short mpc_irqflag;
139         unsigned char mpc_srcbusid;
140         unsigned char mpc_srcbusirq;
141         unsigned char mpc_destapic;     
142 #define MP_APIC_ALL     0xFF
143         unsigned char mpc_destapiclint;
144 };
145
146 struct mp_config_oemtable
147 {
148         char oem_signature[4];
149 #define MPC_OEM_SIGNATURE "_OEM"
150         unsigned short oem_length;      /* Size of table */
151         char  oem_rev;                  /* 0x01 */
152         char  oem_checksum;
153         char  mpc_oem[8];
154 };
155
156 struct mpc_config_translation
157 {
158         unsigned char mpc_type;
159         unsigned char trans_len;
160         unsigned char trans_type;
161         unsigned char trans_quad;
162         unsigned char trans_global;
163         unsigned char trans_local;
164         unsigned short trans_reserved;
165 };
166
167 /*
168  *      Default configurations
169  *
170  *      1       2 CPU ISA 82489DX
171  *      2       2 CPU EISA 82489DX neither IRQ 0 timer nor IRQ 13 DMA chaining
172  *      3       2 CPU EISA 82489DX
173  *      4       2 CPU MCA 82489DX
174  *      5       2 CPU ISA+PCI
175  *      6       2 CPU EISA+PCI
176  *      7       2 CPU MCA+PCI
177  */
178
179 enum mp_bustype {
180         MP_BUS_ISA = 1,
181         MP_BUS_EISA,
182         MP_BUS_PCI,
183         MP_BUS_MCA,
184 };
185 #endif
186