--- /dev/null
+/*++\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