1#ifndef __ASM_MACH_MPPARSE_H 2#define __ASM_MACH_MPPARSE_H 3 4#include <mach_apic.h> 5#include <asm/tsc.h> 6 7extern int use_cyclone; 8 9#ifdef CONFIG_X86_SUMMIT_NUMA 10extern void setup_summit(void); 11#else 12#define setup_summit() {} 13#endif 14 15static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name, 16 struct mpc_config_translation *translation) 17{ 18 Dprintk("Bus #%d is %s\n", m->mpc_busid, name); 19} 20 21static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, 22 struct mpc_config_translation *translation) 23{ 24} 25 26static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, 27 char *productid) 28{ 29 if (!strncmp(oem, "IBM ENSW", 8) && 30 (!strncmp(productid, "VIGIL SMP", 9) 31 || !strncmp(productid, "EXA", 3) 32 || !strncmp(productid, "RUTHLESS SMP", 12))){ 33 mark_tsc_unstable("Summit based system"); 34 use_cyclone = 1; /*enable cyclone-timer*/ 35 setup_summit(); 36 return 1; 37 } 38 return 0; 39} 40 41/* Hook from generic ACPI tables.c */ 42static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) 43{ 44 if (!strncmp(oem_id, "IBM", 3) && 45 (!strncmp(oem_table_id, "SERVIGIL", 8) 46 || !strncmp(oem_table_id, "EXA", 3))){ 47 mark_tsc_unstable("Summit based system"); 48 use_cyclone = 1; /*enable cyclone-timer*/ 49 setup_summit(); 50 return 1; 51 } 52 return 0; 53} 54 55struct rio_table_hdr { 56 unsigned char version; /* Version number of this data structure */ 57 /* Version 3 adds chassis_num & WP_index */ 58 unsigned char num_scal_dev; /* # of Scalability devices (Twisters for Vigil) */ 59 unsigned char num_rio_dev; /* # of RIO I/O devices (Cyclones and Winnipegs) */ 60} __attribute__((packed)); 61 62struct scal_detail { 63 unsigned char node_id; /* Scalability Node ID */ 64 unsigned long CBAR; /* Address of 1MB register space */ 65 unsigned char port0node; /* Node ID port connected to: 0xFF=None */ 66 unsigned char port0port; /* Port num port connected to: 0,1,2, or 0xFF=None */ 67 unsigned char port1node; /* Node ID port connected to: 0xFF = None */ 68 unsigned char port1port; /* Port num port connected to: 0,1,2, or 0xFF=None */ 69 unsigned char port2node; /* Node ID port connected to: 0xFF = None */ 70 unsigned char port2port; /* Port num port connected to: 0,1,2, or 0xFF=None */ 71 unsigned char chassis_num; /* 1 based Chassis number (1 = boot node) */ 72} __attribute__((packed)); 73 74struct rio_detail { 75 unsigned char node_id; /* RIO Node ID */ 76 unsigned long BBAR; /* Address of 1MB register space */ 77 unsigned char type; /* Type of device */ 78 unsigned char owner_id; /* For WPEG: Node ID of Cyclone that owns this WPEG*/ 79 /* For CYC: Node ID of Twister that owns this CYC */ 80 unsigned char port0node; /* Node ID port connected to: 0xFF=None */ 81 unsigned char port0port; /* Port num port connected to: 0,1,2, or 0xFF=None */ 82 unsigned char port1node; /* Node ID port connected to: 0xFF=None */ 83 unsigned char port1port; /* Port num port connected to: 0,1,2, or 0xFF=None */ 84 unsigned char first_slot; /* For WPEG: Lowest slot number below this WPEG */ 85 /* For CYC: 0 */ 86 unsigned char status; /* For WPEG: Bit 0 = 1 : the XAPIC is used */ 87 /* = 0 : the XAPIC is not used, ie:*/ 88 /* ints fwded to another XAPIC */ 89 /* Bits1:7 Reserved */ 90 /* For CYC: Bits0:7 Reserved */ 91 unsigned char WP_index; /* For WPEG: WPEG instance index - lower ones have */ 92 /* lower slot numbers/PCI bus numbers */ 93 /* For CYC: No meaning */ 94 unsigned char chassis_num; /* 1 based Chassis number */ 95 /* For LookOut WPEGs this field indicates the */ 96 /* Expansion Chassis #, enumerated from Boot */ 97 /* Node WPEG external port, then Boot Node CYC */ 98 /* external port, then Next Vigil chassis WPEG */ 99 /* external port, etc. */ 100 /* Shared Lookouts have only 1 chassis number (the */ 101 /* first one assigned) */ 102} __attribute__((packed)); 103 104 105typedef enum { 106 CompatTwister = 0, /* Compatibility Twister */ 107 AltTwister = 1, /* Alternate Twister of internal 8-way */ 108 CompatCyclone = 2, /* Compatibility Cyclone */ 109 AltCyclone = 3, /* Alternate Cyclone of internal 8-way */ 110 CompatWPEG = 4, /* Compatibility WPEG */ 111 AltWPEG = 5, /* Second Planar WPEG */ 112 LookOutAWPEG = 6, /* LookOut WPEG */ 113 LookOutBWPEG = 7, /* LookOut WPEG */ 114} node_type; 115 116static inline int is_WPEG(struct rio_detail *rio){ 117 return (rio->type == CompatWPEG || rio->type == AltWPEG || 118 rio->type == LookOutAWPEG || rio->type == LookOutBWPEG); 119} 120 121#endif /* __ASM_MACH_MPPARSE_H */ 122