]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1. PI SMBIOS Checkin. Major change include:
authordavidhuang <davidhuang@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 20 Nov 2009 04:02:03 +0000 (04:02 +0000)
committerdavidhuang <davidhuang@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 20 Nov 2009 04:02:03 +0000 (04:02 +0000)
1) Produce PI SMBIOS protocol in MdeModulePkg
2) Update all consumers (in CorePkgs and native platform pkgs) to consume SMBIOS protocol instead of DataHub
3) Pass ECC tool; Verify Nt32, Duet, Unix platform

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9457 6f19259b-4bc3-4df7-8a09-765794883524

33 files changed:
Nt32Pkg/CpuRuntimeDxe/Cpu.c
Nt32Pkg/CpuRuntimeDxe/CpuDriver.h
Nt32Pkg/CpuRuntimeDxe/CpuRuntimeDxe.inf
Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscBiosVendorData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscBiosVendorFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscBootInformationData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscBootInformationFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscChassisManufacturerData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscChassisManufacturerFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscNumberOfInstallableLanguagesData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscNumberOfInstallableLanguagesFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscOemStringData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscOemStringFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscPortInternalConnectorDesignatorData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscPortInternalConnectorDesignatorFunction.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscResetCapabilitiesData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscResetCapabilitiesFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscSubClassPlatformDxe.inf
Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriver.h
Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriverDataTable.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriverEntryPoint.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemLanguageStringData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemLanguageStringFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemManufacturerData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemManufacturerFunction.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemOptionStringData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemOptionStringFunction.c [new file with mode: 0644]
Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemSlotDesignationData.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemSlotDesignationFunction.c [new file with mode: 0644]
Nt32Pkg/Nt32Pkg.dsc
Nt32Pkg/Nt32Pkg.fdf

index f0a138d96d9824d7c2e25ed3e05386b18182f23b..074781e6ffb38f05b6894d5c39d801c57e850f86 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006 - 2007, Intel Corporation\r
+Copyright (c) 2006 - 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
@@ -55,19 +55,6 @@ CPU_ARCH_PROTOCOL_PRIVATE mCpuTemplate = {
 \r
 \r
 \r
-typedef union {\r
-  EFI_CPU_DATA_RECORD *DataRecord;\r
-  UINT8               *Raw;\r
-} EFI_CPU_DATA_RECORD_BUFFER;\r
-\r
-EFI_SUBCLASS_TYPE1_HEADER mCpuDataRecordHeader = {\r
-  EFI_PROCESSOR_SUBCLASS_VERSION,       // Version\r
-  sizeof (EFI_SUBCLASS_TYPE1_HEADER),   // Header Size\r
-  0,                                    // Instance, Initialize later\r
-  EFI_SUBCLASS_INSTANCE_NON_APPLICABLE, // SubInstance\r
-  0                                     // RecordType, Initialize later\r
-};\r
-\r
 //\r
 // Service routines for the driver\r
 //\r
@@ -390,14 +377,42 @@ Returns:
 }\r
 \r
 \r
+\r
+/**\r
+  Logs SMBIOS record.\r
+\r
+  @param  Smbios   Pointer to SMBIOS protocol instance.\r
+  @param  Buffer   Pointer to the data buffer.\r
+\r
+**/\r
+VOID\r
+LogSmbiosData (\r
+  IN  EFI_SMBIOS_PROTOCOL        *Smbios,\r
+  IN  UINT8                      *Buffer\r
+  )\r
+{\r
+  EFI_STATUS         Status;\r
+  EFI_SMBIOS_HANDLE  SmbiosHandle;\r
+  \r
+  SmbiosHandle = 0;\r
+  Status = Smbios->Add (\r
+                     Smbios,\r
+                     NULL,\r
+                     &SmbiosHandle,\r
+                     (EFI_SMBIOS_TABLE_HEADER*)Buffer\r
+                     );\r
+  ASSERT_EFI_ERROR (Status);\r
+}\r
+\r
+\r
 VOID\r
-CpuUpdateDataHub (\r
+CpuUpdateSmbios (\r
   VOID\r
   )\r
 /*++\r
 \r
 Routine Description:\r
-  This function will log processor version and frequency data to data hub.\r
+  This function will log processor version and frequency data to Smbios.\r
 \r
 Arguments:\r
   Event        - Event whose notification function is being invoked.\r
@@ -409,31 +424,24 @@ Returns:
 --*/\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_CPU_DATA_RECORD_BUFFER  RecordBuffer;\r
-  UINT32                      HeaderSize;\r
   UINT32                      TotalSize;\r
-  EFI_DATA_HUB_PROTOCOL       *DataHub;\r
+  EFI_SMBIOS_PROTOCOL         *Smbios;\r
   EFI_HII_HANDLE              HiiHandle;\r
+  STRING_REF                  Token;\r
+  UINTN                       CpuVerStrLen;\r
+  EFI_STRING                  CpuVerStr;\r
+  SMBIOS_TABLE_TYPE4          *SmbiosRecord;\r
+  CHAR8                       *OptionalStrStart;\r
 \r
   //\r
-  // Locate DataHub protocol.\r
+  // Locate Smbios protocol.\r
   //\r
-  Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID**)&DataHub);\r
+  Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID **)&Smbios);\r
+  \r
   if (EFI_ERROR (Status)) {\r
     return;\r
   }\r
 \r
-  //\r
-  // Initialize data record header\r
-  //\r
-  mCpuDataRecordHeader.Instance = 1;\r
-  HeaderSize                    = sizeof (EFI_SUBCLASS_TYPE1_HEADER);\r
-\r
-  RecordBuffer.Raw              = AllocatePool (HeaderSize + EFI_CPU_DATA_MAXIMUM_LENGTH);\r
-  if (RecordBuffer.Raw == NULL) {\r
-    return ;\r
-  }\r
-\r
   //\r
   // Initialize strings to HII database\r
   //\r
@@ -445,40 +453,40 @@ Returns:
                 );\r
   ASSERT (HiiHandle != NULL);\r
 \r
-  CopyMem (RecordBuffer.Raw, &mCpuDataRecordHeader, HeaderSize);\r
-\r
+  Token  = STRING_TOKEN (STR_PROCESSOR_VERSION);\r
+  CpuVerStr = HiiGetPackageString(&gEfiCallerIdGuid, Token, NULL);\r
+  CpuVerStrLen = StrLen(CpuVerStr);\r
+  ASSERT (CpuVerStrLen <= SMBIOS_STRING_MAX_LENGTH);\r
 \r
-  RecordBuffer.DataRecord->DataRecordHeader.RecordType      = ProcessorVersionRecordType;\r
-  RecordBuffer.DataRecord->VariableRecord.ProcessorVersion  = STRING_TOKEN (STR_PROCESSOR_VERSION);\r
-  TotalSize = HeaderSize + sizeof (EFI_PROCESSOR_VERSION_DATA);\r
 \r
-  Status = DataHub->LogData (\r
-                      DataHub,\r
-                      &gEfiProcessorSubClassGuid,\r
-                      &gEfiCallerIdGuid,\r
-                      EFI_DATA_RECORD_CLASS_DATA,\r
-                      RecordBuffer.Raw,\r
-                      TotalSize\r
-                      );\r
+  TotalSize = sizeof(SMBIOS_TABLE_TYPE4) + CpuVerStrLen + 1 + 1;\r
+  SmbiosRecord = AllocatePool(TotalSize);\r
+  ZeroMem(SmbiosRecord, TotalSize);\r
 \r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE4);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  //\r
+  SmbiosRecord->Hdr.Handle = 0;  \r
+  //\r
+  // Processor version is the 1st string.\r
+  //\r
+  SmbiosRecord->ProcessorVersion = 1;\r
   //\r
   // Store CPU frequency data record to data hub - It's an emulator so make up a value\r
   //\r
-  RecordBuffer.DataRecord->DataRecordHeader.RecordType                    = ProcessorCoreFrequencyRecordType;\r
-  RecordBuffer.DataRecord->VariableRecord.ProcessorCoreFrequency.Value    = 1234;\r
-  RecordBuffer.DataRecord->VariableRecord.ProcessorCoreFrequency.Exponent = 6;\r
-  TotalSize = HeaderSize + sizeof (EFI_PROCESSOR_CORE_FREQUENCY_DATA);\r
-\r
-  Status = DataHub->LogData (\r
-                      DataHub,\r
-                      &gEfiProcessorSubClassGuid,\r
-                      &gEfiCallerIdGuid,\r
-                      EFI_DATA_RECORD_CLASS_DATA,\r
-                      RecordBuffer.Raw,\r
-                      TotalSize\r
-                      );\r
-\r
-  FreePool (RecordBuffer.Raw);\r
+  SmbiosRecord->CurrentSpeed  = 1234;\r
+\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(CpuVerStr, OptionalStrStart);\r
+\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  LogSmbiosData(Smbios, (UINT8 *) SmbiosRecord);\r
+  FreePool (SmbiosRecord);\r
+\r
 }\r
 \r
 \r
@@ -512,7 +520,7 @@ Returns:
 {\r
   EFI_STATUS                Status;\r
 \r
-  CpuUpdateDataHub ();\r
+  CpuUpdateSmbios ();\r
 \r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &mCpuTemplate.Handle,\r
@@ -524,5 +532,3 @@ Returns:
 \r
   return Status;\r
 }\r
-\r
-\r
index f7fdea9a9252457ead0828ed5b2da14c8f718261..2cd644c489257f008a63527b58d5a900522efc5e 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -24,8 +24,9 @@ Abstract:
 \r
 \r
 #include <FrameworkDxe.h>\r
+#include <IndustryStandard/SmBios.h>\r
 #include <Protocol/Cpu.h>\r
-#include <Protocol/DataHub.h>\r
+#include <Protocol/Smbios.h>\r
 #include <Protocol/FrameworkHii.h>\r
 #include <Guid/DataHubRecords.h>\r
 #include <Protocol/CpuIo.h>\r
index ded73b3661f13f74b34a1831a7f37e5d9258a45a..28f116c3eb5bf7cc89d5b0927a1920046edf2052 100644 (file)
@@ -2,7 +2,7 @@
 # Component description file for Cpu module.\r
 #\r
 # This CPU module abstracts the interrupt subsystem of a platform and the CPU-specific setjump-long pair.\r
-# Copyright (c) 2006 - 2007, Intel Corporation\r
+# Copyright (c) 2006 - 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
   UefiDriverEntryPoint\r
   DebugLib\r
   HiiLib\r
-  \r
-[Guids]\r
-  gEfiProcessorSubClassGuid                     # SOMETIMES_CONSUMED\r
 \r
 [Protocols]\r
   gEfiWinNtIoProtocolGuid                       # PROTOCOL_NOTIFY SOMETIMES_CONSUMED\r
-  gEfiDataHubProtocolGuid                       # PROTOCOL SOMETIMES_CONSUMED\r
+  gEfiSmbiosProtocolGuid                        # PROTOCOL SOMETIMES_CONSUMED\r
   gEfiWinNtIoProtocolGuid                       # PROTOCOL ALWAYS_CONSUMED\r
   gEfiCpuIoProtocolGuid                         # PROTOCOL ALWAYS_PRODUCED\r
   gEfiCpuArchProtocolGuid                       # PROTOCOL ALWAYS_PRODUCED\r
 \r
 [Depex]\r
-  gEfiDataHubProtocolGuid\r
+  gEfiSmbiosProtocolGuid\r
index a9eeefa6aff5bb16354c5e53df4e4f3d320d3c68..47854ff7ef87b2c057516e94e8d3cc9d1590820a 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_BASE_BOARD_MANUFACTURER_DATA, MiscBaseBoardManufacturer) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_BASE_BOARD_MANUFACTURER_DATA, MiscBaseBoardManufacturer) = {\r
   STRING_TOKEN(STR_MISC_BASE_BOARD_MANUFACTURER),\r
   STRING_TOKEN(STR_MISC_BASE_BOARD_PRODUCT_NAME),\r
   STRING_TOKEN(STR_MISC_BASE_BOARD_VERSION),\r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c
new file mode 100644 (file)
index 0000000..a66f6fe
--- /dev/null
@@ -0,0 +1,175 @@
+/*++\r
+\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+\r
+Module Name:\r
+\r
+  MiscBaseBoardManufacturerFunction.c\r
+  \r
+Abstract: \r
+\r
+  BaseBoard manufacturer information boot time changes.\r
+  SMBIOS type 2.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscBaseBoardManufacturer (Type 2).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer)\r
+{\r
+  CHAR8                           *OptionalStrStart;\r
+  UINTN                           ManuStrLen;\r
+  UINTN                           ProductStrLen;\r
+  UINTN                           VerStrLen;\r
+  UINTN                           AssertTagStrLen;\r
+  UINTN                           SerialNumStrLen;\r
+  UINTN                           ChassisStrLen;\r
+  EFI_STATUS                      Status;\r
+  EFI_STRING                      Manufacturer;\r
+  EFI_STRING                      Product;\r
+  EFI_STRING                      Version;\r
+  EFI_STRING                      SerialNumber;\r
+  EFI_STRING                      AssertTag;\r
+  EFI_STRING                      Chassis;\r
+  STRING_REF                      TokenToGet;\r
+  EFI_SMBIOS_HANDLE               SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE2              *SmbiosRecord;\r
+  EFI_MISC_BASE_BOARD_MANUFACTURER   *ForType2InputData;\r
+\r
+  ForType2InputData = (EFI_MISC_BASE_BOARD_MANUFACTURER *)RecordData;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);\r
+  Manufacturer = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  ManuStrLen = StrLen(Manufacturer);\r
+  if (ManuStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);\r
+  Product = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  ProductStrLen = StrLen(Product);\r
+  if (ProductStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);\r
+  Version = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  VerStrLen = StrLen(Version);\r
+  if (VerStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER);\r
+  SerialNumber = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  SerialNumStrLen = StrLen(SerialNumber);\r
+  if (SerialNumStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG);\r
+  AssertTag = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  AssertTagStrLen = StrLen(AssertTag);\r
+  if (AssertTagStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_CHASSIS_LOCATION);\r
+  Chassis = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  ChassisStrLen = StrLen(Chassis);\r
+  if (ChassisStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + ChassisStrLen +1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + ChassisStrLen +1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE2);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  //\r
+  SmbiosRecord->Hdr.Handle = 0;  \r
+  //\r
+  // Manu will be the 1st optional string following the formatted structure.\r
+  // \r
+  SmbiosRecord->Manufacturer = 1;  \r
+  //\r
+  // ProductName will be the 2st optional string following the formatted structure.\r
+  // \r
+  SmbiosRecord->ProductName  = 2;  \r
+  //\r
+  // Version will be the 3rd optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->Version = 3;  \r
+  //\r
+  // SerialNumber will be the 4th optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->SerialNumber = 4;  \r
+  //\r
+  // AssertTag will be the 5th optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->AssetTag = 5;  \r
+\r
+  //\r
+  // LocationInChassis will be the 6th optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->LocationInChassis = 6;  \r
+  SmbiosRecord->FeatureFlag = (*(BASE_BOARD_FEATURE_FLAGS*)&(ForType2InputData->BaseBoardFeatureFlags));\r
+  SmbiosRecord->ChassisHandle  = 0;\r
+  SmbiosRecord->BoardType      = (UINT8)ForType2InputData->BaseBoardType;\r
+  SmbiosRecord->NumberOfContainedObjectHandles = 0;\r
+  \r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  //\r
+  // Since we fill NumberOfContainedObjectHandles = 0 for simple, just after this filed to fill string\r
+  //\r
+  OptionalStrStart -= 2;\r
+  UnicodeStrToAsciiStr(Manufacturer, OptionalStrStart);\r
+  UnicodeStrToAsciiStr(Product, OptionalStrStart + ManuStrLen + 1);\r
+  UnicodeStrToAsciiStr(Version, OptionalStrStart + ManuStrLen + 1 + ProductStrLen + 1);\r
+  UnicodeStrToAsciiStr(SerialNumber, OptionalStrStart + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1);\r
+  UnicodeStrToAsciiStr(AssertTag, OptionalStrStart + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1);\r
+  UnicodeStrToAsciiStr(Chassis, OptionalStrStart + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1);\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
index 4a5a1f40412f2fe28ef06e5211c14541eea3cb39..e87ad5668bde68a3ac18c3114805414460e1d816 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_BIOS_VENDOR_DATA, MiscBiosVendor) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_BIOS_VENDOR_DATA, MiscBiosVendor) = {\r
   STRING_TOKEN(STR_MISC_BIOS_VENDOR),       // BiosVendor\r
   STRING_TOKEN(STR_MISC_BIOS_VERSION),      // BiosVersion\r
   STRING_TOKEN(STR_MISC_BIOS_RELEASE_DATE), // BiosReleaseDate\r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBiosVendorFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBiosVendorFunction.c
new file mode 100644 (file)
index 0000000..513a101
--- /dev/null
@@ -0,0 +1,210 @@
+/*++\r
\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+\r
+Module Name:\r
+\r
+  MiscBiosVendorFunction.c\r
+  \r
+Abstract: \r
+\r
+  BIOS vendor information boot time changes.\r
+  Misc. subclass type 2.\r
+  SMBIOS type 0.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+\r
+/**\r
+  This function returns the value & exponent to Base2 for a given\r
+  Hex value. This is used to calculate the BiosPhysicalDeviceSize.\r
+\r
+  @param Value                      The hex value which is to be converted into value-exponent form\r
+  @param Exponent                   The exponent out of the conversion\r
+\r
+  @retval EFI_SUCCESS               All parameters were valid and *Value & *Exponent have been set.\r
+  @retval EFI_INVALID_PARAMETER     Invalid parameter was found.\r
+  \r
+**/\r
+EFI_STATUS  \r
+GetValueExponentBase2(\r
+  IN OUT UINTN        *Value,\r
+  OUT    UINTN        *Exponent\r
+  )\r
+{\r
+  if ((Value == NULL) || (Exponent == NULL)) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  while ((*Value % 2) == 0) {\r
+    *Value=*Value/2;\r
+    (*Exponent)++;\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  Base2Data              Pointer to Base2_Data\r
+\r
+  @retval EFI_SUCCESS            Transform successfully.       \r
+  @retval EFI_INVALID_PARAMETER  Invalid parameter was found.    \r
+\r
+**/\r
+UINT16\r
+Base2ToByteWith64KUnit (\r
+  IN      EFI_EXP_BASE2_DATA  *Base2Data\r
+  )\r
+{  \r
+  UINT16              Value;\r
+  UINT16              Exponent;\r
+\r
+  Value     = Base2Data->Value;\r
+  Exponent  = Base2Data->Exponent;\r
+  Exponent -= 16;\r
+  Value <<= Exponent;\r
+\r
+  return Value;\r
+}\r
+\r
+\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscBiosVendor (Type 0).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.\r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(MiscBiosVendor)\r
+{\r
+  CHAR8                 *OptionalStrStart;\r
+  UINTN                 VendorStrLen;\r
+  UINTN                 VerStrLen;\r
+  UINTN                 DateStrLen;\r
+  CHAR16                *Version;\r
+  CHAR16                *ReleaseDate;\r
+  EFI_STATUS            Status;\r
+  EFI_STRING            Char16String;\r
+  STRING_REF            TokenToGet;\r
+  STRING_REF            TokenToUpdate;\r
+  SMBIOS_TABLE_TYPE0    *SmbiosRecord;\r
+  EFI_SMBIOS_HANDLE     SmbiosHandle;\r
+  EFI_MISC_BIOS_VENDOR *ForType0InputData;\r
+\r
+  ForType0InputData        = (EFI_MISC_BIOS_VENDOR *)RecordData;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Version = (CHAR16 *) PcdGetPtr (PcdFirmwareVersionString);\r
+  if (StrLen (Version) > 0) {     \r
+    TokenToUpdate = STRING_TOKEN (STR_MISC_BIOS_VERSION);\r
+    HiiSetString (mHiiHandle, TokenToUpdate, Version, NULL);\r
+  }\r
+  \r
+  ReleaseDate = (CHAR16 *) PcdGetPtr (PcdFirmwareReleaseDateString);\r
+  if (StrLen(ReleaseDate) > 0) {\r
+    TokenToUpdate = STRING_TOKEN (STR_MISC_BIOS_RELEASE_DATE);\r
+    HiiSetString (mHiiHandle, TokenToUpdate, ReleaseDate, NULL);\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BIOS_VENDOR);\r
+  Char16String = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  VendorStrLen = StrLen(Char16String);\r
+  if (VendorStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BIOS_VERSION);\r
+  Version = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  VerStrLen = StrLen(Version);\r
+  if (VerStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BIOS_RELEASE_DATE);\r
+  ReleaseDate = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  DateStrLen = StrLen(ReleaseDate);\r
+  if (DateStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+  \r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE0) + VendorStrLen + 1 + VerStrLen + 1 + DateStrLen + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE0) + VendorStrLen + 1 + VerStrLen + 1 + DateStrLen + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_BIOS_INFORMATION;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE0);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  //\r
+  SmbiosRecord->Hdr.Handle = 0;\r
+  //\r
+  // Vendor will be the 1st optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->Vendor = 1;  \r
+  //\r
+  // Version will be the 2nd optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->BiosVersion = 2;\r
+  SmbiosRecord->BiosSegment = (UINT16)ForType0InputData->BiosStartingAddress;\r
+  //\r
+  // ReleaseDate will be the 3rd optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->BiosReleaseDate = 3;\r
+  //\r
+  // Nt32 has no PCD value to indicate BIOS Size, just fill 0 for simply.\r
+  //\r
+  SmbiosRecord->BiosSize = 0;\r
+  SmbiosRecord->BiosCharacteristics = *(MISC_BIOS_CHARACTERISTICS*)(&ForType0InputData->BiosCharacteristics1);\r
+  //\r
+  // CharacterExtensionBytes also store in ForType0InputData->BiosCharacteristics1 later two bytes to save size.\r
+  //\r
+  SmbiosRecord->BIOSCharacteristicsExtensionBytes[0] = *((UINT8 *) &ForType0InputData->BiosCharacteristics1 + 4);\r
+  SmbiosRecord->BIOSCharacteristicsExtensionBytes[1] = *((UINT8 *) &ForType0InputData->BiosCharacteristics1 + 5);\r
+\r
+  SmbiosRecord->SystemBiosMajorRelease = ForType0InputData->BiosMajorRelease;\r
+  SmbiosRecord->SystemBiosMinorRelease = ForType0InputData->BiosMinorRelease;\r
+  SmbiosRecord->EmbeddedControllerFirmwareMajorRelease = ForType0InputData->BiosEmbeddedFirmwareMajorRelease;\r
+  SmbiosRecord->EmbeddedControllerFirmwareMinorRelease = ForType0InputData->BiosEmbeddedFirmwareMinorRelease;\r
+\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(Char16String, OptionalStrStart);\r
+  UnicodeStrToAsciiStr(Version, OptionalStrStart + VendorStrLen + 1);\r
+  UnicodeStrToAsciiStr(ReleaseDate, OptionalStrStart + VendorStrLen + 1 + VerStrLen + 1);\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
index b3dd97d640d9823b55c1f08449128e4c4da8e0bb..ee28177c58f0b0e29874781c66378264eb454a54 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_BOOT_INFORMATION_STATUS_DATA, BootInformationStatus) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_BOOT_INFORMATION_STATUS_DATA, BootInformationStatus) = {\r
   EfiBootInformationStatusNoError,  // BootInformationStatus\r
   0                                 // BootInformationData\r
 };\r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBootInformationFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBootInformationFunction.c
new file mode 100644 (file)
index 0000000..78cee13
--- /dev/null
@@ -0,0 +1,81 @@
+/*++\r
+\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+\r
+Module Name:\r
+\r
+  MiscBootInformationFunction.c\r
+  \r
+Abstract: \r
+\r
+  boot information boot time changes.\r
+  SMBIOS type 32.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+\r
+\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscBootInformation (Type 32).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+\r
+MISC_SMBIOS_TABLE_FUNCTION(BootInformationStatus)\r
+{\r
+  EFI_STATUS                         Status;\r
+  EFI_SMBIOS_HANDLE                  SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE32                *SmbiosRecord;\r
+  EFI_MISC_BOOT_INFORMATION_STATUS*  ForType32InputData;\r
\r
+  ForType32InputData = (EFI_MISC_BOOT_INFORMATION_STATUS *)RecordData;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE32) + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE32) + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE32);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  //\r
+  SmbiosRecord->Hdr.Handle = 0;  \r
+  SmbiosRecord->BootStatus = (UINT8)ForType32InputData->BootInformationStatus;\r
+\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
index fad4708f7321e3891f466168005f9fdb870660e8..9d2b7e9f44d6c484044b1a12180ce874622d6e5b 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Chassis Manufacturer data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_CHASSIS_MANUFACTURER_DATA, MiscChassisManufacturer) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_CHASSIS_MANUFACTURER_DATA, MiscChassisManufacturer) = {\r
   STRING_TOKEN(STR_MISC_CHASSIS_MANUFACTURER),  // ChassisManufactrurer\r
   STRING_TOKEN(STR_MISC_CHASSIS_VERSION),       // ChassisVersion\r
   STRING_TOKEN(STR_MISC_CHASSIS_SERIAL_NUMBER), // ChassisSerialNumber\r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscChassisManufacturerFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscChassisManufacturerFunction.c
new file mode 100644 (file)
index 0000000..65f72fe
--- /dev/null
@@ -0,0 +1,145 @@
+/*++\r
+\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+\r
+Module Name:\r
+\r
+  MiscChassisManufacturerFunction.c\r
+  \r
+Abstract: \r
+\r
+  Chassis manufacturer information boot time changes.\r
+  SMBIOS type 3.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscChassisManufacturer (Type 3).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(MiscChassisManufacturer)\r
+{\r
+  CHAR8                           *OptionalStrStart;\r
+  UINTN                           ManuStrLen;\r
+  UINTN                           VerStrLen;\r
+  UINTN                           AssertTagStrLen;\r
+  UINTN                           SerialNumStrLen;\r
+  EFI_STATUS                      Status;\r
+  EFI_STRING                      Manufacturer;\r
+  EFI_STRING                      Version;\r
+  EFI_STRING                      SerialNumber;\r
+  EFI_STRING                      AssertTag;\r
+  STRING_REF                      TokenToGet;\r
+  EFI_SMBIOS_HANDLE               SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE3              *SmbiosRecord;\r
+  EFI_MISC_CHASSIS_MANUFACTURER   *ForType3InputData;\r
+\r
+  ForType3InputData = (EFI_MISC_CHASSIS_MANUFACTURER *)RecordData;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER);\r
+  Manufacturer = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  ManuStrLen = StrLen(Manufacturer);\r
+  if (ManuStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_VERSION);\r
+  Version = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  VerStrLen = StrLen(Version);\r
+  if (VerStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER);\r
+  SerialNumber = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  SerialNumStrLen = StrLen(SerialNumber);\r
+  if (SerialNumStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG);\r
+  AssertTag = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  AssertTagStrLen = StrLen(AssertTag);\r
+  if (AssertTagStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1  + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1  + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE3);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  //\r
+  SmbiosRecord->Hdr.Handle = 0;  \r
+  //\r
+  // Manu will be the 1st optional string following the formatted structure.\r
+  // \r
+  SmbiosRecord->Manufacturer = 1;  \r
+  SmbiosRecord->Type = (UINT8)ForType3InputData->ChassisType.ChassisType;\r
+  //\r
+  // Version will be the 2nd optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->Version = 2;  \r
+  //\r
+  // SerialNumber will be the 3rd optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->SerialNumber = 3;  \r
+  //\r
+  // AssertTag will be the 4th optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->AssetTag = 4;  \r
+  SmbiosRecord->BootupState = (UINT8)ForType3InputData->ChassisBootupState;\r
+  SmbiosRecord->PowerSupplyState = (UINT8)ForType3InputData->ChassisPowerSupplyState;\r
+  SmbiosRecord->ThermalState = (UINT8)ForType3InputData->ChassisThermalState;\r
+  SmbiosRecord->SecurityStatus = (UINT8)ForType3InputData->ChassisSecurityState;\r
+  CopyMem (SmbiosRecord->OemDefined,(UINT8*)&ForType3InputData->ChassisOemDefined, 4);\r
+\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(Manufacturer, OptionalStrStart);\r
+  UnicodeStrToAsciiStr(Version, OptionalStrStart + ManuStrLen + 1);\r
+  UnicodeStrToAsciiStr(SerialNumber, OptionalStrStart + ManuStrLen + 1 + VerStrLen + 1);\r
+  UnicodeStrToAsciiStr(AssertTag, OptionalStrStart + ManuStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1);\r
+\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
index bf9728a0c822677cc0367012dcc8963f79436452..5139f72fb11a7a63143d6f799d17b1729c4a9765 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,8 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA, NumberOfInstallableLanguages) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA, NumberOfInstallableLanguages)\r
+= {\r
   1,    // NumberOfInstallableLanguages\r
   {     // LanguageFlags\r
     0,  // AbbreviatedLanguageFormat\r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscNumberOfInstallableLanguagesFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscNumberOfInstallableLanguagesFunction.c
new file mode 100644 (file)
index 0000000..7e57502
--- /dev/null
@@ -0,0 +1,246 @@
+/*++\r
\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+\r
+Module Name:\r
+\r
+  MiscNumberOfInstallableLanguagesFunction.c\r
+  \r
+Abstract: \r
+\r
+  This driver parses the mSmbiosMiscDataTable structure and reports\r
+  any generated data.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+/*++\r
+  Check whether the language is supported for given HII handle\r
+\r
+  @param   HiiHandle     The HII package list handle.\r
+  @param   Offset        The offest of current lanague in the supported languages.\r
+  @param   CurrentLang   The language code.\r
+\r
+  @retval  TRUE          Supported.\r
+  @retval  FALSE         Not Supported.\r
+\r
+--*/\r
+VOID\r
+EFIAPI\r
+CurrentLanguageMatch (\r
+  IN  EFI_HII_HANDLE                   HiiHandle,\r
+  OUT UINT16                           *Offset,\r
+  OUT CHAR8                            *CurrentLang\r
+  )\r
+{\r
+  CHAR8     *DefaultLang;\r
+  CHAR8     *BestLanguage;\r
+  CHAR8     *Languages;\r
+  CHAR8     *MatchLang;\r
+  CHAR8     *EndMatchLang;\r
+  UINTN     CompareLength;\r
+  \r
+  Languages = HiiGetSupportedLanguages (HiiHandle);\r
+  if (Languages == NULL) {\r
+    return;\r
+  }\r
+\r
+  CurrentLang  = GetEfiGlobalVariable (L"PlatformLang");\r
+  DefaultLang  = (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang);\r
+  BestLanguage = GetBestLanguage (\r
+                   Languages,\r
+                   FALSE,\r
+                   (CurrentLang != NULL) ? CurrentLang : "",\r
+                   DefaultLang,\r
+                   NULL\r
+                   );\r
+  if (BestLanguage != NULL) {\r
+    //\r
+    // Find the best matching RFC 4646 language, compute the offset.\r
+    //\r
+    CompareLength = AsciiStrLen (BestLanguage);\r
+    for (MatchLang = Languages, (*Offset) = 0; MatchLang != '\0'; (*Offset)++) {\r
+      //\r
+      // Seek to the end of current match language. \r
+      //\r
+      for (EndMatchLang = MatchLang; *EndMatchLang != '\0' && *EndMatchLang != ';'; EndMatchLang++);\r
+  \r
+      if ((EndMatchLang == MatchLang + CompareLength) && AsciiStrnCmp(MatchLang, BestLanguage, CompareLength) == 0) {\r
+        //\r
+        // Find the current best Language in the supported languages\r
+        //\r
+        break;\r
+      }\r
+      //\r
+      // best language match be in the supported language.\r
+      //\r
+      ASSERT (*EndMatchLang == ';');\r
+      MatchLang = EndMatchLang + 1;\r
+    }\r
+    FreePool (BestLanguage);\r
+  }\r
+\r
+  FreePool (Languages);\r
+  if (CurrentLang != NULL) {\r
+    FreePool (CurrentLang);\r
+  }\r
+  return ;\r
+}\r
+\r
+\r
+/**\r
+  Get next language from language code list (with separator ';').\r
+\r
+  @param  LangCode       Input: point to first language in the list. On\r
+                         Otput: point to next language in the list, or\r
+                                NULL if no more language in the list.\r
+  @param  Lang           The first language in the list.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+GetNextLanguage (\r
+  IN OUT CHAR8      **LangCode,\r
+  OUT CHAR8         *Lang\r
+  )\r
+{\r
+  UINTN  Index;\r
+  CHAR8  *StringPtr;\r
+\r
+  ASSERT (LangCode != NULL);\r
+  ASSERT (*LangCode != NULL);\r
+  ASSERT (Lang != NULL);\r
+\r
+  Index     = 0;\r
+  StringPtr = *LangCode;\r
+  while (StringPtr[Index] != 0 && StringPtr[Index] != ';') {\r
+    Index++;\r
+  }\r
+\r
+  CopyMem (Lang, StringPtr, Index);\r
+  Lang[Index] = 0;\r
+\r
+  if (StringPtr[Index] == ';') {\r
+    Index++;\r
+  }\r
+  *LangCode = StringPtr + Index;\r
+}\r
+\r
+/**\r
+  This function returns the number of supported languages on HiiHandle.\r
+\r
+  @param   HiiHandle    The HII package list handle.\r
+\r
+  @retval  The number of supported languages.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+GetSupportedLanguageNumber (\r
+  IN EFI_HII_HANDLE    HiiHandle\r
+  )\r
+{\r
+  CHAR8   *Lang;\r
+  CHAR8   *Languages;\r
+  CHAR8   *LanguageString;\r
+  UINT16  LangNumber;\r
+  \r
+  Languages = HiiGetSupportedLanguages (HiiHandle);\r
+  if (Languages == NULL) {\r
+    return 0;\r
+  }\r
+\r
+  LangNumber = 0;\r
+  Lang = AllocatePool (AsciiStrSize (Languages));\r
+  if (Lang != NULL) {\r
+    LanguageString = Languages;\r
+    while (*LanguageString != 0) {\r
+      GetNextLanguage (&LanguageString, Lang);\r
+      LangNumber++;\r
+    }\r
+    FreePool (Lang);\r
+  }\r
+  FreePool (Languages);\r
+  return LangNumber;\r
+}\r
+\r
+\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscNumberOfInstallableLanguages (Type 13).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.\r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(NumberOfInstallableLanguages)\r
+{\r
+  UINTN                                     LangStrLen;\r
+  CHAR8                                     CurrentLang[SMBIOS_STRING_MAX_LENGTH + 1];\r
+  CHAR8                                     *OptionalStrStart;\r
+  UINT16                                    Offset;\r
+  EFI_STATUS                                Status;\r
+  EFI_SMBIOS_HANDLE                         SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE13                       *SmbiosRecord;\r
+  EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES  *ForType13InputData;\r
\r
+  ForType13InputData = (EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES *)RecordData;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  ForType13InputData->NumberOfInstallableLanguages = GetSupportedLanguageNumber (mHiiHandle);\r
+\r
+  //\r
+  // Try to check if current langcode matches with the langcodes in installed languages\r
+  //\r
+  ZeroMem(CurrentLang, SMBIOS_STRING_MAX_LENGTH + 1);\r
+  CurrentLanguageMatch (mHiiHandle, &Offset, CurrentLang);\r
+  LangStrLen = AsciiStrLen(CurrentLang);\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE13) + LangStrLen + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE13) + LangStrLen + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE13);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  //\r
+  SmbiosRecord->Hdr.Handle = 0;  \r
+\r
+  SmbiosRecord->InstallableLanguages = (UINT8)ForType13InputData->NumberOfInstallableLanguages;\r
+  SmbiosRecord->Flags = (UINT8)ForType13InputData->LanguageFlags.AbbreviatedLanguageFormat;\r
+  SmbiosRecord->CurrentLanguages = 1;\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  AsciiStrCpy(OptionalStrStart, CurrentLang);\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
index 6526e158aa652e42b53385a1e7a38dda73421a9d..c3e79c2c5acab75b095695ae0604dd6e0ae3e461 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_OEM_STRING_DATA, OemString) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_OEM_STRING_DATA, OemString) = {\r
   STRING_TOKEN(STR_MISC_OEM_STRING)\r
 };\r
 \r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscOemStringFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscOemStringFunction.c
new file mode 100644 (file)
index 0000000..75aecb3
--- /dev/null
@@ -0,0 +1,88 @@
+/*++\r
+\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+Module Name:\r
+\r
+  MiscOemStringFunction.c\r
+  \r
+Abstract: \r
+\r
+  boot information boot time changes.\r
+  SMBIOS type 11.\r
+\r
+--*/\r
+\r
+\r
+#include "MiscSubclassDriver.h"\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscOemString (Type 11).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(OemString)\r
+{\r
+  UINTN                    OemStrLen;\r
+  CHAR8                    *OptionalStrStart;\r
+  EFI_STATUS               Status;\r
+  EFI_STRING               OemStr;\r
+  STRING_REF               TokenToGet;\r
+  EFI_SMBIOS_HANDLE        SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE11      *SmbiosRecord;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_OEM_STRING);\r
+  OemStr = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  OemStrLen = StrLen(OemStr);\r
+  if (OemStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE11) + OemStrLen + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE11) + OemStrLen + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_OEM_STRINGS;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE11);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  // \r
+  SmbiosRecord->Hdr.Handle = 0;  \r
+  SmbiosRecord->StringCount = 1;\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(OemStr, OptionalStrStart);\r
+\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
index 5f41c316dbf067a8e7d0b5e6d9dfa7c4e1e1642d..a9385821b31c396f8fb20b7ff15ccbd7282f065c 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortInternalConnectorDesignator) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortInternalConnectorDesignator) = {\r
   STRING_TOKEN(STR_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR),  // PortInternalConnectorDesignator\r
   STRING_TOKEN(STR_MISC_PORT_EXTERNAL_CONNECTOR_DESIGNATOR),  // PortExternalConnectorDesignator\r
   EfiPortConnectorTypeOther,  // PortInternalConnectorType\r
@@ -37,7 +37,7 @@ MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscP
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortKeyboard) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortKeyboard) = {\r
   STRING_TOKEN (STR_MISC_PORT_INTERNAL_KEYBOARD),   // PortInternalConnectorDesignator\r
   STRING_TOKEN (STR_MISC_PORT_EXTERNAL_KEYBOARD),   // PortExternalConnectorDesignator\r
   EfiPortConnectorTypeNone, // PortInternalConnectorType\r
@@ -48,7 +48,7 @@ MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscP
   0\r
 };\r
 \r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortMouse) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortMouse) = {\r
   STRING_TOKEN (STR_MISC_PORT_INTERNAL_MOUSE),      // PortInternalConnectorDesignator\r
   STRING_TOKEN (STR_MISC_PORT_EXTERNAL_MOUSE),      // PortExternalConnectorDesignator\r
   EfiPortConnectorTypeNone, // PortInternalConnectorType\r
@@ -60,7 +60,7 @@ MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscP
 };\r
 \r
 \r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortCom1) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortCom1) = {\r
   STRING_TOKEN(STR_MISC_PORT_INTERNAL_COM1),\r
   STRING_TOKEN(STR_MISC_PORT_EXTERNAL_COM1),\r
   EfiPortConnectorTypeNone,\r
@@ -69,7 +69,7 @@ MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscP
   0\r
 };\r
 \r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortCom2) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortCom2) = {\r
   STRING_TOKEN(STR_MISC_PORT_INTERNAL_COM2),\r
   STRING_TOKEN(STR_MISC_PORT_EXTERNAL_COM2),\r
   EfiPortConnectorTypeNone,\r
@@ -78,7 +78,7 @@ MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscP
   0\r
 };\r
 \r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortExtensionPower) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortExtensionPower) = {\r
   STRING_TOKEN(STR_MISC_PORT_INTERNAL_EXTENSION_POWER),\r
   STRING_TOKEN(STR_MISC_PORT_EXTERNAL_EXTENSION_POWER),\r
   EfiPortConnectorTypeOther,\r
@@ -87,7 +87,7 @@ MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscP
   0\r
 };\r
 \r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortFloppy) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortFloppy) = {\r
   STRING_TOKEN(STR_MISC_PORT_INTERNAL_FLOPPY),\r
   STRING_TOKEN(STR_MISC_PORT_EXTERNAL_FLOPPY),\r
   EfiPortConnectorTypeOnboardFloppy,\r
index 49d2c50f6a648711fb620d9f82e1b4590b211a27..83da857ec206fcb0defa3c4375814f0fc38e7dc8 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
  \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -22,25 +22,8 @@ Abstract:
 \r
 #include "MiscSubclassDriver.h"\r
 \r
-BOOLEAN                    mDone                   = FALSE;\r
-PS2_CONN_DEVICE_PATH       mPs2KeyboardDevicePath  = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0303, 0), DP_END };\r
-PS2_CONN_DEVICE_PATH       mPs2MouseDevicePath     = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0303, 1), DP_END };\r
-SERIAL_CONN_DEVICE_PATH    mCom1DevicePath         = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0501, 0), DP_END };\r
-SERIAL_CONN_DEVICE_PATH    mCom2DevicePath         = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0501, 1), DP_END };\r
-PARALLEL_CONN_DEVICE_PATH  mLpt1DevicePath         = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0401, 0), DP_END };\r
-FLOOPY_CONN_DEVICE_PATH    mFloopyADevicePath      = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0604, 0), DP_END };\r
-FLOOPY_CONN_DEVICE_PATH    mFloopyBDevicePath      = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0604, 1), DP_END };\r
-USB_PORT_DEVICE_PATH       mUsb0DevicePath         = { DP_ACPI, DP_PCI (0x1d, 0x00), DP_END };\r
-USB_PORT_DEVICE_PATH       mUsb1DevicePath         = { DP_ACPI, DP_PCI (0x1d, 0x01), DP_END };\r
-USB_PORT_DEVICE_PATH       mUsb2DevicePath         = { DP_ACPI, DP_PCI (0x1d, 0x02), DP_END };\r
-USB_PORT_DEVICE_PATH       mUsb3DevicePath         = { DP_ACPI, DP_PCI (0x1d, 0x07), DP_END };\r
-IDE_DEVICE_PATH            mIdeDevicePath          = { DP_ACPI, DP_PCI (0x1F, 0x01), DP_END };\r
-GB_NIC_DEVICE_PATH         mGbNicDevicePath        = { DP_ACPI, DP_PCI( 0x03,0x00 ),DP_PCI( 0x1F,0x00 ),DP_PCI( 0x07,0x00 ), DP_END };\r
 \r
-//\r
-//\r
-//\r
-MISC_SUBCLASS_TABLE_FUNCTION (\r
+MISC_SMBIOS_TABLE_FUNCTION (\r
   MiscPortInternalConnectorDesignator\r
   )\r
 /*++\r
@@ -84,184 +67,111 @@ Returns:
       LogRecordData was NULL.\r
 --*/\r
 {\r
-  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath           = DP_END;\r
-\r
+  CHAR8                                        *OptionalStrStart;\r
+  UINTN                                        InternalRefStrLen;\r
+  UINTN                                        ExternalRefStrLen;  \r
+  EFI_STRING                                   InternalRef;\r
+  EFI_STRING                                   ExternalRef;\r
+  STRING_REF                                   TokenForInternal;\r
+  STRING_REF                                   TokenForExternal;\r
+  EFI_STATUS                                   Status;\r
+  SMBIOS_TABLE_TYPE8                           *SmbiosRecord;\r
+  EFI_SMBIOS_HANDLE                            SmbiosHandle;\r
+  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR  *ForType8InputData;\r
+  \r
+  ForType8InputData = (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR *)RecordData;\r
   //\r
   // First check for invalid parameters.\r
   //\r
-  // Shanmu >> to fix the Device Path Issue...\r
-  // if (RecordLen == 0 || RecordData == NULL || LogRecordData == NULL) {\r
-  //\r
-  if (*RecordLen == 0 || RecordData == NULL || LogRecordData == NULL) {\r
-    //\r
-    // End Shanmu\r
-    //\r
+  if (RecordData == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
-  //\r
-  // Then check for unsupported RecordType.\r
-  //\r
-  if (RecordType != EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-  //\r
-  // Is this the first time through this function?\r
-  //\r
-  if (!mDone) {\r
-    //\r
-    // Yes, this is the first time.  Inspect/Change the contents of the\r
-    // RecordData structure.\r
-    //\r
-    //\r
-    // Device path is only updated here as it was not taking that in static data\r
-    //\r
-    // Shanmu >> to fix the Device Path Issue...\r
-    //\r
 \r
-    /*\r
-    switch (((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortInternalConnectorDesignator) \r
-    {\r
-      case STR_MISC_PORT_INTERNAL_MOUSE:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mPs2MouseDevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_KEYBOARD:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mPs2KeyboardDevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_COM1:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mCom1DevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_COM2:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mCom2DevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_LPT1:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mLpt1DevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_USB1:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mUsb0DevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_USB2:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mUsb1DevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_USB3:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mUsb2DevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_NETWORK:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mGbNicDevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_FLOPPY:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mFloopyADevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_IDE1:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mIdeDevicePath);          \r
-        }break;\r
-      case STR_MISC_PORT_INTERNAL_IDE2:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mIdeDevicePath);          \r
-        }break;\r
-      default:\r
-        {\r
-          (EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = EndDevicePath;\r
-        }break;    \r
-    }\r
-    */\r
-    switch (((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortInternalConnectorDesignator) {\r
-    case STR_MISC_PORT_INTERNAL_MOUSE:\r
-      {\r
-        CopyMem (\r
-          &((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,\r
-          &mPs2MouseDevicePath,\r
-          GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mPs2MouseDevicePath)\r
-          );\r
-        *RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mPs2MouseDevicePath);\r
-      }\r
-      break;\r
+  TokenForInternal = 0;\r
+  TokenForExternal = 0;\r
+  \r
+  switch (ForType8InputData->PortInternalConnectorDesignator) { \r
 \r
+    case STR_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR:\r
+      TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR);\r
+      TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_CONNECTOR_DESIGNATOR);\r
+      break;\r
     case STR_MISC_PORT_INTERNAL_KEYBOARD:\r
-      {\r
-        CopyMem (\r
-          &((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,\r
-          &mPs2KeyboardDevicePath,\r
-          GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mPs2KeyboardDevicePath)\r
-          );\r
-        *RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mPs2KeyboardDevicePath);\r
-      }\r
+      TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_KEYBOARD);\r
+      TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_KEYBOARD);\r
+      break;\r
+    case STR_MISC_PORT_INTERNAL_MOUSE:\r
+      TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_MOUSE);\r
+      TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_MOUSE);\r
       break;\r
-\r
     case STR_MISC_PORT_INTERNAL_COM1:\r
-      {\r
-        CopyMem (\r
-          &((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,\r
-          &mCom1DevicePath,\r
-          GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mCom1DevicePath)\r
-          );\r
-        *RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mCom1DevicePath);\r
-      }\r
+      TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_COM1);\r
+      TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_COM1);\r
       break;\r
-\r
     case STR_MISC_PORT_INTERNAL_COM2:\r
-      {\r
-        CopyMem (\r
-          &((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,\r
-          &mCom2DevicePath,\r
-          GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mCom2DevicePath)\r
-          );\r
-        *RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mCom2DevicePath);\r
-      }\r
+      TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_COM2);\r
+      TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_COM2);\r
+      break;\r
+    case STR_MISC_PORT_INTERNAL_EXTENSION_POWER:\r
+      TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_EXTENSION_POWER);\r
+      TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_EXTENSION_POWER);\r
       break;\r
-\r
     case STR_MISC_PORT_INTERNAL_FLOPPY:\r
-      {\r
-        CopyMem (\r
-          &((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,\r
-          &mFloopyADevicePath,\r
-          GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mFloopyADevicePath)\r
-          );\r
-        *RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mFloopyADevicePath);\r
-      }\r
+      TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_FLOPPY);\r
+      TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_FLOPPY);\r
       break;\r
-\r
     default:\r
-      {\r
-        CopyMem (\r
-          &((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,\r
-          &EndDevicePath,\r
-          GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &EndDevicePath)\r
-          );\r
-        *RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &EndDevicePath);\r
-      }\r
       break;\r
-    }\r
-    //\r
-    // End Shanmu\r
-    //\r
-    // Set mDone flag to TRUE for next pass through this function.\r
-    // Set *LogRecordData to TRUE so data will get logged to Data Hub.\r
-    //\r
-    mDone            = TRUE;\r
-    *LogRecordData  = TRUE;\r
-  } else {\r
-    //\r
-    // No, this is the second time.  Reset the state of the mDone flag\r
-    // to FALSE and tell the data logger that there is no more data\r
-    // to be logged for this record type.  If any memory allocations\r
-    // were made by earlier passes, they must be released now.\r
-    //\r
-    mDone            = FALSE;\r
-    *LogRecordData  = FALSE;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+  InternalRef = HiiGetPackageString(&gEfiCallerIdGuid, TokenForInternal, NULL);\r
+  InternalRefStrLen = StrLen(InternalRef);\r
+  if (InternalRefStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  ExternalRef = HiiGetPackageString(&gEfiCallerIdGuid, TokenForExternal, NULL);\r
+  ExternalRefStrLen = StrLen(ExternalRef);\r
+  if (ExternalRefStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE8) + InternalRefStrLen + 1 + ExternalRefStrLen + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE8) + InternalRefStrLen + 1 + ExternalRefStrLen + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE8);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  //\r
+  SmbiosRecord->Hdr.Handle = 0;  \r
+  SmbiosRecord->InternalReferenceDesignator = 1;\r
+  SmbiosRecord->InternalConnectorType = (UINT8)ForType8InputData->PortInternalConnectorType;\r
+  SmbiosRecord->ExternalReferenceDesignator = 2;\r
+  SmbiosRecord->ExternalConnectorType = (UINT8)ForType8InputData->PortExternalConnectorType;\r
+  SmbiosRecord->PortType = (UINT8)ForType8InputData->PortType;\r
+  \r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(InternalRef, OptionalStrStart);\r
+  UnicodeStrToAsciiStr(ExternalRef, OptionalStrStart + InternalRefStrLen + 1);\r
+\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
 }\r
 \r
+\r
+\r
 /* eof - MiscSystemManufacturerFunction.c */\r
index 1f140f0ca612f0ff9620382ec2b2fcd303de37c8..aa5413ff004ebe3204c27a0db423668067d7dbaf 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_RESET_CAPABILITIES, MiscResetCapabilities) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_RESET_CAPABILITIES, MiscResetCapabilities) = {\r
   {     // ResetCapabilities\r
     0,  // Status\r
     0,  // BootOption\r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscResetCapabilitiesFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscResetCapabilitiesFunction.c
new file mode 100644 (file)
index 0000000..56423e5
--- /dev/null
@@ -0,0 +1,84 @@
+/*++\r
+\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+Module Name:\r
+\r
+  MiscResetCapabilitiesFunction.c\r
+  \r
+Abstract: \r
+\r
+  ResetCapabilities.\r
+  SMBIOS type 23.\r
+\r
+--*/\r
+\r
+\r
+#include "MiscSubclassDriver.h"\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscOemString (Type 11).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(MiscResetCapabilities)\r
+{\r
+  EFI_STATUS               Status;\r
+  EFI_SMBIOS_HANDLE        SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE23      *SmbiosRecord;\r
+  EFI_MISC_RESET_CAPABILITIES   *ForType23InputData;\r
+  \r
+  ForType23InputData = (EFI_MISC_RESET_CAPABILITIES *)RecordData;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE23) + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE23) + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_RESET;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE23);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  // \r
+  SmbiosRecord->Hdr.Handle    = 0;  \r
+  SmbiosRecord->Capabilities  = *(UINT8*)&(ForType23InputData->ResetCapabilities);\r
+  SmbiosRecord->ResetCount    = (UINT16)ForType23InputData->ResetCount;\r
+  SmbiosRecord->ResetLimit    = (UINT16)ForType23InputData->ResetLimit;  \r
+  SmbiosRecord->TimerInterval = (UINT16)ForType23InputData->ResetTimerInterval;\r
+  SmbiosRecord->Timeout       = (UINT16)ForType23InputData->ResetTimeout;\r
+\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
+\r
index 19f19d578ad52a6e4aef530dd3c3db24788d9075..a8e64720181451955bc7f46d0bdc5a3ca104a49f 100644 (file)
@@ -5,7 +5,7 @@
 #  All .uni file who tagged with "ToolCode="DUMMY"" in following file list is included by\r
 #  MiscSubclassDriver.uni file, the StrGather tool will expand MiscSubclassDriver.uni file\r
 #  and parse all .uni file.\r
-# Copyright (c) 2006 - 2007, Intel Corporation\r
+# Copyright (c) 2006 - 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
 #\r
 \r
 [Sources.common]\r
+  MiscBaseBoardManufacturerData.c\r
+  MiscBaseBoardManufacturerFunction.c\r
+  MiscBiosVendorData.c\r
+  MiscBiosVendorFunction.c\r
+  MiscBootInformationData.c  \r
+  MiscBootInformationFunction.c\r
+  MiscChassisManufacturerData.c\r
+  MiscChassisManufacturerFunction.c\r
+  MiscNumberOfInstallableLanguagesData.c\r
+  MiscNumberOfInstallableLanguagesFunction.c\r
+  MiscOemStringData.c  \r
+  MiscOemStringFunction.c  \r
+  MiscPortInternalConnectorDesignatorData.c  \r
   MiscPortInternalConnectorDesignatorFunction.c\r
-  MiscSystemSlotDesignationData.c\r
-  MiscSystemOptionStringData.c\r
-  MiscSystemManufacturerFunction.c\r
-  MiscSystemManufacturerData.c\r
-  MiscSystemLanguageStringData.c\r
   MiscResetCapabilitiesData.c\r
-  MiscPortInternalConnectorDesignatorData.c\r
-  MiscOemStringData.c\r
-  MiscNumberOfInstallableLanguagesData.c\r
-  MiscChassisManufacturerData.c\r
-  MiscBootInformationData.c\r
-  MiscBiosVendorData.c\r
-  MiscBaseBoardManufacturerData.c\r
-  MiscSubclassDriverDataTable.c\r
-  MiscSubclassDriverEntryPoint.c\r
-  MiscSubclassDriver.h\r
+  MiscResetCapabilitiesFunction.c\r
+  MiscSystemLanguageStringData.c\r
+  MiscSystemLanguageStringFunction.c\r
+  MiscSystemManufacturerData.c\r
+  MiscSystemManufacturerFunction.c\r
+  MiscSystemOptionStringData.c\r
+  MiscSystemOptionStringFunction.c\r
+  MiscSystemSlotDesignationData.c\r
+  MiscSystemSlotDesignationFunction.c\r
   MiscDevicePath.h\r
+  MiscSubclassDriver.h\r
   MiscSubclassDriver.uni\r
+  MiscSubclassDriverDataTable.c\r
+  MiscSubclassDriverEntryPoint.c\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
   HiiLib\r
   DebugLib\r
   BaseLib\r
+  MemoryAllocationLib\r
   PcdLib\r
 \r
-\r
-[Guids]\r
-  gEfiProcessorSubClassGuid                     # SOMETIMES_CONSUMED\r
-  gEfiMiscSubClassGuid                          # SOMETIMES_CONSUMED\r
-  gEfiMemorySubClassGuid                        # SOMETIMES_CONSUMED\r
-\r
 [Protocols]\r
   gEfiWinNtIoProtocolGuid                       # PROTOCOL_NOTIFY SOMETIMES_CONSUMED\r
-  gEfiDataHubProtocolGuid                       # PROTOCOL ALWAYS_CONSUMED\r
+  gEfiSmbiosProtocolGuid                        # PROTOCOL ALWAYS_CONSUMED\r
+\r
+[FixedPcd.common]\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareReleaseDateString\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString\r
 \r
 [Pcd.common]\r
   gEfiNt32PkgTokenSpaceGuid.PcdWinNtMemorySize\r
+  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang\r
 \r
 [Depex]\r
-  gEfiDataHubProtocolGuid\r
-  
\ No newline at end of file
+  gEfiSmbiosProtocolGuid\r
index df3ca8b9864fd9046160a501fb4cbef4d975c48e..68227f4764e2e49e04fa4d1d3fe5496af9365a33 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation\r
+Copyright (c) 2006 - 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
@@ -25,7 +25,8 @@ Abstract:
 #include <FrameworkDxe.h>\r
 #include <WinNtDxe.h>\r
 #include <Guid/DataHubRecords.h>\r
-#include <Protocol/DataHub.h>\r
+#include <IndustryStandard/SmBios.h>\r
+#include <Protocol/Smbios.h>\r
 #include <Protocol/WinNtIo.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/DebugLib.h>\r
@@ -36,77 +37,80 @@ Abstract:
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/DevicePathLib.h>\r
 #include <Library/PcdLib.h>\r
-\r
+#include <Library/MemoryAllocationLib.h>\r
 #include <MiscDevicePath.h>\r
 \r
+\r
 //\r
 // Data table entry update function.\r
 //\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI EFI_MISC_SUBCLASS_DATA_FUNCTION) (\r
-  IN UINT16                         RecordType,\r
-  IN UINT32                         *RecordLen,\r
-  IN OUT EFI_MISC_SUBCLASS_RECORDS  *RecordData,\r
-  OUT BOOLEAN                       *LogRecordData\r
+typedef EFI_STATUS (EFIAPI EFI_MISC_SMBIOS_DATA_FUNCTION) (\r
+  IN  VOID                 *RecordData,\r
+  IN  EFI_SMBIOS_PROTOCOL  *Smbios\r
   );\r
 \r
 //\r
 // Data table entry definition.\r
 //\r
 typedef struct {\r
-  UINT16                          RecordType;\r
-  UINT32                          RecordLen;\r
-  VOID                            *RecordData;\r
-  EFI_MISC_SUBCLASS_DATA_FUNCTION *Function;\r
-} EFI_MISC_SUBCLASS_DATA_TABLE;\r
+  //\r
+  // intermediat input data for SMBIOS record\r
+  //\r
+  VOID                              *RecordData;\r
+  EFI_MISC_SMBIOS_DATA_FUNCTION     *Function;\r
+} EFI_MISC_SMBIOS_DATA_TABLE;\r
 \r
 //\r
 // Data Table extern definitions.\r
 //\r
-#define MISC_SUBCLASS_TABLE_EXTERNS(NAME1, NAME2) \\r
-  extern NAME1 NAME2 ## Data; \\r
-  extern EFI_MISC_SUBCLASS_DATA_FUNCTION NAME2 ## Function\r
+#define MISC_SMBIOS_TABLE_EXTERNS(NAME1, NAME2, NAME3) \\r
+extern NAME1 NAME2 ## Data; \\r
+extern EFI_MISC_SMBIOS_DATA_FUNCTION NAME3 ## Function\r
+\r
 \r
 //\r
 // Data Table entries\r
 //\r
-#define MISC_SUBCLASS_TABLE_ENTRY_DATA_ONLY(NAME1, NAME2) { \\r
-         NAME1 ##  _RECORD_NUMBER, sizeof (NAME1 ## _DATA), &NAME2 ## Data, NULL \\r
-  }\r
-\r
-#define MISC_SUBCLASS_TABLE_ENTRY_FUNCTION_ONLY(NAME1, NAME2) \\r
-  { \\r
-    NAME1 ##  _RECORD_NUMBER, 0, NULL, &NAME2 ## Function \\r
-  }\r
-\r
-#define MISC_SUBCLASS_TABLE_ENTRY_DATA_AND_FUNCTION(NAME1, NAME2, NAME3) \\r
-  { \\r
-    NAME1 ##  _RECORD_NUMBER, sizeof (NAME1 ## _DATA), &NAME2 ## Data, &NAME3 ## Function \\r
-  }\r
+#define MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(NAME1, NAME2) \\r
+{ \\r
+  & NAME1 ## Data, \\r
+  & NAME2 ## Function \\r
+}\r
 \r
 //\r
 // Global definition macros.\r
 //\r
-#define MISC_SUBCLASS_TABLE_DATA(NAME1, NAME2)  NAME1 NAME2 ## Data\r
+#define MISC_SMBIOS_TABLE_DATA(NAME1, NAME2) \\r
+  NAME1 NAME2 ## Data\r
 \r
-#define MISC_SUBCLASS_TABLE_FUNCTION(NAME2) \\r
-  EFI_STATUS EFIAPI NAME2 ## Function ( \\r
-  IN UINT16 RecordType, \\r
-  IN UINT32 *RecordLen, \\r
-  IN OUT EFI_MISC_SUBCLASS_RECORDS * RecordData, \\r
-  OUT BOOLEAN *LogRecordData \\r
+#define MISC_SMBIOS_TABLE_FUNCTION(NAME2) \\r
+  EFI_STATUS EFIAPI NAME2 ## Function( \\r
+  IN  VOID                  *RecordData, \\r
+  IN  EFI_SMBIOS_PROTOCOL   *Smbios \\r
   )\r
 \r
+\r
 //\r
 // Data Table Array\r
 //\r
-extern EFI_MISC_SUBCLASS_DATA_TABLE mMiscSubclassDataTable[];\r
+extern EFI_MISC_SMBIOS_DATA_TABLE mMiscSubclassDataTable[];\r
 \r
 //\r
 // Data Table Array Entries\r
 //\r
-extern UINTN  mMiscSubclassDataTableEntries;\r
+extern UINTN                        mMiscSubclassDataTableEntries;\r
+extern UINT8                        MiscSubclassStrings[];\r
+extern EFI_HII_HANDLE               mHiiHandle;\r
+\r
+//\r
+// Prototypes\r
+//\r
+EFI_STATUS\r
+MiscSubclassDriverEntryPoint (\r
+  IN EFI_HANDLE         ImageHandle,\r
+  IN EFI_SYSTEM_TABLE   *SystemTable\r
+  );\r
+\r
 \r
 #endif /* _MISC_SUBCLASS_DRIVER_H */\r
 \r
index e6dc6605516c2dfa24ca291d8817540ea76e4ae6..e92b3acf2d11b4a7e96056904dee75617b092f44 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -22,78 +22,57 @@ Abstract:
 \r
 #include "MiscSubclassDriver.h"\r
 \r
+\r
 //\r
 // External definitions referenced by Data Table entries.\r
 //\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_CHASSIS_MANUFACTURER_DATA,\r
-  MiscChassisManufacturer\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_BIOS_VENDOR_DATA,\r
-  MiscBiosVendor\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_SYSTEM_MANUFACTURER_DATA,\r
-  MiscSystemManufacturer\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_BASE_BOARD_MANUFACTURER_DATA,\r
-  MiscBaseBoardManufacturer\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA,\r
-  MiscPortInternalConnectorDesignator\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA,\r
-  MiscPortKeyboard\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA,\r
-  MiscPortMouse\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA,\r
-  MiscPortCom1\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA,\r
-  MiscPortCom2\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA,\r
-  MiscSystemSlotDesignation\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_OEM_STRING_DATA,\r
-  OemString\r
-  );\r
-MISC_SUBCLASS_TABLE_EXTERNS (\r
-  EFI_MISC_SYSTEM_OPTION_STRING_DATA,\r
-  SystemOptionString\r
-  );\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_BASE_BOARD_MANUFACTURER_DATA, MiscBaseBoardManufacturer, MiscBaseBoardManufacturer);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_BIOS_VENDOR_DATA, MiscBiosVendor,MiscBiosVendor );\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_BOOT_INFORMATION_STATUS_DATA, BootInformationStatus, BootInformationStatus);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_CHASSIS_MANUFACTURER_DATA, MiscChassisManufacturer, MiscChassisManufacturer);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA,NumberOfInstallableLanguages, NumberOfInstallableLanguages);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_OEM_STRING_DATA,OemString, OemString);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortInternalConnectorDesignator, MiscPortInternalConnectorDesignator);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortKeyboard, MiscPortInternalConnectorDesignator);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortMouse, MiscPortInternalConnectorDesignator);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortCom1, MiscPortInternalConnectorDesignator);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortCom2, MiscPortInternalConnectorDesignator);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortExtensionPower, MiscPortInternalConnectorDesignator);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortFloppy, MiscPortInternalConnectorDesignator);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_RESET_CAPABILITIES, MiscResetCapabilities, MiscResetCapabilities);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA,SystemLanguageString, SystemLanguageString);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_SYSTEM_MANUFACTURER_DATA, MiscSystemManufacturer, MiscSystemManufacturer);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_SYSTEM_OPTION_STRING_DATA, SystemOptionString, SystemOptionString);\r
+MISC_SMBIOS_TABLE_EXTERNS ( EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA, MiscSystemSlotDesignation, MiscSystemSlotDesignation);\r
+\r
 \r
 //\r
 // Data Table.\r
 //\r
-EFI_MISC_SUBCLASS_DATA_TABLE  mMiscSubclassDataTable[] = {\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_AND_FUNCTION(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR, MiscPortKeyboard, MiscPortInternalConnectorDesignator),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_AND_FUNCTION(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR, MiscPortMouse, MiscPortInternalConnectorDesignator),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_AND_FUNCTION(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR, MiscPortCom1, MiscPortInternalConnectorDesignator),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_AND_FUNCTION(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR, MiscPortCom2, MiscPortInternalConnectorDesignator),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_ONLY(EFI_MISC_BIOS_VENDOR, MiscBiosVendor),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_ONLY(EFI_MISC_SYSTEM_MANUFACTURER, MiscSystemManufacturer),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_ONLY(EFI_MISC_BASE_BOARD_MANUFACTURER, MiscBaseBoardManufacturer),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_ONLY(EFI_MISC_CHASSIS_MANUFACTURER, MiscChassisManufacturer),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_ONLY(EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlotDesignation),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_ONLY(EFI_MISC_OEM_STRING, OemString),\r
-  MISC_SUBCLASS_TABLE_ENTRY_DATA_ONLY(EFI_MISC_SYSTEM_OPTION_STRING, SystemOptionString),\r
-};\r
-\r
+EFI_MISC_SMBIOS_DATA_TABLE  mMiscSubclassDataTable[] = {\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscBaseBoardManufacturer, MiscBaseBoardManufacturer),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscBiosVendor,MiscBiosVendor ),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( BootInformationStatus, BootInformationStatus),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscChassisManufacturer, MiscChassisManufacturer),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(NumberOfInstallableLanguages, NumberOfInstallableLanguages),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(OemString, OemString),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscPortInternalConnectorDesignator, MiscPortInternalConnectorDesignator),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscPortKeyboard, MiscPortInternalConnectorDesignator),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscPortMouse, MiscPortInternalConnectorDesignator),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscPortCom1, MiscPortInternalConnectorDesignator),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscPortCom2, MiscPortInternalConnectorDesignator),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscPortExtensionPower, MiscPortInternalConnectorDesignator),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscPortFloppy, MiscPortInternalConnectorDesignator),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscResetCapabilities, MiscResetCapabilities),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(SystemLanguageString, SystemLanguageString),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscSystemManufacturer, MiscSystemManufacturer),\r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( SystemOptionString, SystemOptionString),  \r
+  MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION( MiscSystemSlotDesignation, MiscSystemSlotDesignation),  \r
+  };\r
\r
 //\r
 // Number of Data Table entries.\r
 //\r
-UINTN mMiscSubclassDataTableEntries = (sizeof mMiscSubclassDataTable) / sizeof (EFI_MISC_SUBCLASS_DATA_TABLE);\r
+UINTN mMiscSubclassDataTableEntries = (sizeof mMiscSubclassDataTable) / sizeof (EFI_MISC_SMBIOS_DATA_TABLE);\r
 \r
 /* eof - MiscSubclassDriverDataTable.c */\r
index 515ccbbc5b0db28cf3b729880d9260c45418d17c..208178eff0424c720ea7e979a62016cee4010298 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006 - 2007, Intel Corporation\r
+Copyright (c) 2006 - 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
@@ -22,98 +22,78 @@ Abstract:
 \r
 #include "MiscSubclassDriver.h"\r
 \r
+EFI_HII_HANDLE  mHiiHandle;\r
 \r
-extern UINT8  MiscSubclassStrings[];\r
+/**\r
+  This is the standard EFI driver point that detects whether there is a\r
+  MemoryConfigurationData Variable and, if so, reports memory configuration info\r
+  to the DataHub.\r
 \r
+  @param  ImageHandle  Handle for the image of this driver\r
+  @param  SystemTable  Pointer to the EFI System Table\r
 \r
-//\r
-//\r
-//\r
+  @return EFI_SUCCESS if the data is successfully reported\r
+  @return EFI_NOT_FOUND if the HOB list could not be located.\r
+\r
+**/\r
 EFI_STATUS\r
-LogRecordDataToDataHub (\r
-  EFI_DATA_HUB_PROTOCOL *DataHub,\r
-  UINT32                RecordType,\r
-  UINT32                RecordLen,\r
-  VOID                  *RecordData\r
+LogMemorySmbiosRecord (\r
+  VOID\r
   )\r
-/*++\r
-Description:\r
-\r
-Parameters:\r
-\r
-  DataHub\r
-    %%TBD\r
-\r
-  RecordType\r
-    %%TBD\r
-\r
-  RecordLen\r
-    %%TBD\r
-\r
-  RecordData\r
-    %%TBD\r
-\r
-Returns:\r
-\r
-  EFI_INVALID_PARAMETER\r
-\r
-  EFI_SUCCESS\r
-\r
-  Other Data Hub errors\r
-\r
---*/\r
 {\r
-  EFI_MISC_SUBCLASS_DRIVER_DATA MiscSubclass;\r
-  EFI_STATUS                    Status;\r
+  EFI_STATUS                      Status;\r
+  UINT64                          TotalMemorySize;\r
+  UINT8                           NumSlots;\r
+  SMBIOS_TABLE_TYPE19             *Type19Record;\r
+  EFI_SMBIOS_HANDLE               MemArrayMappedAddrSmbiosHandle;\r
+  EFI_SMBIOS_PROTOCOL             *Smbios;\r
+  CHAR16                          *Nt32MemString;\r
+\r
+  Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID**)&Smbios);\r
+  ASSERT_EFI_ERROR (Status);\r
+  \r
+  NumSlots        = 1;\r
 \r
   //\r
-  // Do nothing if data parameters are not valid.\r
+  // Process Memory String in form size!size ...\r
+  // So 64!64 is 128 MB\r
   //\r
-  if (RecordLen == 0 || RecordData == NULL) {\r
-    DEBUG (\r
-      (EFI_D_ERROR,\r
-      "RecordLen == %d  RecordData == %xh\n",\r
-      RecordLen,\r
-      RecordData)\r
-      );\r
-\r
-    return EFI_INVALID_PARAMETER;\r
+  Nt32MemString   = PcdGetPtr (PcdWinNtMemorySize);\r
+  for (TotalMemorySize = 0; *Nt32MemString != '\0';) {\r
+    TotalMemorySize += StrDecimalToUint64 (Nt32MemString);\r
+    while (*Nt32MemString != '\0') {\r
+      if (*Nt32MemString == '!') {\r
+        Nt32MemString++;       \r
+        break;\r
+      }\r
+      Nt32MemString++;\r
+    }\r
   }\r
+\r
+  //\r
+  // Convert Total Memory Size to based on KiloByte\r
   //\r
-  // Assemble Data Hub record.\r
+  TotalMemorySize = LShiftU64 (TotalMemorySize, 20);\r
   //\r
-  MiscSubclass.Header.Version     = EFI_MISC_SUBCLASS_VERSION;\r
-  MiscSubclass.Header.HeaderSize  = sizeof (EFI_SUBCLASS_TYPE1_HEADER);\r
-  MiscSubclass.Header.Instance    = 1;\r
-  MiscSubclass.Header.SubInstance = 1;\r
-  MiscSubclass.Header.RecordType  = RecordType;\r
-\r
-  CopyMem (\r
-    &MiscSubclass.Record,\r
-    RecordData,\r
-    RecordLen\r
-    );\r
+  // Generate Memory Array Mapped Address info\r
+  //\r
+  Type19Record = AllocatePool(sizeof (SMBIOS_TABLE_TYPE19));\r
+  ZeroMem(Type19Record, sizeof(SMBIOS_TABLE_TYPE19));\r
+  Type19Record->Hdr.Type = EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS;\r
+  Type19Record->Hdr.Length = sizeof(SMBIOS_TABLE_TYPE19);\r
+  Type19Record->Hdr.Handle = 0;\r
+  Type19Record->StartingAddress = 0;\r
+  Type19Record->EndingAddress =  (UINT32)RShiftU64(TotalMemorySize, 10) - 1;\r
+  Type19Record->MemoryArrayHandle = 0;\r
+  Type19Record->PartitionWidth = (UINT8)(NumSlots); \r
 \r
   //\r
-  // Log Data Hub record.\r
+  // Generate Memory Array Mapped Address info (TYPE 19)\r
   //\r
-  Status = DataHub->LogData (\r
-                        DataHub,\r
-                        &gEfiMiscSubClassGuid,\r
-                        &gEfiMiscSubClassGuid,\r
-                        EFI_DATA_RECORD_CLASS_DATA,\r
-                        &MiscSubclass,\r
-                        sizeof (EFI_SUBCLASS_TYPE1_HEADER) + RecordLen\r
-                        );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    DEBUG (\r
-      (EFI_D_ERROR,\r
-      "LogData(%d bytes) == %r\n",\r
-      sizeof (EFI_SUBCLASS_TYPE1_HEADER) + RecordLen,\r
-      Status)\r
-      );\r
-  }\r
+  MemArrayMappedAddrSmbiosHandle = 0;\r
+  Status = Smbios->Add (Smbios, NULL, &MemArrayMappedAddrSmbiosHandle, (EFI_SMBIOS_TABLE_HEADER*) Type19Record);\r
+  FreePool(Type19Record);\r
+  ASSERT_EFI_ERROR (Status);\r
 \r
   return Status;\r
 }\r
@@ -146,193 +126,45 @@ Returns:
 \r
 --*/\r
 {\r
-  EFI_MISC_SUBCLASS_DRIVER_DATA     RecordData;\r
-  EFI_DATA_HUB_PROTOCOL             *DataHub;\r
-  EFI_HII_HANDLE                    HiiHandle;\r
-  EFI_STATUS                        Status;\r
-  UINTN                             Index;\r
-  BOOLEAN                           LogRecordData;\r
-  EFI_MEMORY_SUBCLASS_DRIVER_DATA   MemorySubClassData; \r
-  UINT64                            TotalMemorySize;\r
-  CHAR16                            *Nt32MemString;\r
+  UINTN                Index;\r
+  EFI_STATUS           EfiStatus;\r
+  EFI_SMBIOS_PROTOCOL  *Smbios;  \r
 \r
+  EfiStatus = gBS->LocateProtocol(&gEfiSmbiosProtocolGuid, NULL, (VOID**)&Smbios);\r
 \r
-  //\r
-  // Initialize constant portion of subclass header.\r
-  //\r
-  RecordData.Header.Version     = EFI_MISC_SUBCLASS_VERSION;\r
-  RecordData.Header.HeaderSize  = sizeof (EFI_SUBCLASS_TYPE1_HEADER);\r
-  RecordData.Header.Instance    = 1;\r
-  RecordData.Header.SubInstance = 1;\r
-\r
-  //\r
-  // Locate data hub protocol.\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID**)&DataHub);\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_ERROR, "Could not locate DataHub protocol.  %r\n", Status));\r
-    return Status;\r
-  } else if (DataHub == NULL) {\r
-    DEBUG ((EFI_D_ERROR, "LocateProtocol(DataHub) returned NULL pointer!\n"));\r
-    return EFI_DEVICE_ERROR;\r
+  if (EFI_ERROR(EfiStatus)) {\r
+    DEBUG((EFI_D_ERROR, "Could not locate SMBIOS protocol.  %r\n", EfiStatus));\r
+    return EfiStatus;\r
   }\r
-  //\r
-  // Add our default strings to the HII database. They will be modified later.\r
-  //\r
-  HiiHandle = HiiAddPackages (\r
-                &gEfiMiscSubClassGuid,\r
-                NULL,\r
-                MiscSubclassStrings,\r
-                NULL\r
-                );\r
-  if (HiiHandle == NULL) {\r
-    DEBUG ((EFI_D_ERROR, "Could not log default strings to Hii.  %r\n", Status));\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  //\r
-  //\r
-  //\r
-  for (Index = 0; Index < mMiscSubclassDataTableEntries; ++Index) {\r
-    //\r
-    // Stupidity check!  Do nothing if RecordLen is zero.\r
-    // %%TBD - Should this be an error or a mechanism for ignoring\r
-    // records in the Data Table?\r
-    //\r
-    if (mMiscSubclassDataTable[Index].RecordLen == 0) {\r
-      DEBUG (\r
-        (EFI_D_ERROR,\r
-        "mMiscSubclassDataTable[%d].RecordLen == 0\n",\r
-        Index)\r
-        );\r
 \r
-      continue;\r
-    }\r
+  mHiiHandle = HiiAddPackages (\r
+                 &gEfiCallerIdGuid,\r
+                 NULL,\r
+                 MiscSubclassStrings,\r
+                 NULL\r
+                 );\r
+  ASSERT (mHiiHandle != NULL);\r
+\r
+  for (Index = 0; Index < mMiscSubclassDataTableEntries; ++Index) {\r
     //\r
-    // Initialize per-record portion of subclass header and\r
-    // copy static data into data portion of subclass record.\r
+    // If the entry have a function pointer, just log the data.\r
     //\r
-    RecordData.Header.RecordType = mMiscSubclassDataTable[Index].RecordType;\r
-\r
-    if (mMiscSubclassDataTable[Index].RecordData == NULL) {\r
-      ZeroMem (\r
-        &RecordData.Record,\r
-        mMiscSubclassDataTable[Index].RecordLen\r
-        );\r
-    } else {\r
-      CopyMem (\r
-        &RecordData.Record,\r
+    if (mMiscSubclassDataTable[Index].Function != NULL) {\r
+      EfiStatus = (*mMiscSubclassDataTable[Index].Function)(\r
         mMiscSubclassDataTable[Index].RecordData,\r
-        mMiscSubclassDataTable[Index].RecordLen\r
+        Smbios\r
         );\r
-    }\r
-    //\r
-    // If the entry does not have a function pointer, just log the data.\r
-    //\r
-    if (mMiscSubclassDataTable[Index].Function == NULL) {\r
-      //\r
-      // Log RecordData to Data Hub.\r
-      //\r
-      Status = DataHub->LogData (\r
-                            DataHub,\r
-                            &gEfiMiscSubClassGuid,\r
-                            &gEfiMiscSubClassGuid,\r
-                            EFI_DATA_RECORD_CLASS_DATA,\r
-                            &RecordData,\r
-                            sizeof (EFI_SUBCLASS_TYPE1_HEADER) + mMiscSubclassDataTable[Index].RecordLen\r
-                            );\r
-\r
-      if (EFI_ERROR (Status)) {\r
-        DEBUG (\r
-          (EFI_D_ERROR,\r
-          "LogData(%d bytes) == %r\n",\r
-          sizeof (EFI_SUBCLASS_TYPE1_HEADER) + mMiscSubclassDataTable[Index].RecordLen,\r
-          Status)\r
-          );\r
-      }\r
-\r
-      continue;\r
-    }\r
-    //\r
-    // The entry has a valid function pointer.\r
-    // Keep calling the function and logging data until there\r
-    // is no more data to log.\r
-    //\r
-    for (;;) {\r
-      Status = (*mMiscSubclassDataTable[Index].Function)(mMiscSubclassDataTable[Index].RecordType, &mMiscSubclassDataTable[Index].RecordLen, &RecordData.Record, &LogRecordData);\r
-      if (EFI_ERROR (Status)) {\r
-        break;\r
-      }\r
-\r
-      if (!LogRecordData) {\r
-        break;\r
-      }\r
-\r
-      Status = DataHub->LogData (\r
-                            DataHub,\r
-                            &gEfiMiscSubClassGuid,\r
-                            &gEfiMiscSubClassGuid,\r
-                            EFI_DATA_RECORD_CLASS_DATA,\r
-                            &RecordData,\r
-                            sizeof (EFI_SUBCLASS_TYPE1_HEADER) + mMiscSubclassDataTable[Index].RecordLen\r
-                            );\r
-\r
-      if (EFI_ERROR (Status)) {\r
-        DEBUG (\r
-          (EFI_D_ERROR,\r
-          "LogData(%d bytes) == %r\n",\r
-          sizeof (EFI_SUBCLASS_TYPE1_HEADER) + mMiscSubclassDataTable[Index].RecordLen,\r
-          Status)\r
-          );\r
-      }\r
-    }\r
-  }\r
-\r
-  \r
-  //\r
-  // Log Memory Size info based on PCD setting.\r
-  //\r
-  MemorySubClassData.Header.Instance    = 1;\r
-  MemorySubClassData.Header.SubInstance = EFI_SUBCLASS_INSTANCE_NON_APPLICABLE;\r
-  MemorySubClassData.Header.RecordType  = EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER;\r
 \r
-  //\r
-  // Process Memory String in form size!size ...\r
-  // So 64!64 is 128 MB\r
-  //\r
-  Nt32MemString   = PcdGetPtr (PcdWinNtMemorySize);\r
-  for (TotalMemorySize = 0; *Nt32MemString != '\0';) {\r
-    TotalMemorySize += StrDecimalToUint64 (Nt32MemString);\r
-    while (*Nt32MemString != '\0') {\r
-      if (*Nt32MemString == '!') {\r
-        Nt32MemString++;       \r
-        break;\r
+      if (EFI_ERROR(EfiStatus)) {\r
+        DEBUG((EFI_D_ERROR, "Misc smbios store error.  Index=%d, ReturnStatus=%r\n", Index, EfiStatus));\r
+        return EfiStatus;\r
       }\r
-      Nt32MemString++;\r
     }\r
   }\r
 \r
-  MemorySubClassData.Record.ArrayStartAddress.MemoryArrayStartAddress               = 0;\r
-  MemorySubClassData.Record.ArrayStartAddress.MemoryArrayEndAddress                 = LShiftU64 (TotalMemorySize, 20) - 1;\r
-  MemorySubClassData.Record.ArrayStartAddress.PhysicalMemoryArrayLink.ProducerName  = gEfiCallerIdGuid;\r
-  MemorySubClassData.Record.ArrayStartAddress.PhysicalMemoryArrayLink.Instance      = 1;\r
-  MemorySubClassData.Record.ArrayStartAddress.PhysicalMemoryArrayLink.SubInstance   = EFI_SUBCLASS_INSTANCE_NON_APPLICABLE;\r
-  MemorySubClassData.Record.ArrayStartAddress.MemoryArrayPartitionWidth             = 0;\r
-\r
   //\r
-  // Store memory size data record to data hub.\r
+  // Log Memory SMBIOS Record\r
   //\r
-  Status = DataHub->LogData (\r
-                      DataHub,\r
-                      &gEfiMemorySubClassGuid,\r
-                      &gEfiCallerIdGuid,\r
-                      EFI_DATA_RECORD_CLASS_DATA,\r
-                      &MemorySubClassData,\r
-                      sizeof (EFI_SUBCLASS_TYPE1_HEADER) + sizeof (EFI_MEMORY_ARRAY_START_ADDRESS_DATA)\r
-                      );\r
-\r
-\r
-  return EFI_SUCCESS;\r
+  EfiStatus = LogMemorySmbiosRecord();\r
+  return EfiStatus;\r
 }\r
-\r
-\r
index 059dcf6805a25ad5820e74ff184cdd0240f47b81..48464a2fe105292b206803158cbb71f38aa80e69 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA, SystemLanguageString) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA, SystemLanguageString) = {\r
   0,\r
   STRING_TOKEN(STR_MISC_SYSTEM_LANGUAGE_STRING)\r
 };\r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemLanguageStringFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemLanguageStringFunction.c
new file mode 100644 (file)
index 0000000..b2232a4
--- /dev/null
@@ -0,0 +1,92 @@
+/*++\r
+\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+Module Name:\r
+\r
+  MiscResetCapabilitiesFunction.c\r
+  \r
+Abstract: \r
+\r
+  ResetCapabilities.\r
+  SMBIOS type 23.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscOemString (Type 11).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(SystemLanguageString)\r
+{\r
+  EFI_STATUS               Status;\r
+  EFI_SMBIOS_HANDLE        SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE13      *SmbiosRecord;\r
+  UINTN                    StrLeng;\r
+  CHAR8                    *OptionalStrStart;\r
+  EFI_STRING               Str;\r
+  STRING_REF               TokenToGet;\r
+  \r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_LANGUAGE_STRING);\r
+  Str = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  StrLeng = StrLen(Str);\r
+  if (StrLeng > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE13) + StrLeng + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE13) + StrLeng + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE13);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  // \r
+  SmbiosRecord->Hdr.Handle    = 0;\r
+  SmbiosRecord->InstallableLanguages = 1;\r
+  SmbiosRecord->Flags   = 1;\r
+  SmbiosRecord->CurrentLanguages = 1;\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(Str, OptionalStrStart);\r
+  \r
+\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
+\r
index 3d3e7a5363b93573c3a4518567553bce3a53d2c2..2608abbbf9d9321ddb2cc1a82c815c3cba8c3256 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) System Manufacturer data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_SYSTEM_MANUFACTURER_DATA, MiscSystemManufacturer)\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_SYSTEM_MANUFACTURER_DATA, MiscSystemManufacturer)\r
 = {\r
   STRING_TOKEN(STR_MISC_SYSTEM_MANUFACTURER),\r
   // SystemManufactrurer\r
index 39c12cf482cd3932aa7b28bdde9a62c49044a6b6..5cb4a472735cc9886441f22d86fe131a8de1a94f 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -22,101 +22,119 @@ Abstract:
 \r
 #include "MiscSubclassDriver.h"\r
 \r
-BOOLEAN  mDone = FALSE;\r
-\r
-//\r
-//\r
-//\r
-MISC_SUBCLASS_TABLE_FUNCTION (\r
-  MiscSystemManufacturer\r
-  )\r
-/*++\r
-Description:\r
-\r
+/**\r
   This function makes boot time changes to the contents of the\r
-  MiscSystemManufacturer (Type 13).\r
+  MiscSystemManufacturer (Type 1).\r
 \r
-Parameters:\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
 \r
-  RecordType\r
-    Type of record to be processed from the Data Table.\r
-    mMiscSubclassDataTable[].RecordType\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
 \r
-  RecordLen\r
-    Size of static RecordData from the Data Table.\r
-    mMiscSubclassDataTable[].RecordLen\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(MiscSystemManufacturer)\r
+{\r
+  CHAR8                             *OptionalStrStart;\r
+  UINTN                             ManuStrLen;\r
+  UINTN                             VerStrLen;\r
+  UINTN                             PdNameStrLen;\r
+  UINTN                             SerialNumStrLen;\r
+  EFI_STATUS                        Status;\r
+  EFI_STRING                        Manufacturer;\r
+  EFI_STRING                        ProductName;\r
+  EFI_STRING                        Version;\r
+  EFI_STRING                        SerialNumber;\r
+  STRING_REF                        TokenToGet;\r
+  EFI_SMBIOS_HANDLE                 SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE1                *SmbiosRecord;\r
+  EFI_MISC_SYSTEM_MANUFACTURER      *ForType1InputData;\r
+\r
+  ForType1InputData = (EFI_MISC_SYSTEM_MANUFACTURER *)RecordData;\r
 \r
-  RecordData\r
-    Pointer to copy of RecordData from the Data Table.  Changes made\r
-    to this copy will be written to the Data Hub but will not alter\r
-    the contents of the static Data Table.\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
 \r
-  LogRecordData\r
-    Set *LogRecordData to TRUE to log RecordData to Data Hub.\r
-    Set *LogRecordData to FALSE when there is no more data to log.\r
+  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER);\r
+  Manufacturer = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  ManuStrLen = StrLen(Manufacturer);\r
+  if (ManuStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
 \r
-Returns:\r
+  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);\r
+  ProductName = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  PdNameStrLen = StrLen(ProductName);\r
+  if (PdNameStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
 \r
-  EFI_SUCCESS\r
-    All parameters were valid and *RecordData and *LogRecordData have\r
-    been set.\r
+  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);\r
+  Version = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  VerStrLen = StrLen(Version);\r
+  if (VerStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
 \r
-  EFI_UNSUPPORTED\r
-    Unexpected RecordType value.\r
+  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER);\r
+  SerialNumber = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  SerialNumStrLen = StrLen(SerialNumber);\r
+  if (SerialNumStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE1) + ManuStrLen + 1 + PdNameStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE1) + ManuStrLen + 1 + PdNameStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + 1);\r
 \r
-  EFI_INVALID_PARAMETER\r
-    One of the following parameter conditions was true:\r
-      RecordLen was zero.\r
-      RecordData was NULL.\r
-      LogRecordData was NULL.\r
---*/\r
-{\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_INFORMATION;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE1);\r
   //\r
-  // First check for invalid parameters.\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  // \r
+  SmbiosRecord->Hdr.Handle = 0;  \r
   //\r
-  if (*RecordLen == 0 || RecordData == NULL || LogRecordData == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  // Manu will be the 1st optional string following the formatted structure.\r
   //\r
-  // Then check for unsupported RecordType.\r
+  SmbiosRecord->Manufacturer = 1;\r
   //\r
-  if (RecordType != EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
+  // ProductName will be the 2nd optional string following the formatted structure.\r
   //\r
-  // Is this the first time through this function?\r
+  SmbiosRecord->ProductName = 2;  \r
   //\r
-  if (!mDone) {\r
-    //\r
-    // Yes, this is the first time.  Inspect/Change the contents of the\r
-    // RecordData structure.\r
-    //\r
-    //\r
-    // Set system GUID.\r
-    //\r
-    // ((EFI_MISC_SYSTEM_MANUFACTURER_DATA *)RecordData)->SystemUuid = %%TBD\r
-    //\r
-    // Set power-on type.\r
-    //\r
-    // ((EFI_MISC_SYSTEM_MANUFACTURER_DATA *)RecordData)->SystemWakeupType = %%TBD\r
-    //\r
-    // Set mDone flag to TRUE for next pass through this function.\r
-    // Set *LogRecordData to TRUE so data will get logged to Data Hub.\r
-    //\r
-    mDone            = TRUE;\r
-    *LogRecordData  = TRUE;\r
-  } else {\r
-    //\r
-    // No, this is the second time.  Reset the state of the mDone flag\r
-    // to FALSE and tell the data logger that there is no more data\r
-    // to be logged for this record type.  If any memory allocations\r
-    // were made by earlier passes, they must be released now.\r
-    //\r
-    mDone            = FALSE;\r
-    *LogRecordData  = FALSE;\r
-  }\r
+  // Version will be the 3rd optional string following the formatted structure.  \r
+  //\r
+  SmbiosRecord->Version = 3;  \r
+  //\r
+  // Version will be the 4th optional string following the formatted structure.\r
+  //\r
+  SmbiosRecord->SerialNumber = 4;\r
+  CopyMem ((UINT8 *) (&SmbiosRecord->Uuid),&ForType1InputData->SystemUuid,16);\r
+  SmbiosRecord->WakeUpType = (UINT8)ForType1InputData->SystemWakeupType;\r
+\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(Manufacturer, OptionalStrStart);\r
+  UnicodeStrToAsciiStr(ProductName, OptionalStrStart + ManuStrLen + 1);\r
+  UnicodeStrToAsciiStr(Version, OptionalStrStart + ManuStrLen + 1 + PdNameStrLen + 1);\r
+  UnicodeStrToAsciiStr(SerialNumber, OptionalStrStart + ManuStrLen + 1 + PdNameStrLen + 1 + VerStrLen + 1);\r
 \r
-  return EFI_SUCCESS;\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
 }\r
 \r
 /* eof - MiscSystemManufacturerFunction.c */\r
index b2976aeef9ea3f2075461d7da3c1a7cebf44ce8b..9a651b4ad937df83d15b5c3b3e3baca95c1a59c6 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_SYSTEM_OPTION_STRING_DATA, SystemOptionString) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_SYSTEM_OPTION_STRING_DATA, SystemOptionString) = {\r
   STRING_TOKEN(STR_MISC_SYSTEM_OPTION_STRING)\r
 };\r
 \r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemOptionStringFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemOptionStringFunction.c
new file mode 100644 (file)
index 0000000..a4aeb31
--- /dev/null
@@ -0,0 +1,91 @@
+/*++\r
\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+\r
+Module Name:\r
+\r
+  MiscSystemOptionStringFunction.c\r
+  \r
+Abstract: \r
+\r
+  BIOS system option string boot time changes.\r
+  SMBIOS type 12.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+\r
+\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscSystemOptionString (Type 12).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(SystemOptionString)\r
+{\r
+  CHAR8                             *OptionalStrStart;\r
+  UINTN                             OptStrLen;\r
+  EFI_STRING                        OptionString;\r
+  EFI_STATUS                        Status;\r
+  STRING_REF                        TokenToGet;\r
+  EFI_SMBIOS_HANDLE                 SmbiosHandle;\r
+  SMBIOS_TABLE_TYPE12               *SmbiosRecord;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_OPTION_STRING);\r
+  OptionString = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  OptStrLen = StrLen(OptionString);\r
+  if (OptStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE12) + OptStrLen + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE12) + OptStrLen + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE12);\r
+  //\r
+  // Make handle chosen by smbios protocol.add automatically.\r
+  //\r
+  SmbiosRecord->Hdr.Handle = 0;  \r
+\r
+  SmbiosRecord->StringCount = 1;\r
+  OptionalStrStart = (CHAR8*) (SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(OptionString, OptionalStrStart);\r
+  //\r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
index ce1ec70b9844cb7559cec94be4f1c3578ed4eaa1..d0058eb45a02ff91ed1b1d2c649ea15430fb3ece 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006, Intel Corporation\r
+Copyright (c) 2006 - 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
@@ -25,7 +25,7 @@ Abstract:
 //\r
 // Static (possibly build generated) Bios Vendor data.\r
 //\r
-MISC_SUBCLASS_TABLE_DATA(EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA, MiscSystemSlotDesignation) = {\r
+MISC_SMBIOS_TABLE_DATA(EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA, MiscSystemSlotDesignation) = {\r
   STRING_TOKEN(STR_MISC_SYSTEM_SLOT_DESIGNATION),   // SlotDesignation\r
   EfiSlotTypeOther,         // SlotType\r
   EfiSlotDataBusWidthOther, // SlotDataBusWidth\r
diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemSlotDesignationFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemSlotDesignationFunction.c
new file mode 100644 (file)
index 0000000..c42b9d2
--- /dev/null
@@ -0,0 +1,105 @@
+/*++\r
+\r
+Copyright (c) 2009, Intel Corporation. All rights reserved. <BR> \r
+This software and associated documentation (if any) is furnished\r
+under a license and may only be used or copied in accordance\r
+with the terms of the license. Except as permitted by such\r
+license, no part of this software or documentation may be\r
+reproduced, stored in a retrieval system, or transmitted in any\r
+form or by any means without the express written consent of\r
+Intel Corporation.\r
+\r
+\r
+Module Name:\r
+\r
+  MiscSystemSlotDesignatorFunction.c\r
+  \r
+Abstract: \r
+\r
+  BIOS system slot designator information boot time changes.\r
+  SMBIOS type 9.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscSystemSlotDesignator structure (Type 9).\r
+\r
+  @param  RecordData                 Pointer to copy of RecordData from the Data Table.  \r
+\r
+  @retval EFI_SUCCESS                All parameters were valid.\r
+  @retval EFI_UNSUPPORTED            Unexpected RecordType value.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.\r
+\r
+**/\r
+MISC_SMBIOS_TABLE_FUNCTION(MiscSystemSlotDesignation)\r
+{\r
+  CHAR8                              *OptionalStrStart;\r
+  UINTN                              SlotDesignationStrLen;\r
+  EFI_STATUS                         Status;\r
+  EFI_STRING                         SlotDesignation;\r
+  STRING_REF                         TokenToGet;\r
+  SMBIOS_TABLE_TYPE9                 *SmbiosRecord;\r
+  EFI_SMBIOS_HANDLE                  SmbiosHandle;\r
+  EFI_MISC_SYSTEM_SLOT_DESIGNATION*  ForType9InputData;\r
+\r
+  ForType9InputData = (EFI_MISC_SYSTEM_SLOT_DESIGNATION *)RecordData;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  TokenToGet = 0;\r
+  switch (ForType9InputData->SlotDesignation) {\r
+    case STR_MISC_SYSTEM_SLOT_DESIGNATION: \r
+      TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_DESIGNATION);\r
+      break;\r
+    default:\r
+      break;\r
+  }\r
+\r
+  SlotDesignation = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  SlotDesignationStrLen = StrLen(SlotDesignation);\r
+  if (SlotDesignationStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+  \r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE9) + SlotDesignationStrLen + 1 + 1);\r
+  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE9) +SlotDesignationStrLen + 1 + 1);\r
+\r
+  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_SLOTS;\r
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE9);\r
+  SmbiosRecord->Hdr.Handle = 0; \r
+  SmbiosRecord->SlotDesignation = 1;\r
+  SmbiosRecord->SlotType = ForType9InputData->SlotType;\r
+  SmbiosRecord->SlotDataBusWidth = ForType9InputData->SlotDataBusWidth;\r
+  SmbiosRecord->CurrentUsage = ForType9InputData->SlotUsage;\r
+  SmbiosRecord->SlotLength = ForType9InputData->SlotLength;\r
+  SmbiosRecord->SlotID = ForType9InputData->SlotId;\r
+  \r
+  //\r
+  // Slot Characteristics\r
+  //\r
+  CopyMem ((UINT8 *) &SmbiosRecord->SlotCharacteristics1,(UINT8 *) &ForType9InputData->SlotCharacteristics,2);\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStr(SlotDesignation, OptionalStrStart);\r
+  //  \r
+  // Now we have got the full smbios record, call smbios protocol to add this record.\r
+  //\r
+  SmbiosHandle = 0;\r
+  Status = Smbios-> Add(\r
+                      Smbios, \r
+                      NULL,\r
+                      &SmbiosHandle, \r
+                      (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
+                      );\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
+}\r
index 406ef8ffe52b6a5f32449f954f786f6241310217..9e928a3c7caa2a2273a11e136eed66e457fb934c 100644 (file)
   Nt32Pkg/FvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf\r
   MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf\r
   IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf\r
+  MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf\r
   MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
   MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf\r
   Nt32Pkg/WinNtThunkDxe/WinNtThunkDxe.inf\r
index d2d8ccea76db775ad7f81c3ad371e59a18ae7dda..4e041ab6656ff726da17ac3456d63005b0a64e67 100644 (file)
@@ -188,6 +188,7 @@ INF  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
 INF  Nt32Pkg/FvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf\r
 INF  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf\r
 INF  IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf\r
+INF  MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf\r
 INF  MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
 INF  MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf\r
 INF  MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf\r