Chameleon

Chameleon Svn Source Tree

Root/branches/slice/i386/libsaio/platform.h

1/*
2 * platform.h
3 * AsereBLN: reworked and extended
4 *
5 */
6
7#ifndef __LIBSAIO_PLATFORM_H
8#define __LIBSAIO_PLATFORM_H
9
10#include "libsaio.h"
11
12extern bool platformCPUFeature(uint32_t);
13extern void scan_platform(void);
14extern void dumpPhysAddr(const char * title, void * a, int len);
15extern void scan_cpu();
16
17#define bit(n)(1UL << (n))
18#define bitmask(h,l)((bit(h)|(bit(h)-1)) & ~(bit(l)-1))
19#define bitfield(x,h,l)(((x) & bitmask(h,l)) >> l)
20
21
22/* CPUID index into cpuid_raw */
23#define CPUID_00
24#define CPUID_11
25#define CPUID_22
26#define CPUID_33
27#define CPUID_44
28#define CPUID_805
29#define CPUID_816
30#define CPUID_MAX7
31
32#define CPU_MODEL_PENTIUM_M0x0D
33#define CPU_MODEL_YONAH0x0E
34#define CPU_MODEL_MEROM0x0F
35#define CPU_MODEL_PENRYN0x17
36#define CPU_MODEL_NEHALEM0x1A
37#define CPU_MODEL_ATOM0x1C
38#define CPU_MODEL_FIELDS0x1E/* Lynnfield, Clarksfield, Jasper */
39#define CPU_MODEL_DALES0x1F/* Havendale, Auburndale */
40#define CPU_MODEL_DALES_32NM0x25/* Clarkdale, Arrandale */
41#define CPU_MODEL_WESTMERE0x2C/* Gulftown, Westmere-EP, Westmere-WS */
42#define CPU_MODEL_NEHALEM_EX0x2E
43#define CPU_MODEL_WESTMERE_EX0x2F
44
45/* CPU Features */
46// NOTE: Theses are currently mapped to the actual bit in the cpuid value
47#define CPU_FEATURE_MMXbit(23)// MMX Instruction Set
48#define CPU_FEATURE_SSEbit(25)// SSE Instruction Set
49#define CPU_FEATURE_SSE2bit(26)// SSE2 Instruction Set
50#define CPU_FEATURE_SSE3bit(0)// SSE3 Instruction Set
51#define CPU_FEATURE_SSE41bit(19)// SSE41 Instruction Set
52#define CPU_FEATURE_SSE42bit(20)// SSE42 Instruction Set
53#define CPU_FEATURE_EM64Tbit(29)// 64Bit Support
54#define CPU_FEATURE_HTTbit(28)// HyperThreading
55#define CPU_FEATURE_MSRbit(5)// MSR Support
56
57// NOTE: Determine correct bit for bellow (28 is already in use)
58#define CPU_FEATURE_MOBILEbit(1)// Mobile CPU
59//Slice - just use Platform->CPU.Mobile
60#define MEGA 1000000LL
61
62/* SMBIOS Memory Types */
63#define SMB_MEM_TYPE_UNDEFINED0
64#define SMB_MEM_TYPE_OTHER1
65#define SMB_MEM_TYPE_UNKNOWN2
66#define SMB_MEM_TYPE_DRAM3
67#define SMB_MEM_TYPE_EDRAM4
68#define SMB_MEM_TYPE_VRAM5
69#define SMB_MEM_TYPE_SRAM6
70#define SMB_MEM_TYPE_RAM7
71#define SMB_MEM_TYPE_ROM8
72#define SMB_MEM_TYPE_FLASH9
73#define SMB_MEM_TYPE_EEPROM10
74#define SMB_MEM_TYPE_FEPROM11
75#define SMB_MEM_TYPE_EPROM12
76#define SMB_MEM_TYPE_CDRAM13
77#define SMB_MEM_TYPE_3DRAM14
78#define SMB_MEM_TYPE_SDRAM15
79#define SMB_MEM_TYPE_SGRAM16
80#define SMB_MEM_TYPE_RDRAM17
81#define SMB_MEM_TYPE_DDR18
82#define SMB_MEM_TYPE_DDR219
83#define SMB_MEM_TYPE_FBDIMM20
84#define SMB_MEM_TYPE_DDR324// Supported in 10.5.6+ AppleSMBIOS
85
86/* Memory Configuration Types */
87#define SMB_MEM_CHANNEL_UNKNOWN0
88#define SMB_MEM_CHANNEL_SINGLE1
89#define SMB_MEM_CHANNEL_DUAL2
90#define SMB_MEM_CHANNEL_TRIPLE3
91
92/* Maximum number of ram slots */
93#define MAX_RAM_SLOTS8
94#define RAM_SLOT_ENUMERATOR{0, 2, 4, 1, 3, 5, 6, 8, 10, 7, 9, 11}
95
96/* Maximum number of SPD bytes */
97#define MAX_SPD_SIZE256
98
99/* Size of SMBIOS UUID in bytes */
100#define UUID_LEN16
101
102typedef struct _RamSlotInfo_t {
103 uint32_tModuleSize;// Size of Module in MB
104 uint32_tFrequency; // in Mhz
105 const char*Vendor;
106 const char*PartNo;
107 const char*SerialNo;
108 char*spd;// SPD Dump
109 boolInUse;
110 uint8_tType;
111 uint8_tBankConnections; // table type 6, see (3.3.7)
112 uint8_tBankConnCnt;
113
114} RamSlotInfo_t;
115
116typedef struct _PlatformInfo_t {
117struct PCI {
118uint8_tNoDevices;// No of PCI devices
119} PCI;
120struct CPU {
121uint32_tFeatures;// CPU Features like MMX, SSE2, VT, MobileCPU
122uint32_tVendor;// Vendor
123uint32_tSignature;// Signature
124uint32_tStepping;// Stepping
125uint32_tModel;// Model
126uint32_tExtModel;// Extended Model
127uint32_tFamily;// Family
128uint32_tExtFamily;// Extended Family
129uint32_tNoCores;// No Cores per Package
130uint32_tNoThreads;// Threads per Package
131uint8_tMaxCoef;// Max Multiplier
132uint8_tMaxDiv;// Possible 0,5
133uint8_tMinCoef;// Min Multiplier
134uint8_tCurrCoef;// Current Multiplier
135uint8_tCurrDiv;
136floatMaxRatio;// non-integer ratio
137floatCurrRatio;
138uint64_tTSCFrequency;// TSC Frequency Hz
139uint64_tFSBFrequency;// FSB Frequency Hz
140uint64_tCPUFrequency;// CPU Frequency Hz
141boolMobile;// Mobile CPU
142charBrandString[48];// 48 Byte Branding String
143uint32_tCPUID[CPUID_MAX][4];// CPUID 0..4, 80..81 Raw Values
144} CPU;
145
146struct RAM {
147uint64_tFrequency;// Ram Frequency
148uint32_tDivider;// Memory divider
149uint8_tCAS;// CAS 1/2/2.5/3/4/5/6/7
150uint8_tTRC;
151uint8_tTRP;
152uint8_tRAS;
153uint8_tChannels;// Channel Configuration Single,Dual or Triple
154uint8_tNoSlots;// Maximum no of slots available
155uint8_tType;// Standard SMBIOS v2.5 Memory Type
156charBrandString[48];// Branding String Memory Controller
157RamSlotInfo_tDIMM[MAX_RAM_SLOTS];// Information about each slot
158} RAM;
159
160struct DMI {
161intMaxMemorySlots;// number of memory slots polulated by SMBIOS
162intCntMemorySlots;// number of memory slots counted
163intMemoryModules;// number of memory modules installed
164intDIMM[MAX_RAM_SLOTS];// Information and SPD mapping for each slot
165} DMI;
166uint8_tType;// System Type: 1=Desktop, 2=Portable... according ACPI2.0 (FACP: PM_Profile)
167uint8_t*UUID;
168} PlatformInfo_t;
169
170extern PlatformInfo_t* Platform;
171
172#endif /* !__LIBSAIO_PLATFORM_H */
173

Archive Download this file

Revision: 721