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