Index: branches/Bungo/i386/libsaio/console.c =================================================================== --- branches/Bungo/i386/libsaio/console.c (revision 2352) +++ branches/Bungo/i386/libsaio/console.c (revision 2353) @@ -91,7 +91,7 @@ msgbuf = malloc(BOOTER_LOG_SIZE); bzero(msgbuf, BOOTER_LOG_SIZE); cursor = msgbuf; - msglog("%s\n", "Chameleon " I386BOOT_CHAMELEONVERSION " (svn-r" I386BOOT_CHAMELEONREVISION ")" " [" I386BOOT_BUILDDATE "]"); + msglog("%s\n", "Chameleon " I386BOOT_CHAMELEONVERSION " (Bungo branch) r" I386BOOT_CHAMELEONREVISION " [" I386BOOT_BUILDDATE "]"); } void msglog(const char * fmt, ...) Index: branches/Bungo/i386/libsaio/smbios.c =================================================================== --- branches/Bungo/i386/libsaio/smbios.c (revision 2352) +++ branches/Bungo/i386/libsaio/smbios.c (revision 2353) @@ -81,14 +81,14 @@ /* ============================ Processor Information (Type 4) ============================== */ -// Bungo +// Bungo: #define kSMBProcessorInformationSocketKey "SMcpusocket" #define kSMBProcessorInformationManufacturerKey "SMcpumanufacturer" #define kSMBProcessorInformationVersionKey "SMcpuversion" // #define kSMBProcessorInformationExternalClockKey "SMexternalclock" -#define kSMBProcessorInformationMaximumClockKey "SMmaximalclock" -// Bungo +#define kSMBProcessorInformationMaximalClockKey "SMmaximalclock" +// Bungo: #define kSMBProcessorInformationCurrentClockKey "SMcurrentclock" #define kSMBProcessorInformationUpgradeKey "SMcpuupgrade" #define kSMBProcessorInformationSerialNumberKey "SMcpuserial" @@ -105,6 +105,8 @@ #define kSMBMemoryDeviceManufacturerKey "SMmemmanufacturer" // #define kSMBMemoryDeviceSerialNumberKey "SMmemserial" // #define kSMBMemoryDevicePartNumberKey "SMmempart" // +// Bungo: +#define kSMBMemoryDeviceAssetTagKey "SMmemassettag" // /* =========================================== Memory SPD Data (Apple Specific - Type 130) @@ -181,6 +183,7 @@ char *version; char *serialNumber; char *assetTag; // Bungo: renamed folowing convention + char *skuNumber; } defaultChassis_t; defaultChassis_t defaultChassis; @@ -188,7 +191,7 @@ typedef struct { uint8_t type; - SMBValueType valueType; + SMBValueType valueType; uint8_t fieldOffset; char *keyString; bool (*getSMBValue)(returnType *); @@ -199,7 +202,7 @@ { /* ======================= BIOS Information (Type 0) - ========================= */ + =========================*/ { kSMBTypeBIOSInformation, kSMBString, getFieldOffset(SMBBIOSInformation, vendor), kSMBBIOSInformationVendorKey, NULL, &defaultBIOSInfo.vendor }, // SMbiosvendor - Apple Inc. @@ -227,13 +230,13 @@ {kSMBTypeSystemInformation, kSMBString, getFieldOffset(SMBSystemInformation, serialNumber), kSMBSystemInformationSerialNumberKey, NULL, &defaultSystemInfo.serialNumber }, // SMserial - Serial number - -/* {kSMBTypeSystemInformation, kSMBByte, getFieldOffset(SMBSystemInformation, uuid[16]), - NULL, NULL, NULL}, // SmUUID/ - + /* Bungo: + {kSMBTypeSystemInformation, kSMBByte, getFieldOffset(SMBSystemInformation, uuid), + kSMBSystemInformationUUIDKey, NULL, NULL}, // SMsystemuuid + {kSMBTypeSystemInformation, kSMBByte, getFieldOffset(SMBSystemInformation, wakeupReason), NULL, NULL, NULL}, // reason for system wakeup -*/ + */ // Bungo {kSMBTypeSystemInformation, kSMBString, getFieldOffset(SMBSystemInformation, skuNumber), @@ -292,6 +295,9 @@ {kSMBTypeSystemEnclosure, kSMBString, getFieldOffset(SMBSystemEnclosure, assetTag), kSMBSystemEnclosureAssetTagKey, NULL, &defaultChassis.assetTag }, // SMchassisassettag - Pro Enclosure + /* {kSMBTypeSystemEnclosure, kSMBString, getFieldOffset(SMBSystemEnclosure, skuNumber), NULL, NULL, &defaultChassis.skuNumber }, + */ + /* ============================ Processor Information (Type 4) ============================== */ @@ -308,8 +314,7 @@ kSMBProcessorInformationExternalClockKey, getProcessorInformationExternalClock, NULL}, // SMcpuexternalclock {kSMBTypeProcessorInformation, kSMBWord, getFieldOffset(SMBProcessorInformation, maximumClock), - kSMBProcessorInformationMaximumClockKey, getProcessorInformationMaximumClock, NULL}, // SMcpumaxspeed - + kSMBProcessorInformationMaximalClockKey, getProcessorInformationMaximumClock, NULL}, // SMcpumaximumclock // Bungo {kSMBTypeProcessorInformation, kSMBWord, getFieldOffset(SMBProcessorInformation, currentClock), kSMBProcessorInformationCurrentClockKey, NULL, NULL}, // SMcpucurrentspeed @@ -317,16 +322,13 @@ {kSMBTypeProcessorInformation, kSMBByte, getFieldOffset(SMBProcessorInformation, processorUpgrade), kSMBProcessorInformationUpgradeKey, NULL, NULL}, // SMcpuupgrade // - {kSMBTypeProcessorInformation, kSMBString, getFieldOffset(SMBProcessorInformation, serialNumber), kSMBProcessorInformationSerialNumberKey, NULL, NULL}, // Bungo {kSMBTypeProcessorInformation, kSMBString, getFieldOffset(SMBProcessorInformation, assetTag), kSMBProcessorInformationAssetTagKey, NULL, NULL}, // SMcpuassettag - // - {kSMBTypeProcessorInformation, kSMBString, getFieldOffset(SMBProcessorInformation, partNumber), kSMBProcessorInformationPartNumberKey, NULL, NULL}, @@ -352,14 +354,13 @@ kSMBMemoryDeviceSerialNumberKey, getSMBMemoryDeviceSerialNumber, NULL}, {kSMBTypeMemoryDevice, kSMBString, getFieldOffset(SMBMemoryDevice, assetTag), - NULL, NULL, NULL}, + kSMBMemoryDeviceAssetTagKey, NULL, NULL}, {kSMBTypeMemoryDevice, kSMBWord, getFieldOffset(SMBMemoryDevice, errorHandle), NULL, getSMBMemoryDeviceMemoryErrorHandle, NULL}, {kSMBTypeMemoryDevice, kSMBString, getFieldOffset(SMBMemoryDevice, partNumber), kSMBMemoryDevicePartNumberKey, getSMBMemoryDevicePartNumber, NULL}, - // //------------------------------------------------------------------------------------------------------------------------- // Apple Specific @@ -382,8 +383,8 @@ static uint8_t stringIndex; // increament when a string is added and set the field value accordingly static uint8_t stringsSize; // add string size -static SMBWord tableLength = 0; -static SMBWord handle = 0; +static SMBWord tableLength = 0; +static SMBWord handle = 0; static SMBWord maxStructSize = 0; static SMBWord structureCount = 0; @@ -585,6 +586,7 @@ defaultChassis.manufacturer = kDefaultVendorManufacturer; defaultChassis.serialNumber = kDefaultSerialNumber; defaultChassis.assetTag = kDefaultAssetTag; + defaultChassis.skuNumber = kDefaultSkuNumber; // if (platformCPUFeature(CPU_FEATURE_MOBILE)) Bungo: doesn't recognise correctly if (PlatformType == 2) // this method works @@ -689,10 +691,10 @@ break; default: - defaultBIOSInfo.version = kDefaultMacProBIOSVersion; - defaultBIOSInfo.releaseDate = kDefaultMacProBIOSReleaseDate; - defaultSystemInfo.productName = kDefaultMacPro; - defaultSystemInfo.family = kDefaultMacProFamily; + defaultBIOSInfo.version = kDefaultMacProBIOSVersion; + defaultBIOSInfo.releaseDate = kDefaultMacProBIOSReleaseDate; + defaultSystemInfo.productName = kDefaultMacPro; + defaultSystemInfo.family = kDefaultMacProFamily; defaultBaseBoard.product = kDefaultMacProBoardProduct; defaultBaseBoard.boardType = kSMBBaseBoardMotherboard; defaultChassis.chassisType = kSMBchassisUnknown; @@ -701,10 +703,10 @@ break; } default: - defaultBIOSInfo.version = kDefaultMacProBIOSVersion; - defaultBIOSInfo.releaseDate = kDefaultMacProBIOSReleaseDate; - defaultSystemInfo.productName = kDefaultMacPro; - defaultSystemInfo.family = kDefaultMacProFamily; + defaultBIOSInfo.version = kDefaultMacProBIOSVersion; + defaultBIOSInfo.releaseDate = kDefaultMacProBIOSReleaseDate; + defaultSystemInfo.productName = kDefaultMacPro; + defaultSystemInfo.family = kDefaultMacProFamily; defaultBaseBoard.product = kDefaultMacProBoardProduct; defaultBaseBoard.boardType = kSMBBaseBoardMotherboard; defaultChassis.chassisType = kSMBchassisUnknown; @@ -771,12 +773,13 @@ } strSize = strlen(string); - + + /* What was this for? // remove any spaces found at the end while ((strSize != 0) && (string[strSize - 1] == ' ')) { strSize--; } - + */ if (strSize == 0) { *field = 0; return; @@ -989,13 +992,12 @@ void setSMBStruct(SMBStructPtrs *structPtr) { - bool setterFound = false; - - uint8_t *ptr; - SMBWord structSize; - int i; - - /* http://forge.voodooprojects.org/p/chameleon/issues/361/ */ + bool setterFound = false; + uint8_t *ptr; + SMBWord structSize; + int i; + /* Bungo: not needed because of tables lengths fix in next lines + // http://forge.voodooprojects.org/p/chameleon/issues/361/ bool forceFullMemInfo = false; if (structPtr->orig->type == kSMBTypeMemoryDevice) { @@ -1003,7 +1005,7 @@ if (forceFullMemInfo) { structPtr->orig->length = 27; } - } + } */ stringIndex = 1; stringsSize = 0; @@ -1011,18 +1013,53 @@ if (handle < structPtr->orig->handle) { handle = structPtr->orig->handle; } - - memcpy((void *)structPtr->new, structPtr->orig, structPtr->orig->length); - + // Bungo: fix unsuported tables lengths from original smbios: extend smaller or truncate bigger + switch (structPtr->orig->type) { + case kSMBTypeBIOSInformation: + structSize = sizeof(SMBBIOSInformation); + break; + case kSMBTypeSystemInformation: + structSize = sizeof(SMBSystemInformation); + break; + case kSMBTypeBaseBoard: + structSize = sizeof(SMBBaseBoard); + break; + case kSMBTypeSystemEnclosure: + structSize = sizeof(SMBSystemEnclosure); + break; + case kSMBTypeProcessorInformation: + structSize = sizeof(SMBProcessorInformation); + break; + case kSMBTypeMemoryDevice: + structSize = sizeof(SMBMemoryDevice); + break; + default: + structSize = structPtr->orig->length; // don't change if not to patch + break; + } + + // memcpy((void *)structPtr->new, structPtr->orig, structPtr->orig->length); + if (structPtr->orig->length <= structSize) { + memcpy((void *)structPtr->new, structPtr->orig, structPtr->orig->length); + } else { + memcpy((void *)structPtr->new, structPtr->orig, structSize); + } + + structPtr->new->length = structSize; + for (i = 0; i < numOfSetters; i++) { - if ((structPtr->orig->type == SMBSetters[i].type) && (SMBSetters[i].fieldOffset < structPtr->orig->length)) { + // Bungo: + //if ((structPtr->orig->type == SMBSetters[i].type) && (SMBSetters[i].fieldOffset < structPtr->orig->length)) { + if ((structPtr->orig->type == SMBSetters[i].type) && (SMBSetters[i].fieldOffset < structSize)) { setterFound = true; setSMBValue(structPtr, i, (returnType *)((uint8_t *)structPtr->new + SMBSetters[i].fieldOffset)); } } - + if (setterFound) { - ptr = (uint8_t *)structPtr->new + structPtr->orig->length; + // Bungo: + // ptr = (uint8_t *)structPtr->new + structPtr->orig->length; + ptr = (uint8_t *)structPtr->new + structPtr->new->length; for (; ((uint16_t *)ptr)[0] != 0; ptr++); if (((uint16_t *)ptr)[0] == 0) { Index: branches/Bungo/i386/libsaio/smbios_decode.c =================================================================== --- branches/Bungo/i386/libsaio/smbios_decode.c (revision 2352) +++ branches/Bungo/i386/libsaio/smbios_decode.c (revision 2353) @@ -21,35 +21,19 @@ #define DBG(x...) msglog(x) #endif -static SMBByte minorVersion; // SMBIOS rev. minor -// Bungo: -static SMBByte majorVersion; // SMBIOS rev. major -static SMBByte bcdRevisionLo; // DMI rev. minor -static SMBByte bcdRevisionHi; // DMI rev. major - extern char *getSMBStringForField(SMBStructHeader *structHeader, uint8_t field); - // Bungo: -#define NotSpecifiedStr "Not Specified" // no string -#define OutOfSpecStr "" // value out of smbios spec. range -#define PrivateStr "** PRIVATE **" // masking private data -#define alwaysMask true -#define neverMask false -static bool privateData = true; +#define NotSpecifiedStr "Not Specified" // no string +#define OutOfSpecStr "" // value out of smbios spec. range +#define PrivateStr "** PRIVATE **" // masking private data +#define neverMask false -char *SMBStringForField(SMBStructHeader *structHeader, uint8_t field, const bool mask) // Bungo: fixes random string readout if null in smbios to "Not Specified" as dmidecode displays -{ - char *str = NULL; - str = getSMBStringForField(structHeader, field); - if (!field) { - str = NotSpecifiedStr; - } else if (mask) { - str = PrivateStr; - } +static bool privateData = true; +static SMBByte minorVersion; // SMBIOS rev. minor +static SMBByte majorVersion; // SMBIOS rev. major +static SMBByte bcdRevisionLo; // DMI rev. minor +static SMBByte bcdRevisionHi; // DMI rev. major - return str; -}; - /*==== 7.2.2 ===*/ @@ -123,11 +107,24 @@ }; /*==== + 7.5.1 + ===*/ +static const char *SMBProcessorTypes[] = // Bungo: strings for processor type (Table Type 4 - Processor Information) +{ + "Other", /* 01h */ + "Unknown", /* 02h */ + "Central Processor", /* 03h */ + "Math Processor", /* 04h */ + "DSP Processor", /* 05h */ + "Video Processor" /* 06h */ +}; + +/*==== 7.5.5 ===*/ -/*static const char *SMBCpuSocket[] = // ErmaC: strings for (Table Type 4 - Processor Information ) +static const char *SMBProcessorUpgrades[] = // ErmaC: strings for processor upgrade (Table Type 4 - Processor Information) { - "Other", // 01h + "Other", // 01h "Unknown", "Daughter Board", "ZIF Socket", @@ -170,8 +167,8 @@ "Socket FM1", "Socket FM2", "Socket LGA2011-3", - "Socket LGA1356-3" // 2Ch -};*/ + "Socket LGA1356-3" // 2Ch +}; /*===== 7.18.2 @@ -200,97 +197,106 @@ "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] */ - "FBD2" /* 19h FBD2 */ + "RAM", /* 15h unused */ + "RAM", /* 16h unused */ + "RAM", /* 17h unused */ + "DDR3", /* 18h DDR3, chosen in [5776134] */ + "FBD2" /* 19h FBD2 */ }; static const int kSMBMemoryDeviceTypeCount = sizeof(SMBMemoryDeviceTypes) / sizeof(SMBMemoryDeviceTypes[0]); +// Bungo: fixes random string readout if null in smbios to "Not Specified" as dmidecode displays +char *SMBStringForField(SMBStructHeader *structHeader, uint8_t field, const bool mask) +{ + char *str = NULL; + str = getSMBStringForField(structHeader, field); + if (!field) { + str = NotSpecifiedStr; + } + else if (mask) { + str = PrivateStr; + } + + return str; +}; + +void printHeader(SMBStructHeader *structHeader) +{ + DBG("Type: %d, Length: %d, Handle: 0x%04x\n", structHeader->type, structHeader->length, structHeader->handle); +} + //------------------------------------------------------------------------------------------------------------------------- // BIOS Information (Type 0) //------------------------------------------------------------------------------------------------------------------------- -void decodeBIOSInformation(SMBBIOSInformation *structHeader) +void decodeBIOSInformation(SMBStructHeader *structHeader) { + printHeader(structHeader); DBG("BIOS Information:\n"); - DBG("\tVendor: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->vendor, neverMask)); - DBG("\tVersion: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->version, neverMask)); + DBG("\tVendor: %s\n", SMBStringForField(structHeader, ((SMBBIOSInformation *)structHeader)->vendor, neverMask)); + DBG("\tVersion: %s\n", SMBStringForField(structHeader, ((SMBBIOSInformation *)structHeader)->version, neverMask)); // Address Segment - DBG("\tRelease Date: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->releaseDate, neverMask)); - DBG("\tBIOS Revision: %d.%d\n", structHeader->releaseMajor, structHeader->releaseMinor); + DBG("\tRelease Date: %s\n", SMBStringForField(structHeader, ((SMBBIOSInformation *)structHeader)->releaseDate, neverMask)); + DBG("\tBIOS Revision: %d.%d\n", ((SMBBIOSInformation *)structHeader)->releaseMajor, ((SMBBIOSInformation *)structHeader)->releaseMinor); // ROM Size - //DBG("\tSupported BIOS functions: (0x%llX) %s\n", structHeader->characteristics, SMBBIOSInfoChar0[structHeader->characteristics]); - // Major Release - // Minor Release + // DBG("\tSupported BIOS functions: (0x%llX) %s\n", ((SMBBIOSInformation *)structHeader)->characteristics, SMBBIOSInfoChar0[((SMBBIOSInformation *)structHeader)->characteristics]); // Firmware Major Release // Firmware Minor Release - //SMBByte characteristicsExt1; - //SMBByte characteristicsExt2; + // SMBByte characteristicsExt1; + // SMBByte characteristicsExt2; DBG("\n"); } //------------------------------------------------------------------------------------------------------------------------- // System Information (Type 1) //------------------------------------------------------------------------------------------------------------------------- -void decodeSystemInformation(SMBSystemInformation *structHeader) +void decodeSystemInformation(SMBStructHeader *structHeader) { + printHeader(structHeader); DBG("System Information:\n"); - DBG("\tManufacturer: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->manufacturer, neverMask)); - DBG("\tProduct Name: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->productName, neverMask)); - DBG("\tVersion: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->version, neverMask)); - DBG("\tSerial Number: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->serialNumber, privateData)); - - if (minorVersion < 1 || structHeader->header.length < 25) { - return; - } - - uint8_t *uuid = structHeader->uuid; - if (uuid) { - if (privateData) { - DBG("\tUUID: %s\n", PrivateStr); - } else { - DBG("\tUUID: %02X%02X%02X%02X-%02X%02X-%02X%02X-%02x%02X-%02X%02X%02X%02X%02X%02X\n", - uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], uuid[6], uuid[7], - uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); - } - } - - if (structHeader->wakeupReason > 8) { + DBG("\tManufacturer: %s\n", SMBStringForField(structHeader, ((SMBSystemInformation *)structHeader)->manufacturer, neverMask)); + DBG("\tProduct Name: %s\n", SMBStringForField(structHeader, ((SMBSystemInformation *)structHeader)->productName, neverMask)); + DBG("\tVersion: %s\n", SMBStringForField(structHeader, ((SMBSystemInformation *)structHeader)->version, neverMask)); + DBG("\tSerial Number: %s\n", SMBStringForField(structHeader, ((SMBSystemInformation *)structHeader)->serialNumber, privateData)); + uint8_t *uuid = ((SMBSystemInformation *)structHeader)->uuid; + if (privateData) { + DBG("\tUUID: %s\n", PrivateStr); + } else { + DBG("\tUUID: %02X%02X%02X%02X-%02X%02X-%02X%02X-%02x%02X-%02X%02X%02X%02X%02X%02X\n", + uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], uuid[6], uuid[7], + uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); + } + if (((SMBSystemInformation *)structHeader)->wakeupReason > 8) { DBG("\tWake-up Type: %s\n", OutOfSpecStr); } else { - DBG("\tWake-up Type: %s\n", SMBWakeUpTypes[structHeader->wakeupReason]); - } - if (minorVersion < 4 || structHeader->header.length < 27) { - return; - } - - DBG("\tSKU Number: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->skuNumber, neverMask)); // System SKU# - DBG("\tFamily: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->family, neverMask)); + DBG("\tWake-up Type: %s\n", SMBWakeUpTypes[((SMBSystemInformation *)structHeader)->wakeupReason]); + } + DBG("\tSKU Number: %s\n", SMBStringForField(structHeader, ((SMBSystemInformation *)structHeader)->skuNumber, neverMask)); // System SKU# + DBG("\tFamily: %s\n", SMBStringForField(structHeader, ((SMBSystemInformation *)structHeader)->family, neverMask)); DBG("\n"); } //------------------------------------------------------------------------------------------------------------------------- // Base Board (or Module) Information (Type 2) //------------------------------------------------------------------------------------------------------------------------- -void decodeBaseBoard(SMBBaseBoard *structHeader) +void decodeBaseBoard(SMBStructHeader *structHeader) { + printHeader(structHeader); DBG("Base Board Information:\n"); - DBG("\tManufacturer: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->manufacturer, neverMask)); - DBG("\tProduct Name: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->product, neverMask)); - DBG("\tVersion: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->version, neverMask)); - DBG("\tSerial Number: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->serialNumber, privateData)); - DBG("\tAsset Tag: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->assetTag, neverMask)); + DBG("\tManufacturer: %s\n", SMBStringForField(structHeader, ((SMBBaseBoard *)structHeader)->manufacturer, neverMask)); + DBG("\tProduct Name: %s\n", SMBStringForField(structHeader, ((SMBBaseBoard *)structHeader)->product, neverMask)); + DBG("\tVersion: %s\n", SMBStringForField(structHeader, ((SMBBaseBoard *)structHeader)->version, neverMask)); + DBG("\tSerial Number: %s\n", SMBStringForField(structHeader, ((SMBBaseBoard *)structHeader)->serialNumber, privateData)); + DBG("\tAsset Tag: %s\n", SMBStringForField(structHeader, ((SMBBaseBoard *)structHeader)->assetTag, neverMask)); // Feature Flags (BYTE) - DBG("\tLocation In Chassis: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->locationInChassis, neverMask)); // Part Component + DBG("\tLocation In Chassis: %s\n", SMBStringForField(structHeader, ((SMBBaseBoard *)structHeader)->locationInChassis, neverMask)); // Part Component // Chassis Handle (WORD) - if ((structHeader->boardType < kSMBBaseBoardUnknown) || (structHeader->boardType > kSMBBaseBoardInterconnect)) { + if ((((SMBBaseBoard *)structHeader)->boardType < kSMBBaseBoardUnknown) || (((SMBBaseBoard *)structHeader)->boardType > kSMBBaseBoardInterconnect)) { DBG("\tType: %s\n", OutOfSpecStr); } else { - DBG("\tType: %s\n", SMBBaseBoardTypes[(structHeader->boardType - 1)]); - } + DBG("\tType: %s\n", SMBBaseBoardTypes[(((SMBBaseBoard *)structHeader)->boardType - 1)]); + } // Number of Contained Object Handles (n) (BYTE) // Contained Object Handles n(WORDs) DBG("\n"); @@ -299,19 +305,19 @@ //------------------------------------------------------------------------------------------------------------------------- // System Enclosure or Chassis (Type 3) //------------------------------------------------------------------------------------------------------------------------- -void decodeSystemEnclosure(SMBSystemEnclosure *structHeader) +void decodeSystemEnclosure(SMBStructHeader *structHeader) { + printHeader(structHeader); DBG("Chassis Information:\n"); - DBG("\tManufacturer: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->manufacturer, neverMask)); - // DBG("\tType: 0x%X\n", structHeader->chassisType); - if ((structHeader->chassisType < kSMBchassisOther) || (structHeader->chassisType > kSMBchassisBladeEnclosing)) { + DBG("\tManufacturer: %s\n", SMBStringForField(structHeader, ((SMBSystemEnclosure *)structHeader)->manufacturer, neverMask)); + if ((((SMBSystemEnclosure *)structHeader)->chassisType < kSMBchassisOther) || (((SMBSystemEnclosure *)structHeader)->chassisType > kSMBchassisBladeEnclosing)) { DBG("\tType: %s\n", OutOfSpecStr); } else { - DBG("\tType: %s\n", SMBChassisTypes[(structHeader->chassisType - 1)]); - } - DBG("\tVersion: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->version, neverMask)); - DBG("\tSerial Number: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->serialNumber, privateData)); - DBG("\tAsset Tag: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->assetTag, neverMask)); + DBG("\tType: %s\n", SMBChassisTypes[(((SMBSystemEnclosure *)structHeader)->chassisType - 1)]); + } + DBG("\tVersion: %s\n", SMBStringForField(structHeader, ((SMBSystemEnclosure *)structHeader)->version, neverMask)); + DBG("\tSerial Number: %s\n", SMBStringForField(structHeader, ((SMBSystemEnclosure *)structHeader)->serialNumber, privateData)); + DBG("\tAsset Tag: %s\n", SMBStringForField(structHeader, ((SMBSystemEnclosure *)structHeader)->assetTag, neverMask)); // Boot-up State: // Power Supply State // Thermal State @@ -328,97 +334,86 @@ //------------------------------------------------------------------------------------------------------------------------- // Processor Information (Type 4) //------------------------------------------------------------------------------------------------------------------------- -void decodeProcessorInformation(SMBProcessorInformation *structHeader) +void decodeProcessorInformation(SMBStructHeader *structHeader) { + printHeader(structHeader); DBG("Processor Information:\n"); - DBG("\tSocket Designation: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->socketDesignation, neverMask)); - DBG("\tType: %d\n", structHeader->processorType); - DBG("\tFamily: 0x%X\n", structHeader->processorFamily); - DBG("\tManufacturer: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->manufacturer, neverMask)); - DBG("\tID: 0x%llX\n", structHeader->processorID); - DBG("\tProcessor Version: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->processorVersion, neverMask)); -// DBG("\tVoltage: 0.%xV\n", structHeader->voltage); - DBG("\tExternal Clock: %dMHz\n", structHeader->externalClock); - DBG("\tMaximum Clock: %dMHz\n", structHeader->maximumClock); - DBG("\tCurrent Clock: %dMHz\n", structHeader->currentClock); - - if (minorVersion < 3 || structHeader->header.length < 35) { - return; - } - - DBG("\tSerial Number: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->serialNumber, privateData)); - DBG("\tAsset Tag: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->assetTag, neverMask)); - DBG("\tPart Number: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->partNumber, neverMask)); -// DBG("\tProcessor Family 2: %d\n", structHeader->processorFamily2); + DBG("\tSocket Designation: %s\n", SMBStringForField(structHeader, ((SMBProcessorInformation *)structHeader)->socketDesignation, neverMask)); + if ((((SMBProcessorInformation *)structHeader)->processorType < kSMBprocessorTypeOther) || (((SMBProcessorInformation *)structHeader)->processorType > kSMBprocessorTypeGPU)) { + DBG("\tType: %s\n", OutOfSpecStr); + } else { + DBG("\tType: %s\n", SMBProcessorTypes[((SMBProcessorInformation *)structHeader)->processorType - 1]); + } + DBG("\tFamily: 0x%X\n", ((SMBProcessorInformation *)structHeader)->processorFamily); + DBG("\tManufacturer: %s\n", SMBStringForField(structHeader, ((SMBProcessorInformation *)structHeader)->manufacturer, neverMask)); + DBG("\tID: 0x%llX\n", ((SMBProcessorInformation *)structHeader)->processorID); + DBG("\tProcessor Version: %s\n", SMBStringForField(structHeader, ((SMBProcessorInformation *)structHeader)->processorVersion, neverMask)); +// DBG("\tVoltage: 0.%xV\n", ((SMBProcessorInformation *)structHeader)->voltage); + DBG("\tExternal Clock: %dMHz\n", ((SMBProcessorInformation *)structHeader)->externalClock); + DBG("\tMaximal Clock: %dMHz\n", ((SMBProcessorInformation *)structHeader)->maximumClock); + DBG("\tCurrent Clock: %dMHz\n", ((SMBProcessorInformation *)structHeader)->currentClock); + if ((((SMBProcessorInformation *)structHeader)->processorUpgrade < 1) || (((SMBProcessorInformation *)structHeader)->processorUpgrade > 0x2C)) { + DBG("\tUpgrade: %s\n", OutOfSpecStr); + } else { + DBG("\tUpgrade: %s\n", SMBProcessorUpgrades[((SMBProcessorInformation *)structHeader)->processorUpgrade - 1]); + } + DBG("\tSerial Number: %s\n", SMBStringForField(structHeader, ((SMBProcessorInformation *)structHeader)->serialNumber, privateData)); + DBG("\tAsset Tag: %s\n", SMBStringForField(structHeader, ((SMBProcessorInformation *)structHeader)->assetTag, neverMask)); + DBG("\tPart Number: %s\n", SMBStringForField(structHeader, ((SMBProcessorInformation *)structHeader)->partNumber, neverMask)); +// DBG("\tProcessor Family 2: %d\n", ((SMBProcessorInformation *)structHeader)->processorFamily2); DBG("\n"); } //------------------------------------------------------------------------------------------------------------------------- -// Memory Module Information (Type 6) -//------------------------------------------------------------------------------------------------------------------------- -//void decodeMemoryModule(SMBMemoryModule *structHeader) -//{ -// DBG("Memory Module Information:\n"); -// DBG("\tSocket Designation: %s\n", getSMBStringForField((SMBStructHeader *)structHeader, structHeader->socketDesignation)); -// DBG("\tBank Connections: Type: %d\n", structHeader->bankConnections); -// DBG("\tCurrent Speed: %X\n", structHeader->currentSpeed); -// DBG("\tCurrent Memory Type: %llX\n", structHeader->currentMemoryType); -// DBG("\tInstalled Size: %d\n", structHeader->installedSize); -// DBG("\tEnabled Size: %d\n", structHeader->enabledSize); -// DBG("\tError Status: %x\n", structHeader->errorStatus); -// DBG("\n"); -//} - -//------------------------------------------------------------------------------------------------------------------------- // OEM Strings (Type 11) //------------------------------------------------------------------------------------------------------------------------- -//void decodeSMBOEMStrings(SMBOEMStrings *structHeader) -//{ -// DBG("OEM Strings:\n"); -// DBG("\tString 1: %d\n"); //, structHeader->string1); -// DBG("\tString 2: %d\n"); //, structHeader->string1); -// DBG("\tString 3: %d\n"); //, structHeader->string1); -// DBG("\n"); -//} +void decodeSMBOEMStrings(SMBStructHeader *structHeader) +{ + char *stringPtr = (char *)structHeader + structHeader->length; + printHeader(structHeader); + DBG("OEM Strings:\n"); + for (SMBByte i = 1; i <= ((SMBOEMStrings *)structHeader)->count; i++) { + DBG("\tString %d: %s\n", i, stringPtr); + stringPtr = stringPtr + strlen(stringPtr) + 1; + } + DBG("\n"); +} //------------------------------------------------------------------------------------------------------------------------- // MemoryDevice (Type 17) //------------------------------------------------------------------------------------------------------------------------- -void decodeMemoryDevice(SMBMemoryDevice *structHeader) +void decodeMemoryDevice(SMBStructHeader *structHeader) { + printHeader(structHeader); DBG("Memory Device:\n"); - DBG("\tDevice Locator: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->deviceLocator, neverMask)); - DBG("\tBank Locator: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->bankLocator, neverMask)); - DBG("\tMemory Type: %s\n", SMBMemoryDeviceTypes[structHeader->memoryType]); - - if (minorVersion < 3 || structHeader->header.length < 27) { - return; - } - DBG("\tSpeed: %d MHz\n", structHeader->memorySpeed); - DBG("\tError Handle: %x\n", structHeader->errorHandle); - DBG("\tManufacturer: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->manufacturer, neverMask)); - DBG("\tSerial Number: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->serialNumber, privateData)); - DBG("\tAsset Tag: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->assetTag, neverMask)); - DBG("\tPart Number: %s\n", SMBStringForField((SMBStructHeader *)structHeader, structHeader->partNumber, neverMask)); + DBG("\tDevice Locator: %s\n", SMBStringForField(structHeader, ((SMBMemoryDevice *)structHeader)->deviceLocator, neverMask)); + DBG("\tBank Locator: %s\n", SMBStringForField(structHeader, ((SMBMemoryDevice *)structHeader)->bankLocator, neverMask)); + DBG("\tMemory Type: %s\n", SMBMemoryDeviceTypes[((SMBMemoryDevice *)structHeader)->memoryType]); + DBG("\tSpeed: %d MHz\n", ((SMBMemoryDevice *)structHeader)->memorySpeed); + DBG("\tError Handle: %x\n", ((SMBMemoryDevice *)structHeader)->errorHandle); + DBG("\tManufacturer: %s\n", SMBStringForField(structHeader, ((SMBMemoryDevice *)structHeader)->manufacturer, neverMask)); + DBG("\tSerial Number: %s\n", SMBStringForField(structHeader, ((SMBMemoryDevice *)structHeader)->serialNumber, privateData)); + DBG("\tAsset Tag: %s\n", SMBStringForField(structHeader, ((SMBMemoryDevice *)structHeader)->assetTag, neverMask)); + DBG("\tPart Number: %s\n", SMBStringForField(structHeader, ((SMBMemoryDevice *)structHeader)->partNumber, neverMask)); DBG("\n"); } //------------------------------------------------------------------------------------------------------------------------- // Apple Specific //------------------------------------------------------------------------------------------------------------------------- -void decodeOemProcessorType(SMBOemProcessorType *structHeader) +void decodeOemProcessorType(SMBStructHeader *structHeader) { - DBG("Apple specific Processor Type:\n"); - DBG("\tCpu-type: 0x%x\n", ((SMBOemProcessorType *)structHeader)->ProcessorType); + printHeader(structHeader); + DBG("Apple specific Processor Type:\n"); + DBG("\tcpu=0x%x\n", ((SMBOemProcessorType *)structHeader)->ProcessorType); DBG("\n"); } -void decodeOemProcessorBusSpeed(SMBOemProcessorBusSpeed *structHeader) +void decodeOemProcessorBusSpeed(SMBStructHeader *structHeader) { - DBG("Apple specific Processor Interconnect Speed:\n"); - DBG("\tQPI = %d.%dGT/s\n", - ((SMBOemProcessorBusSpeed *)structHeader)->ProcessorBusSpeed / 1000, - (((SMBOemProcessorBusSpeed *)structHeader)->ProcessorBusSpeed / 100) % 10); + printHeader(structHeader); + DBG("Apple specific Processor Interconnect Speed:\n"); + DBG("\tqpi=%d MT/s\n", ((SMBOemProcessorBusSpeed *)structHeader)->ProcessorBusSpeed); DBG("\n"); } //------------------------------------------------------------------------------------------------------------------------- @@ -436,67 +431,65 @@ getBoolForKey(kPrivateData, &privateData, &bootInfo->chameleonConfig); // Bungo: chek if mask some data - DBG("\n"); - DBG("SMBIOS rev. %d.%d, DMI rev. %d.%d\n", majorVersion, minorVersion, bcdRevisionHi, bcdRevisionLo); - DBG("\n"); + DBG("\n"); + DBG("SMBIOS rev.: %d.%d, DMI rev.: %d.%d\n", majorVersion, minorVersion, bcdRevisionHi, bcdRevisionLo); + DBG("\n"); for (;((eps->dmi.tableAddress + eps->dmi.tableLength) > ((uint32_t)(uint8_t *)structHeader + sizeof(SMBStructHeader)));) { - DBG("Type: %d, Length: %d, Handle: 0x%04x\n", - structHeader->type, structHeader->length, structHeader->handle); - switch (structHeader->type) { case kSMBTypeBIOSInformation: // Type 0 - decodeBIOSInformation((SMBBIOSInformation *)structHeader); + decodeBIOSInformation(structHeader); break; case kSMBTypeSystemInformation: // Type 1 - decodeSystemInformation((SMBSystemInformation *)structHeader); + decodeSystemInformation(structHeader); break; case kSMBTypeBaseBoard: // Type 2 - decodeBaseBoard((SMBBaseBoard *)structHeader); + decodeBaseBoard(structHeader); break; case kSMBTypeSystemEnclosure: // Type 3 - decodeSystemEnclosure((SMBSystemEnclosure *)structHeader); + decodeSystemEnclosure(structHeader); break; case kSMBTypeProcessorInformation: // Type 4 - decodeProcessorInformation((SMBProcessorInformation *)structHeader); + decodeProcessorInformation(structHeader); break; //case 6: // kSMBTypeMemoryModule: // Type 6 - // decodeMemoryModule((SMBMemoryModule *)structHeader); + // decodeMemoryModule(structHeader); // break; - //case 11: // kSMBOEMStrings: // Type 11 - // decodeSMBOEMStrings((SMBOEMStrings *)structHeader); - // break; + case kSMBOEMStrings: // Type 11 + decodeSMBOEMStrings(structHeader); + break; case kSMBTypeMemoryDevice: // Type 17 - decodeMemoryDevice((SMBMemoryDevice *)structHeader); + decodeMemoryDevice(structHeader); break; - //kSMBTypeMemoryArrayMappedAddress: // Type 19 + // kSMBTypeMemoryArrayMappedAddress: // Type 19 /* Skip all Apple Specific Structures */ - case kSMBTypeFirmwareVolume: // Type 128 - case kSMBTypeMemorySPD: // Type 130 - break; + // case kSMBTypeFirmwareVolume: // Type 128 + // case kSMBTypeMemorySPD: // Type 130 + // break; case kSMBTypeOemProcessorType: // Type 131 - decodeOemProcessorType((SMBOemProcessorType *)structHeader); + decodeOemProcessorType(structHeader); break; case kSMBTypeOemProcessorBusSpeed: // Type 132 - decodeOemProcessorBusSpeed((SMBOemProcessorBusSpeed *)structHeader); + decodeOemProcessorBusSpeed(structHeader); break; //kSMBTypeOemPlatformFeature: // Type 133 case kSMBTypeEndOfTable: // Type 127 - /* Skip, to be added at the end */ + DBG("Type: %d, Length: %d, Handle: 0x%04x\n", structHeader->type, structHeader->length, structHeader->handle); + DBG("End of Table\n"); break; default: Index: branches/Bungo/i386/libsaio/smbios.h =================================================================== --- branches/Bungo/i386/libsaio/smbios.h (revision 2352) +++ branches/Bungo/i386/libsaio/smbios.h (revision 2353) @@ -98,7 +98,7 @@ // Port Connector Information (Type 8) kSMBTypeSystemSlot = 9, // System Slots (Type 9) // On Board Devices Information (Type 10) Obsolete - // kSMBOEMStrings = 11 ,// OEM Strings (Type 11) + kSMBOEMStrings = 11 ,// OEM Strings (Type 11) // System Configuration Options (Type 12) // BIOS Language Information (Type 13) // Group Associations (Type 14) @@ -240,12 +240,12 @@ SMBByte thermalState; // Thermal state of the enclosure when last booted SMBByte securityStatus; // Physical security status of the enclosure when last booted SMBDWord oemDefined; // OEM- or BIOS vendor-specific information -// SMBByte height; // Height of the enclosure, in 'U's -// SMBByte numberOfPowerCords; // Number of power cords associated with the enclosure or chassis -// SMBByte containedElementCount; // Number of Contained Element record that follow, in the range 0 to 255 -// SMBByte containedElementRecord; // Byte leght of each Contained Element record that follow, in the range 0 to 255 -// SMBByte containedElements; // Elements, possibly defined by other SMBIOS structures present in chassis -// SMBString skuNumber; // Number of null-terminated string describing the chassis or enclosure SKU number (2.7+) + SMBByte height; // Height of the enclosure, in 'U's + SMBByte numberOfPowerCords; // Number of power cords associated with the enclosure or chassis + SMBByte containedElementCount; // Number of Contained Element record that follow, in the range 0 to 255 +// SMBByte containedElementRecord; // Byte leght of each Contained Element record that follow, in the range 0 to 255 +// SMBByte containedElements; // Elements, possibly defined by other SMBIOS structures present in chassis +// SMBString skuNumber; // Number of null-terminated string describing the chassis or enclosure SKU number (2.7+) } __attribute__((packed)) SMBSystemEnclosure; // Bungo: values for SMBSystemEnclosure.chassisType @@ -308,29 +308,27 @@ #define kSMBProcessorInformationMinSize 26 +/* ======================================== + Values for processorType in Type 4 records + ======================================== */ +enum +{ + kSMBprocessorTypeOther = 0x01, + kSMBprocessorTypeUnknown = 0x02, + kSMBprocessorTypeCPU = 0x03, + kSMBprocessorTypeMPU = 0x04, + kSMBprocessorTypeDSP = 0x05, + kSMBprocessorTypeGPU = 0x06 +}; + /* ======================================================================= - Memory Controller Information (Type 5) Obsoleted since SMBIOS version 2.1 + Memory Controller Information (Type 5) Obsolete since SMBIOS version 2.1 ========================================================================= */ /* =================================================================== - Memory Module Information (Type 6) Obsoleted since SMBIOS version 2.1 + Memory Module Information (Type 6) Obsolete 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) ========================== */ @@ -374,11 +372,11 @@ /* =================== OEM Strings (Type 11) ===================== */ -//typedef struct SMBOEMStrings -//{ -// SMB_STRUCT_HEADER // Type 11 -// SMBByte count; // number of strings -//} __attribute__((packed)) SMBOEMStrings; +typedef struct SMBOEMStrings +{ + SMB_STRUCT_HEADER // Type 11 + SMBByte count; // number of strings +} __attribute__((packed)) SMBOEMStrings; /* ============================= Physical Memory Array (Type 16) Index: branches/Bungo/i386/boot2/prompt.c =================================================================== --- branches/Bungo/i386/boot2/prompt.c (revision 2352) +++ branches/Bungo/i386/boot2/prompt.c (revision 2353) @@ -28,7 +28,7 @@ #include -char bootBanner[] = "\nDarwin/x86 boot v" I386BOOT_VERSION " - Chameleon v" I386BOOT_CHAMELEONVERSION " r" I386BOOT_CHAMELEONREVISION "\n" +char bootBanner[] = "\nDarwin/x86 boot v" I386BOOT_VERSION " - Chameleon v" I386BOOT_CHAMELEONVERSION " (Bungo branch) r" I386BOOT_CHAMELEONREVISION "\n" "Build date: " I386BOOT_BUILDDATE "\n" "%dMB memory\n";