]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Nt32Pkg/MiscSubClassPlatformDxe/MiscPortInternalConnectorDesignatorFunction.c
UefiCpuPkg: Remove double \r
[mirror_edk2.git] / Nt32Pkg / MiscSubClassPlatformDxe / MiscPortInternalConnectorDesignatorFunction.c
index 49d2c50f6a648711fb620d9f82e1b4590b211a27..8de657cb6a536d9e6a3fed129b7e4ec3597e985b 100644 (file)
@@ -1,13 +1,7 @@
 /**@file\r
  \r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 Module Name:\r
 \r
@@ -22,25 +16,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 +61,106 @@ 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
+  Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);\r
+\r
+  FreePool(SmbiosRecord);\r
+  return Status;\r
 }\r
 \r
+\r
+\r
 /* eof - MiscSystemManufacturerFunction.c */\r