]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/PiSmbiosRecordOnDataHubSmbiosRecordThunk/Translate.c
MdeModulePkg/UsbMassStorageDxe: Enhance Request Sense Handling
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / PiSmbiosRecordOnDataHubSmbiosRecordThunk / Translate.c
index ad41ec0783592ac6f7d709c533384134934bd849..7d674f89f4692b86152c7d35c5755dab14606df7 100644 (file)
@@ -2,8 +2,8 @@
   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
+Copyright (c) 2009 - 2015, 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
@@ -15,7 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \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
@@ -83,7 +82,7 @@ SmbiosProcessDataRecord (
     // Find a matching entry in the conversion table for this\r
     // (SubClass, RecordNumber) pair\r
     //\r
-    for (; !CompareGuid (&(mConversionTable[Index].SubClass), &ZeroGuid); Index++) {\r
+    for (; !CompareGuid (&(mConversionTable[Index].SubClass), &gZeroGuid); Index++) {\r
       if (CompareGuid (\r
             &(mConversionTable[Index].SubClass),\r
             &(RecordHeader->DataRecordGuid)\r
@@ -94,7 +93,7 @@ SmbiosProcessDataRecord (
       }\r
     }\r
 \r
-    if (CompareGuid (&(mConversionTable[Index].SubClass), &ZeroGuid)) {\r
+    if (CompareGuid (&(mConversionTable[Index].SubClass), &gZeroGuid)) {\r
       //\r
       // We cannot find a matching entry in conversion table,\r
       // this means this data record cannot be used for SMBIOS.\r
@@ -117,7 +116,7 @@ SmbiosProcessDataRecord (
                         SMBIOS_STRUCTURE_NODE_SIGNATURE\r
                         );\r
 \r
-      if (Conversion->StructureLocatingMethod == BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER) {\r
+      if (Conversion->StructureLocatingMethod == BySubclassInstanceSubinstanceProducer) {\r
         //\r
         // Look at SubClass, Instance, SubInstance and ProducerName for a matching\r
         // node\r
@@ -127,7 +126,7 @@ SmbiosProcessDataRecord (
             StructureNode->SubInstance == DataHeader->SubInstance &&\r
             CompareGuid (&(StructureNode->ProducerName), &(RecordHeader->ProducerName))\r
               ) {\r
-          if (Conversion->SmbiosType >= 0X80) {\r
+          if (Conversion->SmbiosType >= 0x80) {\r
             if (StructureNode->SmbiosType == ((SMBIOS_STRUCTURE_HDR *) SrcData)->Type) {\r
               break;\r
             }\r
@@ -136,7 +135,7 @@ SmbiosProcessDataRecord (
           }\r
         }\r
 \r
-      } else if (Conversion->StructureLocatingMethod == BY_SUBCLASS_INSTANCE_PRODUCER) {\r
+      } else if (Conversion->StructureLocatingMethod == BySubClassInstanceProducer) {\r
         //\r
         // Look at SubClass, Instance and ProducerName for a matching node\r
         //\r
@@ -144,7 +143,7 @@ SmbiosProcessDataRecord (
             StructureNode->Instance == DataHeader->Instance &&\r
             CompareGuid (&(StructureNode->ProducerName), &(RecordHeader->ProducerName))\r
               ) {\r
-          if (Conversion->SmbiosType >= 0X80) {\r
+          if (Conversion->SmbiosType >= 0x80) {\r
             if (StructureNode->SmbiosType == ((SMBIOS_STRUCTURE_HDR *) SrcData)->Type) {\r
               break;\r
             }\r
@@ -172,7 +171,7 @@ SmbiosProcessDataRecord (
         goto Done;\r
       }\r
 \r
-      if (Conversion->StructureLocatingMethod == BY_SUBCLASS_INSTANCE_SUBINSTANCE_PRODUCER) {\r
+      if (Conversion->StructureLocatingMethod == BySubclassInstanceSubinstanceProducer) {\r
         //\r
         // Fill in SubClass, Instance, SubInstance and ProducerName\r
         //\r
@@ -181,7 +180,7 @@ SmbiosProcessDataRecord (
         StructureNode->SubInstance  = DataHeader->SubInstance;\r
         CopyMem (&(StructureNode->ProducerName), &(RecordHeader->ProducerName), sizeof (EFI_GUID));\r
 \r
-      } else if (Conversion->StructureLocatingMethod == BY_SUBCLASS_INSTANCE_PRODUCER) {\r
+      } else if (Conversion->StructureLocatingMethod == BySubClassInstanceProducer) {\r
         //\r
         // Fill in at SubClass, Instance and ProducerName, mark SubInstance as Non\r
         // Applicable\r
@@ -196,7 +195,6 @@ SmbiosProcessDataRecord (
       // 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
@@ -209,8 +207,16 @@ SmbiosProcessDataRecord (
         goto Done;\r
       }\r
 \r
-      StructureNode->SmbiosType          = Conversion->SmbiosType;\r
-      StructureNode->SmbiosHandle        = 0;\r
+      //\r
+      // Assign correct SmbiosType when OEM type and Non-OEM type\r
+      //\r
+      if (Conversion->SmbiosType >= 0x80) {\r
+        StructureNode->SmbiosType = ((SMBIOS_STRUCTURE_HDR *) SrcData)->Type;\r
+      } else {\r
+        StructureNode->SmbiosType = Conversion->SmbiosType;\r
+      }\r
+      \r
+      StructureNode->SmbiosHandle        = SMBIOS_HANDLE_PI_RESERVED;\r
       Status = SmbiosProtocolCreateRecord (\r
                  NULL, \r
                  StructureNode\r
@@ -244,7 +250,7 @@ SmbiosProcessDataRecord (
     //\r
     // Fill the Structure's field corresponding to this data record\r
     //\r
-    if (Conversion->FieldFillingMethod == RECORD_DATA_UNCHANGED_OFFSET_SPECIFIED) {\r
+    if (Conversion->FieldFillingMethod == RecordDataUnchangedOffsetSpecified) {\r
       //\r
       // Field data is just the record data without transforming and\r
       // offset is specified directly in the conversion table entry\r
@@ -262,7 +268,7 @@ SmbiosProcessDataRecord (
       \r
       CopyMem ((UINT8 *) (StructureNode->Structure) + Conversion->FieldOffset, SrcData, SrcDataSize);\r
 \r
-    } else if (Conversion->FieldFillingMethod == BY_FUNCTION_WITH_OFFSET_SPECIFIED) {\r
+    } else if (Conversion->FieldFillingMethod == ByFunctionWithOffsetSpecified) {\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
@@ -292,7 +298,7 @@ SmbiosProcessDataRecord (
 \r
         goto Done;\r
       }\r
-    } else if (Conversion->FieldFillingMethod == BY_FUNCTION) {\r
+    } else if (Conversion->FieldFillingMethod == ByFunction) {\r
       //\r
       // Both field offset and field content are determined by\r
       // FieldFillingFunction\r
@@ -321,7 +327,7 @@ SmbiosProcessDataRecord (
 \r
         goto Done;\r
       }\r
-    } else if (Conversion->FieldFillingMethod == BY_FUNCTION_WITH_WHOLE_DATA_RECORD) {\r
+    } else if (Conversion->FieldFillingMethod == ByFunctionWithWholeDataRecord) {\r
       //\r
       // Both field offset and field content are determined by\r
       // FieldFillingFunction and the function accepts the whole data record\r
@@ -361,6 +367,17 @@ SmbiosProcessDataRecord (
 \r
       goto Done;\r
     }\r
+    \r
+    //\r
+    // SmbiosEnlargeStructureBuffer is called to remove and add again\r
+    // this SMBIOS entry to reflash SMBIOS table in configuration table.\r
+    //\r
+    SmbiosEnlargeStructureBuffer (\r
+      StructureNode,\r
+      StructureNode->Structure->Length,\r
+      StructureNode->StructureSize,\r
+      StructureNode->StructureSize\r
+      );\r
   }\r
 Done:\r
   return ;\r
@@ -512,7 +529,7 @@ GetSmbiosBufferFromHandle (
   EFI_SMBIOS_TABLE_HEADER *RecordInSmbiosDatabase;\r
   EFI_STATUS              Status;\r
   \r
-  SearchingHandle = 0;\r
+  SearchingHandle = SMBIOS_HANDLE_PI_RESERVED;\r
   Smbios          = GetSmbiosProtocol();\r
   ASSERT (Smbios != NULL);\r
   \r