+++ /dev/null
-/** @file\r
- Common filling functions used in translating Datahub's record\r
- to PI SMBIOS's record.\r
- \r
-Copyright (c) 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "Thunk.h"\r
-\r
-/**\r
- Field Filling Function for Cache SubClass record type 5&6 -- Cache SRAM type.\r
- Offset is mandatory\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldCacheType5 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_CACHE_SRAM_TYPE_DATA SramData;\r
- UINT32 Temp;\r
-\r
- SramData = *(EFI_CACHE_SRAM_TYPE_DATA*)RecordData;\r
-\r
- //\r
- // Swap two fields because of inconsistency between smbios and datahub specs\r
- //\r
- Temp = SramData.Asynchronous;\r
- SramData.Asynchronous = SramData.Synchronous;\r
- SramData.Synchronous = Temp;\r
- \r
- //\r
- // Truncate the data to word\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + Offset,\r
- (EFI_CACHE_SRAM_TYPE_DATA *) &SramData,\r
- 2\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Cache SubClass record type 10 -- Cache Config.\r
- Offset is mandatory\r
-\r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldCacheType10 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
-\r
- UINT16 CacheConfig;\r
-\r
- CopyMem (&CacheConfig, RecordData, 2);\r
-\r
- if ((CacheConfig & 0x07) == 0) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- //\r
- // Truncate the data to 2 bytes and make cache level zero-based.\r
- //\r
- CacheConfig--;\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + Offset,\r
- &CacheConfig,\r
- 2\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Enlarge the structure buffer of a structure node in SMBIOS database.\r
- The function maybe lead the structure pointer for SMBIOS record changed.\r
- \r
- @param StructureNode The structure node whose structure buffer is to be enlarged.\r
- @param NewLength The new length of SMBIOS record which does not include unformat area.\r
- @param OldBufferSize The old size of SMBIOS record buffer.\r
- @param NewBufferSize The new size is targeted for enlarged.\r
- \r
- @retval EFI_OUT_OF_RESOURCES No more memory to allocate new record\r
- @retval EFI_SUCCESS Success to enlarge the record buffer size.\r
-**/\r
-EFI_STATUS\r
-SmbiosEnlargeStructureBuffer (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- UINT8 NewLength,\r
- UINTN OldBufferSize,\r
- UINTN NewBufferSize\r
- )\r
-{\r
- EFI_SMBIOS_TABLE_HEADER *NewRecord;\r
- EFI_SMBIOS_PROTOCOL *Smbios;\r
- EFI_STATUS Status;\r
- UINT8 CountOfString;\r
- \r
- NewRecord = NULL;\r
- Smbios = GetSmbiosProtocol();\r
- ASSERT (Smbios != NULL);\r
- \r
- NewRecord = (EFI_SMBIOS_TABLE_HEADER*) AllocateZeroPool (NewBufferSize);\r
- if (NewRecord == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
- CopyMem (NewRecord, StructureNode->Structure, OldBufferSize);\r
- \r
- \r
- Status = Smbios->Remove (Smbios, StructureNode->SmbiosHandle);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- //\r
- // try to use original handle to enlarge the buffer.\r
- //\r
- NewRecord->Length = NewLength;\r
- Status = Smbios->Add (Smbios, NULL, &StructureNode->SmbiosHandle, NewRecord);\r
- ASSERT_EFI_ERROR (Status);\r
- FreePool (NewRecord);\r
- \r
- StructureNode->Structure = GetSmbiosBufferFromHandle (\r
- StructureNode->SmbiosHandle, \r
- StructureNode->SmbiosType, \r
- NULL\r
- );\r
- GetSmbiosStructureSize (\r
- StructureNode->Structure,\r
- &StructureNode->StructureSize,\r
- &CountOfString\r
- );\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Fill a standard Smbios string field. \r
- \r
- This function will convert the unicode string to single byte chars, and only\r
- English language is supported.\r
- This function changes the Structure pointer value of the structure node, \r
- which should be noted by Caller.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_INVALID_PARAMETER RecordDataSize is too larger\r
- @retval EFI_OUT_OF_RESOURCES No memory to allocate new buffer for string\r
- @retval EFI_SUCCESS Sucess append string for a SMBIOS record.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldString (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINT16 *Data;\r
- CHAR8 AsciiData[SMBIOS_STRING_MAX_LENGTH];\r
- UINT8 CountOfStrings;\r
- UINTN OrigStringNumber;\r
- EFI_SMBIOS_PROTOCOL *Smbios;\r
- EFI_SMBIOS_HANDLE SmbiosHandle;\r
- UINT32 OrigStructureSize;\r
- UINTN NewStructureSize;\r
- EFI_SMBIOS_TABLE_HEADER *NewRecord;\r
- UINT32 StringLength;\r
- \r
- Status = EFI_SUCCESS;\r
- OrigStringNumber = 0;\r
- OrigStructureSize = 0;\r
-\r
- //\r
- // if we have a NULL token,\r
- //\r
- if (0 == *((STRING_REF *) RecordData)) {\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = 0;\r
- return EFI_SUCCESS;\r
- }\r
- \r
- //\r
- // Get the String from the Hii Database\r
- //\r
- Data = HiiGetPackageString (\r
- &(StructureNode->ProducerName),\r
- *((EFI_STRING_ID *) RecordData),\r
- NULL\r
- );\r
- if (Data == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- StringLength = (UINT32)StrLen (Data);\r
- //\r
- // Count the string size including the terminating 0.\r
- //\r
- if (StringLength == 0) {\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = 0;\r
- FreePool (Data);\r
- return EFI_SUCCESS;\r
- }\r
- \r
- if (StringLength > SMBIOS_STRING_MAX_LENGTH) {\r
- //\r
- // Too long a string\r
- //\r
- FreePool (Data);\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- \r
- Smbios = GetSmbiosProtocol();\r
- ASSERT (Smbios != NULL);\r
- \r
- //\r
- // Convert Unicode string to Ascii string which only supported by SMBIOS.\r
- //\r
- ZeroMem (AsciiData, SMBIOS_STRING_MAX_LENGTH);\r
- UnicodeStrToAsciiStr (Data, AsciiData);\r
- \r
- //\r
- // if the field at offset is already filled with some value,\r
- // find out the string it points to\r
- //\r
- OrigStringNumber = *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset);\r
- if (OrigStringNumber != 0) {\r
- DEBUG ((EFI_D_ERROR, "[SMBIOSThunk] Update %dth string for type[%d],offset[0x%x],handle[0x%x] to [%s]\n", \r
- OrigStringNumber, StructureNode->SmbiosType, Offset, StructureNode->SmbiosHandle, AsciiData)); \r
- \r
- //\r
- // If original string number is not zero, just update string\r
- //\r
- Status = Smbios->UpdateString (Smbios, &StructureNode->SmbiosHandle, &OrigStringNumber, AsciiData);\r
- if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "[SMBIOSThunk] Fail to update %dth string in offset 0x%x for handle:0x%x type:0x%x\n", \r
- OrigStringNumber, Offset, StructureNode->SmbiosHandle, StructureNode->SmbiosType));\r
- ASSERT_EFI_ERROR (Status);\r
- return Status;\r
- }\r
- } else {\r
- //\r
- // If the string has not been filled in SMBIOS database, remove it and add again\r
- // with string appended.\r
- //\r
- Status = GetSmbiosStructureSize (StructureNode->Structure, &OrigStructureSize, &CountOfStrings);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- if (CountOfStrings == 0) {\r
- NewStructureSize = OrigStructureSize + StringLength;\r
- } else {\r
- NewStructureSize = OrigStructureSize + StringLength + 1;\r
- }\r
- \r
- NewRecord = AllocateZeroPool (NewStructureSize);\r
- if (NewRecord == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
- CopyMem (NewRecord, StructureNode->Structure, OrigStructureSize);\r
- \r
- //\r
- // Copy new string into tail of original SMBIOS record buffer.\r
- //\r
- if (CountOfStrings == 0) {\r
- AsciiStrCpy ((CHAR8 *)NewRecord + OrigStructureSize - 2, AsciiData);\r
- } else {\r
- AsciiStrCpy ((CHAR8 *)NewRecord + OrigStructureSize - 1, AsciiData);\r
- }\r
- DEBUG ((EFI_D_ERROR, "[SMBIOSThunk] Type(%d) offset(0x%x) StringNumber:%d\n", \r
- StructureNode->SmbiosType, Offset, CountOfStrings + 1));\r
- //\r
- // Update string reference number\r
- //\r
- *(UINT8 *) ((UINT8 *) NewRecord + Offset) = (UINT8) (CountOfStrings + 1);\r
- SmbiosHandle = StructureNode->SmbiosHandle;\r
- \r
- //\r
- // Remove original SMBIOS record and add new one\r
- //\r
- Status = Smbios->Remove (Smbios, StructureNode->SmbiosHandle);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- //\r
- // Add new SMBIOS record\r
- //\r
- Status = Smbios->Add (Smbios, NULL, &SmbiosHandle, NewRecord);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- StructureNode->SmbiosHandle = SmbiosHandle;\r
- \r
- FreePool (NewRecord);\r
- }\r
- \r
- //\r
- // The SMBIOS record buffer maybe re-allocated in SMBIOS database,\r
- // so update cached buffer pointer in DataHub structure list.\r
- //\r
- StructureNode->Structure = GetSmbiosBufferFromHandle (\r
- StructureNode->SmbiosHandle, \r
- StructureNode->SmbiosType,\r
- NULL\r
- );\r
- ASSERT (StructureNode->Structure != NULL);\r
- \r
- //\r
- // The string update action maybe lead the record is re-allocated in SMBIOS database\r
- // so update cached record pointer\r
- //\r
- Status = GetSmbiosStructureSize (StructureNode->Structure, &StructureNode->StructureSize, &CountOfStrings);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Find a handle that matches the Link Data and the target Smbios type.\r
- \r
- @param TargetType the Smbios type\r
- @param SubClass the SubClass\r
- @param LinkData Specifies Instance, SubInstance and ProducerName\r
- @param Handle the HandleNum found \r
- \r
- @retval EFI_NOT_FOUND Can not find the record according to handle\r
- @retval EFI_SUCCESS Success to find the handle\r
-**/\r
-EFI_STATUS\r
-SmbiosFindHandle (\r
- IN UINT8 TargetType,\r
- IN EFI_GUID *SubClass,\r
- IN EFI_INTER_LINK_DATA *LinkData,\r
- IN OUT UINT16 *HandleNum\r
- )\r
-{\r
- LIST_ENTRY *Link;\r
- SMBIOS_STRUCTURE_NODE *StructureNode;\r
-\r
- StructureNode = NULL;\r
-\r
- //\r
- // Find out the matching handle\r
- //\r
- for (Link = mStructureList.ForwardLink; Link != &mStructureList; Link = Link->ForwardLink) {\r
- StructureNode = CR (Link, SMBIOS_STRUCTURE_NODE, Link, SMBIOS_STRUCTURE_NODE_SIGNATURE);\r
- if (StructureNode->Structure->Type == TargetType &&\r
- CompareGuid (&(StructureNode->SubClass), SubClass) &&\r
- StructureNode->Instance == LinkData->Instance &&\r
- StructureNode->SubInstance == LinkData->SubInstance\r
- ) {\r
- break;\r
- }\r
- }\r
-\r
- if (Link == &mStructureList) {\r
- return EFI_NOT_FOUND;\r
- } else {\r
- *HandleNum = StructureNode->Structure->Handle;\r
- return EFI_SUCCESS;\r
- }\r
-}\r
-\r
-/**\r
- Fill the inter link field for a SMBIOS recorder.\r
- \r
- Some SMBIOS recorder need to reference the handle of another SMBIOS record. But\r
- maybe another SMBIOS record has not been added, so put the InterLink request into\r
- a linked list and the interlink will be fixedup when a new SMBIOS record is added.\r
- \r
- @param StructureNode Point to SMBIOS_STRUCTURE_NODE which reference another record's handle\r
- @param LinkSmbiosNodeOffset The offset in this record for holding the handle of another SMBIOS record\r
- @param LinkSmbiosType The type of SMBIOS record want to be linked.\r
- @param InterLink Point to EFI_INTER_LINK_DATA will be put linked list.\r
- @param SubClassGuid The guid of subclass for linked SMBIOS record.\r
- \r
- @retval EFI_SUCESS The linked record is found and no need fixup in future.\r
- @retval !EFI_SUCESS The linked record can not be found and InterLink is put a fixing-p linked list.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldInterLink (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT16 LinkSmbiosNodeOffset,\r
- IN UINT8 LinkSmbiosType,\r
- IN EFI_INTER_LINK_DATA *InterLink,\r
- IN EFI_GUID *SubClassGuid\r
- )\r
-{\r
- EFI_STATUS Status;\r
- SMBIOS_LINK_DATA_FIXUP_NODE *LinkDataFixupNode;\r
- UINT16 StructureHandle;\r
-\r
- Status = EFI_SUCCESS;\r
- LinkDataFixupNode = NULL;\r
-\r
- Status = SmbiosFindHandle (\r
- LinkSmbiosType, // Smbios type\r
- SubClassGuid,\r
- InterLink,\r
- &StructureHandle\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- //\r
- // Set the handle\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + LinkSmbiosNodeOffset,\r
- &StructureHandle,\r
- sizeof (EFI_SMBIOS_HANDLE)\r
- );\r
- } else {\r
- //\r
- // Hang this in the link data fixup node\r
- //\r
- LinkDataFixupNode = AllocateZeroPool (sizeof (SMBIOS_LINK_DATA_FIXUP_NODE));\r
- if (LinkDataFixupNode == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
-\r
- LinkDataFixupNode->Signature = SMBIOS_LINK_DATA_FIXUP_NODE_SIGNATURE;\r
- LinkDataFixupNode->Offset = LinkSmbiosNodeOffset;\r
- LinkDataFixupNode->TargetType = LinkSmbiosType;\r
- CopyMem (\r
- &LinkDataFixupNode->SubClass,\r
- SubClassGuid,\r
- sizeof (EFI_GUID)\r
- );\r
- CopyMem (\r
- &LinkDataFixupNode->LinkData,\r
- InterLink,\r
- sizeof (EFI_INTER_LINK_DATA)\r
- );\r
- InsertTailList (\r
- &StructureNode->LinkDataFixup,\r
- &(LinkDataFixupNode->Link)\r
- );\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function. Transform an EFI_EXP_BASE10_DATA to a word, with 'Mega'\r
- as the unit.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
- @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldBase10ToWordWithMega (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_EXP_BASE10_DATA *Base10Data;\r
- INT16 Value;\r
- INT16 Exponent;\r
-\r
- if (RecordDataSize != sizeof (EFI_EXP_BASE10_DATA)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- Base10Data = RecordData;\r
- Value = Base10Data->Value;\r
- Exponent = Base10Data->Exponent;\r
-\r
- Exponent -= 6;\r
- while (Exponent != 0) {\r
- if (Exponent > 0) {\r
- Value = (INT16) (Value * 10);\r
- Exponent--;\r
- } else {\r
- Value = (INT16) (Value / 10);\r
- Exponent++;\r
- }\r
- }\r
-\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + Offset,\r
- &Value,\r
- 2\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function. Transform an EFI_EXP_BASE2_DATA to a word, with 'Kilo'\r
- as the unit. Granularity implemented for Cache Size.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
- @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldBase2ToWordWithKilo (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_EXP_BASE2_DATA *Base2Data;\r
- UINT32 Value;\r
- UINT16 Exponent;\r
-\r
- if (RecordDataSize != sizeof (EFI_EXP_BASE2_DATA)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- Base2Data = RecordData;\r
- Value = Base2Data->Value;\r
- Exponent = Base2Data->Exponent;\r
-\r
- Exponent -= 10;\r
- Value <<= Exponent;\r
- \r
- //\r
- // Implement cache size granularity\r
- //\r
- if(Value >= 0x8000) {\r
- Value >>= 6;\r
- Value |= 0x8000;\r
- }\r
- \r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + Offset,\r
- &Value,\r
- 2\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function. Transform an EFI_EXP_BASE2_DATA to a byte, with '64k'\r
- as the unit.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
- @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldBase2ToByteWith64K (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_EXP_BASE2_DATA *Base2Data;\r
- UINT16 Value;\r
- UINT16 Exponent;\r
-\r
- if (RecordDataSize != sizeof (EFI_EXP_BASE2_DATA)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- Base2Data = RecordData;\r
- Value = Base2Data->Value;\r
- Exponent = Base2Data->Exponent;\r
- Exponent -= 16;\r
- Value <<= Exponent;\r
-\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + Offset,\r
- &Value,\r
- 1\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function. Transform an EFI_EXP_BASE2_DATA to a word, with 10exp-9\r
- as the unit.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
- @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldBase10ToByteWithNano (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_EXP_BASE10_DATA *Base10Data;\r
- INT16 Value;\r
- INT16 Exponent;\r
-\r
- if (RecordDataSize != sizeof (EFI_EXP_BASE2_DATA)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- Base10Data = RecordData;\r
- Value = Base10Data->Value;\r
- Exponent = Base10Data->Exponent;\r
-\r
- Exponent += 9;\r
- while (Exponent != 0) {\r
- if (Exponent > 0) {\r
- Value = (INT16) (Value * 10);\r
- Exponent--;\r
- } else {\r
- Value = (INT16) (Value / 10);\r
- Exponent++;\r
- }\r
- }\r
-\r
- * (UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = (UINT8) Value;\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function: truncate record data to byte and fill in the\r
- field as indicated by Offset.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
- @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldTruncateToByte (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
-\r
- Status = EFI_SUCCESS;\r
-\r
- //\r
- // Truncate the data to 8 bits\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = (UINT8) (*(UINT8 *) RecordData);\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function: truncate record data to byte and fill in the\r
- field as indicated by Offset.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
- @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldTruncateToWord (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
-\r
- Status = EFI_SUCCESS;\r
-\r
- //\r
- // Truncate the data to 8 bits\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + Offset,\r
- RecordData,\r
- 2\r
- );\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Check if OEM structure has included 2 trailing 0s in data record.\r
- \r
- @param RecordData Point to record data will be checked.\r
- @param RecordDataSize The size of record data.\r
- \r
- @retval 0 2 trailing 0s exist in unformatted section\r
- @retval 1 1 trailing 0 exists at the end of unformatted section\r
- @retval -1 There is no 0 at the end of unformatted section\r
-**/\r
-INT8\r
-SmbiosCheckTrailingZero (\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- SMBIOS_STRUCTURE *Smbios;\r
- CHAR8 *Start;\r
- CHAR8 *End;\r
- \r
- Smbios = (SMBIOS_STRUCTURE *) RecordData;\r
- \r
- //\r
- // Skip over formatted section\r
- //\r
- Start = (CHAR8 *) ((UINT8 *) Smbios + Smbios->Length);\r
- End = (CHAR8 *) RecordData + RecordDataSize;\r
- \r
- //\r
- // Unformatted section exists\r
- //\r
- while (Start < End - 1) {\r
- //\r
- // Avoid unaligned issue on IPF\r
- //\r
- if ((*Start == 0) && (*(Start + 1) == 0)) {\r
- //\r
- // 2 trailing 0s exist in unformatted section\r
- //\r
- return 0;\r
- }\r
- Start++;\r
- }\r
- \r
- if (Start == End - 1) {\r
- //\r
- // Check if there has been already 1 trailing 0\r
- //\r
- if (*Start == 0) {\r
- return 1;\r
- } \r
- }\r
- \r
- //\r
- // There is no 0 at the end of unformatted section\r
- //\r
- return -1;\r
-}\r
+++ /dev/null
-/** @file\r
- The conversion table that guides the generation of the Smbios struture list.\r
- \r
-Copyright (c) 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "Thunk.h"\r
-\r
-///\r
-/// The minimal length includes last two zero bytes.\r
-///\r
-SMBIOS_TYPE_INFO_TABLE_ENTRY mTypeInfoTable[] = {\r
- //\r
- // Type 0: Bios Information\r
- //\r
- {\r
- 0,\r
- 0x1a,\r
- TRUE,\r
- FALSE\r
- }, // size includes wo extension bytes\r
- //\r
- // Type 1: System Information\r
- //\r
- {\r
- 1,\r
- 0x1d,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 2: Base Board Information\r
- //\r
- {\r
- 2,\r
- 0x12,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 3: System Enclosure or Chassis\r
- //\r
- {\r
- 3,\r
- 0x17, // 0x13 covers till OEM-defined, not right\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 4: Processor\r
- //\r
- {\r
- 4,\r
- 0x25,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 5: Memory Controller\r
- //\r
- {\r
- 5,\r
- 0x12,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 6: Memory\r
- //\r
- {\r
- 6,\r
- 0x0E,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 7: Cache\r
- //\r
- {\r
- 7,\r
- 0x15,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 8: Port Connector Information\r
- //\r
- {\r
- 8,\r
- 0x0B,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 9: System Slots\r
- //\r
- {\r
- 9,\r
- 0x0f,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 10: On Board Device Information\r
- //\r
- {\r
- 10,\r
- 0x8,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 11: OEM Strings\r
- //\r
- {\r
- 11, \r
- 0x7, \r
- FALSE, \r
- FALSE\r
- },\r
- //\r
- // Type 12: System Configuration Options\r
- //\r
- {\r
- 12,\r
- 0x7,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 13: BIOS Language Information\r
- //\r
- {\r
- 13,\r
- 0x18,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 15: System Event Log\r
- //\r
- {\r
- 15,\r
- 0x19,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 16: Physical Memory Array\r
- //\r
- {\r
- 16,\r
- 0x11,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 17: Memory Device\r
- //\r
- {\r
- 17,\r
- 0x1d,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 18: 32 bit Memory Error Information\r
- //\r
- {\r
- 18,\r
- 0x19,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 19: Memory Array Mapped Address\r
- //\r
- {\r
- 19,\r
- 0x11,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 20: Memory Device Mapped Address\r
- //\r
- {\r
- 20,\r
- 0x15,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 21: Pointing Device\r
- //\r
- {\r
- 21,\r
- 0x9,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 22: Portable Battery\r
- //\r
- {\r
- 22,\r
- 0x1c,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 23: System Reset\r
- //\r
- {\r
- 23,\r
- 0x0f,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 24: Hardware Security\r
- //\r
- {\r
- 24,\r
- 0x07,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 25: System Power Controls\r
- //\r
- {\r
- 25,\r
- 0x0b,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 26: Voltage Probe\r
- //\r
- {\r
- 26,\r
- 0x18,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 27: Cooling Device\r
- //\r
- {\r
- 27,\r
- 0x10,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 28: Temperature Probe\r
- //\r
- {\r
- 28,\r
- 0x18,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 29: Electrical Current Probe\r
- //\r
- {\r
- 29,\r
- 0x18,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 30: Out-of-Band Remote Access\r
- //\r
- {\r
- 30,\r
- 0x08,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 31: BIS Entry Point\r
- //\r
- {\r
- 31,\r
- 0x1c,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 32: System Boot Information\r
- //\r
- {\r
- 32,\r
- 0x16,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 33: 64 bit Memory Error Information\r
- //\r
- {\r
- 33,\r
- 0x21,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 34: Management Device\r
- //\r
- {\r
- 34,\r
- 0x0d,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 36: Management Device Threshold\r
- //\r
- {\r
- 36,\r
- 0x12,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 37: Memory Channel\r
- //\r
- {\r
- 37,\r
- 0x0c,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 38: IPMI device info\r
- //\r
- {\r
- 38,\r
- 0x12,\r
- TRUE,\r
- FALSE\r
- },\r
- //\r
- // Type 39: Power supply\r
- //\r
- {\r
- 39,\r
- 0x18,\r
- FALSE,\r
- FALSE\r
- }, \r
- //\r
- // Type 0x80-0xFF: OEM type\r
- //\r
- {\r
- 0x80,\r
- 0x6,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Type 127: End of Table\r
- //\r
- {\r
- 127,\r
- 0x6,\r
- FALSE,\r
- FALSE\r
- },\r
- //\r
- // Terminator\r
- //\r
- {\r
- 0,\r
- 0\r
- }\r
-};\r
-\r
-SMBIOS_CONVERSION_TABLE_ENTRY mConversionTable[] = {\r
-\r
- {\r
- //\r
- // Processor Sub Class -- Record Type 1: Frequency\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorCoreFrequencyRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x16,\r
- SmbiosFldBase10ToWordWithMega\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 2: Bus Frequency\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorFsbFrequencyRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x12,\r
- SmbiosFldBase10ToWordWithMega\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 3: Version\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorVersionRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x10,\r
- SmbiosFldString\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 4: Manufacturor\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorManufacturerRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x7,\r
- SmbiosFldString\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 5: Serial Number\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorSerialNumberRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x20,\r
- SmbiosFldString\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 6: ID\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorIdRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x08,\r
- SmbiosFldProcessorType6\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 7: Type\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorTypeRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x05,\r
- SmbiosFldTruncateToByte\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 8: Family\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorFamilyRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x06,\r
- SmbiosFldTruncateToByte\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 9: Voltage\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorVoltageRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x11,\r
- SmbiosFldProcessorType9\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 14: Status\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorStatusRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x18,\r
- SmbiosFldTruncateToByte\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 15: Socket Type\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorSocketTypeRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x19,\r
- SmbiosFldTruncateToByte\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 16: Socket Name\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorSocketNameRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x04,\r
- SmbiosFldString\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 17: Cache Associtation\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- CacheAssociationRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_WHOLE_DATA_RECORD,\r
- 0,\r
- SmbiosFldProcessorType17\r
- },\r
-\r
- {\r
- //\r
- // Processor Sub Class -- Record Type 18: MaxFrequency\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorMaxCoreFrequencyRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x14,\r
- SmbiosFldBase10ToWordWithMega\r
- },\r
-\r
- {\r
- //\r
- // Processor SubClass -- Record Type 19: Asset Tag\r
- //\r
- EFI_PROCESSOR_SUBCLASS_GUID,\r
- ProcessorAssetTagRecordType,\r
- 4,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x21,\r
- SmbiosFldString\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 1: Size\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheSizeRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x09,\r
- SmbiosFldBase2ToWordWithKilo\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 2: Max Size\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- MaximumSizeCacheRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x07,\r
- SmbiosFldBase2ToWordWithKilo\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 3: Speed\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheSpeedRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x0f,\r
- SmbiosFldBase10ToByteWithNano\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 4: Socket\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheSocketRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x04,\r
- SmbiosFldString\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 5: Supported SRAM type\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheSramTypeRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x0b,\r
- SmbiosFldCacheType5 // Asynchronous and Synchronous are reversed\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 6: Installed SRAM type\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheInstalledSramTypeRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x0d,\r
- SmbiosFldCacheType5\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 7: error correction type\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheErrorTypeRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x10,\r
- SmbiosFldTruncateToByte\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 8: cache type\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheTypeRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x11,\r
- SmbiosFldTruncateToByte\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 9: Associativity\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheAssociativityRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x12,\r
- SmbiosFldTruncateToByte\r
- },\r
-\r
- {\r
- //\r
- // Cache SubClass -- Record Type 10: Cache configuration\r
- //\r
- EFI_CACHE_SUBCLASS_GUID,\r
- CacheConfigRecordType,\r
- 7,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- 0x05,\r
- SmbiosFldCacheType10\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 2: Physical Memory Array\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER,\r
- 16,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType2\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 3: Memory Device to SMBIOS type 6\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER,\r
- 6,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldSMBIOSType6\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 3: Memory Device to SMBIOS type 17\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER,\r
- 17,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType3\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 4: Memory Array Mapped Address\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER,\r
- 19,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType4\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 5: Memory Device Mapped Address\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER,\r
- 20,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType5\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 6: Memory Channel Type\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER,\r
- 37,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType6\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 7: Memory Channel Device\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER,\r
- 37,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType7\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 8: Memory Controller information\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER,\r
- 5,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType8\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 9: Memory 32 Bit Error Information\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER,\r
- 18,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType9\r
- },\r
-\r
- {\r
- //\r
- // Memory SubClass -- Record Type 10: Memory 64 Bit Error Information\r
- //\r
- EFI_MEMORY_SUBCLASS_GUID,\r
- EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER,\r
- 33,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMemoryType10\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 2: Bios Information (SMBIOS Type 0)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_BIOS_VENDOR_RECORD_NUMBER, // 0,\r
- 0, // smbios Type 0\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType0\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 3: System Information (SMBIOS Type 1)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER, // 1,\r
- 1,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType1\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 4: Base Board Manufacturer (SMBIOS Type 2)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER, // 2,\r
- 2, // SMBIOS Type 2\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType2\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 5: System Enclosure or Chassis (SMBIOS Type 3)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER, // 3,\r
- 3,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType3\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 6: Port Connector (SMBIOS Type 8)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER, // 8,\r
- 8,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType8\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 7: System Slots (SMBIOS Type 9)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER, // 9,\r
- 9,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType9\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 8: Onboard Device (SMBIOS Type 10)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER, // 10,\r
- 10,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType10\r
- },\r
-\r
- {\r
- //\r
- // Misc Subclass -- Record Type 9: OEM strings (SMBIOS Type 11)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_OEM_STRING_RECORD_NUMBER, // 11,\r
- 11,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType11\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0A: System Options (SMBIOS Type 12)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER, // 12,\r
- 12,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType12\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0B: Number of Installable Languages (SMBIOS Type 13)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER, // 13,\r
- 13,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType13\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0C: Installable Languages (SMBIOS Type 13)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER, // 13,\r
- 13,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType14\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 20: System Event Log (SMBIOS Type 15)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER, // 15,\r
- 15,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType15\r
- }, \r
- \r
- {\r
- //\r
- // Misc SubClass -- Record Type 0F: Pointing Device (SMBIOS Type 21)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER, // 21,\r
- 21,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType21\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 10: Portable Battery (SMBIOS Type 22)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER, // 22,\r
- 22,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType22\r
- }, \r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x11: Reset Capabilities (SMBIOS Type 23)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER, // 23,\r
- 23,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType23\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x12: Hardware Security (SMBIOS Type 24)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER, // 24,\r
- 24,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType24\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x13: System Power Controls (SMBIOS Type 25)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER, // 25,\r
- 25,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType25\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x14: System Power Controls (SMBIOS Type 26)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER, // 26,\r
- 26,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType26\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x15: Cooling Device (SMBIOS Type 27)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER, // 27,\r
- 27,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType27\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x16: Temperature Probe (SMBIOS Type 28)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER, // 28,\r
- 28,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType28\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x17: Electrical Current Probe (SMBIOS Type 29)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER, // 29,\r
- 29,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType29\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x18: Temperature Probe (SMBIOS Type 30)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER, // 30,\r
- 30,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType30\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x1A: Boot Information (SMBIOS Type 32)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER, // 32,\r
- 32,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType32\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x1B: Management Device (SMBIOS Type 34)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER, // 34,\r
- 34,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType34\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x21: Management Device Threshold (SMBIOS Type 36)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER, // 36,\r
- 36,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType36\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x1D: Boot Information (SMBIOS Type 38)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER, // 38,\r
- 38,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType38\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x1E: Power supply (SMBIOS Type 39)\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER, // 39,\r
- 39,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType39\r
- },\r
-\r
- {\r
- //\r
- // Misc SubClass -- Record Type 0x80-0xFF: OEM type\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER, // 0x80,\r
- 0x80,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscTypeOEM\r
- },\r
-\r
- {\r
- //\r
- // End-of-Table -- Record Type 127\r
- //\r
- EFI_MISC_SUBCLASS_GUID,\r
- 127,\r
- 127,\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_FUNCTION,\r
- 0,\r
- SmbiosFldMiscType127\r
- },\r
- //\r
- // Table Terminator\r
- //\r
- {\r
- {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}},\r
- 0,\r
- 0,\r
- (SMBIOS_STRUCTURE_LOCATING_METHOD) 0,\r
- (SMBIOS_FIELD_FILLING_METHOD) 0,\r
- 0,\r
- 0\r
- }\r
-};\r
+++ /dev/null
-#/** @file\r
-# This thunk driver register a filter for DataHub protocol, once a data hub record\r
-# is added via EFI_DATA_HUB_PROTOCOL->LogData(), this filter will be invoked to \r
-# translate the datahub's record to SMBIOS record.\r
-#\r
-# Copyright (c) 2009, Intel Corporation\r
-#\r
-# All rights reserved. This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution. The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-#\r
-#**/\r
-\r
-[Defines]\r
- INF_VERSION = 0x00010005\r
- BASE_NAME = Datahub2SmbiosThunk\r
- FILE_GUID = 9F8B12CF-E796-408f-9D59-3ACDDC0AFBE3\r
- MODULE_TYPE = DXE_DRIVER\r
- VERSION_STRING = 1.0\r
- EDK_RELEASE_VERSION = 0x00020000\r
- EFI_SPECIFICATION_VERSION = 0x00020000\r
-\r
- ENTRY_POINT = ThunkEntry\r
-\r
-#\r
-# The following information is for reference only and not required by the build tools.\r
-#\r
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC\r
-#\r
-\r
-[Sources.common]\r
- Thunk.c\r
- Thunk.h\r
- Translate.c\r
- ConvLib.c\r
- ConvTable.c\r
- ProcessorConv.c\r
- MemoryConv.c\r
- MiscConv.c\r
- \r
-[Packages]\r
- MdePkg/MdePkg.dec\r
- MdeModulePkg/MdeModulePkg.dec\r
- IntelFrameworkPkg/IntelFrameworkPkg.dec\r
- EdkCompatibilityPkg/EdkCompatibilityPkg.dec\r
- \r
- \r
-[LibraryClasses]\r
- UefiBootServicesTableLib\r
- MemoryAllocationLib\r
- UefiDriverEntryPoint\r
- BaseMemoryLib\r
- HiiLib\r
- DebugLib\r
- BaseLib\r
- PcdLib\r
-\r
-[Protocols]\r
- gEfiDataHubProtocolGuid ## CONSUMES\r
- gEfiSmbiosProtocolGuid ## CONSUMES\r
-\r
-[Guids] \r
- gEfiMemorySubClassGuid ## CONSUMES\r
- gEfiMiscSubClassGuid ## CONSUMES\r
- gEfiCacheSubClassGuid ## CONSUMES\r
- \r
-[FeaturePcd]\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFrameworkCompatibilitySupport\r
- \r
-[Depex]\r
- gEfiDataHubProtocolGuid AND gEfiSmbiosProtocolGuid
\ No newline at end of file
+++ /dev/null
-/** @file\r
- Routines that support Memory SubClass data records translation.\r
- \r
-Copyright (c) 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "Thunk.h"\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type 2 -- Physical Memory\r
- Array.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType2 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MEMORY_ARRAY_LOCATION_DATA *PhyMemArray;\r
- FRAMEWORK_MEMORY_ARRAY_LOCATION_DATA *FrameworkPhyMemArray;\r
- UINT32 MemoryCapacity;\r
- UINT16 NumberMemoryDevices;\r
- UINT16 Test16;\r
-\r
- Status = EFI_SUCCESS;\r
- PhyMemArray = (EFI_MEMORY_ARRAY_LOCATION_DATA *) RecordData;\r
- FrameworkPhyMemArray = (FRAMEWORK_MEMORY_ARRAY_LOCATION_DATA *) RecordData;\r
-\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE16, Location)) = (UINT8) (PhyMemArray->MemoryArrayLocation);\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE16, Use)) = (UINT8) (PhyMemArray->MemoryArrayUse);\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE16, MemoryErrorCorrection)) = (UINT8) (PhyMemArray->MemoryErrorCorrection);\r
-\r
- if (!FeaturePcdGet(PcdFrameworkCompatibilitySupport)) {\r
- MemoryCapacity = (UINT32) (((UINTN) PhyMemArray->MaximumMemoryCapacity.Value) << PhyMemArray->MaximumMemoryCapacity.Exponent);\r
- NumberMemoryDevices = PhyMemArray->NumberMemoryDevices;\r
- } else {\r
- //\r
- // Support EDk/Framework defined Data strucutre.\r
- //\r
- MemoryCapacity = FrameworkPhyMemArray->MaximumMemoryCapacity;\r
- NumberMemoryDevices = FrameworkPhyMemArray->NumberMemoryDevices;\r
- }\r
-\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE16, MaximumCapacity),\r
- &MemoryCapacity,\r
- 4\r
- );\r
-\r
- Test16 = 0xfffe;\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE16, MemoryErrorInformationHandle),\r
- &Test16,\r
- 2\r
- );\r
- \r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE16, NumberOfMemoryDevices),\r
- &NumberMemoryDevices,\r
- 2\r
- );\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type 3 -\r
- - Memory Device: SMBIOS Type 17\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType3 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_ARRAY_LINK_DATA *MemDevice;\r
- FRAMEWORK_MEMORY_ARRAY_LINK_DATA *FrameworkMemDevice;\r
- UINT64 MemoryDeviceSize;\r
- BOOLEAN MemoryDeviceSizeUnitMega;\r
- UINT16 MemoryDeviceSpeed;\r
- UINT16 MemoryDeviceExponent;\r
- UINT16 Test16;\r
-\r
- MemDevice = (EFI_MEMORY_ARRAY_LINK_DATA *) RecordData;\r
- FrameworkMemDevice = (FRAMEWORK_MEMORY_ARRAY_LINK_DATA *) RecordData;\r
- MemoryDeviceSpeed = 0;\r
- MemoryDeviceExponent = 0;\r
-\r
- //\r
- // Memory Device Locator\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE17, DeviceLocator),\r
- &(MemDevice->MemoryDeviceLocator),\r
- sizeof (STRING_REF)\r
- );\r
-\r
- //\r
- // Memory Bank Locator\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE17, BankLocator),\r
- &(MemDevice->MemoryBankLocator),\r
- sizeof (STRING_REF)\r
- );\r
-\r
- //\r
- // Memory Manufacturer\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE17, Manufacturer),\r
- &(MemDevice->MemoryManufacturer),\r
- sizeof (STRING_REF)\r
- );\r
-\r
- //\r
- // Memory Serial Number\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE17, SerialNumber),\r
- &(MemDevice->MemorySerialNumber),\r
- sizeof (STRING_REF)\r
- );\r
-\r
- //\r
- // Memory Asset Tag\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE17, AssetTag),\r
- &(MemDevice->MemoryAssetTag),\r
- sizeof (STRING_REF)\r
- );\r
-\r
- //\r
- // Memory Part Number\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE17, PartNumber),\r
- &(MemDevice->MemoryPartNumber),\r
- sizeof (STRING_REF)\r
- );\r
-\r
- //\r
- // Memory Array Link\r
- //\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE17, MemoryArrayHandle),\r
- 16, // SMBIOS type 16\r
- &MemDevice->MemoryArrayLink,\r
- &gEfiMemorySubClassGuid\r
- );\r
-\r
- //\r
- // Set Memory Error Information Handle to Not supported\r
- //\r
- Test16 = 0xfffe;\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE17, MemoryErrorInformationHandle),\r
- &Test16,\r
- sizeof (EFI_SMBIOS_HANDLE)\r
- ); \r
- \r
- //\r
- // Total width\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, TotalWidth),\r
- &MemDevice->MemoryTotalWidth,\r
- 2\r
- );\r
-\r
- //\r
- // Data Width\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, DataWidth),\r
- &MemDevice->MemoryDataWidth,\r
- 2\r
- );\r
-\r
- //\r
- // Device Size\r
- //\r
- if (!FeaturePcdGet(PcdFrameworkCompatibilitySupport)) {\r
- //\r
- // Form Factor\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, FormFactor),\r
- &MemDevice->MemoryFormFactor,\r
- 1\r
- );\r
- \r
- //\r
- // Device Set\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, DeviceSet),\r
- &MemDevice->MemoryDeviceSet,\r
- 1\r
- );\r
- \r
- //\r
- // Type\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, MemoryType),\r
- &MemDevice->MemoryType,\r
- 1\r
- );\r
- \r
- //\r
- // Type Detail\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, TypeDetail),\r
- &MemDevice->MemoryTypeDetail,\r
- 2\r
- );\r
- \r
- //\r
- // Speed\r
- //\r
- MemoryDeviceSpeed = MemDevice->MemorySpeed.Value;\r
- MemoryDeviceExponent = MemDevice->MemorySpeed.Exponent;\r
- while (MemoryDeviceExponent-- > 0) {\r
- MemoryDeviceSpeed = (UINT16) (MemoryDeviceSpeed * 10);\r
- }\r
-\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, Speed),\r
- &MemoryDeviceSpeed,\r
- 2\r
- );\r
-\r
- MemoryDeviceSize = (UINT64) (((UINTN) MemDevice->MemoryDeviceSize.Value) << MemDevice->MemoryDeviceSize.Exponent);\r
- } else {\r
- //\r
- // Form Factor\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, FormFactor),\r
- &FrameworkMemDevice->MemoryFormFactor,\r
- 1\r
- );\r
- \r
- //\r
- // Device Set\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, DeviceSet),\r
- &FrameworkMemDevice->MemoryDeviceSet,\r
- 1\r
- );\r
- \r
- //\r
- // Type\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, MemoryType),\r
- &FrameworkMemDevice->MemoryType,\r
- 1\r
- );\r
- \r
- //\r
- // Type Detail\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, TypeDetail),\r
- &FrameworkMemDevice->MemoryTypeDetail,\r
- 2\r
- );\r
- \r
- //\r
- // Speed\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, Speed),\r
- &FrameworkMemDevice->MemorySpeed,\r
- 2\r
- );\r
-\r
- MemoryDeviceSize = FrameworkMemDevice->MemoryDeviceSize;\r
- }\r
-\r
- MemoryDeviceSizeUnitMega = FALSE;\r
- MemoryDeviceSize = RShiftU64 (MemoryDeviceSize, 10);\r
- //\r
- // kilo as unit\r
- //\r
- if (MemoryDeviceSize > 0xffff) {\r
- MemoryDeviceSize = RShiftU64 (MemoryDeviceSize, 10);\r
- //\r
- // Mega as unit\r
- //\r
- MemoryDeviceSizeUnitMega = TRUE;\r
- }\r
-\r
- MemoryDeviceSize = MemoryDeviceSize & 0x7fff;\r
- if (MemoryDeviceSize != 0 && !MemoryDeviceSizeUnitMega) {\r
- MemoryDeviceSize |= 0x8000;\r
- }\r
-\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE17, Size),\r
- &MemoryDeviceSize,\r
- 2\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type 3 -\r
- - Memory Device: SMBIOS Type 6\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldSMBIOSType6 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_ARRAY_LINK_DATA *MemDevice;\r
- UINT64 MemoryDeviceSize;\r
- UINT8 MemSize;\r
- UINT16 MemType;\r
- UINT8 MemSpeed;\r
- FRAMEWORK_MEMORY_ARRAY_LINK_DATA *FrameworkMemDevice;\r
- UINT16 MemoryDeviceSpeed;\r
- UINT16 MemoryDeviceExponent;\r
-\r
- MemDevice = (EFI_MEMORY_ARRAY_LINK_DATA *) RecordData;\r
- FrameworkMemDevice = (FRAMEWORK_MEMORY_ARRAY_LINK_DATA *) RecordData;\r
- MemoryDeviceExponent = 0;\r
-\r
- //\r
- // Memory Device Locator\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE6, SocketDesignation),\r
- &(MemDevice->MemoryDeviceLocator),\r
- 2\r
- );\r
- \r
- if (!FeaturePcdGet(PcdFrameworkCompatibilitySupport)) {\r
- MemoryDeviceSpeed = MemDevice->MemorySpeed.Value;\r
- MemoryDeviceExponent = MemDevice->MemorySpeed.Exponent;\r
- while (MemoryDeviceExponent-- > 0) {\r
- MemoryDeviceSpeed = (UINT16) (MemoryDeviceSpeed * 10);\r
- }\r
- MemoryDeviceSize = (UINT64) (((UINTN) MemDevice->MemoryDeviceSize.Value) << MemDevice->MemoryDeviceSize.Exponent);\r
- } else {\r
- //\r
- // Support EDk/Framework defined Data strucutre.\r
- //\r
- MemoryDeviceSpeed = FrameworkMemDevice->MemorySpeed;\r
- MemoryDeviceSize = FrameworkMemDevice->MemoryDeviceSize;\r
- }\r
- \r
- if (MemoryDeviceSpeed == 0) {\r
- MemSpeed = 0;\r
- } else {\r
- //\r
- // Memory speed is in ns unit\r
- //\r
- MemSpeed = (UINT8)(1000 / MemoryDeviceSpeed);\r
- }\r
-\r
- CopyMem (\r
- (UINT8*)StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE6, CurrentSpeed),\r
- &MemSpeed,\r
- 1\r
- );\r
-\r
-\r
- //\r
- // Device Size\r
- //\r
- MemSize = 0;\r
- if (MemoryDeviceSize == 0) {\r
- MemSize = 0x7F;\r
- } else {\r
- MemoryDeviceSize = RShiftU64 (MemoryDeviceSize, 21);\r
- while (MemoryDeviceSize != 0) {\r
- MemSize++;\r
- MemoryDeviceSize = RShiftU64(MemoryDeviceSize,1);\r
- }\r
- }\r
-\r
- CopyMem (\r
- (UINT8*)StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE6, InstalledSize),\r
- &MemSize,\r
- 1\r
- );\r
-\r
- CopyMem (\r
- (UINT8*)StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE6, EnabledSize),\r
- &MemSize,\r
- 1\r
- );\r
-\r
- //\r
- // According SMBIOS SPEC Type 6 definition\r
- //\r
- MemType = 0;\r
- if (!FeaturePcdGet(PcdFrameworkCompatibilitySupport)) {\r
- if (MemDevice->MemoryFormFactor == EfiMemoryFormFactorDimm ||\r
- MemDevice->MemoryFormFactor == EfiMemoryFormFactorFbDimm) {\r
- MemType |= 1<<8;\r
- }\r
- \r
- if (MemDevice->MemoryFormFactor == EfiMemoryFormFactorSimm) {\r
- MemType |= 1<<7;\r
- }\r
- \r
- if (MemDevice->MemoryType == EfiMemoryTypeSdram) {\r
- MemType |= 1<<10;\r
- }\r
- \r
- if (MemDevice->MemoryTypeDetail.Edo == 1) {\r
- MemType |= 1<<4;\r
- }\r
- \r
- if (MemDevice->MemoryTypeDetail.FastPaged == 1) {\r
- MemType |= 1<<3;\r
- }\r
- } else {\r
- //\r
- // Support EDk/Framework defined Data strucutre.\r
- //\r
- if (FrameworkMemDevice->MemoryFormFactor == EfiMemoryFormFactorDimm ||\r
- FrameworkMemDevice->MemoryFormFactor == EfiMemoryFormFactorFbDimm) {\r
- MemType |= 1<<8;\r
- }\r
- \r
- if (FrameworkMemDevice->MemoryFormFactor == EfiMemoryFormFactorSimm) {\r
- MemType |= 1<<7;\r
- }\r
- \r
- if (FrameworkMemDevice->MemoryType == EfiMemoryTypeSdram) {\r
- MemType |= 1<<10;\r
- }\r
- \r
- if (FrameworkMemDevice->MemoryTypeDetail.Edo == 1) {\r
- MemType |= 1<<4;\r
- }\r
- \r
- if (FrameworkMemDevice->MemoryTypeDetail.FastPaged == 1) {\r
- MemType |= 1<<3;\r
- }\r
- }\r
- //\r
- // Form Factor\r
- //\r
- CopyMem (\r
- (UINT8*)StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE6, CurrentMemoryType),\r
- &MemType,\r
- 2\r
- );\r
-\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type 4\r
- -- Memory Array Mapped Address: SMBIOS Type 19\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType4 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_ARRAY_START_ADDRESS_DATA *Masa;\r
- EFI_PHYSICAL_ADDRESS TempData;\r
-\r
- Masa = (EFI_MEMORY_ARRAY_START_ADDRESS_DATA *) RecordData;\r
-\r
- //\r
- // Starting Address\r
- //\r
- TempData = RShiftU64 (Masa->MemoryArrayStartAddress, 10);\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE19, StartingAddress),\r
- &TempData,\r
- 4\r
- );\r
-\r
- //\r
- // Ending Address\r
- //\r
- TempData = RShiftU64 (Masa->MemoryArrayEndAddress, 10);\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE19, EndingAddress),\r
- &TempData,\r
- 4\r
- );\r
-\r
- //\r
- // Partition Width\r
- //\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE19, PartitionWidth),\r
- &Masa->MemoryArrayPartitionWidth,\r
- 1\r
- );\r
-\r
- //\r
- // Physical Memory Array Link\r
- //\r
- return SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE19, MemoryArrayHandle),\r
- 16, // SMBIOS type 16\r
- &Masa->PhysicalMemoryArrayLink,\r
- &gEfiMemorySubClassGuid\r
- );\r
-\r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type 5\r
- -- Memory Device Mapped Address: SMBIOS Type 20\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType5 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_DEVICE_START_ADDRESS_DATA *Mdsa;\r
- EFI_PHYSICAL_ADDRESS TempData;\r
-\r
- Mdsa = (EFI_MEMORY_DEVICE_START_ADDRESS_DATA *) RecordData;\r
-\r
- //\r
- // Starting Address\r
- //\r
- TempData = RShiftU64 (Mdsa->MemoryDeviceStartAddress, 10);\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE20, StartingAddress),\r
- &TempData,\r
- 4\r
- );\r
-\r
- //\r
- // Ending Address\r
- //\r
- TempData = RShiftU64 (Mdsa->MemoryDeviceEndAddress, 10);\r
- CopyMem (\r
- (UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE20, EndingAddress),\r
- &TempData,\r
- 4\r
- );\r
-\r
- //\r
- // Memory Device Link\r
- //\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE20, MemoryDeviceHandle),\r
- 17, // SMBIOS type 17\r
- &Mdsa->PhysicalMemoryDeviceLink,\r
- &gEfiMemorySubClassGuid\r
- );\r
-\r
- //\r
- // Memory Array Mapped Address Link\r
- //\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE20, MemoryArrayMappedAddressHandle),\r
- 19, // SMBIOS type 19\r
- &Mdsa->PhysicalMemoryArrayLink,\r
- &gEfiMemorySubClassGuid\r
- );\r
-\r
- //\r
- // Memory Device Partition Row Position\r
- //\r
- *(UINT8 *) ((UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE20, PartitionRowPosition)) = (UINT8) Mdsa->MemoryDevicePartitionRowPosition;\r
-\r
- //\r
- // Memory Device Interleave Position\r
- //\r
- *(UINT8 *) ((UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE20, InterleavePosition)) = (UINT8) Mdsa->MemoryDeviceInterleavePosition;\r
-\r
- //\r
- // Memory Device Interleave Data Depth\r
- //\r
- *(UINT8 *) ((UINT8 *) StructureNode->Structure + OFFSET_OF (SMBIOS_TABLE_TYPE20, InterleavedDataDepth)) = (UINT8) Mdsa->MemoryDeviceInterleaveDataDepth;\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type 6\r
- -- Memory Channel Type: SMBIOS Type 37\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType6 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_CHANNEL_TYPE_DATA *McTa;\r
- EFI_STATUS Status;\r
-\r
- McTa = (EFI_MEMORY_CHANNEL_TYPE_DATA *) RecordData;\r
-\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE37, ChannelType)) = (UINT8) (McTa->MemoryChannelType);\r
-\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE37, MaximumChannelLoad)) = (UINT8) (McTa->MemoryChannelMaximumLoad);\r
-\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE37, MemoryDeviceCount)) = (UINT8) (McTa->MemoryChannelDeviceCount);\r
-\r
- //\r
- // Update the length field\r
- // Multiple device loads are filled through SmbiosFldMemoryType7\r
- //\r
- StructureNode->Structure->Length = (UINT8)(StructureNode->Structure->Length + \r
- sizeof(MEMORY_DEVICE) * McTa->MemoryChannelDeviceCount);\r
- Status = SmbiosEnlargeStructureBuffer(\r
- StructureNode, \r
- StructureNode->Structure->Length,\r
- StructureNode->StructureSize,\r
- StructureNode->StructureSize + sizeof(MEMORY_DEVICE) * McTa->MemoryChannelDeviceCount\r
- );\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type 7\r
- -- Memory Channel Device: SMBIOS Type 37\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType7 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_CHANNEL_DEVICE_DATA *Mcdd;\r
- UINTN DeviceLoadOffset;\r
- UINTN DeviceLoadHandleOffset;\r
-\r
- Mcdd = (EFI_MEMORY_CHANNEL_DEVICE_DATA *) RecordData;\r
-\r
- if (Mcdd->DeviceId < 1) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- DeviceLoadOffset = OFFSET_OF (SMBIOS_TABLE_TYPE37, MemoryDevice[0]) + 3 * (Mcdd->DeviceId - 1);\r
- DeviceLoadHandleOffset = OFFSET_OF (SMBIOS_TABLE_TYPE37, MemoryDevice[1]) + 3 * (Mcdd->DeviceId - 1);\r
-\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + DeviceLoadOffset) = (UINT8) (Mcdd->MemoryChannelDeviceLoad);\r
-\r
- //\r
- // Memory Device Handle Link\r
- //\r
- return SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) DeviceLoadHandleOffset,\r
- 17, // Smbios type 17 -- Physical Memory Device\r
- &Mcdd->DeviceLink,\r
- &gEfiMemorySubClassGuid\r
- );\r
-\r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type 8\r
- -- Memory Controller information: SMBIOS Type 5\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType8 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_CONTROLLER_INFORMATION_DATA *MemoryController;\r
- UINT32 NewMinimalSize;\r
- UINT16 Count;\r
- EFI_INTER_LINK_DATA *Link; \r
- EFI_STATUS Status;\r
- \r
- NewMinimalSize = 0;\r
-\r
- //\r
- // There is an update from EFI_MEMORY_CONTROLLER_INFORMATION to\r
- // EFI_MEMORY_CONTROLLER_INFORMATION_DATA. Multiple MemoryModuleConfig\r
- // handles are filled.\r
- //\r
- MemoryController = (EFI_MEMORY_CONTROLLER_INFORMATION_DATA *)RecordData;\r
- \r
- //\r
- // ErrorDetectingMethod\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, ErrDetectMethod),\r
- &MemoryController->ErrorDetectingMethod,\r
- 1\r
- ); \r
-\r
- //\r
- // ErrorCorrectingCapability\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, ErrCorrectCapability),\r
- &MemoryController->ErrorCorrectingCapability,\r
- 1\r
- );\r
- \r
- //\r
- // MemorySupportedInterleave\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, SupportInterleave),\r
- &MemoryController->MemorySupportedInterleave,\r
- 1\r
- );\r
- \r
- //\r
- // MemoryCurrentInterleave\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, CurrentInterleave),\r
- &MemoryController->MemoryCurrentInterleave,\r
- 1\r
- ); \r
- \r
- //\r
- // MaxMemoryModuleSize\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, MaxMemoryModuleSize),\r
- &MemoryController->MaxMemoryModuleSize,\r
- 1\r
- );\r
- \r
- //\r
- // MemorySpeedType\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, SupportSpeed),\r
- &MemoryController->MemorySpeedType,\r
- 2\r
- ); \r
-\r
- //\r
- // MemorySupportedType\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, SupportMemoryType),\r
- &MemoryController->MemorySupportedType,\r
- 2\r
- ); \r
-\r
- //\r
- // MemoryModuleVoltage\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, MemoryModuleVoltage),\r
- &MemoryController->MemoryModuleVoltage,\r
- 1\r
- ); \r
-\r
- //\r
- // NumberofMemorySlot\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, AssociatedMemorySlotNum),\r
- &MemoryController->NumberofMemorySlot,\r
- 1\r
- ); \r
- \r
- if (MemoryController->NumberofMemorySlot == 0) {\r
- //\r
- // EnabledCorrectingCapability\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, MemoryModuleConfigHandles),\r
- &MemoryController->EnabledCorrectingCapability,\r
- 1\r
- ); \r
- } else {\r
- //\r
- // Memory module configuration handles exist\r
- // we should enlarge smbios entry buffer from minimal size\r
- //\r
- NewMinimalSize = (MemoryController->NumberofMemorySlot) * sizeof(UINT16) + StructureNode->StructureSize;\r
- StructureNode->Structure->Length = (UINT8) (NewMinimalSize - 2);\r
- Status = SmbiosEnlargeStructureBuffer (StructureNode, StructureNode->Structure->Length, StructureNode->StructureSize, NewMinimalSize);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- //\r
- // MemoryModuleConfigHandles\r
- //\r
- for (Count = 0, Link = MemoryController->MemoryModuleConfig; \r
- Count < MemoryController->NumberofMemorySlot; \r
- Count++, Link++) {\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) (OFFSET_OF (SMBIOS_TABLE_TYPE5, MemoryModuleConfigHandles) + Count * sizeof(UINT16)),\r
- 6, // SMBIOS type 6\r
- Link,\r
- &gEfiMemorySubClassGuid\r
- );\r
- }\r
- \r
- //\r
- // EnabledCorrectingCapability\r
- // \r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE5, MemoryModuleConfigHandles) + (MemoryController->NumberofMemorySlot) * sizeof(UINT16),\r
- &MemoryController->EnabledCorrectingCapability,\r
- 1\r
- );\r
- }\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type \r
- -- Memory 32 Bit Error Information: SMBIOS Type 18\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType9 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_32BIT_ERROR_INFORMATION *MemoryInfo;\r
- \r
- MemoryInfo = (EFI_MEMORY_32BIT_ERROR_INFORMATION *)RecordData;\r
- \r
- //\r
- // MemoryErrorType\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE18, ErrorType),\r
- &MemoryInfo->MemoryErrorType,\r
- 1\r
- );\r
- \r
- //\r
- // MemoryErrorGranularity\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE18, ErrorGranularity),\r
- &MemoryInfo->MemoryErrorGranularity,\r
- 1\r
- ); \r
-\r
- //\r
- // MemoryErrorOperation\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE18, ErrorOperation),\r
- &MemoryInfo->MemoryErrorOperation,\r
- 1\r
- ); \r
-\r
- //\r
- // VendorSyndrome\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE18, VendorSyndrome),\r
- &MemoryInfo->VendorSyndrome,\r
- 4\r
- ); \r
-\r
- //\r
- // MemoryArrayErrorAddress\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE18, MemoryArrayErrorAddress),\r
- &MemoryInfo->MemoryArrayErrorAddress,\r
- 4\r
- ); \r
-\r
- //\r
- // DeviceErrorAddress\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE18, DeviceErrorAddress),\r
- &MemoryInfo->DeviceErrorAddress,\r
- 4\r
- ); \r
-\r
- //\r
- // DeviceErrorResolution\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE18, ErrorResolution),\r
- &MemoryInfo->DeviceErrorResolution,\r
- 4\r
- ); \r
- \r
- return EFI_SUCCESS; \r
-}\r
-\r
-/**\r
- Field Filling Function for Memory SubClass record type \r
- -- Memory 64 Bit Error Information: SMBIOS Type 33\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMemoryType10 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MEMORY_64BIT_ERROR_INFORMATION *MemoryInfo;\r
- \r
- MemoryInfo = (EFI_MEMORY_64BIT_ERROR_INFORMATION *)RecordData;\r
- \r
- //\r
- // MemoryErrorType\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE33, ErrorType),\r
- &MemoryInfo->MemoryErrorType,\r
- 1\r
- );\r
- \r
- //\r
- // MemoryErrorGranularity\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE33, ErrorGranularity),\r
- &MemoryInfo->MemoryErrorGranularity,\r
- 1\r
- ); \r
-\r
- //\r
- // MemoryErrorOperation\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE33, ErrorOperation),\r
- &MemoryInfo->MemoryErrorOperation,\r
- 1\r
- ); \r
-\r
- //\r
- // VendorSyndrome\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE33, VendorSyndrome),\r
- &MemoryInfo->VendorSyndrome,\r
- 4\r
- ); \r
-\r
- //\r
- // MemoryArrayErrorAddress\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE33, MemoryArrayErrorAddress),\r
- &MemoryInfo->MemoryArrayErrorAddress,\r
- 8\r
- ); \r
-\r
- //\r
- // DeviceErrorAddress\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE33, DeviceErrorAddress),\r
- &MemoryInfo->DeviceErrorAddress,\r
- 8\r
- ); \r
-\r
- //\r
- // DeviceErrorResolution\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE33, ErrorResolution),\r
- &MemoryInfo->DeviceErrorResolution,\r
- 4\r
- ); \r
- \r
- return EFI_SUCCESS; \r
-}\r
+++ /dev/null
-/** @file\r
- Routines that support Misc SubClass data records translation.\r
- \r
-Copyright (c) 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "Thunk.h"\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 0 -- Bios Information.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType0 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_BIOS_VENDOR_DATA *BiosInfo;\r
-\r
- Status = EFI_SUCCESS;\r
- BiosInfo = NULL;\r
-\r
- BiosInfo = (EFI_MISC_BIOS_VENDOR_DATA *) RecordData;\r
-\r
- //\r
- // Bios Vendor\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE0, Vendor),\r
- &(BiosInfo->BiosVendor),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Bios Version\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosVersion),\r
- &(BiosInfo->BiosVersion),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Bios Release Date\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosReleaseDate),\r
- &(BiosInfo->BiosReleaseDate),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Bios Starting Address Segment\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSegment),\r
- &BiosInfo->BiosStartingAddress,\r
- 2\r
- );\r
-\r
- //\r
- // Bios Physical device size\r
- //\r
- SmbiosFldBase2ToByteWith64K (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSize),\r
- &BiosInfo->BiosPhysicalDeviceSize,\r
- sizeof (EFI_EXP_BASE2_DATA)\r
- );\r
- (*(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSize)))--;\r
-\r
- //\r
- // Bios Characteristics\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosCharacteristics),\r
- &BiosInfo->BiosCharacteristics1,\r
- 4\r
- );\r
- \r
- //\r
- // Bios Characteristics higher four bytes\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosCharacteristics) + 4,\r
- &BiosInfo->BiosCharacteristics2,\r
- 4\r
- ); \r
-\r
- //\r
- // Bios Characteristics Extension1/2\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BIOSCharacteristicsExtensionBytes),\r
- (UINT8 *) &BiosInfo->BiosCharacteristics1 + 4,\r
- 2\r
- );\r
-\r
- //\r
- // System BIOS Major Release\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, SystemBiosMajorRelease),\r
- (UINT8 *) &BiosInfo->BiosMajorRelease,\r
- 1\r
- );\r
-\r
- //\r
- // System BIOS Minor Release\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, SystemBiosMinorRelease),\r
- (UINT8 *) &BiosInfo->BiosMinorRelease,\r
- 1\r
- );\r
-\r
- //\r
- // Embedded Controller Firmware Major Release\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, EmbeddedControllerFirmwareMajorRelease),\r
- (UINT8 *) &BiosInfo->BiosEmbeddedFirmwareMajorRelease,\r
- 1\r
- );\r
-\r
- //\r
- // Embedded Controller Firmware Minor Release\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, EmbeddedControllerFirmwareMinorRelease),\r
- (UINT8 *) &BiosInfo->BiosEmbeddedFirmwareMinorRelease,\r
- 1\r
- );\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 1 -- System Information.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType1 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_SYSTEM_MANUFACTURER_DATA *SystemInfo;\r
-\r
- Status = EFI_SUCCESS;\r
- SystemInfo = NULL;\r
-\r
- SystemInfo = (EFI_MISC_SYSTEM_MANUFACTURER_DATA *) RecordData;\r
-\r
- //\r
- // System Manufacturer\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE1, Manufacturer),\r
- &(SystemInfo->SystemManufacturer),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // System Product Name\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE1, ProductName),\r
- &(SystemInfo->SystemProductName),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // System Version\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE1, Version),\r
- &(SystemInfo->SystemVersion),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // System Serial Number\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE1, SerialNumber),\r
- &(SystemInfo->SystemSerialNumber),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Uuid\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE1, Uuid),\r
- &SystemInfo->SystemUuid,\r
- 16\r
- );\r
-\r
- //\r
- // Wakeup Type\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE1, WakeUpType),\r
- &SystemInfo->SystemWakeupType,\r
- 1\r
- );\r
-\r
- //\r
- // System SKU Number\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE1, SKUNumber),\r
- &(SystemInfo->SystemSKUNumber),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // System Family\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE1, Family),\r
- &(SystemInfo->SystemFamily),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for record type 2 -- Base Board Manufacture.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType2 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_BASE_BOARD_MANUFACTURER_DATA *Bbm;\r
- Status = EFI_SUCCESS;\r
- Bbm = (EFI_MISC_BASE_BOARD_MANUFACTURER_DATA *) RecordData;\r
-\r
- //\r
- // Manufacturer\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE2, Manufacturer),\r
- &(Bbm->BaseBoardManufacturer),\r
- 2\r
- );\r
-\r
- //\r
- // Product\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE2, ProductName),\r
- &(Bbm->BaseBoardProductName),\r
- 2\r
- );\r
-\r
- //\r
- // Version\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE2, Version),\r
- &(Bbm->BaseBoardVersion),\r
- 2\r
- );\r
-\r
- //\r
- // Serial Number\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE2, SerialNumber),\r
- &(Bbm->BaseBoardSerialNumber),\r
- 2\r
- );\r
-\r
- //\r
- // Asset Tag\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE2, AssetTag),\r
- &(Bbm->BaseBoardAssetTag),\r
- 2\r
- );\r
-\r
- //\r
- // Location in Chassis\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE2, LocationInChassis),\r
- &(Bbm->BaseBoardChassisLocation),\r
- 2\r
- );\r
-\r
- //\r
- // Feature Flags\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, FeatureFlag),\r
- &Bbm->BaseBoardFeatureFlags,\r
- 1\r
- );\r
-\r
- //\r
- // Board Type\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, BoardType)) = (UINT8) Bbm->BaseBoardType;\r
-\r
- //\r
- // Chassis Handle\r
- //\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE2, ChassisHandle),\r
- 3, // SMBIOS type 3 - System Enclosure or Chassis\r
- &Bbm->BaseBoardChassisLink,\r
- &gEfiMiscSubClassGuid\r
- );\r
-\r
- //\r
- // Number of Contained Object Handles\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, NumberOfContainedObjectHandles)) = (UINT8) Bbm->BaseBoardNumberLinks;\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 3 -\r
- - System Enclosure or Chassis.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType3 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_CHASSIS_MANUFACTURER_DATA *Ec;\r
- EFI_MISC_ELEMENTS *Element;\r
- UINT16 Index;\r
- UINT8 ContainedElementType;\r
- Status = EFI_SUCCESS;\r
- Ec = (EFI_MISC_CHASSIS_MANUFACTURER_DATA *) RecordData;\r
-\r
- //\r
- // Chassis Type\r
- //\r
- *(UINT8*)((UINT8 *) (StructureNode->Structure) + \r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, Type)) \r
- = (UINT8) (Ec->ChassisType.ChassisType | Ec->ChassisType.ChassisLockPresent << 7);\r
-\r
-\r
- //\r
- // Chassis Bootup State\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, BootupState),\r
- &Ec->ChassisBootupState,\r
- 1\r
- );\r
-\r
- //\r
- // Chassis Power Supply State\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, PowerSupplyState),\r
- &Ec->ChassisPowerSupplyState,\r
- 1\r
- );\r
-\r
- //\r
- // Chassis Thermal State\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, ThermalState),\r
- &Ec->ChassisThermalState,\r
- 1\r
- );\r
-\r
- //\r
- // Chassis Security State\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, SecurityStatus),\r
- &Ec->ChassisSecurityState,\r
- 1\r
- );\r
-\r
- //\r
- // Chassis Oem Defined\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, OemDefined),\r
- &Ec->ChassisOemDefined,\r
- 4\r
- );\r
-\r
- //\r
- // Chassis Height\r
- //\r
- *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, Height)) \r
- = (UINT8)Ec->ChassisHeight;\r
-\r
- //\r
- // Chassis Number Power Cords\r
- //\r
- *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, NumberofPowerCords)) \r
- = (UINT8)Ec->ChassisNumberPowerCords;\r
- \r
- //\r
- // Chassis Element Count\r
- //\r
- *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElementCount)) \r
- = (UINT8)Ec->ChassisElementCount;\r
-\r
- if( Ec->ChassisElementCount ) {\r
- //\r
- // Element Record Length\r
- // Current solution covers first 3 bytes; user can extend to meet its requirements.\r
- //\r
- *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElementRecordLength)) \r
- = (UINT8)sizeof(CONTAINED_ELEMENT);\r
-\r
- //\r
- // Update the structure's length and StructureSize\r
- //\r
- StructureNode->Structure->Length = (UINT8)(StructureNode->Structure->Length + \r
- Ec->ChassisElementCount * sizeof(CONTAINED_ELEMENT));\r
- Status = SmbiosEnlargeStructureBuffer (\r
- StructureNode,\r
- StructureNode->Structure->Length,\r
- StructureNode->StructureSize,\r
- StructureNode->StructureSize + Ec->ChassisElementCount * sizeof(CONTAINED_ELEMENT)\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- \r
- //\r
- // Contained Elements\r
- //\r
- for (Index=0, Element = &Ec->ChassisElements; \r
- Index < Ec->ChassisElementCount; \r
- Index += 1, Element ++) {\r
-\r
- //\r
- // ContainedElementType\r
- //\r
- ContainedElementType = (UINT8)((Element->ChassisElementType.RecordType == 1)\r
- ? (UINT8)(Element->ChassisElementType.RecordType << 7 | Element->ChassisElementType.Type)\r
- : (UINT8)(Element->ChassisBaseBoard));\r
- *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
- Index * sizeof(CONTAINED_ELEMENT) + \r
- OFFSET_OF(CONTAINED_ELEMENT,ContainedElementType)) \r
- = ContainedElementType;\r
-\r
- //\r
- // ContainedElementMinimum\r
- //\r
- *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
- Index * sizeof(CONTAINED_ELEMENT) + \r
- OFFSET_OF(CONTAINED_ELEMENT,ContainedElementMinimum))\r
- = (UINT8)Element->ChassisElementMinimum;\r
-\r
- //\r
- // ContainedElementMaximum\r
- //\r
- *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
- Index * sizeof(CONTAINED_ELEMENT) + \r
- OFFSET_OF(CONTAINED_ELEMENT,ContainedElementMaximum)) \r
- = (UINT8)Element->ChassisElementMaximum;\r
- }\r
- }\r
-\r
- //\r
- // Move the filling of following four String fields after Contained Elements \r
- // because they would break SMBIOS table.\r
- // Chassis Manufacturer\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, Manufacturer),\r
- &(Ec->ChassisManufacturer),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Chassis Version\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, Version),\r
- &(Ec->ChassisVersion),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Chassis Serial Number\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, SerialNumber),\r
- &(Ec->ChassisSerialNumber),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Chassis Asset Tag\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE3, AssetTag),\r
- &(Ec->ChassisAssetTag),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
- \r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 8 -- Port Connector.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType8 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *Picd;\r
-\r
- Status = EFI_SUCCESS;\r
- Picd = (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData;\r
-\r
- //\r
- // Internal Connector Designator\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE8, InternalReferenceDesignator),\r
- &(Picd->PortInternalConnectorDesignator),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Internal Connector Type\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, InternalConnectorType)) = (UINT8) Picd->PortInternalConnectorType;\r
-\r
- //\r
- // External Connector Designator\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE8, ExternalReferenceDesignator),\r
- &(Picd->PortExternalConnectorDesignator),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Internal Connector Type\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, ExternalConnectorType)) = (UINT8) Picd->PortExternalConnectorType;\r
-\r
- //\r
- // Internal Connector Type\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, PortType)) = (UINT8) Picd->PortType;\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 9 -- System slot.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType9 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA *Slot;\r
-\r
- Status = EFI_SUCCESS;\r
- Slot = (EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA *) RecordData;\r
-\r
- //\r
- // Slot Designation\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotDesignation),\r
- &(Slot->SlotDesignation),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Slot Type\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotType),\r
- &Slot->SlotType,\r
- 1\r
- );\r
-\r
- //\r
- // Slot Data Bus Width\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotDataBusWidth),\r
- &Slot->SlotDataBusWidth,\r
- 1\r
- );\r
-\r
- //\r
- // Slot Usage\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, CurrentUsage),\r
- &Slot->SlotUsage,\r
- 1\r
- );\r
-\r
- //\r
- // Slot Length\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotLength),\r
- &Slot->SlotLength,\r
- 1\r
- );\r
-\r
- //\r
- // Slot Id\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotID),\r
- &Slot->SlotId,\r
- 2\r
- );\r
-\r
- //\r
- // Slot Characteristics\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotCharacteristics1),\r
- &Slot->SlotCharacteristics,\r
- 2\r
- );\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 10 - Onboard Device.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType10 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_ONBOARD_DEVICE_DATA *OnboardDevice;\r
- UINTN NumberOfDevices;\r
- UINTN Index;\r
- UINT8 StatusAndType;\r
-\r
- Status = EFI_SUCCESS;\r
- OnboardDevice = (EFI_MISC_ONBOARD_DEVICE_DATA *) RecordData;\r
-\r
- NumberOfDevices = (StructureNode->Structure->Length - 4) / 2;\r
- for (Index = 0; Index < NumberOfDevices; Index += 1) {\r
- //\r
- // OnBoard Device Description\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- (UINT32) (OFFSET_OF (SMBIOS_TABLE_TYPE10, Device) + 1 + (2 * Index)),\r
- &(OnboardDevice->OnBoardDeviceDescription),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Status & Type: Bit 7 Devicen Status, Bits 6:0 Type of Device\r
- //\r
- StatusAndType = (UINT8) OnboardDevice->OnBoardDeviceStatus.DeviceType;\r
- if (OnboardDevice->OnBoardDeviceStatus.DeviceEnabled != 0) {\r
- StatusAndType |= 0x80;\r
- } else {\r
- StatusAndType &= 0x7F;\r
- }\r
-\r
- * (UINT8 *) ((UINT8 *) (StructureNode->Structure) + (OFFSET_OF (SMBIOS_TABLE_TYPE10, Device) + (2 * Index))) = StatusAndType;\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 11 - OEM Strings.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType11 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_OEM_STRING_DATA *OemString;\r
-\r
- OemString = (EFI_MISC_OEM_STRING_DATA *)RecordData;\r
- //\r
- // OEM String data\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE11, StringCount),\r
- &(OemString->OemStringRef[0]),\r
- 2\r
- );\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 12 - System Options.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType12 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_SYSTEM_OPTION_STRING_DATA *Sos;\r
- UINTN NumberOfInstallableLanguages;\r
- UINTN Index;\r
-\r
- Status = EFI_SUCCESS;\r
- Sos = (EFI_MISC_SYSTEM_OPTION_STRING_DATA *) RecordData;\r
-\r
- //\r
- // As MiscDataHub spec defines,\r
- // NumberOfInstallableLanguages should retrieve from Type 13.\r
- //\r
- NumberOfInstallableLanguages = (StructureNode->Structure->Length - 4);\r
- for (Index = 0; Index < NumberOfInstallableLanguages; Index += 1) {\r
- //\r
- // OnBoard Device Description\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- (UINT32) (OFFSET_OF (SMBIOS_TABLE_TYPE12, StringCount) + (Index)),\r
- &(Sos->SystemOptionStringRef[Index]),\r
- 2\r
- );\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 13 - BIOS Language.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType13 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA *InstallableLanguage;\r
-\r
- InstallableLanguage = (EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA *) RecordData;\r
-\r
- //\r
- // Number Of Installable Languages\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, InstallableLanguages)) = (UINT8) (InstallableLanguage->NumberOfInstallableLanguages);\r
-\r
- //\r
- // Language Flags\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, Flags),\r
- &InstallableLanguage->LanguageFlags,\r
- 1\r
- );\r
-\r
- //\r
- // Current Language Number\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
- &(InstallableLanguage->CurrentLanguageNumber),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 14 - System Language String\r
- Current solution assumes that EFI_MISC_SYSTEM_LANGUAGE_STRINGs are logged with\r
- their LanguageId having ascending orders.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType14 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- UINT16 CurrentLanguageNumber;\r
- EFI_MISC_SYSTEM_LANGUAGE_STRING *LanguageString;\r
- \r
- LanguageString = (EFI_MISC_SYSTEM_LANGUAGE_STRING *) RecordData;\r
-\r
- //\r
- // Backup CurrentLanguage\r
- //\r
- CopyMem (\r
- &CurrentLanguageNumber,\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
- 1\r
- );\r
-\r
- //\r
- // Clear the field so that SmbiosFldString can be reused\r
- //\r
- *(UINT8 *)((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages)) = 0;\r
- \r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
- &(LanguageString->SystemLanguageString),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // Restore CurrentLanguage\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
- &CurrentLanguageNumber,\r
- 1\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 15 -- System Event Log.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType15 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_SYSTEM_EVENT_LOG_DATA *SystemEventLog;\r
-\r
- Status = EFI_SUCCESS;\r
- SystemEventLog = NULL;\r
-\r
- SystemEventLog = (EFI_MISC_SYSTEM_EVENT_LOG_DATA *) RecordData;\r
-\r
- //\r
- // Log Area Length\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogAreaLength),\r
- &(SystemEventLog->LogAreaLength),\r
- 2\r
- );\r
-\r
- //\r
- // Log Header Start Offset\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogHeaderStartOffset),\r
- &(SystemEventLog->LogHeaderStartOffset),\r
- 2\r
- );\r
-\r
- //\r
- // Log Data Start Offset\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogDataStartOffset),\r
- &(SystemEventLog->LogDataStartOffset),\r
- 2\r
- );\r
-\r
- //\r
- // Access Method\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, AccessMethod),\r
- &(SystemEventLog->AccessMethod),\r
- 1\r
- );\r
-\r
- //\r
- // Log Status\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogStatus),\r
- &(SystemEventLog->LogStatus),\r
- 1\r
- );\r
-\r
- //\r
- // Log Change Token\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogChangeToken),\r
- &(SystemEventLog->LogChangeToken),\r
- 4\r
- );\r
-\r
- //\r
- // Access Method Address\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, AccessMethodAddress),\r
- &(SystemEventLog->AccessMethodAddress),\r
- 4\r
- );\r
-\r
- //\r
- // Log Header Format\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogHeaderFormat),\r
- &(SystemEventLog->LogHeaderFormat),\r
- 1\r
- );\r
-\r
- //\r
- // Number of Supported Log Type Descriptors\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, NumberOfSupportedLogTypeDescriptors),\r
- &(SystemEventLog->NumberOfSupportedLogType),\r
- 1\r
- );\r
-\r
- //\r
- // Length of each Log Type Descriptor\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LengthOfLogTypeDescriptor),\r
- &(SystemEventLog->LengthOfLogDescriptor),\r
- 1\r
- );\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 21 - Pointing Device.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType21 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_POINTING_DEVICE_TYPE_DATA *PointingDeviceData;\r
-\r
- PointingDeviceData = (EFI_MISC_POINTING_DEVICE_TYPE_DATA *) RecordData;\r
-\r
- //\r
- // Pointing Device Type\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, Type)) = (UINT8) (PointingDeviceData->PointingDeviceType);\r
-\r
- //\r
- // Pointing Device Interface\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, Interface)) = (UINT8) (PointingDeviceData->PointingDeviceInterface);\r
-\r
- //\r
- // Number Pointing Device Buttons\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, NumberOfButtons)) = (UINT8) (PointingDeviceData->NumberPointingDeviceButtons);\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 22 - Portable Battery.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType22 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_PORTABLE_BATTERY *PortableBattery;\r
- STRING_REF Chemistry;\r
- PortableBattery = (EFI_MISC_PORTABLE_BATTERY *)RecordData;\r
- \r
- //\r
- // Location\r
- // \r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE22, Location),\r
- &(PortableBattery->Location),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
- \r
- //\r
- // Manufacturer\r
- // \r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE22, Manufacturer),\r
- &(PortableBattery->Manufacturer),\r
- 2 \r
- ); \r
-\r
- //\r
- // ManufactureDate\r
- // \r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE22, ManufactureDate),\r
- &(PortableBattery->ManufactureDate),\r
- 2 \r
- ); \r
-\r
- //\r
- // SerialNumber\r
- // \r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE22, SerialNumber),\r
- &(PortableBattery->SerialNumber),\r
- 2 \r
- );\r
-\r
- //\r
- // DeviceName\r
- // \r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceName),\r
- &(PortableBattery->DeviceName),\r
- 2 \r
- ); \r
- \r
- //\r
- // DeviceChemistry\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceChemistry),\r
- &PortableBattery->DeviceChemistry,\r
- 1\r
- );\r
-\r
- //\r
- // DesignCapacity\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceCapacity),\r
- &PortableBattery->DesignCapacity,\r
- 2\r
- );\r
- \r
- //\r
- // DesignVoltage\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DesignVoltage),\r
- &PortableBattery->DesignVoltage,\r
- 2\r
- ); \r
- \r
- //\r
- // SBDSVersionNumber\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSVersionNumber),\r
- &(PortableBattery->SBDSVersionNumber),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
-\r
- //\r
- // MaximumError\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, MaximumErrorInBatteryData),\r
- &PortableBattery->MaximumError,\r
- 1\r
- ); \r
- \r
- //\r
- // SBDSSerialNumber\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSSerialNumber),\r
- &PortableBattery->SBDSSerialNumber,\r
- 2\r
- ); \r
-\r
- //\r
- // SBDSManufactureDate\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSManufactureDate),\r
- &PortableBattery->SBDSManufactureDate,\r
- 2\r
- );\r
-\r
- //\r
- // Avoid alignment issue on IPF\r
- //\r
- CopyMem (\r
- &Chemistry, \r
- &PortableBattery->SBDSDeviceChemistry,\r
- 2\r
- );\r
-\r
- //\r
- // SBDSDeviceChemistry\r
- // \r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSDeviceChemistry),\r
- &Chemistry,\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
- \r
- //\r
- // DesignCapacityMultiplier\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DesignCapacityMultiplier),\r
- &PortableBattery->DesignCapacityMultiplier,\r
- 1\r
- ); \r
- \r
- //\r
- // OEMSpecific\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, OEMSpecific),\r
- &PortableBattery->OEMSpecific,\r
- 4\r
- );\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 23 - System Reset.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType23 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_RESET_CAPABILITIES_DATA *SystemResetData;\r
-\r
- SystemResetData = (EFI_MISC_RESET_CAPABILITIES_DATA *) RecordData;\r
-\r
- //\r
- // Reset Capabilities\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, Capabilities),\r
- &(SystemResetData->ResetCapabilities),\r
- 1\r
- );\r
-\r
- //\r
- // Reset Count\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, ResetCount),\r
- &(SystemResetData->ResetCount),\r
- 2\r
- );\r
-\r
- //\r
- // Reset Limit\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, ResetLimit),\r
- &(SystemResetData->ResetLimit),\r
- 2\r
- );\r
-\r
- //\r
- // Reset Timer Interval\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, TimerInterval),\r
- &(SystemResetData->ResetTimerInterval),\r
- 2\r
- );\r
-\r
- //\r
- // Reset Timeout\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, Timeout),\r
- &(SystemResetData->ResetTimeout),\r
- 2\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 24 - Hardware Security.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType24 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA *HardwareSecurity;\r
- \r
- HardwareSecurity = (EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA *)RecordData;\r
- \r
- //\r
- // Hardware Security Settings\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE24, HardwareSecuritySettings),\r
- &HardwareSecurity->HardwareSecuritySettings,\r
- 1\r
- );\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 25 - System Power Controls.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType25 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_SCHEDULED_POWER_ON_MONTH *PowerOnMonth;\r
- \r
- PowerOnMonth = (EFI_MISC_SCHEDULED_POWER_ON_MONTH *)RecordData;\r
- \r
- //\r
- // ScheduledPoweronMonth\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnMonth),\r
- &PowerOnMonth->ScheduledPoweronMonth,\r
- 1\r
- );\r
- \r
- //\r
- // ScheduledPoweronDayOfMonth\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnDayOfMonth),\r
- &PowerOnMonth->ScheduledPoweronDayOfMonth,\r
- 1\r
- ); \r
-\r
- //\r
- // ScheduledPoweronHour\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnHour),\r
- &PowerOnMonth->ScheduledPoweronHour,\r
- 1\r
- ); \r
-\r
- //\r
- // ScheduledPoweronMinute\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnMinute),\r
- &PowerOnMonth->ScheduledPoweronMinute,\r
- 1\r
- ); \r
-\r
- //\r
- // ScheduledPoweronSecond\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnSecond),\r
- &PowerOnMonth->ScheduledPoweronSecond,\r
- 1\r
- );\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 26 - Voltage Probe.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType26 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_VOLTAGE_PROBE_DESCRIPTION *VoltageProbe;\r
- \r
- VoltageProbe = (EFI_MISC_VOLTAGE_PROBE_DESCRIPTION *)RecordData;\r
- \r
- //\r
- // VoltageProbe Description\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE26, Description),\r
- &(VoltageProbe->VoltageProbeDescription),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
- \r
- //\r
- // VoltageProbeLocation\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, LocationAndStatus),\r
- &VoltageProbe->VoltageProbeLocation,\r
- 1\r
- ); \r
- \r
- //\r
- // VoltageProbeMaximumValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, MaximumValue),\r
- &VoltageProbe->VoltageProbeMaximumValue,\r
- 2\r
- ); \r
- \r
- //\r
- // VoltageProbeMinimumValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, MinimumValue),\r
- &VoltageProbe->VoltageProbeMinimumValue,\r
- 2\r
- ); \r
-\r
- //\r
- // VoltageProbeResolution\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Resolution),\r
- &VoltageProbe->VoltageProbeResolution,\r
- 2\r
- ); \r
-\r
- //\r
- // VoltageProbeTolerance\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Tolerance),\r
- &VoltageProbe->VoltageProbeTolerance,\r
- 2\r
- ); \r
-\r
- //\r
- // VoltageProbeAccuracy\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Accuracy),\r
- &VoltageProbe->VoltageProbeAccuracy,\r
- 2\r
- ); \r
- \r
- //\r
- // VoltageProbeNominalValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, NominalValue),\r
- &VoltageProbe->VoltageProbeNominalValue,\r
- 2\r
- ); \r
-\r
- //\r
- // VoltageProbeOemDefined\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, OEMDefined),\r
- &VoltageProbe->VoltageProbeOemDefined,\r
- 4\r
- );\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 27 - Cooling Device.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType27 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_COOLING_DEVICE_TEMP_LINK *CoolingDevice;\r
- \r
- CoolingDevice = (EFI_MISC_COOLING_DEVICE_TEMP_LINK *)RecordData;\r
- \r
- //\r
- // Device Type\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, DeviceTypeAndStatus),\r
- &CoolingDevice->CoolingDeviceType,\r
- 1\r
- );\r
- \r
- //\r
- // Temperature Probe\r
- //\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE27, TemperatureProbeHandle),\r
- 28, // SMBIOS type 28 - Temperature Probe\r
- &CoolingDevice->CoolingDeviceTemperatureLink,\r
- &gEfiMiscSubClassGuid\r
- );\r
- \r
- //\r
- // CoolingDeviceUnitGroup\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, CoolingUnitGroup),\r
- &CoolingDevice->CoolingDeviceUnitGroup,\r
- 1\r
- );\r
-\r
- //\r
- // CoolingDeviceUnitGroup\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, OEMDefined),\r
- &CoolingDevice->CoolingDeviceOemDefined,\r
- 4\r
- );\r
-\r
- //\r
- // CoolingDeviceNominalSpeed\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, NominalSpeed),\r
- &CoolingDevice->CoolingDeviceNominalSpeed,\r
- 2\r
- );\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 28 -- Temperature Probe.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType28 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION *TemperatureProbe;\r
- \r
- TemperatureProbe = (EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION *)RecordData;\r
- \r
- //\r
- // TemperatureProbeDescription\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE28, Description),\r
- &(TemperatureProbe->TemperatureProbeDescription),\r
- 2\r
- );\r
- \r
- //\r
- // TemperatureProbeLocation\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, LocationAndStatus),\r
- &TemperatureProbe->TemperatureProbeLocation,\r
- 1\r
- ); \r
- \r
- //\r
- // TemperatureProbeMaximumValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, MaximumValue),\r
- &TemperatureProbe->TemperatureProbeMaximumValue,\r
- 2\r
- ); \r
-\r
- //\r
- // TemperatureProbeMinimumValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, MinimumValue),\r
- &TemperatureProbe->TemperatureProbeMinimumValue,\r
- 2\r
- ); \r
-\r
- //\r
- // TemperatureProbeResolution\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Resolution),\r
- &TemperatureProbe->TemperatureProbeResolution,\r
- 2\r
- ); \r
- \r
-\r
- //\r
- // TemperatureProbeTolerance\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Tolerance),\r
- &TemperatureProbe->TemperatureProbeTolerance,\r
- 2\r
- ); \r
-\r
- //\r
- // TemperatureProbeAccuracy\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Accuracy),\r
- &TemperatureProbe->TemperatureProbeAccuracy,\r
- 2\r
- );\r
-\r
- //\r
- // TemperatureProbeNominalValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, NominalValue),\r
- &TemperatureProbe->TemperatureProbeNominalValue,\r
- 2\r
- );\r
-\r
- //\r
- // TemperatureProbeOemDefined\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, OEMDefined),\r
- &TemperatureProbe->TemperatureProbeOemDefined,\r
- 4\r
- );\r
- \r
- return EFI_SUCCESS;\r
-} \r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 29 -- Electrical Current Probe.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType29 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION *ElectricalProbe;\r
- \r
- ElectricalProbe = (EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION *)RecordData;\r
- \r
- //\r
- // ElectricalCurrentProbeDescription\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE29, Description),\r
- &(ElectricalProbe->ElectricalCurrentProbeDescription),\r
- 2 // 64 * sizeof(CHAR16)\r
- );\r
- \r
- //\r
- // ElectricalCurrentProbeLocation\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, LocationAndStatus),\r
- &ElectricalProbe->ElectricalCurrentProbeLocation,\r
- 1\r
- );\r
- \r
- //\r
- // ElectricalCurrentProbeMaximumValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, MaximumValue),\r
- &ElectricalProbe->ElectricalCurrentProbeMaximumValue,\r
- 2\r
- ); \r
-\r
- //\r
- // ElectricalCurrentProbeMinimumValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, MinimumValue),\r
- &ElectricalProbe->ElectricalCurrentProbeMinimumValue,\r
- 2\r
- ); \r
-\r
- //\r
- // ElectricalCurrentProbeResolution\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Resolution),\r
- &ElectricalProbe->ElectricalCurrentProbeResolution,\r
- 2\r
- ); \r
-\r
- //\r
- // ElectricalCurrentProbeTolerance\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Tolerance),\r
- &ElectricalProbe->ElectricalCurrentProbeTolerance,\r
- 2\r
- ); \r
-\r
- //\r
- // ElectricalCurrentProbeAccuracy\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Accuracy),\r
- &ElectricalProbe->ElectricalCurrentProbeAccuracy,\r
- 2\r
- ); \r
- //\r
- // ElectricalCurrentProbeNominalValue\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, NominalValue),\r
- &ElectricalProbe->ElectricalCurrentProbeNominalValue,\r
- 2\r
- ); \r
-\r
- //\r
- // ElectricalCurrentProbeOemDefined\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, OEMDefined),\r
- &ElectricalProbe->ElectricalCurrentProbeOemDefined,\r
- 4\r
- );\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 30 -- Out-of-Band Remote Access.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType30 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION *RemoteData;\r
- \r
- RemoteData = (EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION *)RecordData;\r
- \r
- //\r
- // ManufacturerNameDescription\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE30, ManufacturerName),\r
- &(RemoteData->RemoteAccessManufacturerNameDescription),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
- \r
- //\r
- // RemoteAccessConnections\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE30, Connections),\r
- &RemoteData->RemoteAccessConnections,\r
- 1\r
- );\r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 32 -- System Boot Information.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType32 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_MISC_BOOT_INFORMATION_STATUS_DATA *BootInfo;\r
-\r
- Status = EFI_SUCCESS;\r
- BootInfo = (EFI_MISC_BOOT_INFORMATION_STATUS_DATA *) RecordData;\r
-\r
- //\r
- // Set reserved bytes\r
- //\r
- ZeroMem ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, Reserved), 6);\r
-\r
- //\r
- // Set BootInformation Status\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, BootStatus),\r
- &BootInfo->BootInformationStatus,\r
- 1\r
- );\r
-\r
- //\r
- // Set Additional Data\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, BootStatus) + 1,\r
- &BootInfo->BootInformationData,\r
- 9\r
- );\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 34 -- Management Device.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType34 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION *ManagementDevice;\r
- \r
- ManagementDevice = (EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION *)RecordData;\r
- \r
- //\r
- // ManagementDeviceDescription\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE34, Description),\r
- &(ManagementDevice->ManagementDeviceDescription),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
- \r
- //\r
- // ManagementDeviceType\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, Type),\r
- &ManagementDevice->ManagementDeviceType,\r
- 1\r
- ); \r
-\r
- //\r
- // ManagementDeviceAddress\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, Address),\r
- &ManagementDevice->ManagementDeviceAddress,\r
- 4\r
- ); \r
-\r
- //\r
- // ManagementDeviceAddressType\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, AddressType),\r
- &ManagementDevice->ManagementDeviceAddressType,\r
- 1\r
- ); \r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 36 -- Management Device Threshold.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType36 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD *DeviceThreshold;\r
- \r
- DeviceThreshold = (EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD *)RecordData;\r
-\r
- //\r
- // LowerThresNonCritical\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdNonCritical),\r
- &DeviceThreshold->LowerThresNonCritical,\r
- 2\r
- ); \r
-\r
- //\r
- // UpperThresNonCritical\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdNonCritical),\r
- &DeviceThreshold->UpperThresNonCritical,\r
- 2\r
- );\r
- \r
- //\r
- // LowerThresCritical\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdCritical),\r
- &DeviceThreshold->LowerThresCritical,\r
- 2\r
- ); \r
-\r
- //\r
- // UpperThresCritical\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdCritical),\r
- &DeviceThreshold->UpperThresCritical,\r
- 2\r
- ); \r
-\r
- //\r
- // LowerThresNonRecover\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdNonRecoverable),\r
- &DeviceThreshold->LowerThresNonRecover,\r
- 2\r
- );\r
-\r
- //\r
- // UpperThresNonRecover\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdNonRecoverable),\r
- &DeviceThreshold->UpperThresNonRecover,\r
- 2\r
- ); \r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 38 -- IPMI device info.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType38 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_IPMI_INTERFACE_TYPE_DATA *IpmiInfo;\r
-\r
- IpmiInfo = (EFI_MISC_IPMI_INTERFACE_TYPE_DATA *) RecordData;\r
-\r
- //\r
- // Interface Type\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, InterfaceType)) = (UINT8) (IpmiInfo->IpmiInterfaceType);\r
-\r
- //\r
- // IPMI specification revision\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, IPMISpecificationRevision)) = \r
- (UINT8) ((IpmiInfo->IpmiSpecificationRevision.IpmiSpecLeastSignificantDigit) + \\r
- (IpmiInfo->IpmiSpecificationRevision.IpmiSpecMostSignificantDigit << 4));\r
-\r
- //\r
- // I2C slave address\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, I2CSlaveAddress)) = (UINT8) (IpmiInfo->IpmiI2CSlaveAddress);\r
-\r
- //\r
- // NV storage device address\r
- //\r
- *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, NVStorageDeviceAddress)) = (UINT8) (IpmiInfo->IpmiNvDeviceAddress);\r
-\r
- //\r
- // Base address\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, BaseAddress),\r
- &IpmiInfo->IpmiBaseAddress,\r
- 8\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 39 -- Power supply.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType39 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_MISC_SYSTEM_POWER_SUPPLY *PowerSupply;\r
- \r
- PowerSupply = (EFI_MISC_SYSTEM_POWER_SUPPLY *)RecordData;\r
- \r
- //\r
- // PowerUnitGroup\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, PowerUnitGroup),\r
- &PowerSupply->PowerUnitGroup,\r
- 1\r
- ); \r
- \r
- //\r
- // PowerSupplyLocation\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE39, Location),\r
- &(PowerSupply->PowerSupplyLocation),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
-\r
- //\r
- // PowerSupplyDeviceName\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE39, DeviceName),\r
- &(PowerSupply->PowerSupplyDeviceName),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
-\r
- //\r
- // PowerSupplyManufacturer\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE39, Manufacturer),\r
- &(PowerSupply->PowerSupplyManufacturer),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
-\r
- //\r
- // PowerSupplySerialNumber\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE39, SerialNumber),\r
- &(PowerSupply->PowerSupplySerialNumber),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
- \r
- //\r
- // PowerSupplyAssetTagNumber\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE39, AssetTagNumber),\r
- &(PowerSupply->PowerSupplyAssetTagNumber),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
-\r
- //\r
- // PowerSupplyModelPartNumber\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE39, ModelPartNumber),\r
- &(PowerSupply->PowerSupplyModelPartNumber),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
- \r
- //\r
- // PowerSupplyRevisionLevel\r
- //\r
- SmbiosFldString (\r
- StructureNode,\r
- OFFSET_OF (SMBIOS_TABLE_TYPE39, RevisionLevel),\r
- &(PowerSupply->PowerSupplyRevisionLevel),\r
- 2 // 64 * sizeof(CHAR16)\r
- ); \r
-\r
- //\r
- // PowerSupplyMaxPowerCapacity\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, MaxPowerCapacity),\r
- &PowerSupply->PowerSupplyMaxPowerCapacity,\r
- 2\r
- );\r
-\r
- //\r
- // PowerSupplyCharacteristics\r
- //\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, PowerSupplyCharacteristics),\r
- &PowerSupply->PowerSupplyCharacteristics,\r
- 2\r
- );\r
- \r
- //\r
- // PowerSupplyInputVoltageProbeLink\r
- //\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, InputVoltageProbeHandle),\r
- 26, // SMBIOS type 26 - Voltage Probe\r
- &PowerSupply->PowerSupplyInputVoltageProbeLink,\r
- &gEfiMiscSubClassGuid\r
- ); \r
-\r
- //\r
- // PowerSupplyCoolingDeviceLink\r
- //\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, CoolingDeviceHandle),\r
- 27, // SMBIOS type 27 - Cooling Device\r
- &PowerSupply->PowerSupplyCoolingDeviceLink,\r
- &gEfiMiscSubClassGuid\r
- ); \r
-\r
- //\r
- // PowerSupplyInputCurrentProbeLink\r
- //\r
- SmbiosFldInterLink (\r
- StructureNode,\r
- (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, InputCurrentProbeHandle),\r
- 29, // SMBIOS type 29 - Electrical Current Probe\r
- &PowerSupply->PowerSupplyInputCurrentProbeLink,\r
- &gEfiMiscSubClassGuid\r
- ); \r
- \r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 0x80-0xFF -- OEM.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscTypeOEM (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINT8 *NewRecordData;\r
- UINT32 IncrementDataSize;\r
- UINT16 Handle;\r
- INT8 Result;\r
- UINT32 StructureSize;\r
- UINT8 CountOfString;\r
- \r
- Status = EFI_SUCCESS;\r
- NewRecordData = NULL;\r
-\r
- //\r
- // Check if OEM structure has included 2 trailing 0s in data record, if not, \r
- // we append them at the end to ensure OEM structure is always correct with 2 trailing 0s.\r
- //\r
- Result = SmbiosCheckTrailingZero (RecordData, RecordDataSize);\r
- \r
- if (Result != 0) {\r
- DEBUG ((EFI_D_ERROR, "OEM SMBIOS type %x is not valid!!\n", ((SMBIOS_STRUCTURE *) RecordData) -> Type));\r
- if (Result == -1) {\r
- //\r
- // No 2 trailing 0s exist\r
- //\r
- DEBUG ((EFI_D_ERROR, "OEM SMBIOS type has NO 2 trailing 0s!!\n"));\r
- IncrementDataSize = 2;\r
- } else {\r
- //\r
- // Only 1 trailing 0 exist at the end\r
- //\r
- DEBUG ((EFI_D_ERROR, "OEM SMBIOS type has only 1 trailing 0!!\n"));\r
- IncrementDataSize = 1;\r
- }\r
- NewRecordData = AllocateZeroPool (RecordDataSize + IncrementDataSize);\r
- ASSERT (NewRecordData != NULL);\r
- CopyMem (NewRecordData, RecordData, RecordDataSize);\r
- RecordData = NewRecordData;\r
- RecordDataSize += IncrementDataSize;\r
- }\r
- \r
- Status = GetSmbiosStructureSize (StructureNode->Structure, &StructureSize, &CountOfString);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- if (StructureSize < RecordDataSize) {\r
- Status = SmbiosEnlargeStructureBuffer (\r
- StructureNode,\r
- ((EFI_SMBIOS_TABLE_HEADER *)RecordData)->Length,\r
- StructureSize,\r
- RecordDataSize\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- }\r
- \r
- //\r
- // Copy the entire data (including the Smbios structure header),\r
- // but preserve the handle that is already allocated.\r
- //\r
- Handle = StructureNode->Structure->Handle;\r
- CopyMem (\r
- StructureNode->Structure,\r
- RecordData,\r
- RecordDataSize\r
- );\r
- StructureNode->Structure->Handle = Handle;\r
- StructureNode->StructureSize = RecordDataSize;\r
- \r
- if (NewRecordData != NULL) {\r
- FreePool (NewRecordData);\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Field Filling Function for Misc SubClass record type 127 - End-of-Table.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType127 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- return EFI_SUCCESS;\r
-}\r
+++ /dev/null
-/** @file\r
- Routines that support Processor SubClass data records translation.\r
- \r
-Copyright (c) 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "Thunk.h"\r
-\r
-/**\r
- Field Filling Function for Processor SubClass record type 17 -- Cache association.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldProcessorType17 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;\r
- EFI_INTER_LINK_DATA *LinkData;\r
- UINT16 FieldOffset;\r
- UINT8 *Pointer;\r
-\r
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *) RecordData;\r
- LinkData = (EFI_INTER_LINK_DATA *) (DataHeader + 1);\r
- if (RecordDataSize != sizeof (EFI_INTER_LINK_DATA) + sizeof (EFI_SUBCLASS_TYPE1_HEADER)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- //\r
- // Determine the cache level\r
- //\r
- Pointer = (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE4, L1CacheHandle);\r
- if ((*Pointer == 0) && (*(Pointer + 1) == 0)) {\r
- SetMem ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE4, L1CacheHandle), 2, 0xFF);\r
- }\r
-\r
- Pointer = (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE4, L2CacheHandle);\r
- if ((*Pointer == 0) && (*(Pointer + 1) == 0)) {\r
- SetMem ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE4, L2CacheHandle), 2, 0xFF);\r
- }\r
-\r
- Pointer = (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE4, L3CacheHandle);\r
- if ((*Pointer == 0) && (*(Pointer + 1) == 0)) {\r
- SetMem ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE4, L3CacheHandle), 2, 0xFF);\r
- }\r
-\r
- if (LinkData->SubInstance == 1) {\r
- FieldOffset = (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE4, L1CacheHandle);\r
- } else if (LinkData->SubInstance == 2) {\r
- FieldOffset = (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE4, L2CacheHandle);\r
- } else if (LinkData->SubInstance == 3) {\r
- FieldOffset = (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE4, L3CacheHandle);\r
- } else {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- return SmbiosFldInterLink (\r
- StructureNode,\r
- FieldOffset,\r
- 7, // Smbios type 7 -- Cache Information\r
- LinkData,\r
- &gEfiCacheSubClassGuid // gProcessorSubClassName\r
- );\r
-}\r
-\r
-/**\r
- Field Filling Function for Processor SubClass record type 6 -- ProcessorID.\r
- Offset is mandatory.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldProcessorType6 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_PROCESSOR_ID_DATA *ProcessorIdData;\r
-\r
- ProcessorIdData = RecordData;\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + Offset,\r
- &(ProcessorIdData->Signature),\r
- 4\r
- );\r
-\r
- CopyMem (\r
- (UINT8 *) (StructureNode->Structure) + Offset + 4,\r
- &(ProcessorIdData->FeatureFlags),\r
- 4\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Field Filling Function for Processor SubClass record type 9 -- Voltage.\r
- Offset is mandatory.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldProcessorType9 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-{\r
- EFI_EXP_BASE10_DATA *Base10Data;\r
- INT16 Value;\r
- INT16 Exponent;\r
-\r
- if (RecordDataSize != sizeof (EFI_EXP_BASE10_DATA)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- Base10Data = RecordData;\r
- Value = Base10Data->Value;\r
- Exponent = Base10Data->Exponent;\r
-\r
- Exponent += 1;\r
- while (Exponent != 0) {\r
- if (Exponent > 0) {\r
- Value = (INT16) (Value * 10);\r
- Exponent--;\r
- } else {\r
- Value = (INT16) (Value / 10);\r
- Exponent++;\r
- }\r
- }\r
-\r
- * (UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = (UINT8) (Value | BIT7);\r
-\r
- return EFI_SUCCESS;\r
-}\r
+++ /dev/null
-/** @file\r
- Thunk driver's entry that install filter for DataRecord.\r
- \r
-Copyright (c) 2009 Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "Thunk.h"\r
-\r
-//\r
-// Global variables\r
-//\r
-LIST_ENTRY mStructureList;\r
-\r
-/**\r
- Entry Point of thunk driver.\r
-\r
- @param[in] ImageHandle Image handle of this driver.\r
- @param[in] SystemTable Pointer to EFI system table.\r
-\r
- @retval EFI_SUCCESS The event handlers were registered.\r
- @retval EFI_DEVICE_ERROR Failed to register the event handlers\r
-**/ \r
-EFI_STATUS\r
-EFIAPI\r
-ThunkEntry (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_DATA_HUB_PROTOCOL *DataHub;\r
- EFI_EVENT FilterEvent;\r
- \r
- Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID**) &DataHub);\r
- ASSERT_EFI_ERROR (Status);\r
- ASSERT (DataHub != NULL);\r
-\r
- InitializeListHead (&mStructureList);\r
-\r
- //\r
- // Register SmBios Data Filter Function.\r
- // This function is notified at TPL_CALLBACK.\r
- //\r
- Status = gBS->CreateEvent (\r
- EVT_NOTIFY_SIGNAL,\r
- TPL_CALLBACK,\r
- SmbiosDataFilter,\r
- NULL,\r
- &FilterEvent\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- Status = DataHub->RegisterFilterDriver (\r
- DataHub,\r
- FilterEvent,\r
- TPL_APPLICATION,\r
- EFI_DATA_RECORD_CLASS_DATA,\r
- NULL\r
- );\r
- if (EFI_ERROR (Status)) {\r
- gBS->CloseEvent (FilterEvent);\r
- return Status;\r
- }\r
-\r
- return Status;\r
-\r
-} \r
-\r
-/**\r
- Smbios data filter function. This function is invoked when there is data records\r
- available in the Data Hub. \r
-\r
- @param Event The event that is signaled.\r
- @param Context not used here.\r
-**/\r
-VOID\r
-EFIAPI\r
-SmbiosDataFilter (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_DATA_HUB_PROTOCOL *DataHub;\r
- EFI_HANDLE DataHubHandle;\r
- UINTN HandleSize;\r
- UINT64 MonotonicCount;\r
- EFI_DATA_RECORD_HEADER *Record;\r
-\r
- Status = EFI_SUCCESS;\r
- DataHub = NULL;\r
-\r
- //\r
- // Get the Data Hub Protocol. Assume only one instance\r
- // of Data Hub Protocol is availabe in the system.\r
- //\r
- HandleSize = sizeof (EFI_HANDLE);\r
-\r
- Status = gBS->LocateHandle (\r
- ByProtocol,\r
- &gEfiDataHubProtocolGuid,\r
- NULL,\r
- &HandleSize,\r
- &DataHubHandle\r
- );\r
-\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
- }\r
-\r
- Status = gBS->HandleProtocol (\r
- DataHubHandle,\r
- &gEfiDataHubProtocolGuid,\r
- (VOID **) &DataHub\r
- );\r
-\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
- }\r
- //\r
- // Get all available data records from data hub\r
- //\r
- MonotonicCount = 0;\r
- Record = NULL;\r
-\r
- do {\r
-\r
- Status = DataHub->GetNextRecord (\r
- DataHub,\r
- &MonotonicCount,\r
- &Event,\r
- &Record\r
- );\r
-\r
- if (!EFI_ERROR (Status)) {\r
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {\r
- \r
- //\r
- // It's of expected Data Type. Process it.\r
- //\r
- SmbiosProcessDataRecord (Record);\r
- }\r
- }\r
- } while (!EFI_ERROR (Status) && (MonotonicCount != 0));\r
-\r
-Done:\r
-\r
- return ;\r
-\r
-}\r
+++ /dev/null
-/** @file\r
- The common header file for the thunk driver.\r
- \r
-Copyright (c) 2009 Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#ifndef _DATAHUB_TO_SMBIOS_THUNK_\r
-#define _DATAHUB_TO_SMBIOS_THUNK_\r
-\r
-#include <FrameworkDxe.h>\r
-#include <IndustryStandard/SmBios.h>\r
-\r
-#include <Guid/EventGroup.h>\r
-#include <Guid/SmBios.h>\r
-#include <Protocol/DataHub.h>\r
-#include <Guid/DataHubRecords.h>\r
-#include <Protocol/HiiDatabase.h>\r
-#include <Protocol/Smbios.h>\r
-\r
-#include <Library/BaseLib.h>\r
-#include <Library/PcdLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/HiiLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/ReportStatusCodeLib.h>\r
-#include <Library/UefiDriverEntryPoint.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
-//\r
-// Conversion Table that describes the translation method for\r
-// Data Hub Data Records of certain SubClass and RecordNumber\r
-//\r
-typedef enum {\r
- BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
- BY_SUBCLASS_INSTANCE_PRODUCER,\r
- MAX_LOCATING_METHOD\r
-} SMBIOS_STRUCTURE_LOCATING_METHOD;\r
-\r
-typedef enum {\r
- RECORD_DATA_UNCHANGED_OFFSET_SPECIFIED,\r
- BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
- BY_FUNCTION,\r
- BY_FUNCTION_WITH_WHOLE_DATA_RECORD,\r
- MAX_FIELD_FILLING_METHOD\r
-} SMBIOS_FIELD_FILLING_METHOD;\r
-\r
-typedef struct _SMBIOS_STRUCTURE_NODE SMBIOS_STRUCTURE_NODE;\r
-\r
-typedef struct {\r
- UINT8 Type;\r
- UINT8 Length;\r
- UINT16 Handle;\r
- UINT8 Tailing[2];\r
-} EFI_SMBIOS_TABLE_TYPE127;\r
-\r
-typedef\r
-EFI_STATUS\r
-(*SMBIOS_FIELD_FILLING_FUNCTION) (\r
- IN OUT SMBIOS_STRUCTURE_NODE * StructureNode,\r
- IN UINT32 Offset OPTIONAL,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- );\r
-\r
-typedef struct {\r
- //\r
- // Data Hub Data Record's SubClass and RecordNumber\r
- //\r
- EFI_GUID SubClass;\r
- UINT32 RecordType;\r
-\r
- //\r
- // Translation method applied\r
- //\r
- UINT8 SmbiosType;\r
- SMBIOS_STRUCTURE_LOCATING_METHOD StructureLocatingMethod;\r
- SMBIOS_FIELD_FILLING_METHOD FieldFillingMethod;\r
- UINT32 FieldOffset;\r
- SMBIOS_FIELD_FILLING_FUNCTION FieldFillingFunction;\r
-\r
-} SMBIOS_CONVERSION_TABLE_ENTRY;\r
-\r
-//\r
-// SMBIOS_LINK_DATA_FIXUP nodes indicate the Link fields that\r
-// need to be fixed up when creating the resulting Smbios image.\r
-//\r
-#define SMBIOS_LINK_DATA_FIXUP_NODE_SIGNATURE SIGNATURE_32 ('S', 'm', 'l', 'n')\r
-\r
-typedef struct {\r
-\r
- UINT32 Signature;\r
- LIST_ENTRY Link;\r
-\r
- UINT32 Offset;\r
- UINT8 TargetType;\r
- EFI_GUID SubClass;\r
- EFI_INTER_LINK_DATA LinkData;\r
-\r
-} SMBIOS_LINK_DATA_FIXUP_NODE;\r
-\r
-//\r
-// The global Structure List node.\r
-// The Structure List is populated as more and more\r
-// Structures (of various types) are discovered and inserted.\r
-// The nodes in the Structure List will be concatenated\r
-// to form the ultimate SMBIOS table.\r
-//\r
-#define SMBIOS_STRUCTURE_NODE_SIGNATURE SIGNATURE_32 ('S', 'm', 'b', 's')\r
-\r
-struct _SMBIOS_STRUCTURE_NODE {\r
-\r
- UINT32 Signature;\r
- LIST_ENTRY Link;\r
-\r
- //\r
- // Tags\r
- //\r
- EFI_GUID SubClass;\r
- UINT16 Instance;\r
- UINT16 SubInstance;\r
- EFI_GUID ProducerName;\r
-\r
- //\r
- // the Smbios structure\r
- //\r
- UINT32 StructureSize; // Actual structure size including strings\r
-\r
- EFI_SMBIOS_TABLE_HEADER *Structure;\r
- \r
- \r
- EFI_SMBIOS_HANDLE SmbiosHandle; // Smbios Handle in SMBIOS database.\r
- \r
- EFI_SMBIOS_TYPE SmbiosType;\r
- \r
- LIST_ENTRY LinkDataFixup;\r
- \r
-};\r
-\r
-//\r
-// Smbios type info table. Indicates minimum length\r
-// for each Smbios type as the indicator of the initial size of buffer\r
-// allocated for the structure instance of a specific type.\r
-//\r
-typedef struct {\r
-\r
- UINT8 Type;\r
- UINT8 MinLength; // Minimal structure size including\r
- // TWO trailing bytes of 0x00\r
- //\r
- BOOLEAN IsRequired; // Required structure type defined by Smbios Spec\r
- BOOLEAN IsCreated; // Created in this run\r
-} SMBIOS_TYPE_INFO_TABLE_ENTRY;\r
-\r
-//\r
-// EDK framwork Memory Data hub definition to support EDK/Framework driver.\r
-//\r
-typedef struct {\r
- STRING_REF MemoryDeviceLocator;\r
- STRING_REF MemoryBankLocator;\r
- STRING_REF MemoryManufacturer;\r
- STRING_REF MemorySerialNumber;\r
- STRING_REF MemoryAssetTag;\r
- STRING_REF MemoryPartNumber;\r
- EFI_INTER_LINK_DATA MemoryArrayLink;\r
- EFI_INTER_LINK_DATA MemorySubArrayLink;\r
- UINT16 MemoryTotalWidth;\r
- UINT16 MemoryDataWidth;\r
- UINT64 MemoryDeviceSize;\r
- EFI_MEMORY_FORM_FACTOR MemoryFormFactor;\r
- UINT8 MemoryDeviceSet;\r
- EFI_MEMORY_ARRAY_TYPE MemoryType;\r
- EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;\r
- UINT16 MemorySpeed;\r
- EFI_MEMORY_STATE MemoryState;\r
- UINT8 MemoryAttributes;\r
-} FRAMEWORK_MEMORY_ARRAY_LINK_DATA;\r
-\r
-typedef struct {\r
- EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation;\r
- EFI_MEMORY_ARRAY_USE MemoryArrayUse;\r
- EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;\r
- UINT32 MaximumMemoryCapacity;\r
- UINT16 NumberMemoryDevices;\r
-} FRAMEWORK_MEMORY_ARRAY_LOCATION_DATA;\r
-\r
-//\r
-// Global variables\r
-//\r
-extern SMBIOS_CONVERSION_TABLE_ENTRY mConversionTable[];\r
-extern SMBIOS_TYPE_INFO_TABLE_ENTRY mTypeInfoTable[];\r
-extern LIST_ENTRY mStructureList;\r
-\r
-//\r
-// Function Prototypes\r
-//\r
-/**\r
- Smbios data filter function. This function is invoked when there is data records\r
- available in the Data Hub. \r
-\r
- @param Event The event that is signaled.\r
- @param Context not used here.\r
-**/\r
-VOID\r
-EFIAPI\r
-SmbiosDataFilter (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- );\r
-\r
-//\r
-// Function prototypes\r
-//\r
-/**\r
- Process a datahub's record and find corresponding translation way to translate\r
- to SMBIOS record.\r
- \r
- @param Record Point to datahub record.\r
-**/\r
-VOID\r
-SmbiosProcessDataRecord (\r
- IN EFI_DATA_RECORD_HEADER *Record\r
- )\r
-;\r
-\r
-/**\r
- Calculate the minimal length for a SMBIOS type. This length maybe not equal\r
- to sizeof (SMBIOS_RECORD_STRUCTURE), but defined in conformance chapter in SMBIOS specification.\r
- \r
- @param Type SMBIOS's type.\r
- \r
- @return the minimal length of a smbios record.\r
-**/\r
-UINT32\r
-SmbiosGetTypeMinimalLength (\r
- IN UINT8 Type\r
- )\r
-;\r
-\r
-/**\r
- Enlarge the structure buffer of a structure node in SMBIOS database.\r
- The function maybe lead the structure pointer for SMBIOS record changed.\r
- \r
- @param StructureNode The structure node whose structure buffer is to be enlarged.\r
- @param NewLength The new length of SMBIOS record which does not include unformat area.\r
- @param OldBufferSize The old size of SMBIOS record buffer.\r
- @param NewBufferSize The new size is targeted for enlarged.\r
- \r
- @retval EFI_OUT_OF_RESOURCES No more memory to allocate new record\r
- @retval EFI_SUCCESS Success to enlarge the record buffer size.\r
-**/\r
-EFI_STATUS\r
-SmbiosEnlargeStructureBuffer (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- UINT8 NewLength,\r
- UINTN OldBufferSize,\r
- UINTN NewBufferSize\r
- );\r
-\r
-/**\r
- Field Filling Function. Fill a standard Smbios string field. \r
- Convert the unicode string to single byte chars.\r
- Only English language is supported.\r
-\r
- This function changes the Structure pointer value of the structure node, \r
- which should be noted by Caller.\r
- \r
- @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
- @param Offset Offset of SMBIOS record which RecordData will be filled.\r
- @param RecordData RecordData buffer will be filled.\r
- @param RecordDataSize The size of RecordData buffer.\r
- \r
- @retval EFI_INVALID_PARAMETER RecordDataSize is too larger\r
- @retval EFI_OUT_OF_RESOURCES No memory to allocate new buffer for string\r
- @retval EFI_SUCCESS Sucess append string for a SMBIOS record.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldString (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-/**\r
- Fill the inter link field for a SMBIOS recorder.\r
- \r
- Some SMBIOS recorder need to reference the handle of another SMBIOS record. But\r
- maybe another SMBIOS record has not been added, so put the InterLink request into\r
- a linked list and the interlink will be fixedup when a new SMBIOS record is added.\r
- \r
- @param StructureNode Point to SMBIOS_STRUCTURE_NODE which reference another record's handle\r
- @param LinkSmbiosNodeOffset The offset in this record for holding the handle of another SMBIOS record\r
- @param LinkSmbiosType The type of SMBIOS record want to be linked.\r
- @param InterLink Point to EFI_INTER_LINK_DATA will be put linked list.\r
- @param SubClassGuid The guid of subclass for linked SMBIOS record.\r
- \r
- @retval EFI_SUCESS The linked record is found and no need fixup in future.\r
- @retval !EFI_SUCESS The linked record can not be found and InterLink is put a fixing-p linked list.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldInterLink (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT16 LinkSmbiosNodeOffset,\r
- IN UINT8 LinkSmbiosType,\r
- IN EFI_INTER_LINK_DATA *InterLink,\r
- IN EFI_GUID *SubClassGuid\r
- )\r
-;\r
-\r
-/**\r
- Find a handle that matches the Link Data and the target Smbios type.\r
- \r
- @param TargetType the Smbios type\r
- @param SubClass the SubClass\r
- @param LinkData Specifies Instance, SubInstance and ProducerName\r
- @param Handle the HandleNum found \r
- \r
- @retval EFI_NOT_FOUND Can not find the record according to handle\r
- @retval EFI_SUCCESS Success to find the handle\r
-**/\r
-EFI_STATUS\r
-SmbiosFindHandle (\r
- IN UINT8 TargetType,\r
- IN EFI_GUID *SubClass,\r
- IN EFI_INTER_LINK_DATA *LinkData,\r
- IN OUT UINT16 *HandleNum\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldBase10ToWordWithMega (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldBase2ToWordWithKilo (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldTruncateToByte (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldProcessorType6 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldProcessorType9 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldProcessorType17 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldBase10ToByteWithNano (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldTruncateToWord (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldCacheType10 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-INT8\r
-SmbiosCheckTrailingZero (\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldCacheType5 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType2 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType3 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType4 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType5 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType6 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType7 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType8 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType9 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMemoryType10 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType0 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldBase2ToByteWith64K (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType1 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType2 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType3 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType8 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType9 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType10 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType11 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType12 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType13 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType14 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType15 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType21 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType32 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType38 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- );\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscTypeOEM (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldSMBIOSType6 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset, \r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType22 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType22 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType23 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType24 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType25 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType26 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType27 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType28 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType29 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType30 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType34 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType36 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType38 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType39 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SmbiosFldMiscType127 (\r
- IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
- IN UINT32 Offset,\r
- IN VOID *RecordData,\r
- IN UINT32 RecordDataSize\r
- )\r
-;\r
- \r
-EFI_STATUS\r
-SmbiosProtocolCreateRecord (\r
- IN EFI_HANDLE ProducerHandle, OPTIONAL\r
- IN SMBIOS_STRUCTURE_NODE *StructureNode\r
- );\r
- \r
-EFI_SMBIOS_PROTOCOL*\r
-GetSmbiosProtocol (\r
- VOID\r
- );\r
- \r
-EFI_SMBIOS_TABLE_HEADER*\r
-GetSmbiosBufferFromHandle (\r
- IN EFI_SMBIOS_HANDLE Handle,\r
- IN EFI_SMBIOS_TYPE Type,\r
- IN EFI_HANDLE ProducerHandle OPTIONAL\r
- );\r
- \r
-EFI_STATUS\r
-EFIAPI\r
-GetSmbiosStructureSize (\r
- IN EFI_SMBIOS_TABLE_HEADER *Head,\r
- OUT UINT32 *Size,\r
- OUT UINT8 *NumberOfStrings\r
- );\r
- \r
-#endif\r
+++ /dev/null
-/** @file\r
- Translate the DataHub records via EFI_DATA_HUB_PROTOCOL to Smbios recorders \r
- via EFI_SMBIOS_PROTOCOL.\r
- \r
-Copyright (c) 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "Thunk.h"\r
-\r
-EFI_GUID ZeroGuid = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } };\r
-EFI_SMBIOS_PROTOCOL *mSmbiosProtocol = NULL;\r
-\r
-/**\r
- Release the structure Node. \r
- \r
- @param StructureNode Point to SMBIOS_STRUCTURE_NODE which will be removed.\r
-**/\r
-VOID\r
-ReleaseStructureNode (\r
- SMBIOS_STRUCTURE_NODE *StructureNode\r
- )\r
-{\r
- EFI_SMBIOS_PROTOCOL *Smbios;\r
- \r
- RemoveEntryList (&(StructureNode->Link));\r
- Smbios = GetSmbiosProtocol();\r
- ASSERT (Smbios != NULL);\r
- Smbios->Remove (Smbios, StructureNode->SmbiosHandle);\r
- gBS->FreePool (StructureNode);\r
-}\r
-\r
-/**\r
- Process a datahub's record and find corresponding translation way to translate\r
- to SMBIOS record.\r
- \r
- @param Record Point to datahub record.\r
-**/\r
-VOID\r
-SmbiosProcessDataRecord (\r
- IN EFI_DATA_RECORD_HEADER *Record\r
- )\r
-{\r
- EFI_DATA_RECORD_HEADER *RecordHeader;\r
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;\r
- UINTN Index;\r
- SMBIOS_CONVERSION_TABLE_ENTRY *Conversion;\r
- UINT8 *SrcData;\r
- UINTN SrcDataSize;\r
- LIST_ENTRY *Link;\r
- SMBIOS_STRUCTURE_NODE *StructureNode;\r
- BOOLEAN StructureCreated;\r
- EFI_STATUS Status;\r
- \r
- Conversion = NULL;\r
- StructureNode = NULL;\r
- StructureCreated = FALSE;\r
- RecordHeader = Record;\r
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *) (Record + 1);\r
- SrcData = (UINT8 *) (DataHeader + 1);\r
- SrcDataSize = RecordHeader->RecordSize - RecordHeader->HeaderSize - sizeof (EFI_SUBCLASS_TYPE1_HEADER);\r
-\r
- if (DataHeader->HeaderSize != sizeof (EFI_SUBCLASS_TYPE1_HEADER) ||\r
- DataHeader->Instance == EFI_SUBCLASS_INSTANCE_RESERVED ||\r
- DataHeader->SubInstance == EFI_SUBCLASS_INSTANCE_RESERVED\r
- ) {\r
- //\r
- // Invalid Data Record\r
- //\r
- goto Done;\r
- }\r
-\r
- Index = 0;\r
- while(TRUE) {\r
- //\r
- // Find a matching entry in the conversion table for this\r
- // (SubClass, RecordNumber) pair\r
- //\r
- for (; !CompareGuid (&(mConversionTable[Index].SubClass), &ZeroGuid); Index++) {\r
- if (CompareGuid (\r
- &(mConversionTable[Index].SubClass),\r
- &(RecordHeader->DataRecordGuid)\r
- )) {\r
- if (mConversionTable[Index].RecordType == DataHeader->RecordType) {\r
- break;\r
- }\r
- }\r
- }\r
-\r
- if (CompareGuid (&(mConversionTable[Index].SubClass), &ZeroGuid)) {\r
- //\r
- // We cannot find a matching entry in conversion table,\r
- // this means this data record cannot be used for SMBIOS.\r
- // Just skip it.\r
- //\r
- goto Done;\r
- }\r
-\r
- Conversion = &mConversionTable[Index++];\r
-\r
- //\r
- // Find corresponding structure in the Structure List\r
- //\r
- for (Link = mStructureList.ForwardLink; Link != &mStructureList; Link = Link->ForwardLink) {\r
-\r
- StructureNode = CR (\r
- Link,\r
- SMBIOS_STRUCTURE_NODE,\r
- Link,\r
- SMBIOS_STRUCTURE_NODE_SIGNATURE\r
- );\r
-\r
- if (Conversion->StructureLocatingMethod == BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER) {\r
- //\r
- // Look at SubClass, Instance, SubInstance and ProducerName for a matching\r
- // node\r
- //\r
- if (CompareGuid (&(StructureNode->SubClass), &(RecordHeader->DataRecordGuid)) &&\r
- StructureNode->Instance == DataHeader->Instance &&\r
- StructureNode->SubInstance == DataHeader->SubInstance &&\r
- CompareGuid (&(StructureNode->ProducerName), &(RecordHeader->ProducerName))\r
- ) {\r
- if (Conversion->SmbiosType >= 0X80) {\r
- if (StructureNode->SmbiosType == ((SMBIOS_STRUCTURE_HDR *) SrcData)->Type) {\r
- break;\r
- }\r
- } else if (StructureNode->SmbiosType == Conversion->SmbiosType) {\r
- break;\r
- }\r
- }\r
-\r
- } else if (Conversion->StructureLocatingMethod == BY_SUBCLASS_INSTANCE_PRODUCER) {\r
- //\r
- // Look at SubClass, Instance and ProducerName for a matching node\r
- //\r
- if (CompareGuid (&(StructureNode->SubClass), &(RecordHeader->DataRecordGuid)) &&\r
- StructureNode->Instance == DataHeader->Instance &&\r
- CompareGuid (&(StructureNode->ProducerName), &(RecordHeader->ProducerName))\r
- ) {\r
- if (Conversion->SmbiosType >= 0X80) {\r
- if (StructureNode->SmbiosType == ((SMBIOS_STRUCTURE_HDR *) SrcData)->Type) {\r
- break;\r
- }\r
- } else if (StructureNode->SmbiosType == Conversion->SmbiosType) {\r
- break;\r
- }\r
- }\r
-\r
- } else {\r
- //\r
- // Invalid conversion table entry\r
- //\r
- goto Done;\r
- }\r
- }\r
-\r
- if (Link == &mStructureList) {\r
-\r
- //\r
- // Not found, create a new structure\r
- //\r
- StructureNode = AllocateZeroPool (sizeof (SMBIOS_STRUCTURE_NODE));\r
-\r
- if (StructureNode == NULL) {\r
- goto Done;\r
- }\r
-\r
- if (Conversion->StructureLocatingMethod == BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER) {\r
- //\r
- // Fill in SubClass, Instance, SubInstance and ProducerName\r
- //\r
- CopyMem (&(StructureNode->SubClass), &(RecordHeader->DataRecordGuid), sizeof (EFI_GUID));\r
- StructureNode->Instance = DataHeader->Instance;\r
- StructureNode->SubInstance = DataHeader->SubInstance;\r
- CopyMem (&(StructureNode->ProducerName), &(RecordHeader->ProducerName), sizeof (EFI_GUID));\r
-\r
- } else if (Conversion->StructureLocatingMethod == BY_SUBCLASS_INSTANCE_PRODUCER) {\r
- //\r
- // Fill in at SubClass, Instance and ProducerName, mark SubInstance as Non\r
- // Applicable\r
- //\r
- CopyMem (&(StructureNode->SubClass), &(RecordHeader->DataRecordGuid), sizeof (EFI_GUID));\r
- StructureNode->Instance = DataHeader->Instance;\r
- StructureNode->SubInstance = EFI_SUBCLASS_INSTANCE_NON_APPLICABLE;\r
- CopyMem (&(StructureNode->ProducerName), &(RecordHeader->ProducerName), sizeof (EFI_GUID));\r
-\r
- }\r
- //\r
- // Allocate the structure instance\r
- //\r
- StructureNode->StructureSize = SmbiosGetTypeMinimalLength (Conversion->SmbiosType);\r
- StructureNode->SmbiosType = Conversion->SmbiosType;\r
- \r
- //\r
- // StructureSize include the TWO trailing zero byte.\r
- //\r
- if (StructureNode->StructureSize < (sizeof(SMBIOS_STRUCTURE) + 2)) {\r
- //\r
- // Invalid Type\r
- //\r
- gBS->FreePool (StructureNode);\r
- goto Done;\r
- }\r
-\r
- StructureNode->SmbiosType = Conversion->SmbiosType;\r
- StructureNode->SmbiosHandle = 0;\r
- Status = SmbiosProtocolCreateRecord (\r
- NULL, \r
- StructureNode\r
- );\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
- }\r
- //\r
- // Temporary cache the structrue pointer to Smbios database.\r
- //\r
- StructureNode->Structure = GetSmbiosBufferFromHandle (StructureNode->SmbiosHandle, StructureNode->SmbiosType, NULL);\r
- \r
- InitializeListHead (&StructureNode->LinkDataFixup);\r
-\r
- //\r
- // Insert the Structure Node into the Strucutre List\r
- //\r
- StructureNode->Signature = SMBIOS_STRUCTURE_NODE_SIGNATURE;\r
- InsertTailList (&mStructureList, &(StructureNode->Link));\r
-\r
- StructureCreated = TRUE;\r
-\r
- }\r
- \r
- \r
- //\r
- // Re-calculate the structure pointer to Smbios database.\r
- //\r
- StructureNode->Structure = GetSmbiosBufferFromHandle (StructureNode->SmbiosHandle, StructureNode->SmbiosType, NULL);\r
- \r
- //\r
- // Fill the Structure's field corresponding to this data record\r
- //\r
- if (Conversion->FieldFillingMethod == RECORD_DATA_UNCHANGED_OFFSET_SPECIFIED) {\r
- //\r
- // Field data is just the record data without transforming and\r
- // offset is specified directly in the conversion table entry\r
- //\r
- if (Conversion->FieldOffset + SrcDataSize > StructureNode->Structure->Length) {\r
- //\r
- // Invalid Conversion Table Entry\r
- //\r
- if (StructureCreated) {\r
- ReleaseStructureNode (StructureNode);\r
- }\r
-\r
- goto Done;\r
- }\r
- \r
- CopyMem ((UINT8 *) (StructureNode->Structure) + Conversion->FieldOffset, SrcData, SrcDataSize);\r
-\r
- } else if (Conversion->FieldFillingMethod == BY_FUNCTION_WITH_OFFSET_SPECIFIED) {\r
- //\r
- // Field offfset is specified in the conversion table entry, but\r
- // record data needs to be transformed to be filled into the field,\r
- // so let the FieldFillingFunction do it.\r
- //\r
- if (Conversion->FieldFillingFunction == NULL) {\r
- //\r
- // Invalid Conversion Table Entry\r
- //\r
- if (StructureCreated) {\r
- ReleaseStructureNode (StructureNode);\r
- }\r
-\r
- goto Done;\r
- }\r
-\r
- Status = Conversion->FieldFillingFunction (\r
- StructureNode,\r
- Conversion->FieldOffset,\r
- SrcData,\r
- (UINT32) SrcDataSize\r
- );\r
- if (EFI_ERROR (Status)) {\r
- if (StructureCreated) {\r
- ReleaseStructureNode (StructureNode);\r
- }\r
-\r
- goto Done;\r
- }\r
- } else if (Conversion->FieldFillingMethod == BY_FUNCTION) {\r
- //\r
- // Both field offset and field content are determined by\r
- // FieldFillingFunction\r
- //\r
- if (Conversion->FieldFillingFunction == NULL) {\r
- //\r
- // Invalid Conversion Table Entry\r
- //\r
- if (StructureCreated) {\r
- ReleaseStructureNode (StructureNode);\r
- }\r
-\r
- goto Done;\r
- }\r
-\r
- Status = Conversion->FieldFillingFunction (\r
- StructureNode,\r
- 0,\r
- SrcData,\r
- (UINT32) SrcDataSize\r
- );\r
- if (EFI_ERROR (Status)) {\r
- if (StructureCreated) {\r
- ReleaseStructureNode (StructureNode);\r
- }\r
-\r
- goto Done;\r
- }\r
- } else if (Conversion->FieldFillingMethod == BY_FUNCTION_WITH_WHOLE_DATA_RECORD) {\r
- //\r
- // Both field offset and field content are determined by\r
- // FieldFillingFunction and the function accepts the whole data record\r
- // including the data header\r
- //\r
- if (Conversion->FieldFillingFunction == NULL) {\r
- //\r
- // Invalid Conversion Table Entry\r
- //\r
- if (StructureCreated) {\r
- ReleaseStructureNode (StructureNode);\r
- }\r
-\r
- goto Done;\r
- }\r
-\r
- Status = Conversion->FieldFillingFunction (\r
- StructureNode,\r
- 0,\r
- DataHeader,\r
- RecordHeader->RecordSize - RecordHeader->HeaderSize\r
- );\r
- if (EFI_ERROR (Status)) {\r
- if (StructureCreated) {\r
- ReleaseStructureNode (StructureNode);\r
- }\r
-\r
- goto Done;\r
- }\r
- } else {\r
- //\r
- // Invalid Conversion Table Entry\r
- //\r
- if (StructureCreated) {\r
- ReleaseStructureNode (StructureNode);\r
- }\r
-\r
- goto Done;\r
- }\r
- }\r
-Done:\r
- return ;\r
-}\r
-\r
-/**\r
- Calculate the minimal length for a SMBIOS type. This length maybe not equal\r
- to sizeof (SMBIOS_RECORD_STRUCTURE), but defined in conformance chapter in SMBIOS specification.\r
- \r
- @param Type SMBIOS's type.\r
- \r
- @return the minimal length of a smbios record.\r
-**/\r
-UINT32\r
-SmbiosGetTypeMinimalLength (\r
- IN UINT8 Type\r
- )\r
-{\r
- UINTN Index;\r
-\r
- for (Index = 0; mTypeInfoTable[Index].MinLength != 0; Index++) {\r
- if (mTypeInfoTable[Index].Type == Type) {\r
- return mTypeInfoTable[Index].MinLength;\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-/**\r
- Get pointer of EFI_SMBIOS_PROTOCOL.\r
- \r
- @return pointer of EFI_SMBIOS_PROTOCOL.\r
-**/\r
-EFI_SMBIOS_PROTOCOL*\r
-GetSmbiosProtocol(\r
- VOID\r
- )\r
-{\r
- EFI_STATUS Status;\r
- \r
- if (mSmbiosProtocol == NULL) {\r
- Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID*) &mSmbiosProtocol);\r
- ASSERT_EFI_ERROR (Status);\r
- } \r
- \r
- ASSERT (mSmbiosProtocol != NULL);\r
- return mSmbiosProtocol; \r
-} \r
-\r
-/**\r
- Create a blank smbios record. The datahub record is only a field of smbios record.\r
- So before fill any field from datahub's record. A blank smbios record need to be \r
- created.\r
- \r
- @param ProducerHandle The produce handle for a datahub record\r
- @param StructureNode Point to SMBIOS_STRUCTURE_NODE\r
- \r
- @retval EFI_OUT_OF_RESOURCES Fail to allocate memory for new blank SMBIOS record.\r
- @retval EFI_SUCCESS Success to create blank smbios record.\r
-**/\r
-EFI_STATUS\r
-SmbiosProtocolCreateRecord (\r
- IN EFI_HANDLE ProducerHandle, OPTIONAL\r
- IN SMBIOS_STRUCTURE_NODE *StructureNode\r
- )\r
-{\r
- EFI_SMBIOS_PROTOCOL *Smbios;\r
- EFI_SMBIOS_TABLE_HEADER *BlankRecord;\r
- EFI_STATUS Status;\r
- SMBIOS_STRUCTURE_NODE *RefStructureNode;\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *Link1;\r
- LIST_ENTRY *Link2; \r
- SMBIOS_LINK_DATA_FIXUP_NODE *LinkDataFixupNode;\r
- UINT8 *BufferPointer;\r
- \r
- Smbios = GetSmbiosProtocol();\r
- ASSERT (Smbios != NULL);\r
- \r
- //\r
- // Prepare a blank smbios record.\r
- //\r
- BlankRecord = (EFI_SMBIOS_TABLE_HEADER*) AllocateZeroPool (StructureNode->StructureSize);\r
- if (BlankRecord == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
- BlankRecord->Type = StructureNode->SmbiosType;\r
- BlankRecord->Length = (UINT8) (StructureNode->StructureSize - 2);\r
- \r
- //\r
- // Add blank record into SMBIOS database.\r
- //\r
- Status = Smbios->Add (Smbios, NULL, &StructureNode->SmbiosHandle, BlankRecord);\r
- FreePool (BlankRecord);\r
- \r
- //\r
- // Fix up the InterLink node for new added smbios record if some other\r
- // existing smbios record want to link this new record's handle.\r
- //\r
- for (Link = mStructureList.ForwardLink; Link != &mStructureList; Link = Link->ForwardLink) {\r
- RefStructureNode = CR (Link, SMBIOS_STRUCTURE_NODE, Link, SMBIOS_STRUCTURE_NODE_SIGNATURE);\r
- for (Link1 = RefStructureNode->LinkDataFixup.ForwardLink; Link1 != &RefStructureNode->LinkDataFixup;) {\r
- LinkDataFixupNode = CR (Link1, SMBIOS_LINK_DATA_FIXUP_NODE, Link, SMBIOS_LINK_DATA_FIXUP_NODE_SIGNATURE);\r
- Link2 = Link1;\r
- Link1 = Link1->ForwardLink;\r
- \r
- if ((StructureNode->SmbiosType != LinkDataFixupNode->TargetType) ||\r
- !(CompareGuid (&StructureNode->SubClass, &LinkDataFixupNode->SubClass)) ||\r
- (StructureNode->Instance != LinkDataFixupNode->LinkData.Instance) ||\r
- (StructureNode->SubInstance != LinkDataFixupNode->LinkData.SubInstance)) {\r
- continue;\r
- }\r
- \r
- //\r
- // Fill the field with the handle found\r
- //\r
- BufferPointer = (UINT8 *) (RefStructureNode->Structure) + LinkDataFixupNode->Offset;\r
- *BufferPointer = (UINT8) (StructureNode->SmbiosHandle & 0xFF);\r
- *(BufferPointer + 1) = (UINT8) ((StructureNode->SmbiosHandle >> 8) & 0xFF);\r
- BufferPointer = NULL;\r
-\r
- RemoveEntryList (Link2);\r
- FreePool (LinkDataFixupNode);\r
- }\r
- }\r
- \r
- return Status;\r
-} \r
-\r
-/**\r
- Get pointer of a SMBIOS record's buffer according to its handle.\r
- \r
- @param Handle The handle of SMBIOS record want to be searched.\r
- @param Type The type of SMBIOS record want to be searched.\r
- @param ProducerHandle The producer handle of SMBIOS record.\r
- \r
- @return EFI_SMBIOS_TABLE_HEADER Point to a SMBIOS record's buffer.\r
-**/ \r
-EFI_SMBIOS_TABLE_HEADER*\r
-GetSmbiosBufferFromHandle (\r
- IN EFI_SMBIOS_HANDLE Handle,\r
- IN EFI_SMBIOS_TYPE Type,\r
- IN EFI_HANDLE ProducerHandle OPTIONAL\r
- )\r
-{\r
- EFI_SMBIOS_PROTOCOL* Smbios;\r
- EFI_SMBIOS_HANDLE SearchingHandle;\r
- EFI_SMBIOS_TABLE_HEADER *RecordInSmbiosDatabase;\r
- EFI_STATUS Status;\r
- \r
- SearchingHandle = 0;\r
- Smbios = GetSmbiosProtocol();\r
- ASSERT (Smbios != NULL);\r
- \r
- do {\r
- Status = Smbios->GetNext (Smbios, &SearchingHandle, &Type, &RecordInSmbiosDatabase, NULL);\r
- } while ((SearchingHandle != Handle) && (Status != EFI_NOT_FOUND));\r
- \r
- return RecordInSmbiosDatabase;\r
-} \r
-\r
-/**\r
-\r
- Get the full size of smbios structure including optional strings that follow the formatted structure.\r
-\r
- @param Head Pointer to the beginning of smbios structure.\r
- @param Size The returned size.\r
- @param NumberOfStrings The returned number of optional strings that follow the formatted structure.\r
-\r
- @retval EFI_SUCCESS Size retured in Size.\r
- @retval EFI_INVALID_PARAMETER Input smbios structure mal-formed or Size is NULL.\r
- \r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-GetSmbiosStructureSize (\r
- IN EFI_SMBIOS_TABLE_HEADER *Head,\r
- OUT UINT32 *Size,\r
- OUT UINT8 *NumberOfStrings\r
- )\r
-{\r
- UINT32 FullSize;\r
- UINT8 StrLen;\r
- INT8* CharInStr;\r
- \r
- if (Size == NULL || NumberOfStrings == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- FullSize = Head->Length;\r
- CharInStr = (INT8*)Head + Head->Length;\r
- *Size = FullSize;\r
- *NumberOfStrings = 0;\r
- StrLen = 0;\r
- //\r
- // look for the two consecutive zeros, check the string limit by the way.\r
- //\r
- while (*CharInStr != 0 || *(CharInStr+1) != 0) { \r
- if (*CharInStr == 0) {\r
- *Size += 1;\r
- CharInStr++;\r
- }\r
-\r
- for (StrLen = 0 ; StrLen < SMBIOS_STRING_MAX_LENGTH; StrLen++) {\r
- if (*(CharInStr+StrLen) == 0) {\r
- break;\r
- } \r
- }\r
-\r
- if (StrLen == SMBIOS_STRING_MAX_LENGTH) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- //\r
- // forward the pointer\r
- //\r
- CharInStr += StrLen;\r
- *Size += StrLen;\r
- *NumberOfStrings += 1;\r
- \r
- }\r
-\r
- //\r
- // count ending two zeros.\r
- //\r
- *Size += 2;\r
- return EFI_SUCCESS; \r
-}\r
--- /dev/null
+/** @file\r
+ Common filling functions used in translating Datahub's record\r
+ to PI SMBIOS's record.\r
+ \r
+Copyright (c) 2009, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "Thunk.h"\r
+\r
+/**\r
+ Field Filling Function for Cache SubClass record type 5&6 -- Cache SRAM type.\r
+ Offset is mandatory\r
+ \r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldCacheType5 (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ EFI_CACHE_SRAM_TYPE_DATA SramData;\r
+ UINT32 Temp;\r
+\r
+ SramData = *(EFI_CACHE_SRAM_TYPE_DATA*)RecordData;\r
+\r
+ //\r
+ // Swap two fields because of inconsistency between smbios and datahub specs\r
+ //\r
+ Temp = SramData.Asynchronous;\r
+ SramData.Asynchronous = SramData.Synchronous;\r
+ SramData.Synchronous = Temp;\r
+ \r
+ //\r
+ // Truncate the data to word\r
+ //\r
+ CopyMem (\r
+ (UINT8 *) (StructureNode->Structure) + Offset,\r
+ (EFI_CACHE_SRAM_TYPE_DATA *) &SramData,\r
+ 2\r
+ );\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Field Filling Function for Cache SubClass record type 10 -- Cache Config.\r
+ Offset is mandatory\r
+\r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldCacheType10 (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+\r
+ UINT16 CacheConfig;\r
+\r
+ CopyMem (&CacheConfig, RecordData, 2);\r
+\r
+ if ((CacheConfig & 0x07) == 0) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ //\r
+ // Truncate the data to 2 bytes and make cache level zero-based.\r
+ //\r
+ CacheConfig--;\r
+ CopyMem (\r
+ (UINT8 *) (StructureNode->Structure) + Offset,\r
+ &CacheConfig,\r
+ 2\r
+ );\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Enlarge the structure buffer of a structure node in SMBIOS database.\r
+ The function maybe lead the structure pointer for SMBIOS record changed.\r
+ \r
+ @param StructureNode The structure node whose structure buffer is to be enlarged.\r
+ @param NewLength The new length of SMBIOS record which does not include unformat area.\r
+ @param OldBufferSize The old size of SMBIOS record buffer.\r
+ @param NewBufferSize The new size is targeted for enlarged.\r
+ \r
+ @retval EFI_OUT_OF_RESOURCES No more memory to allocate new record\r
+ @retval EFI_SUCCESS Success to enlarge the record buffer size.\r
+**/\r
+EFI_STATUS\r
+SmbiosEnlargeStructureBuffer (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ UINT8 NewLength,\r
+ UINTN OldBufferSize,\r
+ UINTN NewBufferSize\r
+ )\r
+{\r
+ EFI_SMBIOS_TABLE_HEADER *NewRecord;\r
+ EFI_SMBIOS_PROTOCOL *Smbios;\r
+ EFI_STATUS Status;\r
+ UINT8 CountOfString;\r
+ \r
+ NewRecord = NULL;\r
+ Smbios = GetSmbiosProtocol();\r
+ ASSERT (Smbios != NULL);\r
+ \r
+ NewRecord = (EFI_SMBIOS_TABLE_HEADER*) AllocateZeroPool (NewBufferSize);\r
+ if (NewRecord == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ CopyMem (NewRecord, StructureNode->Structure, OldBufferSize);\r
+ \r
+ \r
+ Status = Smbios->Remove (Smbios, StructureNode->SmbiosHandle);\r
+ ASSERT_EFI_ERROR (Status);\r
+ \r
+ //\r
+ // try to use original handle to enlarge the buffer.\r
+ //\r
+ NewRecord->Length = NewLength;\r
+ Status = Smbios->Add (Smbios, NULL, &StructureNode->SmbiosHandle, NewRecord);\r
+ ASSERT_EFI_ERROR (Status);\r
+ FreePool (NewRecord);\r
+ \r
+ StructureNode->Structure = GetSmbiosBufferFromHandle (\r
+ StructureNode->SmbiosHandle, \r
+ StructureNode->SmbiosType, \r
+ NULL\r
+ );\r
+ GetSmbiosStructureSize (\r
+ StructureNode->Structure,\r
+ &StructureNode->StructureSize,\r
+ &CountOfString\r
+ );\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Fill a standard Smbios string field. \r
+ \r
+ This function will convert the unicode string to single byte chars, and only\r
+ English language is supported.\r
+ This function changes the Structure pointer value of the structure node, \r
+ which should be noted by Caller.\r
+ \r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_INVALID_PARAMETER RecordDataSize is too larger\r
+ @retval EFI_OUT_OF_RESOURCES No memory to allocate new buffer for string\r
+ @retval EFI_SUCCESS Sucess append string for a SMBIOS record.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldString (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ UINT16 *Data;\r
+ CHAR8 AsciiData[SMBIOS_STRING_MAX_LENGTH];\r
+ UINT8 CountOfStrings;\r
+ UINTN OrigStringNumber;\r
+ EFI_SMBIOS_PROTOCOL *Smbios;\r
+ EFI_SMBIOS_HANDLE SmbiosHandle;\r
+ UINT32 OrigStructureSize;\r
+ UINTN NewStructureSize;\r
+ EFI_SMBIOS_TABLE_HEADER *NewRecord;\r
+ UINT32 StringLength;\r
+ \r
+ Status = EFI_SUCCESS;\r
+ OrigStringNumber = 0;\r
+ OrigStructureSize = 0;\r
+\r
+ //\r
+ // if we have a NULL token,\r
+ //\r
+ if (0 == *((STRING_REF *) RecordData)) {\r
+ *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = 0;\r
+ return EFI_SUCCESS;\r
+ }\r
+ \r
+ //\r
+ // Get the String from the Hii Database\r
+ //\r
+ Data = HiiGetPackageString (\r
+ &(StructureNode->ProducerName),\r
+ *((EFI_STRING_ID *) RecordData),\r
+ NULL\r
+ );\r
+ if (Data == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ StringLength = (UINT32)StrLen (Data);\r
+ //\r
+ // Count the string size including the terminating 0.\r
+ //\r
+ if (StringLength == 0) {\r
+ *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = 0;\r
+ FreePool (Data);\r
+ return EFI_SUCCESS;\r
+ }\r
+ \r
+ if (StringLength > SMBIOS_STRING_MAX_LENGTH) {\r
+ //\r
+ // Too long a string\r
+ //\r
+ FreePool (Data);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ \r
+ Smbios = GetSmbiosProtocol();\r
+ ASSERT (Smbios != NULL);\r
+ \r
+ //\r
+ // Convert Unicode string to Ascii string which only supported by SMBIOS.\r
+ //\r
+ ZeroMem (AsciiData, SMBIOS_STRING_MAX_LENGTH);\r
+ UnicodeStrToAsciiStr (Data, AsciiData);\r
+ \r
+ //\r
+ // if the field at offset is already filled with some value,\r
+ // find out the string it points to\r
+ //\r
+ OrigStringNumber = *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset);\r
+ if (OrigStringNumber != 0) {\r
+ DEBUG ((EFI_D_ERROR, "[SMBIOSThunk] Update %dth string for type[%d],offset[0x%x],handle[0x%x] to [%s]\n", \r
+ OrigStringNumber, StructureNode->SmbiosType, Offset, StructureNode->SmbiosHandle, AsciiData)); \r
+ \r
+ //\r
+ // If original string number is not zero, just update string\r
+ //\r
+ Status = Smbios->UpdateString (Smbios, &StructureNode->SmbiosHandle, &OrigStringNumber, AsciiData);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((EFI_D_ERROR, "[SMBIOSThunk] Fail to update %dth string in offset 0x%x for handle:0x%x type:0x%x\n", \r
+ OrigStringNumber, Offset, StructureNode->SmbiosHandle, StructureNode->SmbiosType));\r
+ ASSERT_EFI_ERROR (Status);\r
+ return Status;\r
+ }\r
+ } else {\r
+ //\r
+ // If the string has not been filled in SMBIOS database, remove it and add again\r
+ // with string appended.\r
+ //\r
+ Status = GetSmbiosStructureSize (StructureNode->Structure, &OrigStructureSize, &CountOfStrings);\r
+ ASSERT_EFI_ERROR (Status);\r
+ \r
+ if (CountOfStrings == 0) {\r
+ NewStructureSize = OrigStructureSize + StringLength;\r
+ } else {\r
+ NewStructureSize = OrigStructureSize + StringLength + 1;\r
+ }\r
+ \r
+ NewRecord = AllocateZeroPool (NewStructureSize);\r
+ if (NewRecord == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ CopyMem (NewRecord, StructureNode->Structure, OrigStructureSize);\r
+ \r
+ //\r
+ // Copy new string into tail of original SMBIOS record buffer.\r
+ //\r
+ if (CountOfStrings == 0) {\r
+ AsciiStrCpy ((CHAR8 *)NewRecord + OrigStructureSize - 2, AsciiData);\r
+ } else {\r
+ AsciiStrCpy ((CHAR8 *)NewRecord + OrigStructureSize - 1, AsciiData);\r
+ }\r
+ DEBUG ((EFI_D_ERROR, "[SMBIOSThunk] Type(%d) offset(0x%x) StringNumber:%d\n", \r
+ StructureNode->SmbiosType, Offset, CountOfStrings + 1));\r
+ //\r
+ // Update string reference number\r
+ //\r
+ *(UINT8 *) ((UINT8 *) NewRecord + Offset) = (UINT8) (CountOfStrings + 1);\r
+ SmbiosHandle = StructureNode->SmbiosHandle;\r
+ \r
+ //\r
+ // Remove original SMBIOS record and add new one\r
+ //\r
+ Status = Smbios->Remove (Smbios, StructureNode->SmbiosHandle);\r
+ ASSERT_EFI_ERROR (Status);\r
+ \r
+ //\r
+ // Add new SMBIOS record\r
+ //\r
+ Status = Smbios->Add (Smbios, NULL, &SmbiosHandle, NewRecord);\r
+ ASSERT_EFI_ERROR (Status);\r
+ \r
+ StructureNode->SmbiosHandle = SmbiosHandle;\r
+ \r
+ FreePool (NewRecord);\r
+ }\r
+ \r
+ //\r
+ // The SMBIOS record buffer maybe re-allocated in SMBIOS database,\r
+ // so update cached buffer pointer in DataHub structure list.\r
+ //\r
+ StructureNode->Structure = GetSmbiosBufferFromHandle (\r
+ StructureNode->SmbiosHandle, \r
+ StructureNode->SmbiosType,\r
+ NULL\r
+ );\r
+ ASSERT (StructureNode->Structure != NULL);\r
+ \r
+ //\r
+ // The string update action maybe lead the record is re-allocated in SMBIOS database\r
+ // so update cached record pointer\r
+ //\r
+ Status = GetSmbiosStructureSize (StructureNode->Structure, &StructureNode->StructureSize, &CountOfStrings);\r
+ ASSERT_EFI_ERROR (Status);\r
+ \r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Find a handle that matches the Link Data and the target Smbios type.\r
+ \r
+ @param TargetType the Smbios type\r
+ @param SubClass the SubClass\r
+ @param LinkData Specifies Instance, SubInstance and ProducerName\r
+ @param Handle the HandleNum found \r
+ \r
+ @retval EFI_NOT_FOUND Can not find the record according to handle\r
+ @retval EFI_SUCCESS Success to find the handle\r
+**/\r
+EFI_STATUS\r
+SmbiosFindHandle (\r
+ IN UINT8 TargetType,\r
+ IN EFI_GUID *SubClass,\r
+ IN EFI_INTER_LINK_DATA *LinkData,\r
+ IN OUT UINT16 *HandleNum\r
+ )\r
+{\r
+ LIST_ENTRY *Link;\r
+ SMBIOS_STRUCTURE_NODE *StructureNode;\r
+\r
+ StructureNode = NULL;\r
+\r
+ //\r
+ // Find out the matching handle\r
+ //\r
+ for (Link = mStructureList.ForwardLink; Link != &mStructureList; Link = Link->ForwardLink) {\r
+ StructureNode = CR (Link, SMBIOS_STRUCTURE_NODE, Link, SMBIOS_STRUCTURE_NODE_SIGNATURE);\r
+ if (StructureNode->Structure->Type == TargetType &&\r
+ CompareGuid (&(StructureNode->SubClass), SubClass) &&\r
+ StructureNode->Instance == LinkData->Instance &&\r
+ StructureNode->SubInstance == LinkData->SubInstance\r
+ ) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (Link == &mStructureList) {\r
+ return EFI_NOT_FOUND;\r
+ } else {\r
+ *HandleNum = StructureNode->Structure->Handle;\r
+ return EFI_SUCCESS;\r
+ }\r
+}\r
+\r
+/**\r
+ Fill the inter link field for a SMBIOS recorder.\r
+ \r
+ Some SMBIOS recorder need to reference the handle of another SMBIOS record. But\r
+ maybe another SMBIOS record has not been added, so put the InterLink request into\r
+ a linked list and the interlink will be fixedup when a new SMBIOS record is added.\r
+ \r
+ @param StructureNode Point to SMBIOS_STRUCTURE_NODE which reference another record's handle\r
+ @param LinkSmbiosNodeOffset The offset in this record for holding the handle of another SMBIOS record\r
+ @param LinkSmbiosType The type of SMBIOS record want to be linked.\r
+ @param InterLink Point to EFI_INTER_LINK_DATA will be put linked list.\r
+ @param SubClassGuid The guid of subclass for linked SMBIOS record.\r
+ \r
+ @retval EFI_SUCESS The linked record is found and no need fixup in future.\r
+ @retval !EFI_SUCESS The linked record can not be found and InterLink is put a fixing-p linked list.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldInterLink (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT16 LinkSmbiosNodeOffset,\r
+ IN UINT8 LinkSmbiosType,\r
+ IN EFI_INTER_LINK_DATA *InterLink,\r
+ IN EFI_GUID *SubClassGuid\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ SMBIOS_LINK_DATA_FIXUP_NODE *LinkDataFixupNode;\r
+ UINT16 StructureHandle;\r
+\r
+ Status = EFI_SUCCESS;\r
+ LinkDataFixupNode = NULL;\r
+\r
+ Status = SmbiosFindHandle (\r
+ LinkSmbiosType, // Smbios type\r
+ SubClassGuid,\r
+ InterLink,\r
+ &StructureHandle\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // Set the handle\r
+ //\r
+ CopyMem (\r
+ (UINT8 *) (StructureNode->Structure) + LinkSmbiosNodeOffset,\r
+ &StructureHandle,\r
+ sizeof (EFI_SMBIOS_HANDLE)\r
+ );\r
+ } else {\r
+ //\r
+ // Hang this in the link data fixup node\r
+ //\r
+ LinkDataFixupNode = AllocateZeroPool (sizeof (SMBIOS_LINK_DATA_FIXUP_NODE));\r
+ if (LinkDataFixupNode == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ LinkDataFixupNode->Signature = SMBIOS_LINK_DATA_FIXUP_NODE_SIGNATURE;\r
+ LinkDataFixupNode->Offset = LinkSmbiosNodeOffset;\r
+ LinkDataFixupNode->TargetType = LinkSmbiosType;\r
+ CopyMem (\r
+ &LinkDataFixupNode->SubClass,\r
+ SubClassGuid,\r
+ sizeof (EFI_GUID)\r
+ );\r
+ CopyMem (\r
+ &LinkDataFixupNode->LinkData,\r
+ InterLink,\r
+ sizeof (EFI_INTER_LINK_DATA)\r
+ );\r
+ InsertTailList (\r
+ &StructureNode->LinkDataFixup,\r
+ &(LinkDataFixupNode->Link)\r
+ );\r
+ }\r
+\r
+ return Status;\r
+}\r
+\r
+/**\r
+ Field Filling Function. Transform an EFI_EXP_BASE10_DATA to a word, with 'Mega'\r
+ as the unit.\r
+ \r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
+ @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldBase10ToWordWithMega (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ EFI_EXP_BASE10_DATA *Base10Data;\r
+ INT16 Value;\r
+ INT16 Exponent;\r
+\r
+ if (RecordDataSize != sizeof (EFI_EXP_BASE10_DATA)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ Base10Data = RecordData;\r
+ Value = Base10Data->Value;\r
+ Exponent = Base10Data->Exponent;\r
+\r
+ Exponent -= 6;\r
+ while (Exponent != 0) {\r
+ if (Exponent > 0) {\r
+ Value = (INT16) (Value * 10);\r
+ Exponent--;\r
+ } else {\r
+ Value = (INT16) (Value / 10);\r
+ Exponent++;\r
+ }\r
+ }\r
+\r
+ CopyMem (\r
+ (UINT8 *) (StructureNode->Structure) + Offset,\r
+ &Value,\r
+ 2\r
+ );\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Field Filling Function. Transform an EFI_EXP_BASE2_DATA to a word, with 'Kilo'\r
+ as the unit. Granularity implemented for Cache Size.\r
+ \r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
+ @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldBase2ToWordWithKilo (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ EFI_EXP_BASE2_DATA *Base2Data;\r
+ UINT32 Value;\r
+ UINT16 Exponent;\r
+\r
+ if (RecordDataSize != sizeof (EFI_EXP_BASE2_DATA)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ Base2Data = RecordData;\r
+ Value = Base2Data->Value;\r
+ Exponent = Base2Data->Exponent;\r
+\r
+ Exponent -= 10;\r
+ Value <<= Exponent;\r
+ \r
+ //\r
+ // Implement cache size granularity\r
+ //\r
+ if(Value >= 0x8000) {\r
+ Value >>= 6;\r
+ Value |= 0x8000;\r
+ }\r
+ \r
+ CopyMem (\r
+ (UINT8 *) (StructureNode->Structure) + Offset,\r
+ &Value,\r
+ 2\r
+ );\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Field Filling Function. Transform an EFI_EXP_BASE2_DATA to a byte, with '64k'\r
+ as the unit.\r
+ \r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
+ @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldBase2ToByteWith64K (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ EFI_EXP_BASE2_DATA *Base2Data;\r
+ UINT16 Value;\r
+ UINT16 Exponent;\r
+\r
+ if (RecordDataSize != sizeof (EFI_EXP_BASE2_DATA)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ Base2Data = RecordData;\r
+ Value = Base2Data->Value;\r
+ Exponent = Base2Data->Exponent;\r
+ Exponent -= 16;\r
+ Value <<= Exponent;\r
+\r
+ CopyMem (\r
+ (UINT8 *) (StructureNode->Structure) + Offset,\r
+ &Value,\r
+ 1\r
+ );\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Field Filling Function. Transform an EFI_EXP_BASE2_DATA to a word, with 10exp-9\r
+ as the unit.\r
+ \r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
+ @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldBase10ToByteWithNano (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ EFI_EXP_BASE10_DATA *Base10Data;\r
+ INT16 Value;\r
+ INT16 Exponent;\r
+\r
+ if (RecordDataSize != sizeof (EFI_EXP_BASE2_DATA)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ Base10Data = RecordData;\r
+ Value = Base10Data->Value;\r
+ Exponent = Base10Data->Exponent;\r
+\r
+ Exponent += 9;\r
+ while (Exponent != 0) {\r
+ if (Exponent > 0) {\r
+ Value = (INT16) (Value * 10);\r
+ Exponent--;\r
+ } else {\r
+ Value = (INT16) (Value / 10);\r
+ Exponent++;\r
+ }\r
+ }\r
+\r
+ * (UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = (UINT8) Value;\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Field Filling Function: truncate record data to byte and fill in the\r
+ field as indicated by Offset.\r
+ \r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
+ @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldTruncateToByte (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ Status = EFI_SUCCESS;\r
+\r
+ //\r
+ // Truncate the data to 8 bits\r
+ //\r
+ *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + Offset) = (UINT8) (*(UINT8 *) RecordData);\r
+\r
+ return Status;\r
+}\r
+\r
+/**\r
+ Field Filling Function: truncate record data to byte and fill in the\r
+ field as indicated by Offset.\r
+ \r
+ @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
+ @param Offset Offset of SMBIOS record which RecordData will be filled.\r
+ @param RecordData RecordData buffer will be filled.\r
+ @param RecordDataSize The size of RecordData buffer.\r
+ \r
+ @retval EFI_INVALID_PARAMETER RecordDataSize is invalid. \r
+ @retval EFI_SUCCESS RecordData is successed to be filled into given SMBIOS record.\r
+**/\r
+EFI_STATUS\r
+SmbiosFldTruncateToWord (\r
+ IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
+ IN UINT32 Offset,\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ Status = EFI_SUCCESS;\r
+\r
+ //\r
+ // Truncate the data to 8 bits\r
+ //\r
+ CopyMem (\r
+ (UINT8 *) (StructureNode->Structure) + Offset,\r
+ RecordData,\r
+ 2\r
+ );\r
+\r
+ return Status;\r
+}\r
+\r
+/**\r
+ Check if OEM structure has included 2 trailing 0s in data record.\r
+ \r
+ @param RecordData Point to record data will be checked.\r
+ @param RecordDataSize The size of record data.\r
+ \r
+ @retval 0 2 trailing 0s exist in unformatted section\r
+ @retval 1 1 trailing 0 exists at the end of unformatted section\r
+ @retval -1 There is no 0 at the end of unformatted section\r
+**/\r
+INT8\r
+SmbiosCheckTrailingZero (\r
+ IN VOID *RecordData,\r
+ IN UINT32 RecordDataSize\r
+ )\r
+{\r
+ SMBIOS_STRUCTURE *Smbios;\r
+ CHAR8 *Start;\r
+ CHAR8 *End;\r
+ \r
+ Smbios = (SMBIOS_STRUCTURE *) RecordData;\r
+ \r
+ //\r
+ // Skip over formatted section\r
+ //\r
+ Start = (CHAR8 *) ((UINT8 *) Smbios + Smbios->Length);\r
+ End = (CHAR8 *) RecordData + RecordDataSize;\r
+ \r
+ //\r
+ // Unformatted section exists\r
+ //\r
+ while (Start < End - 1) {\r
+ //\r
+ // Avoid unaligned issue on IPF\r
+ //\r
+ if ((*Start == 0) && (*(Start + 1) == 0)) {\r
+ //\r
+ // 2 trailing 0s exist in unformatted section\r
+ //\r
+ return 0;\r
+ }\r
+ Start++;\r
+ }\r
+ \r
+ if (Start == End - 1) {\r
+ //\r
+ // Check if there has been already 1 trailing 0\r
+ //\r
+ if (*Start == 0) {\r
+ return 1;\r
+ } \r
+ }\r
+ \r
+ //\r
+ // There is no 0 at the end of unformatted section\r
+ //\r
+ return -1;\r
+}\r
--- /dev/null
+/** @file\r
+ The conversion table that guides the generation of the Smbios struture list.\r
+ \r
+Copyright (c) 2009, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "Thunk.h"\r
+\r
+///\r
+/// The minimal length includes last two zero bytes.\r
+///\r
+SMBIOS_TYPE_INFO_TABLE_ENTRY mTypeInfoTable[] = {\r
+ //\r
+ // Type 0: Bios Information\r
+ //\r
+ {\r
+ 0,\r
+ 0x1a,\r
+ TRUE,\r
+ FALSE\r
+ }, // size includes wo extension bytes\r
+ //\r
+ // Type 1: System Information\r
+ //\r
+ {\r
+ 1,\r
+ 0x1d,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 2: Base Board Information\r
+ //\r
+ {\r
+ 2,\r
+ 0x12,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 3: System Enclosure or Chassis\r
+ //\r
+ {\r
+ 3,\r
+ 0x17, // 0x13 covers till OEM-defined, not right\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 4: Processor\r
+ //\r
+ {\r
+ 4,\r
+ 0x25,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 5: Memory Controller\r
+ //\r
+ {\r
+ 5,\r
+ 0x12,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 6: Memory\r
+ //\r
+ {\r
+ 6,\r
+ 0x0E,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 7: Cache\r
+ //\r
+ {\r
+ 7,\r
+ 0x15,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 8: Port Connector Information\r
+ //\r
+ {\r
+ 8,\r
+ 0x0B,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 9: System Slots\r
+ //\r
+ {\r
+ 9,\r
+ 0x0f,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 10: On Board Device Information\r
+ //\r
+ {\r
+ 10,\r
+ 0x8,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 11: OEM Strings\r
+ //\r
+ {\r
+ 11, \r
+ 0x7, \r
+ FALSE, \r
+ FALSE\r
+ },\r
+ //\r
+ // Type 12: System Configuration Options\r
+ //\r
+ {\r
+ 12,\r
+ 0x7,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 13: BIOS Language Information\r
+ //\r
+ {\r
+ 13,\r
+ 0x18,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 15: System Event Log\r
+ //\r
+ {\r
+ 15,\r
+ 0x19,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 16: Physical Memory Array\r
+ //\r
+ {\r
+ 16,\r
+ 0x11,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 17: Memory Device\r
+ //\r
+ {\r
+ 17,\r
+ 0x1d,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 18: 32 bit Memory Error Information\r
+ //\r
+ {\r
+ 18,\r
+ 0x19,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 19: Memory Array Mapped Address\r
+ //\r
+ {\r
+ 19,\r
+ 0x11,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 20: Memory Device Mapped Address\r
+ //\r
+ {\r
+ 20,\r
+ 0x15,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 21: Pointing Device\r
+ //\r
+ {\r
+ 21,\r
+ 0x9,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 22: Portable Battery\r
+ //\r
+ {\r
+ 22,\r
+ 0x1c,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 23: System Reset\r
+ //\r
+ {\r
+ 23,\r
+ 0x0f,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 24: Hardware Security\r
+ //\r
+ {\r
+ 24,\r
+ 0x07,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 25: System Power Controls\r
+ //\r
+ {\r
+ 25,\r
+ 0x0b,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 26: Voltage Probe\r
+ //\r
+ {\r
+ 26,\r
+ 0x18,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 27: Cooling Device\r
+ //\r
+ {\r
+ 27,\r
+ 0x10,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 28: Temperature Probe\r
+ //\r
+ {\r
+ 28,\r
+ 0x18,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 29: Electrical Current Probe\r
+ //\r
+ {\r
+ 29,\r
+ 0x18,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 30: Out-of-Band Remote Access\r
+ //\r
+ {\r
+ 30,\r
+ 0x08,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 31: BIS Entry Point\r
+ //\r
+ {\r
+ 31,\r
+ 0x1c,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 32: System Boot Information\r
+ //\r
+ {\r
+ 32,\r
+ 0x16,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 33: 64 bit Memory Error Information\r
+ //\r
+ {\r
+ 33,\r
+ 0x21,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 34: Management Device\r
+ //\r
+ {\r
+ 34,\r
+ 0x0d,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 36: Management Device Threshold\r
+ //\r
+ {\r
+ 36,\r
+ 0x12,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 37: Memory Channel\r
+ //\r
+ {\r
+ 37,\r
+ 0x0c,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 38: IPMI device info\r
+ //\r
+ {\r
+ 38,\r
+ 0x12,\r
+ TRUE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 39: Power supply\r
+ //\r
+ {\r
+ 39,\r
+ 0x18,\r
+ FALSE,\r
+ FALSE\r
+ }, \r
+ //\r
+ // Type 0x80-0xFF: OEM type\r
+ //\r
+ {\r
+ 0x80,\r
+ 0x6,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Type 127: End of Table\r
+ //\r
+ {\r
+ 127,\r
+ 0x6,\r
+ FALSE,\r
+ FALSE\r
+ },\r
+ //\r
+ // Terminator\r
+ //\r
+ {\r
+ 0,\r
+ 0\r
+ }\r
+};\r
+\r
+SMBIOS_CONVERSION_TABLE_ENTRY mConversionTable[] = {\r
+\r
+ {\r
+ //\r
+ // Processor Sub Class -- Record Type 1: Frequency\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorCoreFrequencyRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x16,\r
+ SmbiosFldBase10ToWordWithMega\r
+ },\r
+\r
+ {\r
+ //\r
+ // Processor SubClass -- Record Type 2: Bus Frequency\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorFsbFrequencyRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x12,\r
+ SmbiosFldBase10ToWordWithMega\r
+ },\r
+\r
+ {\r
+ //\r
+ // Processor SubClass -- Record Type 3: Version\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorVersionRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x10,\r
+ SmbiosFldString\r
+ },\r
+\r
+ {\r
+ //\r
+ // Processor SubClass -- Record Type 4: Manufacturor\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorManufacturerRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x7,\r
+ SmbiosFldString\r
+ },\r
+\r
+ {\r
+ //\r
+ // Processor SubClass -- Record Type 5: Serial Number\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorSerialNumberRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x20,\r
+ SmbiosFldString\r
+ },\r
+\r
+ {\r
+ //\r
+ // Processor SubClass -- Record Type 6: ID\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorIdRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x08,\r
+ SmbiosFldProcessorType6\r
+ },\r
+\r
+ {\r
+ //\r
+ // Processor SubClass -- Record Type 7: Type\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorTypeRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x05,\r
+ SmbiosFldTruncateToByte\r
+ },\r
+\r
+ {\r
+ //\r
+ // Processor SubClass -- Record Type 8: Family\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorFamilyRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x06,\r
+ SmbiosFldTruncateToByte\r
+ },\r
+\r
+ {\r
+ //\r
+ // Processor SubClass -- Record Type 9: Voltage\r
+ //\r
+ EFI_PROCESSOR_SUBCLASS_GUID,\r
+ ProcessorVoltageRecordType,\r
+ 4,\r
+ BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER,\r
+ BY_FUNCTION_WITH_OFFSET_SPECIFIED,\r
+ 0x11,\r
+ SmbiosFldProcessorType9\r
+ },\r
+\r
+ {\r
+ //\r<