mpspec.h
来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 243 行
H
243 行
#ifndef __ASM_MPSPEC_H#define __ASM_MPSPEC_H/* * Structure definitions for SMP machines following the * Intel Multiprocessing Specification 1.1 and 1.4. *//* * This tag identifies where the SMP configuration * information is. */ #define SMP_MAGIC_IDENT (('_'<<24)|('P'<<16)|('M'<<8)|'_')/* * a maximum of 16 APICs with the current APIC ID architecture. */#define MAX_APICS 16struct intel_mp_floating{ char mpf_signature[4]; /* "_MP_" */ unsigned int mpf_physptr; /* Configuration table address */ unsigned char mpf_length; /* Our length (paragraphs) */ unsigned char mpf_specification;/* Specification version */ unsigned char mpf_checksum; /* Checksum (makes sum 0) */ unsigned char mpf_feature1; /* Standard or configuration ? */ unsigned char mpf_feature2; /* Bit7 set for IMCR|PIC */ unsigned char mpf_feature3; /* Unused (0) */ unsigned char mpf_feature4; /* Unused (0) */ unsigned char mpf_feature5; /* Unused (0) */};struct mp_config_table{ char mpc_signature[4];#define MPC_SIGNATURE "PCMP" unsigned short mpc_length; /* Size of table */ char mpc_spec; /* 0x01 */ char mpc_checksum; char mpc_oem[8]; char mpc_productid[12]; unsigned int mpc_oemptr; /* 0 if not present */ unsigned short mpc_oemsize; /* 0 if not present */ unsigned short mpc_oemcount; unsigned int mpc_lapic; /* APIC address */ unsigned int reserved;};/* Followed by entries */#define MP_PROCESSOR 0#define MP_BUS 1#define MP_IOAPIC 2#define MP_INTSRC 3#define MP_LINTSRC 4struct mpc_config_processor{ unsigned char mpc_type; unsigned char mpc_apicid; /* Local APIC number */ unsigned char mpc_apicver; /* Its versions */ unsigned char mpc_cpuflag;#define CPU_ENABLED 1 /* Processor is available */#define CPU_BOOTPROCESSOR 2 /* Processor is the BP */ unsigned int mpc_cpufeature; #define CPU_STEPPING_MASK 0x0F#define CPU_MODEL_MASK 0xF0#define CPU_FAMILY_MASK 0xF00 unsigned int mpc_featureflag; /* CPUID feature value */ unsigned int mpc_reserved[2];};struct mpc_config_bus{ unsigned char mpc_type; unsigned char mpc_busid; unsigned char mpc_bustype[6] __attribute((packed));};/* 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"struct mpc_config_ioapic{ unsigned char mpc_type; unsigned char mpc_apicid; unsigned char mpc_apicver; unsigned char mpc_flags;#define MPC_APIC_USABLE 0x01 unsigned int mpc_apicaddr;};struct mpc_config_intsrc{ unsigned char mpc_type; unsigned char mpc_irqtype; unsigned short mpc_irqflag; unsigned char mpc_srcbus; unsigned char mpc_srcbusirq; unsigned char mpc_dstapic; unsigned char mpc_dstirq;};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 3struct mpc_config_lintsrc{ unsigned char mpc_type; unsigned char mpc_irqtype; unsigned short mpc_irqflag; unsigned char mpc_srcbusid; unsigned char mpc_srcbusirq; unsigned char mpc_destapic; #define MP_APIC_ALL 0xFF unsigned char mpc_destapiclint;};/* * Default configurations * * 1 2 CPU ISA 82489DX * 2 2 CPU EISA 82489DX neither IRQ 0 timer nor IRQ 13 DMA chaining * 3 2 CPU EISA 82489DX * 4 2 CPU MCA 82489DX * 5 2 CPU ISA+PCI * 6 2 CPU EISA+PCI * 7 2 CPU MCA+PCI */#define MAX_MP_BUSSES 270#define MAX_IRQ_SOURCES 256enum mp_bustype { MP_BUS_ISA = 1, MP_BUS_EISA, MP_BUS_PCI, MP_BUS_MCA};extern unsigned char mp_bus_id_to_type [MAX_MP_BUSSES];extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];extern unsigned int boot_cpu_physical_apicid;extern int smp_found_config;extern void find_smp_config (void);extern void get_smp_config (void);extern int nr_ioapics;extern int apic_version [MAX_APICS];extern int mp_irq_entries;extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES];extern int mpc_default_type;extern int mp_current_pci_id;extern unsigned long mp_lapic_addr;extern int pic_mode;#ifdef CONFIG_ACPI_BOOTextern void mp_register_lapic (u8 id, u8 enabled);extern void mp_register_lapic_address (u64 address);#ifdef CONFIG_X86_IO_APICextern void mp_register_ioapic (u8 id, u32 address, u32 gsi_base);extern void mp_override_legacy_irq (u8 bus_irq, u8 polarity, u8 trigger, u32 gsi);extern void mp_config_acpi_legacy_irqs (void);extern void mp_register_gsi (u32 gsi, int edge_level, int active_high_low);#endif /*CONFIG_X86_IO_APIC*/#endifextern int using_apic_timer;#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)struct physid_mask{ unsigned long mask[PHYSID_ARRAY_SIZE];};typedef struct physid_mask physid_mask_t;#define physid_set(physid, map) set_bit(physid, (map).mask)#define physid_clear(physid, map) clear_bit(physid, (map).mask)#define physid_isset(physid, map) test_bit(physid, (map).mask)#define physid_test_and_set(physid, map) test_and_set_bit(physid, (map).mask)#define physids_and(dst, src1, src2) bitmap_and((dst).mask, (src1).mask, (src2).mask, MAX_APICS)#define physids_or(dst, src1, src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, MAX_APICS)#define physids_clear(map) bitmap_zero((map).mask, MAX_APICS)#define physids_complement(dst, src) bitmap_complement((dst).mask, (src).mask, MAX_APICS)#define physids_empty(map) bitmap_empty((map).mask, MAX_APICS)#define physids_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, MAX_APICS)#define physids_weight(map) bitmap_weight((map).mask, MAX_APICS)#define physids_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, MAX_APICS)#define physids_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, MAX_APICS)#define physids_coerce(map) ((map).mask[0])#define physids_promote(physids) \ ({ \ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \ __physid_mask.mask[0] = physids; \ __physid_mask; \ })#define physid_mask_of_physid(physid) \ ({ \ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \ physid_set(physid, __physid_mask); \ __physid_mask; \ })#define PHYSID_MASK_ALL { {[0 ... PHYSID_ARRAY_SIZE-1] = ~0UL} }#define PHYSID_MASK_NONE { {[0 ... PHYSID_ARRAY_SIZE-1] = 0UL} }extern physid_mask_t phys_cpu_present_map;#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?