Index: trunk/i386/libsaio/SMBIOS.h =================================================================== --- trunk/i386/libsaio/SMBIOS.h (revision 825) +++ trunk/i386/libsaio/SMBIOS.h (revision 826) @@ -1,456 +0,0 @@ -/* - * Copyright (c) 1998-2009 Apple Computer, Inc. All rights reserved. - * - * @APPLE_LICENSE_HEADER_START@ - * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. - * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. - * - * @APPLE_LICENSE_HEADER_END@ - */ - -#ifndef __LIBSAIO_SMBIOS_H -#define __LIBSAIO_SMBIOS_H - -// -// Based on System Management BIOS Reference Specification v2.5 -// - -typedef uint8_t SMBString; -typedef uint8_t SMBByte; -typedef uint16_t SMBWord; -typedef uint32_t SMBDWord; -typedef uint64_t SMBQWord; - - -typedef struct DMIEntryPoint { - SMBByte anchor[5]; - SMBByte checksum; - SMBWord tableLength; - SMBDWord tableAddress; - SMBWord structureCount; - SMBByte bcdRevision; -} __attribute__((packed)) DMIEntryPoint; - -typedef struct SMBEntryPoint { - SMBByte anchor[4]; - SMBByte checksum; - SMBByte entryPointLength; - SMBByte majorVersion; - SMBByte minorVersion; - SMBWord maxStructureSize; - SMBByte entryPointRevision; - SMBByte formattedArea[5]; - DMIEntryPoint dmi; -} __attribute__((packed)) SMBEntryPoint; - -// -// Header common to all SMBIOS structures -// - -typedef struct SMBStructHeader { - SMBByte type; - SMBByte length; - SMBWord handle; -} __attribute__((packed)) SMBStructHeader; - -#define SMB_STRUCT_HEADER SMBStructHeader header; - -typedef struct SMBAnchor -{ - const SMBStructHeader * header; - const uint8_t * next; - const uint8_t * end; -} SMBAnchor; - -#define SMB_ANCHOR_IS_VALID(x) \ - ((x) && ((x)->header) && ((x)->next) && ((x)->end)) - -#define SMB_ANCHOR_RESET(x) \ - bzero(x, sizeof(typedef struct SMBAnchor)); - -// -// SMBIOS structure types. -// - -enum { - kSMBTypeBIOSInformation = 0, - kSMBTypeSystemInformation = 1, - kSMBTypeBaseBoard = 2, - kSMBTypeSystemEnclosure = 3, - kSMBTypeProcessorInformation = 4, - kSMBTypeMemoryModule = 6, - kSMBTypeCacheInformation = 7, - kSMBTypeSystemSlot = 9, - kSMBTypePhysicalMemoryArray = 16, - kSMBTypeMemoryDevice = 17, - kSMBType32BitMemoryErrorInfo = 18, - kSMBType64BitMemoryErrorInfo = 33, - - kSMBTypeEndOfTable = 127, - - /* Apple Specific Structures */ - kSMBTypeFirmwareVolume = 128, - kSMBTypeMemorySPD = 130, - kSMBTypeOemProcessorType = 131, - kSMBTypeOemProcessorBusSpeed = 132 -}; - -// -// BIOS Information (Type 0) -// -typedef struct SMBBIOSInformation { - SMB_STRUCT_HEADER // Type 0 - SMBString vendor; // BIOS vendor name - SMBString version; // BIOS version - SMBWord startSegment; // BIOS segment start - SMBString releaseDate; // BIOS release date - SMBByte romSize; // (n); 64K * (n+1) bytes - SMBQWord characteristics; // supported BIOS functions -} __attribute__((packed)) SMBBIOSInformation; - -// -// System Information (Type 1) -// - -typedef struct SMBSystemInformation { - // 2.0+ spec (8 bytes) - SMB_STRUCT_HEADER // Type 1 - SMBString manufacturer; - SMBString productName; - SMBString version; - SMBString serialNumber; - // 2.1+ spec (25 bytes) - SMBByte uuid[16]; // can be all 0 or all 1's - SMBByte wakeupReason; // reason for system wakeup - // 2.4+ spec (27 bytes) - SMBString skuNumber; - SMBString family; -} __attribute__((packed)) SMBSystemInformation; - -// -// Base Board (Type 2) -// - -typedef struct SMBBaseBoard { - SMB_STRUCT_HEADER // Type 2 - SMBString manufacturer; - SMBString product; - SMBString version; - SMBString serialNumber; - SMBString assetTagNumber; - SMBByte featureFlags; - SMBString locationInChassis; - SMBWord chassisHandle; - SMBByte boardType; - SMBByte numberOfContainedHandles; - // 0 - 255 contained handles go here but we do not include - // them in our structure. Be careful to use numberOfContainedHandles - // times sizeof(SMBWord) when computing the actual record size, - // if you need it. -} __attribute__((packed)) SMBBaseBoard; - -// Values for boardType in Type 2 records -enum { - kSMBBaseBoardUnknown = 0x01, - kSMBBaseBoardOther = 0x02, - kSMBBaseBoardServerBlade = 0x03, - kSMBBaseBoardConnectivitySwitch = 0x04, - kSMBBaseBoardSystemMgmtModule = 0x05, - kSMBBaseBoardProcessorModule = 0x06, - kSMBBaseBoardIOModule = 0x07, - kSMBBaseBoardMemoryModule = 0x08, - kSMBBaseBoardDaughter = 0x09, - kSMBBaseBoardMotherboard = 0x0A, - kSMBBaseBoardProcessorMemoryModule = 0x0B, - kSMBBaseBoardProcessorIOModule = 0x0C, - kSMBBaseBoardInterconnect = 0x0D, -}; - - -// -// System Enclosure (Type 3) -// - -typedef struct SMBSystemEnclosure { - SMB_STRUCT_HEADER // Type 3 - SMBString manufacturer; - SMBByte type; - SMBString version; - SMBString serialNumber; - SMBString assetTagNumber; - SMBByte bootupState; - SMBByte powerSupplyState; - SMBByte thermalState; - SMBByte securityStatus; - SMBDWord oemDefined; -} __attribute__((packed)) SMBSystemEnclosure; - -// -// Processor Information (Type 4) -// - -typedef struct SMBProcessorInformation { - // 2.0+ spec (26 bytes) - SMB_STRUCT_HEADER // Type 4 - SMBString socketDesignation; - SMBByte processorType; // CPU = 3 - SMBByte processorFamily; // processor family enum - SMBString manufacturer; - SMBQWord processorID; // based on CPUID - SMBString processorVersion; - SMBByte voltage; // bit7 cleared indicate legacy mode - SMBWord externalClock; // external clock in MHz - SMBWord maximumClock; // max internal clock in MHz - SMBWord currentClock; // current internal clock in MHz - SMBByte status; - SMBByte processorUpgrade; // processor upgrade enum - // 2.1+ spec (32 bytes) - SMBWord L1CacheHandle; - SMBWord L2CacheHandle; - SMBWord L3CacheHandle; - // 2.3+ spec (35 bytes) - SMBString serialNumber; - SMBString assetTag; - SMBString partNumber; -} __attribute__((packed)) SMBProcessorInformation; - -#define kSMBProcessorInformationMinSize 26 - -// -// Memory Module Information (Type 6) -// Obsoleted since SMBIOS version 2.1 -// - -typedef struct SMBMemoryModule { - SMB_STRUCT_HEADER // Type 6 - SMBString socketDesignation; - SMBByte bankConnections; - SMBByte currentSpeed; - SMBWord currentMemoryType; - SMBByte installedSize; - SMBByte enabledSize; - SMBByte errorStatus; -} __attribute__((packed)) SMBMemoryModule; - -#define kSMBMemoryModuleSizeNotDeterminable 0x7D -#define kSMBMemoryModuleSizeNotEnabled 0x7E -#define kSMBMemoryModuleSizeNotInstalled 0x7F - -// -// Cache Information (Type 7) -// - -typedef struct SMBCacheInformation { - SMB_STRUCT_HEADER // Type 7 - SMBString socketDesignation; - SMBWord cacheConfiguration; - SMBWord maximumCacheSize; - SMBWord installedSize; - SMBWord supportedSRAMType; - SMBWord currentSRAMType; - SMBByte cacheSpeed; - SMBByte errorCorrectionType; - SMBByte systemCacheType; - SMBByte associativity; -} __attribute__((packed)) SMBCacheInformation; - -typedef struct SMBSystemSlot { - // 2.0+ spec (12 bytes) - SMB_STRUCT_HEADER // Type 9 - SMBString slotDesignation; - SMBByte slotType; - SMBByte slotDataBusWidth; - SMBByte currentUsage; - SMBByte slotLength; - SMBWord slotID; - SMBByte slotCharacteristics1; - // 2.1+ spec (13 bytes) - SMBByte slotCharacteristics2; -} __attribute__((packed)) SMBSystemSlot; - -// -// Physical Memory Array (Type 16) -// - -typedef struct SMBPhysicalMemoryArray { - // 2.1+ spec (15 bytes) - SMB_STRUCT_HEADER // Type 16 - SMBByte physicalLocation; // physical location - SMBByte arrayUse; // the use for the memory array - SMBByte errorCorrection; // error correction/detection method - SMBDWord maximumCapacity; // maximum memory capacity in kilobytes - SMBWord errorHandle; // handle of a previously detected error - SMBWord numMemoryDevices; // number of memory slots or sockets -} __attribute__((packed)) SMBPhysicalMemoryArray; - -// Memory Array - Use -enum { - kSMBMemoryArrayUseOther = 0x01, - kSMBMemoryArrayUseUnknown = 0x02, - kSMBMemoryArrayUseSystemMemory = 0x03, - kSMBMemoryArrayUseVideoMemory = 0x04, - kSMBMemoryArrayUseFlashMemory = 0x05, - kSMBMemoryArrayUseNonVolatileMemory = 0x06, - kSMBMemoryArrayUseCacheMemory = 0x07 -}; - -// Memory Array - Error Correction Types -enum { - kSMBMemoryArrayErrorCorrectionTypeOther = 0x01, - kSMBMemoryArrayErrorCorrectionTypeUnknown = 0x02, - kSMBMemoryArrayErrorCorrectionTypeNone = 0x03, - kSMBMemoryArrayErrorCorrectionTypeParity = 0x04, - kSMBMemoryArrayErrorCorrectionTypeSingleBitECC = 0x05, - kSMBMemoryArrayErrorCorrectionTypeMultiBitECC = 0x06, - kSMBMemoryArrayErrorCorrectionTypeCRC = 0x07 -}; - -// -// Memory Device (Type 17) -// - -typedef struct SMBMemoryDevice { - // 2.1+ spec (21 bytes) - SMB_STRUCT_HEADER // Type 17 - SMBWord arrayHandle; // handle of the parent memory array - SMBWord errorHandle; // handle of a previously detected error - SMBWord totalWidth; // total width in bits; including ECC bits - SMBWord dataWidth; // data width in bits - SMBWord memorySize; // bit15 is scale, 0 = MB, 1 = KB - SMBByte formFactor; // memory device form factor - SMBByte deviceSet; // parent set of identical memory devices - SMBString deviceLocator; // labeled socket; e.g. "SIMM 3" - SMBString bankLocator; // labeled bank; e.g. "Bank 0" or "A" - SMBByte memoryType; // type of memory - SMBWord memoryTypeDetail; // additional detail on memory type - // 2.3+ spec (27 bytes) - SMBWord memorySpeed; // speed of device in MHz (0 for unknown) - SMBString manufacturer; - SMBString serialNumber; - SMBString assetTag; - SMBString partNumber; -} __attribute__((packed)) SMBMemoryDevice; - -// -// Firmware Volume Description (Apple Specific - Type 128) -// - -enum { - FW_REGION_RESERVED = 0, - FW_REGION_RECOVERY = 1, - FW_REGION_MAIN = 2, - FW_REGION_NVRAM = 3, - FW_REGION_CONFIG = 4, - FW_REGION_DIAGVAULT = 5, - - NUM_FLASHMAP_ENTRIES = 8 -}; - -typedef struct FW_REGION_INFO -{ - SMBDWord StartAddress; - SMBDWord EndAddress; -} __attribute__((packed)) FW_REGION_INFO; - -typedef struct SMBFirmwareVolume { - SMB_STRUCT_HEADER // Type 128 - SMBByte RegionCount; - SMBByte Reserved[3]; - SMBDWord FirmwareFeatures; - SMBDWord FirmwareFeaturesMask; - SMBByte RegionType[ NUM_FLASHMAP_ENTRIES ]; - FW_REGION_INFO FlashMap[ NUM_FLASHMAP_ENTRIES ]; -} __attribute__((packed)) SMBFirmwareVolume; - -// -// Memory SPD Data (Apple Specific - Type 130) -// - -typedef struct SMBMemorySPD { - SMB_STRUCT_HEADER // Type 130 - SMBWord Type17Handle; - SMBWord Offset; - SMBWord Size; - SMBWord Data[]; -} __attribute__((packed)) SMBMemorySPD; - -static const char * -SMBMemoryDeviceTypes[] = -{ - "RAM", /* 00h Undefined */ - "RAM", /* 01h Other */ - "RAM", /* 02h Unknown */ - "DRAM", /* 03h DRAM */ - "EDRAM", /* 04h EDRAM */ - "VRAM", /* 05h VRAM */ - "SRAM", /* 06h SRAM */ - "RAM", /* 07h RAM */ - "ROM", /* 08h ROM */ - "FLASH", /* 09h FLASH */ - "EEPROM", /* 0Ah EEPROM */ - "FEPROM", /* 0Bh FEPROM */ - "EPROM", /* 0Ch EPROM */ - "CDRAM", /* 0Dh CDRAM */ - "3DRAM", /* 0Eh 3DRAM */ - "SDRAM", /* 0Fh SDRAM */ - "SGRAM", /* 10h SGRAM */ - "RDRAM", /* 11h RDRAM */ - "DDR SDRAM", /* 12h DDR */ - "DDR2 SDRAM", /* 13h DDR2 */ - "DDR2 FB-DIMM", /* 14h DDR2 FB-DIMM */ - "RAM", /* 15h unused */ - "RAM", /* 16h unused */ - "RAM", /* 17h unused */ - "DDR3", /* 18h DDR3, chosen in [5776134] */ -}; - -static const int -kSMBMemoryDeviceTypeCount = sizeof(SMBMemoryDeviceTypes) / - sizeof(SMBMemoryDeviceTypes[0]); - -// -// OEM Processor Type (Apple Specific - Type 131) -// - -typedef struct SMBOemProcessorType { - SMB_STRUCT_HEADER - SMBWord ProcessorType; -} __attribute__((packed)) SMBOemProcessorType; - -// -// OEM Processor Bus Speed (Apple Specific - Type 132) -// -typedef struct SMBOemProcessorBusSpeed { - SMB_STRUCT_HEADER - SMBWord ProcessorBusSpeed; // MT/s unit -} __attribute__((packed)) SMBOemProcessorBusSpeed; - -//---------------------------------------------------------------------------------------------------------- - -/* From Foundation/Efi/Guid/Smbios/SmBios.h */ -/* Modified to wrap Data4 array init with {} */ -#define EFI_SMBIOS_TABLE_GUID {0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d}} - -#define SMBIOS_ORIGINAL 0 -#define SMBIOS_PATCHED 1 - -extern void *getSmbios(int which); -extern void readSMBIOSInfo(SMBEntryPoint *eps); -extern void setupSMBIOSTable(void); - -extern void decodeSMBIOSTable(SMBEntryPoint *eps); - - -#endif /* !__LIBSAIO_SMBIOS_H */ Index: trunk/i386/libsaio/smbios.h =================================================================== --- trunk/i386/libsaio/smbios.h (revision 0) +++ trunk/i386/libsaio/smbios.h (revision 826) @@ -0,0 +1,456 @@ +/* + * Copyright (c) 1998-2009 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#ifndef __LIBSAIO_SMBIOS_H +#define __LIBSAIO_SMBIOS_H + +// +// Based on System Management BIOS Reference Specification v2.5 +// + +typedef uint8_t SMBString; +typedef uint8_t SMBByte; +typedef uint16_t SMBWord; +typedef uint32_t SMBDWord; +typedef uint64_t SMBQWord; + + +typedef struct DMIEntryPoint { + SMBByte anchor[5]; + SMBByte checksum; + SMBWord tableLength; + SMBDWord tableAddress; + SMBWord structureCount; + SMBByte bcdRevision; +} __attribute__((packed)) DMIEntryPoint; + +typedef struct SMBEntryPoint { + SMBByte anchor[4]; + SMBByte checksum; + SMBByte entryPointLength; + SMBByte majorVersion; + SMBByte minorVersion; + SMBWord maxStructureSize; + SMBByte entryPointRevision; + SMBByte formattedArea[5]; + DMIEntryPoint dmi; +} __attribute__((packed)) SMBEntryPoint; + +// +// Header common to all SMBIOS structures +// + +typedef struct SMBStructHeader { + SMBByte type; + SMBByte length; + SMBWord handle; +} __attribute__((packed)) SMBStructHeader; + +#define SMB_STRUCT_HEADER SMBStructHeader header; + +typedef struct SMBAnchor +{ + const SMBStructHeader * header; + const uint8_t * next; + const uint8_t * end; +} SMBAnchor; + +#define SMB_ANCHOR_IS_VALID(x) \ + ((x) && ((x)->header) && ((x)->next) && ((x)->end)) + +#define SMB_ANCHOR_RESET(x) \ + bzero(x, sizeof(typedef struct SMBAnchor)); + +// +// SMBIOS structure types. +// + +enum { + kSMBTypeBIOSInformation = 0, + kSMBTypeSystemInformation = 1, + kSMBTypeBaseBoard = 2, + kSMBTypeSystemEnclosure = 3, + kSMBTypeProcessorInformation = 4, + kSMBTypeMemoryModule = 6, + kSMBTypeCacheInformation = 7, + kSMBTypeSystemSlot = 9, + kSMBTypePhysicalMemoryArray = 16, + kSMBTypeMemoryDevice = 17, + kSMBType32BitMemoryErrorInfo = 18, + kSMBType64BitMemoryErrorInfo = 33, + + kSMBTypeEndOfTable = 127, + + /* Apple Specific Structures */ + kSMBTypeFirmwareVolume = 128, + kSMBTypeMemorySPD = 130, + kSMBTypeOemProcessorType = 131, + kSMBTypeOemProcessorBusSpeed = 132 +}; + +// +// BIOS Information (Type 0) +// +typedef struct SMBBIOSInformation { + SMB_STRUCT_HEADER // Type 0 + SMBString vendor; // BIOS vendor name + SMBString version; // BIOS version + SMBWord startSegment; // BIOS segment start + SMBString releaseDate; // BIOS release date + SMBByte romSize; // (n); 64K * (n+1) bytes + SMBQWord characteristics; // supported BIOS functions +} __attribute__((packed)) SMBBIOSInformation; + +// +// System Information (Type 1) +// + +typedef struct SMBSystemInformation { + // 2.0+ spec (8 bytes) + SMB_STRUCT_HEADER // Type 1 + SMBString manufacturer; + SMBString productName; + SMBString version; + SMBString serialNumber; + // 2.1+ spec (25 bytes) + SMBByte uuid[16]; // can be all 0 or all 1's + SMBByte wakeupReason; // reason for system wakeup + // 2.4+ spec (27 bytes) + SMBString skuNumber; + SMBString family; +} __attribute__((packed)) SMBSystemInformation; + +// +// Base Board (Type 2) +// + +typedef struct SMBBaseBoard { + SMB_STRUCT_HEADER // Type 2 + SMBString manufacturer; + SMBString product; + SMBString version; + SMBString serialNumber; + SMBString assetTagNumber; + SMBByte featureFlags; + SMBString locationInChassis; + SMBWord chassisHandle; + SMBByte boardType; + SMBByte numberOfContainedHandles; + // 0 - 255 contained handles go here but we do not include + // them in our structure. Be careful to use numberOfContainedHandles + // times sizeof(SMBWord) when computing the actual record size, + // if you need it. +} __attribute__((packed)) SMBBaseBoard; + +// Values for boardType in Type 2 records +enum { + kSMBBaseBoardUnknown = 0x01, + kSMBBaseBoardOther = 0x02, + kSMBBaseBoardServerBlade = 0x03, + kSMBBaseBoardConnectivitySwitch = 0x04, + kSMBBaseBoardSystemMgmtModule = 0x05, + kSMBBaseBoardProcessorModule = 0x06, + kSMBBaseBoardIOModule = 0x07, + kSMBBaseBoardMemoryModule = 0x08, + kSMBBaseBoardDaughter = 0x09, + kSMBBaseBoardMotherboard = 0x0A, + kSMBBaseBoardProcessorMemoryModule = 0x0B, + kSMBBaseBoardProcessorIOModule = 0x0C, + kSMBBaseBoardInterconnect = 0x0D, +}; + + +// +// System Enclosure (Type 3) +// + +typedef struct SMBSystemEnclosure { + SMB_STRUCT_HEADER // Type 3 + SMBString manufacturer; + SMBByte type; + SMBString version; + SMBString serialNumber; + SMBString assetTagNumber; + SMBByte bootupState; + SMBByte powerSupplyState; + SMBByte thermalState; + SMBByte securityStatus; + SMBDWord oemDefined; +} __attribute__((packed)) SMBSystemEnclosure; + +// +// Processor Information (Type 4) +// + +typedef struct SMBProcessorInformation { + // 2.0+ spec (26 bytes) + SMB_STRUCT_HEADER // Type 4 + SMBString socketDesignation; + SMBByte processorType; // CPU = 3 + SMBByte processorFamily; // processor family enum + SMBString manufacturer; + SMBQWord processorID; // based on CPUID + SMBString processorVersion; + SMBByte voltage; // bit7 cleared indicate legacy mode + SMBWord externalClock; // external clock in MHz + SMBWord maximumClock; // max internal clock in MHz + SMBWord currentClock; // current internal clock in MHz + SMBByte status; + SMBByte processorUpgrade; // processor upgrade enum + // 2.1+ spec (32 bytes) + SMBWord L1CacheHandle; + SMBWord L2CacheHandle; + SMBWord L3CacheHandle; + // 2.3+ spec (35 bytes) + SMBString serialNumber; + SMBString assetTag; + SMBString partNumber; +} __attribute__((packed)) SMBProcessorInformation; + +#define kSMBProcessorInformationMinSize 26 + +// +// Memory Module Information (Type 6) +// Obsoleted since SMBIOS version 2.1 +// + +typedef struct SMBMemoryModule { + SMB_STRUCT_HEADER // Type 6 + SMBString socketDesignation; + SMBByte bankConnections; + SMBByte currentSpeed; + SMBWord currentMemoryType; + SMBByte installedSize; + SMBByte enabledSize; + SMBByte errorStatus; +} __attribute__((packed)) SMBMemoryModule; + +#define kSMBMemoryModuleSizeNotDeterminable 0x7D +#define kSMBMemoryModuleSizeNotEnabled 0x7E +#define kSMBMemoryModuleSizeNotInstalled 0x7F + +// +// Cache Information (Type 7) +// + +typedef struct SMBCacheInformation { + SMB_STRUCT_HEADER // Type 7 + SMBString socketDesignation; + SMBWord cacheConfiguration; + SMBWord maximumCacheSize; + SMBWord installedSize; + SMBWord supportedSRAMType; + SMBWord currentSRAMType; + SMBByte cacheSpeed; + SMBByte errorCorrectionType; + SMBByte systemCacheType; + SMBByte associativity; +} __attribute__((packed)) SMBCacheInformation; + +typedef struct SMBSystemSlot { + // 2.0+ spec (12 bytes) + SMB_STRUCT_HEADER // Type 9 + SMBString slotDesignation; + SMBByte slotType; + SMBByte slotDataBusWidth; + SMBByte currentUsage; + SMBByte slotLength; + SMBWord slotID; + SMBByte slotCharacteristics1; + // 2.1+ spec (13 bytes) + SMBByte slotCharacteristics2; +} __attribute__((packed)) SMBSystemSlot; + +// +// Physical Memory Array (Type 16) +// + +typedef struct SMBPhysicalMemoryArray { + // 2.1+ spec (15 bytes) + SMB_STRUCT_HEADER // Type 16 + SMBByte physicalLocation; // physical location + SMBByte arrayUse; // the use for the memory array + SMBByte errorCorrection; // error correction/detection method + SMBDWord maximumCapacity; // maximum memory capacity in kilobytes + SMBWord errorHandle; // handle of a previously detected error + SMBWord numMemoryDevices; // number of memory slots or sockets +} __attribute__((packed)) SMBPhysicalMemoryArray; + +// Memory Array - Use +enum { + kSMBMemoryArrayUseOther = 0x01, + kSMBMemoryArrayUseUnknown = 0x02, + kSMBMemoryArrayUseSystemMemory = 0x03, + kSMBMemoryArrayUseVideoMemory = 0x04, + kSMBMemoryArrayUseFlashMemory = 0x05, + kSMBMemoryArrayUseNonVolatileMemory = 0x06, + kSMBMemoryArrayUseCacheMemory = 0x07 +}; + +// Memory Array - Error Correction Types +enum { + kSMBMemoryArrayErrorCorrectionTypeOther = 0x01, + kSMBMemoryArrayErrorCorrectionTypeUnknown = 0x02, + kSMBMemoryArrayErrorCorrectionTypeNone = 0x03, + kSMBMemoryArrayErrorCorrectionTypeParity = 0x04, + kSMBMemoryArrayErrorCorrectionTypeSingleBitECC = 0x05, + kSMBMemoryArrayErrorCorrectionTypeMultiBitECC = 0x06, + kSMBMemoryArrayErrorCorrectionTypeCRC = 0x07 +}; + +// +// Memory Device (Type 17) +// + +typedef struct SMBMemoryDevice { + // 2.1+ spec (21 bytes) + SMB_STRUCT_HEADER // Type 17 + SMBWord arrayHandle; // handle of the parent memory array + SMBWord errorHandle; // handle of a previously detected error + SMBWord totalWidth; // total width in bits; including ECC bits + SMBWord dataWidth; // data width in bits + SMBWord memorySize; // bit15 is scale, 0 = MB, 1 = KB + SMBByte formFactor; // memory device form factor + SMBByte deviceSet; // parent set of identical memory devices + SMBString deviceLocator; // labeled socket; e.g. "SIMM 3" + SMBString bankLocator; // labeled bank; e.g. "Bank 0" or "A" + SMBByte memoryType; // type of memory + SMBWord memoryTypeDetail; // additional detail on memory type + // 2.3+ spec (27 bytes) + SMBWord memorySpeed; // speed of device in MHz (0 for unknown) + SMBString manufacturer; + SMBString serialNumber; + SMBString assetTag; + SMBString partNumber; +} __attribute__((packed)) SMBMemoryDevice; + +// +// Firmware Volume Description (Apple Specific - Type 128) +// + +enum { + FW_REGION_RESERVED = 0, + FW_REGION_RECOVERY = 1, + FW_REGION_MAIN = 2, + FW_REGION_NVRAM = 3, + FW_REGION_CONFIG = 4, + FW_REGION_DIAGVAULT = 5, + + NUM_FLASHMAP_ENTRIES = 8 +}; + +typedef struct FW_REGION_INFO +{ + SMBDWord StartAddress; + SMBDWord EndAddress; +} __attribute__((packed)) FW_REGION_INFO; + +typedef struct SMBFirmwareVolume { + SMB_STRUCT_HEADER // Type 128 + SMBByte RegionCount; + SMBByte Reserved[3]; + SMBDWord FirmwareFeatures; + SMBDWord FirmwareFeaturesMask; + SMBByte RegionType[ NUM_FLASHMAP_ENTRIES ]; + FW_REGION_INFO FlashMap[ NUM_FLASHMAP_ENTRIES ]; +} __attribute__((packed)) SMBFirmwareVolume; + +// +// Memory SPD Data (Apple Specific - Type 130) +// + +typedef struct SMBMemorySPD { + SMB_STRUCT_HEADER // Type 130 + SMBWord Type17Handle; + SMBWord Offset; + SMBWord Size; + SMBWord Data[]; +} __attribute__((packed)) SMBMemorySPD; + +static const char * +SMBMemoryDeviceTypes[] = +{ + "RAM", /* 00h Undefined */ + "RAM", /* 01h Other */ + "RAM", /* 02h Unknown */ + "DRAM", /* 03h DRAM */ + "EDRAM", /* 04h EDRAM */ + "VRAM", /* 05h VRAM */ + "SRAM", /* 06h SRAM */ + "RAM", /* 07h RAM */ + "ROM", /* 08h ROM */ + "FLASH", /* 09h FLASH */ + "EEPROM", /* 0Ah EEPROM */ + "FEPROM", /* 0Bh FEPROM */ + "EPROM", /* 0Ch EPROM */ + "CDRAM", /* 0Dh CDRAM */ + "3DRAM", /* 0Eh 3DRAM */ + "SDRAM", /* 0Fh SDRAM */ + "SGRAM", /* 10h SGRAM */ + "RDRAM", /* 11h RDRAM */ + "DDR SDRAM", /* 12h DDR */ + "DDR2 SDRAM", /* 13h DDR2 */ + "DDR2 FB-DIMM", /* 14h DDR2 FB-DIMM */ + "RAM", /* 15h unused */ + "RAM", /* 16h unused */ + "RAM", /* 17h unused */ + "DDR3", /* 18h DDR3, chosen in [5776134] */ +}; + +static const int +kSMBMemoryDeviceTypeCount = sizeof(SMBMemoryDeviceTypes) / + sizeof(SMBMemoryDeviceTypes[0]); + +// +// OEM Processor Type (Apple Specific - Type 131) +// + +typedef struct SMBOemProcessorType { + SMB_STRUCT_HEADER + SMBWord ProcessorType; +} __attribute__((packed)) SMBOemProcessorType; + +// +// OEM Processor Bus Speed (Apple Specific - Type 132) +// +typedef struct SMBOemProcessorBusSpeed { + SMB_STRUCT_HEADER + SMBWord ProcessorBusSpeed; // MT/s unit +} __attribute__((packed)) SMBOemProcessorBusSpeed; + +//---------------------------------------------------------------------------------------------------------- + +/* From Foundation/Efi/Guid/Smbios/SmBios.h */ +/* Modified to wrap Data4 array init with {} */ +#define EFI_SMBIOS_TABLE_GUID {0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d}} + +#define SMBIOS_ORIGINAL 0 +#define SMBIOS_PATCHED 1 + +extern void *getSmbios(int which); +extern void readSMBIOSInfo(SMBEntryPoint *eps); +extern void setupSMBIOSTable(void); + +extern void decodeSMBIOSTable(SMBEntryPoint *eps); + + +#endif /* !__LIBSAIO_SMBIOS_H */ Property changes on: trunk/i386/libsaio/smbios.h ___________________________________________________________________ Added: svn:mergeinfo Merged /branches/rekursor/i386/libsaio/SMBIOS.h:r3-22