Unix version of EFI emulator
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2182 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -0,0 +1,266 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
Module Name:
|
||||
|
||||
MiscPortInternalConnectorDesignatorFunction.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This driver parses the mMiscSubclassDataTable structure and reports
|
||||
any generated data to the DataHub.
|
||||
|
||||
--*/
|
||||
|
||||
#include "MiscSubclassDriver.h"
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
MISC_SUBCLASS_TABLE_FUNCTION (
|
||||
MiscPortInternalConnectorDesignator
|
||||
)
|
||||
/*++
|
||||
Description:
|
||||
|
||||
This function makes boot time changes to the contents of the
|
||||
MiscPortConnectorInformation (Type 8).
|
||||
|
||||
Parameters:
|
||||
|
||||
RecordType
|
||||
Type of record to be processed from the Data Table.
|
||||
mMiscSubclassDataTable[].RecordType
|
||||
|
||||
RecordLen
|
||||
Size of static RecordData from the Data Table.
|
||||
mMiscSubclassDataTable[].RecordLen
|
||||
|
||||
RecordData
|
||||
Pointer to copy of RecordData from the Data Table. Changes made
|
||||
to this copy will be written to the Data Hub but will not alter
|
||||
the contents of the static Data Table.
|
||||
|
||||
LogRecordData
|
||||
Set *LogRecordData to TRUE to log RecordData to Data Hub.
|
||||
Set *LogRecordData to FALSE when there is no more data to log.
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
All parameters were valid and *RecordData and *LogRecordData have
|
||||
been set.
|
||||
|
||||
EFI_UNSUPPORTED
|
||||
Unexpected RecordType value.
|
||||
|
||||
EFI_INVALID_PARAMETER
|
||||
One of the following parameter conditions was true:
|
||||
RecordLen was zero.
|
||||
RecordData was NULL.
|
||||
LogRecordData was NULL.
|
||||
--*/
|
||||
{
|
||||
STATIC BOOLEAN Done = FALSE;
|
||||
STATIC PS2_CONN_DEVICE_PATH mPs2KeyboardDevicePath = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0303, 0), DP_END };
|
||||
STATIC PS2_CONN_DEVICE_PATH mPs2MouseDevicePath = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0303, 1), DP_END };
|
||||
STATIC SERIAL_CONN_DEVICE_PATH mCom1DevicePath = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0501, 0), DP_END };
|
||||
STATIC SERIAL_CONN_DEVICE_PATH mCom2DevicePath = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0501, 1), DP_END };
|
||||
STATIC PARALLEL_CONN_DEVICE_PATH mLpt1DevicePath = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0401, 0), DP_END };
|
||||
STATIC FLOOPY_CONN_DEVICE_PATH mFloopyADevicePath = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0604, 0), DP_END };
|
||||
STATIC FLOOPY_CONN_DEVICE_PATH mFloopyBDevicePath = { DP_ACPI, DP_PCI (0x1F, 0x00), DP_LPC (0x0604, 1), DP_END };
|
||||
STATIC USB_PORT_DEVICE_PATH mUsb0DevicePath = { DP_ACPI, DP_PCI (0x1d, 0x00), DP_END };
|
||||
STATIC USB_PORT_DEVICE_PATH mUsb1DevicePath = { DP_ACPI, DP_PCI (0x1d, 0x01), DP_END };
|
||||
STATIC USB_PORT_DEVICE_PATH mUsb2DevicePath = { DP_ACPI, DP_PCI (0x1d, 0x02), DP_END };
|
||||
STATIC USB_PORT_DEVICE_PATH mUsb3DevicePath = { DP_ACPI, DP_PCI (0x1d, 0x07), DP_END };
|
||||
STATIC IDE_DEVICE_PATH mIdeDevicePath = { DP_ACPI, DP_PCI (0x1F, 0x01), DP_END };
|
||||
STATIC GB_NIC_DEVICE_PATH mGbNicDevicePath = { DP_ACPI, DP_PCI( 0x03,0x00 ),DP_PCI( 0x1F,0x00 ),DP_PCI( 0x07,0x00 ), DP_END };
|
||||
EFI_DEVICE_PATH_PROTOCOL EndDevicePath = DP_END;
|
||||
|
||||
//
|
||||
// First check for invalid parameters.
|
||||
//
|
||||
// Shanmu >> to fix the Device Path Issue...
|
||||
// if (RecordLen == 0 || RecordData == NULL || LogRecordData == NULL) {
|
||||
//
|
||||
if (*RecordLen == 0 || RecordData == NULL || LogRecordData == NULL) {
|
||||
//
|
||||
// End Shanmu
|
||||
//
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
//
|
||||
// Then check for unsupported RecordType.
|
||||
//
|
||||
if (RecordType != EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
//
|
||||
// Is this the first time through this function?
|
||||
//
|
||||
if (!Done) {
|
||||
//
|
||||
// Yes, this is the first time. Inspect/Change the contents of the
|
||||
// RecordData structure.
|
||||
//
|
||||
//
|
||||
// Device path is only updated here as it was not taking that in static data
|
||||
//
|
||||
// Shanmu >> to fix the Device Path Issue...
|
||||
//
|
||||
|
||||
/*
|
||||
switch (((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortInternalConnectorDesignator)
|
||||
{
|
||||
case STR_MISC_PORT_INTERNAL_MOUSE:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mPs2MouseDevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_KEYBOARD:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mPs2KeyboardDevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_COM1:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mCom1DevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_COM2:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mCom2DevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_LPT1:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mLpt1DevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_USB1:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mUsb0DevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_USB2:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mUsb1DevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_USB3:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mUsb2DevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_NETWORK:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mGbNicDevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_FLOPPY:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mFloopyADevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_IDE1:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mIdeDevicePath);
|
||||
}break;
|
||||
case STR_MISC_PORT_INTERNAL_IDE2:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = *((EFI_DEVICE_PATH_PROTOCOL*)&mIdeDevicePath);
|
||||
}break;
|
||||
default:
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL)((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *)RecordData)->PortPath = EndDevicePath;
|
||||
}break;
|
||||
}
|
||||
*/
|
||||
switch (((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortInternalConnectorDesignator) {
|
||||
case STR_MISC_PORT_INTERNAL_MOUSE:
|
||||
{
|
||||
CopyMem (
|
||||
&((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,
|
||||
&mPs2MouseDevicePath,
|
||||
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mPs2MouseDevicePath)
|
||||
);
|
||||
*RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mPs2MouseDevicePath);
|
||||
}
|
||||
break;
|
||||
|
||||
case STR_MISC_PORT_INTERNAL_KEYBOARD:
|
||||
{
|
||||
CopyMem (
|
||||
&((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,
|
||||
&mPs2KeyboardDevicePath,
|
||||
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mPs2KeyboardDevicePath)
|
||||
);
|
||||
*RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mPs2KeyboardDevicePath);
|
||||
}
|
||||
break;
|
||||
|
||||
case STR_MISC_PORT_INTERNAL_COM1:
|
||||
{
|
||||
CopyMem (
|
||||
&((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,
|
||||
&mCom1DevicePath,
|
||||
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mCom1DevicePath)
|
||||
);
|
||||
*RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mCom1DevicePath);
|
||||
}
|
||||
break;
|
||||
|
||||
case STR_MISC_PORT_INTERNAL_COM2:
|
||||
{
|
||||
CopyMem (
|
||||
&((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,
|
||||
&mCom2DevicePath,
|
||||
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mCom2DevicePath)
|
||||
);
|
||||
*RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mCom2DevicePath);
|
||||
}
|
||||
break;
|
||||
|
||||
case STR_MISC_PORT_INTERNAL_FLOPPY:
|
||||
{
|
||||
CopyMem (
|
||||
&((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,
|
||||
&mFloopyADevicePath,
|
||||
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mFloopyADevicePath)
|
||||
);
|
||||
*RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mFloopyADevicePath);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
CopyMem (
|
||||
&((EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData)->PortPath,
|
||||
&EndDevicePath,
|
||||
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &EndDevicePath)
|
||||
);
|
||||
*RecordLen = *RecordLen - sizeof (EFI_MISC_PORT_DEVICE_PATH) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &EndDevicePath);
|
||||
}
|
||||
break;
|
||||
}
|
||||
//
|
||||
// End Shanmu
|
||||
//
|
||||
// Set Done flag to TRUE for next pass through this function.
|
||||
// Set *LogRecordData to TRUE so data will get logged to Data Hub.
|
||||
//
|
||||
Done = TRUE;
|
||||
*LogRecordData = TRUE;
|
||||
} else {
|
||||
//
|
||||
// No, this is the second time. Reset the state of the Done flag
|
||||
// to FALSE and tell the data logger that there is no more data
|
||||
// to be logged for this record type. If any memory allocations
|
||||
// were made by earlier passes, they must be released now.
|
||||
//
|
||||
Done = FALSE;
|
||||
*LogRecordData = FALSE;
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/* eof - MiscSystemManufacturerFunction.c */
|
Reference in New Issue
Block a user