alder_lake_bios/Intel/AlderLake/AlderLakeChipsetPkg/Library/DxeOemSvcChipsetLib/OemSvcSetUsbLegacyPlatformO...

183 lines
7.1 KiB
C

/** @file
This function provides an interface to modify USB legacy options.
;******************************************************************************
;* Copyright (c) 2014, Insyde Software Corporation. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#include <Library/DxeOemSvcChipsetLib.h>
#if 0 // Sample Implementation
#include <Protocol/UsbLegacyPlatform.h>
#endif
/**
This function provides an interface to modify USB legacy options.
@param[in out] *UsbLegacyModifiers On entry, points to USB_LEGACY_MODIFIERS instance.
On exit , points to updated USB_LEGACY_MODIFIERS instance.
@retval EFI_UNSUPPORTED Returns unsupported by default.
@retval EFI_MEDIA_CHANGED Alter the Configuration Parameter.
*/
EFI_STATUS
OemSvcSetUsbLegacyPlatformOptions (
IN OUT USB_LEGACY_MODIFIERS *UsbLegacyModifiers
)
{
/*++
Todo:
Add project specific code in here.
--*/
#if 0 // Sample Implementation
EFI_USB_LEGACY_PLATFORM_PROTOCOL *LegacyBiosPlatform;
//
// Sets the UsbIgnoreDevicesPtr as a bunch of device paths to indicate which
// (1)Usb controller(s) (2)Usb port(s) (3)Usb device(s) you want to ignore
//
// 1. To ignore Usb controller : Insert a PCI_DEVICE_PATH to UsbIgnoreDevicesPtr
// and set appropriate value into "Function" and "Device" fields
//
// 2. To ignore Usb port : Insert a USB_DEVICE_PATH to UsbIgnoreDevicesPtr
// and set appropriate value into ParentPortNumber
//
// 3. To ignore Usb device : Insert a USB_CLASS_DEVICE_PATH to UsbIgnoreDevicesPtr
// and set appropriate value into "VendorId" and "ProductId" field
//
// 4. Every device path MUST end as a END_DEVICE_PATH in order to distinguish each other
//
// 5. Append 0(UINT32) after end of whole device paths to indicate the end of whole device paths
//
// Turn following code on to enable this feature
//
//
// The example of add a couple of Usb devices to ignore
//
static struct {
USB_CLASS_DEVICE_PATH UsbClass;
EFI_DEVICE_PATH_PROTOCOL EndDP1;
PCI_DEVICE_PATH Pci;
EFI_DEVICE_PATH_PROTOCOL EndDP2;
USB_DEVICE_PATH Usb;
EFI_DEVICE_PATH_PROTOCOL EndDP3;
USB_DEVICE_PATH Usb1;
USB_CLASS_DEVICE_PATH UsbClass1;
EFI_DEVICE_PATH_PROTOCOL EndDP4;
PCI_DEVICE_PATH Pci1;
USB_DEVICE_PATH Usb2;
EFI_DEVICE_PATH_PROTOCOL EndDP5;
PCI_DEVICE_PATH Pci2;
USB_DEVICE_PATH Usb3;
USB_CLASS_DEVICE_PATH UsbClass2;
EFI_DEVICE_PATH_PROTOCOL EndDP6;
UINT32 Zero;
} UsbUnsupportDevicePaths = {
//
// Example 1 : Ignore device which VID = 0x0461 and PID = 0x4d03
//
{ { MESSAGING_DEVICE_PATH, MSG_USB_CLASS_DP, sizeof(USB_CLASS_DEVICE_PATH), 0 }, 0x0461, 0x4d03, 0, 0, 0 },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// Example 2 : Ignore whole devices attached in Dev = 0x1d and Fun = 0x07 controller
//
{ { HARDWARE_DEVICE_PATH, HW_PCI_DP, sizeof(PCI_DEVICE_PATH), 0 }, 0x07, 0x1d },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// Example 3 : Ignore whole devices plugged in each controller's port 2
//
{ { MESSAGING_DEVICE_PATH, MSG_USB_DP, sizeof(USB_DEVICE_PATH), 0 }, 0x02, 0 },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// Example 4 : Ignore device which VID = 0x0461 and PID = 0x4d03 and plugged in each controller's port 2
//
{ { MESSAGING_DEVICE_PATH, MSG_USB_DP, sizeof(USB_DEVICE_PATH), 0 }, 0x02, 0 },
{ { MESSAGING_DEVICE_PATH, MSG_USB_CLASS_DP, sizeof(USB_CLASS_DEVICE_PATH), 0 }, 0x0461, 0x4d03, 0, 0, 0 },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// Example 5 : Ignore whole device plugged in Dev = 0x1d and Fun = 0x07 controller's port 2
//
{ { HARDWARE_DEVICE_PATH, HW_PCI_DP, sizeof(PCI_DEVICE_PATH), 0 }, 0x07, 0x1d },
{ { MESSAGING_DEVICE_PATH, MSG_USB_DP, sizeof(USB_DEVICE_PATH), 0 }, 0x02, 0 },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// Example 6 : Ignore device which VID = 0x0461 and PID = 0x4d03 and plugged in Dev = 0x1d and Fun = 0x07 controller's port 2
//
{ { HARDWARE_DEVICE_PATH, HW_PCI_DP, sizeof(PCI_DEVICE_PATH), 0 }, 0x07, 0x1d },
{ { MESSAGING_DEVICE_PATH, MSG_USB_DP, sizeof(USB_DEVICE_PATH), 0 }, 0x02, 0 },
{ { MESSAGING_DEVICE_PATH, MSG_USB_CLASS_DP, sizeof(USB_CLASS_DEVICE_PATH), 0 }, 0x0461, 0x4d03, 0, 0, 0 },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// End of device paths
//
0
};
Status = gBS->LocateProtocol (
&gEfiUsbLegacyPlatformProtocolGuid,
NULL,
(VOID **)&LegacyBiosPlatform
);
UsbLegacyModifiers->UsbIgnoreDevicesPtr = (UINT32)(UINTN)&UsbUnsupportDevicePaths;
#endif
//[-start-210920-BAIN000047-modify]//
//[-start-210922-QINGLIN0077-modify]//
//#ifdef C970_SUPPORT
//[-start-211008-TAMT000022-modify]//
#if defined(C970_SUPPORT) || defined(C770_SUPPORT) || defined(S570_SUPPORT) || defined(S370_SUPPORT) || defined(S77013_SUPPORT) || defined(S77014_SUPPORT) || defined(S77014IAH_SUPPORT)
//[-end-211008-TAMT000022-modify]//
//[-end-210922-QINGLIN0077-modify]//
static struct {
USB_DEVICE_PATH Usb;
EFI_DEVICE_PATH_PROTOCOL EndDP;
USB_DEVICE_PATH Usb1;
EFI_DEVICE_PATH_PROTOCOL EndDP1;
USB_DEVICE_PATH Usb2;
EFI_DEVICE_PATH_PROTOCOL EndDP2;
UINT32 Zero;
} UsbUnsupportDevicePaths = {
//
// Ignore whole devices plugged in each controller's port 6 - Finger Print
//
{ { MESSAGING_DEVICE_PATH, MSG_USB_DP, sizeof(USB_DEVICE_PATH), 0 }, 0x05, 0 },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// Ignore whole devices plugged in each controller's port 8 - Camera
//
{ { MESSAGING_DEVICE_PATH, MSG_USB_DP, sizeof(USB_DEVICE_PATH), 0 }, 0x07, 0 },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// Ignore whole devices plugged in each controller's port 10 - WLAN
//
{ { MESSAGING_DEVICE_PATH, MSG_USB_DP, sizeof(USB_DEVICE_PATH), 0 }, 0x09, 0 },
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, sizeof(EFI_DEVICE_PATH_PROTOCOL), 0 },
//
// End of device paths
//
0
};
UsbLegacyModifiers->UsbIgnoreDevicesPtr = (UINT32)(UINTN)&UsbUnsupportDevicePaths;
return RETURN_MEDIA_CHANGED;
#else
return EFI_UNSUPPORTED;
#endif
//[-end-210920-BAIN000047-modify]//
}