2008-10-23 09:26:29 +04:00
# ifndef _ASM_X86_MPSPEC_DEF_H
# define _ASM_X86_MPSPEC_DEF_H
2005-04-17 02:20:36 +04:00
/*
* Structure definitions for SMP machines following the
* Intel Multiprocessing Specification 1.1 and 1.4 .
*/
/*
* This tag identifies where the SMP configuration
2008-01-30 15:30:35 +03:00
* information is .
2005-04-17 02:20:36 +04:00
*/
2008-01-30 15:30:35 +03:00
2008-03-23 11:02:48 +03:00
# define SMP_MAGIC_IDENT (('_'<<24) | ('P'<<16) | ('M'<<8) | '_')
2005-04-17 02:20:36 +04:00
2008-01-30 15:30:35 +03:00
# ifdef CONFIG_X86_32
# define MAX_MPC_ENTRY 1024
# define MAX_APICS 256
# else
2008-06-16 21:09:10 +04:00
# if NR_CPUS <= 255
# define MAX_APICS 255
# else
# define MAX_APICS 32768
# endif
2008-01-30 15:30:35 +03:00
# endif
2005-04-17 02:20:36 +04:00
2009-01-08 13:12:46 +03:00
/* Intel MP Floating Pointer Structure */
struct mpf_intel {
2009-01-08 13:13:26 +03:00
char signature [ 4 ] ; /* "_MP_" */
unsigned int physptr ; /* Configuration table address */
unsigned char length ; /* Our length (paragraphs) */
unsigned char specification ; /* Specification version */
unsigned char checksum ; /* Checksum (makes sum 0) */
unsigned char feature1 ; /* Standard or configuration ? */
unsigned char feature2 ; /* Bit7 set for IMCR|PIC */
unsigned char feature3 ; /* Unused (0) */
unsigned char feature4 ; /* Unused (0) */
unsigned char feature5 ; /* Unused (0) */
2005-04-17 02:20:36 +04:00
} ;
2008-01-30 15:30:35 +03:00
# define MPC_SIGNATURE "PCMP"
2009-01-03 13:16:57 +03:00
struct mpc_table {
2009-01-04 19:52:56 +03:00
char signature [ 4 ] ;
unsigned short length ; /* Size of table */
char spec ; /* 0x01 */
char checksum ;
char oem [ 8 ] ;
char productid [ 12 ] ;
unsigned int oemptr ; /* 0 if not present */
unsigned short oemsize ; /* 0 if not present */
unsigned short oemcount ;
unsigned int lapic ; /* APIC address */
2008-01-30 15:30:35 +03:00
unsigned int reserved ;
2005-04-17 02:20:36 +04:00
} ;
/* Followed by entries */
2008-01-30 15:30:35 +03:00
# define MP_PROCESSOR 0
# define MP_BUS 1
# define MP_IOAPIC 2
# define MP_INTSRC 3
# define MP_LINTSRC 4
/* Used by IBM NUMA-Q to describe node locality */
# define MP_TRANSLATION 192
# define CPU_ENABLED 1 /* Processor is available */
# define CPU_BOOTPROCESSOR 2 /* Processor is the BP */
# define CPU_STEPPING_MASK 0x000F
# define CPU_MODEL_MASK 0x00F0
# define CPU_FAMILY_MASK 0x0F00
2005-04-17 02:20:36 +04:00
2009-01-03 13:18:52 +03:00
struct mpc_cpu {
2009-01-04 19:28:25 +03:00
unsigned char type ;
unsigned char apicid ; /* Local APIC number */
unsigned char apicver ; /* Its versions */
unsigned char cpuflag ;
unsigned int cpufeature ;
unsigned int featureflag ; /* CPUID feature value */
unsigned int reserved [ 2 ] ;
2005-04-17 02:20:36 +04:00
} ;
2009-01-03 13:17:32 +03:00
struct mpc_bus {
2009-01-04 19:29:26 +03:00
unsigned char type ;
unsigned char busid ;
unsigned char bustype [ 6 ] ;
2005-04-17 02:20:36 +04:00
} ;
/* List of Bus Type string values, Intel MP Spec. */
# define BUSTYPE_EISA "EISA"
# define BUSTYPE_ISA "ISA"
# define BUSTYPE_INTERN "INTERN" /* Internal BUS */
# define BUSTYPE_MCA "MCA"
# define BUSTYPE_VL "VL" /* Local bus */
# define BUSTYPE_PCI "PCI"
# define BUSTYPE_PCMCIA "PCMCIA"
# define BUSTYPE_CBUS "CBUS"
# define BUSTYPE_CBUSII "CBUSII"
# define BUSTYPE_FUTURE "FUTURE"
# define BUSTYPE_MBI "MBI"
# define BUSTYPE_MBII "MBII"
# define BUSTYPE_MPI "MPI"
# define BUSTYPE_MPSA "MPSA"
# define BUSTYPE_NUBUS "NUBUS"
# define BUSTYPE_TC "TC"
# define BUSTYPE_VME "VME"
# define BUSTYPE_XPRESS "XPRESS"
2008-01-30 15:30:35 +03:00
# define MPC_APIC_USABLE 0x01
2009-01-03 13:19:57 +03:00
struct mpc_ioapic {
2009-01-04 19:24:39 +03:00
unsigned char type ;
unsigned char apicid ;
unsigned char apicver ;
unsigned char flags ;
unsigned int apicaddr ;
2005-04-17 02:20:36 +04:00
} ;
2009-01-03 13:20:52 +03:00
struct mpc_intsrc {
2009-01-04 19:26:44 +03:00
unsigned char type ;
unsigned char irqtype ;
unsigned short irqflag ;
unsigned char srcbus ;
unsigned char srcbusirq ;
unsigned char dstapic ;
unsigned char dstirq ;
2005-04-17 02:20:36 +04:00
} ;
enum mp_irq_source_types {
mp_INT = 0 ,
mp_NMI = 1 ,
mp_SMI = 2 ,
mp_ExtINT = 3
} ;
# define MP_IRQDIR_DEFAULT 0
# define MP_IRQDIR_HIGH 1
# define MP_IRQDIR_LOW 3
2008-01-30 15:30:35 +03:00
# define MP_APIC_ALL 0xFF
2005-04-17 02:20:36 +04:00
2009-01-03 13:21:54 +03:00
struct mpc_lintsrc {
2009-01-04 19:25:53 +03:00
unsigned char type ;
unsigned char irqtype ;
unsigned short irqflag ;
unsigned char srcbusid ;
unsigned char srcbusirq ;
unsigned char destapic ;
unsigned char destapiclint ;
2005-04-17 02:20:36 +04:00
} ;
2008-01-30 15:30:35 +03:00
# define MPC_OEM_SIGNATURE "_OEM"
2009-01-03 13:22:54 +03:00
struct mpc_oemtable {
2009-01-04 19:30:46 +03:00
char signature [ 4 ] ;
unsigned short length ; /* Size of table */
char rev ; /* 0x01 */
char checksum ;
char mpc [ 8 ] ;
2005-04-17 02:20:36 +04:00
} ;
/*
* Default configurations
*
* 1 2 CPU ISA 82489 DX
* 2 2 CPU EISA 82489 DX neither IRQ 0 timer nor IRQ 13 DMA chaining
* 3 2 CPU EISA 82489 DX
* 4 2 CPU MCA 82489 DX
* 5 2 CPU ISA + PCI
* 6 2 CPU EISA + PCI
* 7 2 CPU MCA + PCI
*/
enum mp_bustype {
MP_BUS_ISA = 1 ,
MP_BUS_EISA ,
MP_BUS_PCI ,
MP_BUS_MCA ,
} ;
2008-10-23 09:26:29 +04:00
# endif /* _ASM_X86_MPSPEC_DEF_H */