+++ /dev/null
-/** @file\r
- Routines that support Processor SubClass data records translation.\r
- \r
-Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>\r
-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