Chameleon Applications

Chameleon Applications Svn Source Tree

Root/branches/iFabio/Chameleon/i386/libsaio/smbios.h

Source at commit 307 created 12 years 11 months ago.
By ifabio, merge changes from trunk (929). Also merge the module changes from Azimutz branche (fix compile error) Also edited the info.plist into AHCIPortInjector.kext: http://forum.voodooprojects.org/index.php/topic,1170.0.html
1/*
2 * Copyright (c) 1998-2009 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
11 *
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22
23#ifndef __LIBSAIO_SMBIOS_H
24#define __LIBSAIO_SMBIOS_H
25
26//
27// Based on System Management BIOS Reference Specification v2.5
28//
29
30typedef uint8_t SMBString;
31typedef uint8_t SMBByte;
32typedef uint16_t SMBWord;
33typedef uint32_t SMBDWord;
34typedef uint64_t SMBQWord;
35
36
37typedef struct DMIEntryPoint {
38 SMBByte anchor[5];
39 SMBByte checksum;
40 SMBWord tableLength;
41 SMBDWord tableAddress;
42 SMBWord structureCount;
43 SMBByte bcdRevision;
44} __attribute__((packed)) DMIEntryPoint;
45
46typedef struct SMBEntryPoint {
47 SMBByte anchor[4];
48 SMBByte checksum;
49 SMBByte entryPointLength;
50 SMBByte majorVersion;
51 SMBByte minorVersion;
52 SMBWord maxStructureSize;
53 SMBByte entryPointRevision;
54 SMBByte formattedArea[5];
55 DMIEntryPoint dmi;
56} __attribute__((packed)) SMBEntryPoint;
57
58//
59// Header common to all SMBIOS structures
60//
61
62typedef struct SMBStructHeader {
63 SMBByte type;
64 SMBByte length;
65 SMBWord handle;
66} __attribute__((packed)) SMBStructHeader;
67
68#define SMB_STRUCT_HEADER SMBStructHeader header;
69
70typedef struct SMBAnchor
71{
72const SMBStructHeader *header;
73const uint8_t *next;
74const uint8_t *end;
75} SMBAnchor;
76
77#define SMB_ANCHOR_IS_VALID(x)\
78((x) && ((x)->header) && ((x)->next) && ((x)->end))
79
80#define SMB_ANCHOR_RESET(x)\
81bzero(x, sizeof(typedef struct SMBAnchor));
82
83//
84// SMBIOS structure types.
85//
86
87enum {
88 kSMBTypeBIOSInformation = 0,
89 kSMBTypeSystemInformation = 1,
90 kSMBTypeBaseBoard= 2,
91 kSMBTypeSystemEnclosure = 3,
92 kSMBTypeProcessorInformation = 4,
93 kSMBTypeMemoryModule = 6,
94 kSMBTypeCacheInformation = 7,
95 kSMBTypeSystemSlot = 9,
96 kSMBTypePhysicalMemoryArray = 16,
97 kSMBTypeMemoryDevice = 17,
98 kSMBType32BitMemoryErrorInfo = 18,
99 kSMBType64BitMemoryErrorInfo = 33,
100
101 kSMBTypeEndOfTable = 127,
102
103 /* Apple Specific Structures */
104 kSMBTypeFirmwareVolume = 128,
105 kSMBTypeMemorySPD = 130,
106 kSMBTypeOemProcessorType = 131,
107 kSMBTypeOemProcessorBusSpeed = 132
108};
109
110//
111// BIOS Information (Type 0)
112//
113typedef struct SMBBIOSInformation {
114 SMB_STRUCT_HEADER // Type 0
115 SMBString vendor; // BIOS vendor name
116 SMBString version; // BIOS version
117 SMBWord startSegment; // BIOS segment start
118 SMBString releaseDate; // BIOS release date
119 SMBByte romSize; // (n); 64K * (n+1) bytes
120 SMBQWord characteristics; // supported BIOS functions
121} __attribute__((packed)) SMBBIOSInformation;
122
123//
124// System Information (Type 1)
125//
126
127typedef struct SMBSystemInformation {
128 // 2.0+ spec (8 bytes)
129 SMB_STRUCT_HEADER // Type 1
130 SMBString manufacturer;
131 SMBString productName;
132 SMBString version;
133 SMBString serialNumber;
134 // 2.1+ spec (25 bytes)
135 SMBByte uuid[16]; // can be all 0 or all 1's
136 SMBByte wakeupReason; // reason for system wakeup
137 // 2.4+ spec (27 bytes)
138 SMBString skuNumber;
139 SMBString family;
140} __attribute__((packed)) SMBSystemInformation;
141
142//
143// Base Board (Type 2)
144//
145
146typedef struct SMBBaseBoard {
147 SMB_STRUCT_HEADER // Type 2
148 SMBStringmanufacturer;
149 SMBStringproduct;
150 SMBStringversion;
151 SMBStringserialNumber;
152 SMBStringassetTagNumber;
153 SMBBytefeatureFlags;
154 SMBStringlocationInChassis;
155 SMBWordchassisHandle;
156 SMBByteboardType;
157 SMBBytenumberOfContainedHandles;
158// 0 - 255 contained handles go here but we do not include
159// them in our structure. Be careful to use numberOfContainedHandles
160// times sizeof(SMBWord) when computing the actual record size,
161// if you need it.
162} __attribute__((packed)) SMBBaseBoard;
163
164// Values for boardType in Type 2 records
165enum {
166 kSMBBaseBoardUnknown= 0x01,
167 kSMBBaseBoardOther= 0x02,
168 kSMBBaseBoardServerBlade= 0x03,
169 kSMBBaseBoardConnectivitySwitch= 0x04,
170 kSMBBaseBoardSystemMgmtModule= 0x05,
171 kSMBBaseBoardProcessorModule= 0x06,
172 kSMBBaseBoardIOModule= 0x07,
173 kSMBBaseBoardMemoryModule= 0x08,
174 kSMBBaseBoardDaughter= 0x09,
175 kSMBBaseBoardMotherboard= 0x0A,
176 kSMBBaseBoardProcessorMemoryModule= 0x0B,
177 kSMBBaseBoardProcessorIOModule= 0x0C,
178 kSMBBaseBoardInterconnect= 0x0D,
179};
180
181
182//
183// System Enclosure (Type 3)
184//
185
186typedef struct SMBSystemEnclosure {
187 SMB_STRUCT_HEADER // Type 3
188 SMBString manufacturer;
189 SMBByte type;
190 SMBString version;
191 SMBString serialNumber;
192 SMBString assetTagNumber;
193 SMBByte bootupState;
194 SMBByte powerSupplyState;
195 SMBByte thermalState;
196 SMBByte securityStatus;
197 SMBDWord oemDefined;
198} __attribute__((packed)) SMBSystemEnclosure;
199
200//
201// Processor Information (Type 4)
202//
203
204typedef struct SMBProcessorInformation {
205 // 2.0+ spec (26 bytes)
206 SMB_STRUCT_HEADER // Type 4
207 SMBString socketDesignation;
208 SMBByte processorType; // CPU = 3
209 SMBByte processorFamily; // processor family enum
210 SMBString manufacturer;
211 SMBQWord processorID; // based on CPUID
212 SMBString processorVersion;
213 SMBByte voltage; // bit7 cleared indicate legacy mode
214 SMBWord externalClock; // external clock in MHz
215 SMBWord maximumClock; // max internal clock in MHz
216 SMBWord currentClock; // current internal clock in MHz
217 SMBByte status;
218 SMBByte processorUpgrade; // processor upgrade enum
219 // 2.1+ spec (32 bytes)
220 SMBWord L1CacheHandle;
221 SMBWord L2CacheHandle;
222 SMBWord L3CacheHandle;
223 // 2.3+ spec (35 bytes)
224 SMBString serialNumber;
225 SMBString assetTag;
226 SMBString partNumber;
227} __attribute__((packed)) SMBProcessorInformation;
228
229#define kSMBProcessorInformationMinSize 26
230
231//
232// Memory Module Information (Type 6)
233// Obsoleted since SMBIOS version 2.1
234//
235
236typedef struct SMBMemoryModule {
237 SMB_STRUCT_HEADER // Type 6
238 SMBString socketDesignation;
239 SMBByte bankConnections;
240 SMBByte currentSpeed;
241 SMBWord currentMemoryType;
242 SMBByte installedSize;
243 SMBByte enabledSize;
244 SMBByte errorStatus;
245} __attribute__((packed)) SMBMemoryModule;
246
247#define kSMBMemoryModuleSizeNotDeterminable 0x7D
248#define kSMBMemoryModuleSizeNotEnabled 0x7E
249#define kSMBMemoryModuleSizeNotInstalled 0x7F
250
251//
252// Cache Information (Type 7)
253//
254
255typedef struct SMBCacheInformation {
256 SMB_STRUCT_HEADER // Type 7
257 SMBString socketDesignation;
258 SMBWord cacheConfiguration;
259 SMBWord maximumCacheSize;
260 SMBWord installedSize;
261 SMBWord supportedSRAMType;
262 SMBWord currentSRAMType;
263 SMBByte cacheSpeed;
264 SMBByte errorCorrectionType;
265 SMBByte systemCacheType;
266 SMBByte associativity;
267} __attribute__((packed)) SMBCacheInformation;
268
269typedef struct SMBSystemSlot {
270 // 2.0+ spec (12 bytes)
271 SMB_STRUCT_HEADER // Type 9
272 SMBString slotDesignation;
273 SMBByte slotType;
274 SMBByte slotDataBusWidth;
275 SMBByte currentUsage;
276 SMBByte slotLength;
277 SMBWord slotID;
278 SMBByte slotCharacteristics1;
279 // 2.1+ spec (13 bytes)
280 SMBByte slotCharacteristics2;
281} __attribute__((packed)) SMBSystemSlot;
282
283//
284// Physical Memory Array (Type 16)
285//
286
287typedef struct SMBPhysicalMemoryArray {
288 // 2.1+ spec (15 bytes)
289 SMB_STRUCT_HEADER // Type 16
290 SMBByte physicalLocation; // physical location
291 SMBByte arrayUse; // the use for the memory array
292 SMBByte errorCorrection; // error correction/detection method
293 SMBDWord maximumCapacity; // maximum memory capacity in kilobytes
294 SMBWord errorHandle; // handle of a previously detected error
295 SMBWord numMemoryDevices; // number of memory slots or sockets
296} __attribute__((packed)) SMBPhysicalMemoryArray;
297
298// Memory Array - Use
299enum {
300 kSMBMemoryArrayUseOther = 0x01,
301 kSMBMemoryArrayUseUnknown = 0x02,
302 kSMBMemoryArrayUseSystemMemory = 0x03,
303 kSMBMemoryArrayUseVideoMemory = 0x04,
304 kSMBMemoryArrayUseFlashMemory = 0x05,
305 kSMBMemoryArrayUseNonVolatileMemory = 0x06,
306 kSMBMemoryArrayUseCacheMemory = 0x07
307};
308
309// Memory Array - Error Correction Types
310enum {
311 kSMBMemoryArrayErrorCorrectionTypeOther = 0x01,
312 kSMBMemoryArrayErrorCorrectionTypeUnknown = 0x02,
313 kSMBMemoryArrayErrorCorrectionTypeNone = 0x03,
314 kSMBMemoryArrayErrorCorrectionTypeParity = 0x04,
315 kSMBMemoryArrayErrorCorrectionTypeSingleBitECC = 0x05,
316 kSMBMemoryArrayErrorCorrectionTypeMultiBitECC = 0x06,
317 kSMBMemoryArrayErrorCorrectionTypeCRC = 0x07
318};
319
320//
321// Memory Device (Type 17)
322//
323
324typedef struct SMBMemoryDevice {
325 // 2.1+ spec (21 bytes)
326 SMB_STRUCT_HEADER // Type 17
327 SMBWord arrayHandle; // handle of the parent memory array
328 SMBWord errorHandle; // handle of a previously detected error
329 SMBWord totalWidth; // total width in bits; including ECC bits
330 SMBWord dataWidth; // data width in bits
331 SMBWord memorySize; // bit15 is scale, 0 = MB, 1 = KB
332 SMBByte formFactor; // memory device form factor
333 SMBByte deviceSet; // parent set of identical memory devices
334 SMBString deviceLocator; // labeled socket; e.g. "SIMM 3"
335 SMBString bankLocator; // labeled bank; e.g. "Bank 0" or "A"
336 SMBByte memoryType; // type of memory
337 SMBWord memoryTypeDetail; // additional detail on memory type
338 // 2.3+ spec (27 bytes)
339 SMBWord memorySpeed; // speed of device in MHz (0 for unknown)
340 SMBString manufacturer;
341 SMBString serialNumber;
342 SMBString assetTag;
343 SMBString partNumber;
344} __attribute__((packed)) SMBMemoryDevice;
345
346//
347// Firmware Volume Description (Apple Specific - Type 128)
348//
349
350enum {
351 FW_REGION_RESERVED = 0,
352 FW_REGION_RECOVERY = 1,
353 FW_REGION_MAIN = 2,
354 FW_REGION_NVRAM = 3,
355 FW_REGION_CONFIG = 4,
356 FW_REGION_DIAGVAULT = 5,
357
358 NUM_FLASHMAP_ENTRIES = 8
359};
360
361typedef struct FW_REGION_INFO
362{
363 SMBDWord StartAddress;
364 SMBDWord EndAddress;
365} __attribute__((packed)) FW_REGION_INFO;
366
367typedef struct SMBFirmwareVolume {
368 SMB_STRUCT_HEADER // Type 128
369 SMBByte RegionCount;
370 SMBByte Reserved[3];
371 SMBDWord FirmwareFeatures;
372 SMBDWord FirmwareFeaturesMask;
373 SMBByte RegionType[ NUM_FLASHMAP_ENTRIES ];
374 FW_REGION_INFO FlashMap[ NUM_FLASHMAP_ENTRIES ];
375} __attribute__((packed)) SMBFirmwareVolume;
376
377//
378// Memory SPD Data (Apple Specific - Type 130)
379//
380
381typedef struct SMBMemorySPD {
382SMB_STRUCT_HEADER // Type 130
383SMBWord Type17Handle;
384SMBWord Offset;
385SMBWord Size;
386SMBWord Data[];
387} __attribute__((packed)) SMBMemorySPD;
388
389static const char *
390SMBMemoryDeviceTypes[] =
391{
392 "RAM", /* 00h Undefined */
393 "RAM", /* 01h Other */
394 "RAM", /* 02h Unknown */
395 "DRAM", /* 03h DRAM */
396 "EDRAM", /* 04h EDRAM */
397 "VRAM", /* 05h VRAM */
398 "SRAM", /* 06h SRAM */
399 "RAM", /* 07h RAM */
400 "ROM", /* 08h ROM */
401 "FLASH", /* 09h FLASH */
402 "EEPROM", /* 0Ah EEPROM */
403 "FEPROM", /* 0Bh FEPROM */
404 "EPROM", /* 0Ch EPROM */
405 "CDRAM", /* 0Dh CDRAM */
406 "3DRAM", /* 0Eh 3DRAM */
407 "SDRAM", /* 0Fh SDRAM */
408 "SGRAM", /* 10h SGRAM */
409 "RDRAM", /* 11h RDRAM */
410 "DDR SDRAM", /* 12h DDR */
411 "DDR2 SDRAM", /* 13h DDR2 */
412 "DDR2 FB-DIMM", /* 14h DDR2 FB-DIMM */
413 "RAM",/* 15h unused */
414 "RAM",/* 16h unused */
415 "RAM",/* 17h unused */
416 "DDR3",/* 18h DDR3, chosen in [5776134] */
417};
418
419static const int
420kSMBMemoryDeviceTypeCount = sizeof(SMBMemoryDeviceTypes) /
421 sizeof(SMBMemoryDeviceTypes[0]);
422
423//
424// OEM Processor Type (Apple Specific - Type 131)
425//
426
427typedef struct SMBOemProcessorType {
428SMB_STRUCT_HEADER
429SMBWord ProcessorType;
430} __attribute__((packed)) SMBOemProcessorType;
431
432//
433// OEM Processor Bus Speed (Apple Specific - Type 132)
434//
435typedef struct SMBOemProcessorBusSpeed {
436SMB_STRUCT_HEADER
437SMBWord ProcessorBusSpeed; // MT/s unit
438} __attribute__((packed)) SMBOemProcessorBusSpeed;
439
440//----------------------------------------------------------------------------------------------------------
441
442/* From Foundation/Efi/Guid/Smbios/SmBios.h */
443/* Modified to wrap Data4 array init with {} */
444#define EFI_SMBIOS_TABLE_GUID {0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d}}
445
446#define SMBIOS_ORIGINAL0
447#define SMBIOS_PATCHED1
448
449extern void *getSmbios(int which);
450extern void readSMBIOSInfo(SMBEntryPoint *eps);
451extern void setupSMBIOSTable(void);
452
453extern void decodeSMBIOSTable(SMBEntryPoint *eps);
454
455
456#endif /* !__LIBSAIO_SMBIOS_H */
457

Archive Download this file

Revision: 307