]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkUnixPkg/Dxe/UnixPlatform/MiscSubclass/MiscPortInternalConnectorDesignatorFunction.c
Unix version of EFI emulator
[mirror_edk2.git] / EdkUnixPkg / Dxe / UnixPlatform / MiscSubclass / MiscPortInternalConnectorDesignatorFunction.c
diff --git a/EdkUnixPkg/Dxe/UnixPlatform/MiscSubclass/MiscPortInternalConnectorDesignatorFunction.c b/EdkUnixPkg/Dxe/UnixPlatform/MiscSubclass/MiscPortInternalConnectorDesignatorFunction.c
new file mode 100644 (file)
index 0000000..35351aa
--- /dev/null
@@ -0,0 +1,266 @@
+/*++\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
+\r
+Module Name:\r
+\r
+  MiscPortInternalConnectorDesignatorFunction.c\r
+  \r
+Abstract: \r
+\r
+  This driver parses the mMiscSubclassDataTable structure and reports\r
+  any generated data to the DataHub.\r
+\r
+--*/\r
+\r
+#include "MiscSubclassDriver.h"\r
+\r
+//\r
+//\r
+//\r
+MISC_SUBCLASS_TABLE_FUNCTION (\r
+  MiscPortInternalConnectorDesignator\r
+  )\r
+/*++\r
+Description:\r
+\r
+  This function makes boot time changes to the contents of the\r
+  MiscPortConnectorInformation (Type 8).\r
+\r
+Parameters:\r
+\r
+  RecordType\r
+    Type of record to be processed from the Data Table.\r
+    mMiscSubclassDataTable[].RecordType\r
+\r
+  RecordLen\r
+    Size of static RecordData from the Data Table.\r
+    mMiscSubclassDataTable[].RecordLen\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
+  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
+\r
+Returns:\r
+\r
+  EFI_SUCCESS\r
+    All parameters were valid and *RecordData and *LogRecordData have\r
+    been set.\r
+\r
+  EFI_UNSUPPORTED\r
+    Unexpected RecordType value.\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
+  STATIC BOOLEAN                    Done                    = FALSE;\r
+  STATIC PS2_CONN_DEVICE_PATH       mPs2KeyboardDevicePath  = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0303, 0), DP_END };\r
+  STATIC PS2_CONN_DEVICE_PATH       mPs2MouseDevicePath     = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0303, 1), DP_END };\r
+  STATIC SERIAL_CONN_DEVICE_PATH    mCom1DevicePath         = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0501, 0), DP_END };\r
+  STATIC SERIAL_CONN_DEVICE_PATH    mCom2DevicePath         = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0501, 1), DP_END };\r
+  STATIC PARALLEL_CONN_DEVICE_PATH  mLpt1DevicePath         = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0401, 0), DP_END };\r
+  STATIC FLOOPY_CONN_DEVICE_PATH    mFloopyADevicePath      = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0604, 0), DP_END };\r
+  STATIC FLOOPY_CONN_DEVICE_PATH    mFloopyBDevicePath      = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0604, 1), DP_END };\r
+  STATIC USB_PORT_DEVICE_PATH       mUsb0DevicePath         = { DP_ACPI, DP_PCI (0x1d, 0x00), DP_END };\r
+  STATIC USB_PORT_DEVICE_PATH       mUsb1DevicePath         = { DP_ACPI, DP_PCI (0x1d, 0x01), DP_END };\r
+  STATIC USB_PORT_DEVICE_PATH       mUsb2DevicePath         = { DP_ACPI, DP_PCI (0x1d, 0x02), DP_END };\r
+  STATIC USB_PORT_DEVICE_PATH       mUsb3DevicePath         = { DP_ACPI, DP_PCI (0x1d, 0x07), DP_END };\r
+  STATIC IDE_DEVICE_PATH            mIdeDevicePath          = { DP_ACPI, DP_PCI (0x1F, 0x01), DP_END };\r
+  STATIC GB_NIC_DEVICE_PATH         mGbNicDevicePath        = { DP_ACPI, DP_PCI( 0x03,0x00 ),DP_PCI( 0x1F,0x00 ),DP_PCI( 0x07,0x00 ), DP_END };\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath           = DP_END;\r
+\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
+    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 (!Done) {\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
+\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
+      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
+      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
+      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
+      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 Done flag to TRUE for next pass through this function.\r
+    // Set *LogRecordData to TRUE so data will get logged to Data Hub.\r
+    //\r
+    Done            = TRUE;\r
+    *LogRecordData  = TRUE;\r
+  } else {\r
+    //\r
+    // No, this is the second time.  Reset the state of the Done 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
+    Done            = FALSE;\r
+    *LogRecordData  = FALSE;\r
+  }\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/* eof - MiscSystemManufacturerFunction.c */\r