From: "Ni, Ruiyu" <ruiyu.ni@intel.com>
To: "Zeng, Star" <star.zeng@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Wu, Hao A" <hao.a.wu@intel.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>
Subject: Re: [PATCH] MdeModulePkg/ConPlatform: Support short-form USB device path
Date: Wed, 2 May 2018 07:50:38 +0000 [thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D5BC84FC7@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <0C09AFA07DD0434D9E2A0C6AEB0483103BAE4192@shsmsx102.ccr.corp.intel.com>
Thanks/Ray
> -----Original Message-----
> From: Zeng, Star
> Sent: Thursday, April 26, 2018 3:05 PM
> To: Ni, Ruiyu <ruiyu.ni@intel.com>; edk2-devel@lists.01.org
> Cc: Wu, Hao A <hao.a.wu@intel.com>; Kinney, Michael D
> <michael.d.kinney@intel.com>; Zeng, Star <star.zeng@intel.com>
> Subject: RE: [PATCH] MdeModulePkg/ConPlatform: Support short-form USB
> device path
>
> Ray,
>
> Some minor comments below.
>
> 1. How MSG_USB_DP and HW_PCCARD_DP be handled? We see they are
> checked in original IsHotPlugDevice()?
Original implementation to always accept USB/PCCARD device as active console is wrong.
So these code is just removed.
>
> 2. gEfiUsbIoProtocolGuid needs be stated in ConPlatformDxe.inf?
Thanks. I will fix it.
>
> 3. The comment " If it is not a hot-plug device, append the device path to " in
> ConPlatformTextInDriverBindingStart()/ConPlatformTextOutDriverBindingSt
> art() needs be updated accordingly since IsHotPlugDevice() will be removed?
Thanks. I will fix it in v2 patch.
>
>
> Thanks,
> Star
> -----Original Message-----
> From: Ni, Ruiyu
> Sent: Wednesday, April 25, 2018 1:44 PM
> To: edk2-devel@lists.01.org
> Cc: Wu, Hao A <hao.a.wu@intel.com>; Kinney, Michael D
> <michael.d.kinney@intel.com>; Zeng, Star <star.zeng@intel.com>
> Subject: [PATCH] MdeModulePkg/ConPlatform: Support short-form USB
> device path
>
> Today's implementation does an exact device path match to check
> whether the device path of a console is in ConIn/ConOut/ErrOut.
> But that doesn't work for the USB keyboard.
> Because when a platform have multiple USB port, ConIn needs to
> carry all device paths corresponding to each port.
> Even worse, today's BDS core logic removes the device path from
> ConIn/ConOut/ErrOut when the connection to that device path fails.
> So if user switches the USB keyboard from one port to another across
> boot, the USB keyboard doesn't work in the second boot.
>
> ConPlatform driver solved this problem by adding the
> IsHotPlugDevice() function. So that for USB keyboard, ConPlatform
> doesn't care whether its device path is in ConIn or not.
> But the rule is too loose, and now causes platform BDS cannot control
> whether to enable USB keyboard as an active console.
>
> The patch changes ConPlatform to support USB short-form device path
> when checking whether the device path of a console is in
> ConIn/ConOut/ErrOut.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
> Cc: Hao A Wu <hao.a.wu@intel.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Star Zeng <star.zeng@intel.com>
> ---
> .../Universal/Console/ConPlatformDxe/ConPlatform.c | 526
> ++++++++++++++-------
> .../Universal/Console/ConPlatformDxe/ConPlatform.h | 20 +-
> 2 files changed, 353 insertions(+), 193 deletions(-)
>
> diff --git
> a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.c
> b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.c
> index 6b53e8ac74..a509d0e3a5 100644
> --- a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.c
> +++ b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.c
> @@ -2,7 +2,7 @@
> Console Platform DXE Driver, install Console Device Guids and update
> Console
> Environment Variables.
>
> -Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> 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
> @@ -270,58 +270,33 @@ ConPlatformTextInDriverBindingStart (
> }
>
> //
> - // Check the device path, if it is a hot plug device,
> - // do not put the device path into ConInDev, and install
> - // gEfiConsoleInDeviceGuid to the device handle directly.
> - // The policy is, make hot plug device plug in and play immediately.
> + // If it is not a hot-plug device, append the device path to the
> + // ConInDev environment variable
> //
> - if (IsHotPlugDevice (DevicePath)) {
> + ConPlatformUpdateDeviceVariable (
> + L"ConInDev",
> + DevicePath,
> + Append
> + );
> +
> + //
> + // If the device path is an instance in the ConIn environment variable,
> + // then install EfiConsoleInDeviceGuid onto ControllerHandle
> + //
> + if (IsInConInVariable) {
> gBS->InstallMultipleProtocolInterfaces (
> &ControllerHandle,
> &gEfiConsoleInDeviceGuid,
> NULL,
> NULL
> );
> - //
> - // Append the device path to ConInDev only if it is in ConIn variable.
> - //
> - if (IsInConInVariable) {
> - ConPlatformUpdateDeviceVariable (
> - L"ConInDev",
> - DevicePath,
> - Append
> - );
> - }
> } else {
> - //
> - // If it is not a hot-plug device, append the device path to the
> - // ConInDev environment variable
> - //
> - ConPlatformUpdateDeviceVariable (
> - L"ConInDev",
> - DevicePath,
> - Append
> - );
> -
> - //
> - // If the device path is an instance in the ConIn environment variable,
> - // then install EfiConsoleInDeviceGuid onto ControllerHandle
> - //
> - if (IsInConInVariable) {
> - gBS->InstallMultipleProtocolInterfaces (
> - &ControllerHandle,
> - &gEfiConsoleInDeviceGuid,
> - NULL,
> - NULL
> - );
> - } else {
> - gBS->CloseProtocol (
> - ControllerHandle,
> - &gEfiSimpleTextInProtocolGuid,
> - This->DriverBindingHandle,
> - ControllerHandle
> - );
> - }
> + gBS->CloseProtocol (
> + ControllerHandle,
> + &gEfiSimpleTextInProtocolGuid,
> + This->DriverBindingHandle,
> + ControllerHandle
> + );
> }
>
> return EFI_SUCCESS;
> @@ -416,95 +391,60 @@ ConPlatformTextOutDriverBindingStart (
> }
>
> //
> - // Check the device path, if it is a hot plug device,
> - // do not put the device path into ConOutDev and ErrOutDev,
> - // and install gEfiConsoleOutDeviceGuid to the device handle directly.
> - // The policy is, make hot plug device plug in and play immediately.
> + // If it is not a hot-plug device, append the device path to
> + // the ConOutDev and ErrOutDev environment variable.
> + // For GOP device path, append the sibling device path as well.
> + //
> + if (!ConPlatformUpdateGopCandidate (DevicePath)) {
> + ConPlatformUpdateDeviceVariable (
> + L"ConOutDev",
> + DevicePath,
> + Append
> + );
> + //
> + // Then append the device path to the ErrOutDev environment variable
> + //
> + ConPlatformUpdateDeviceVariable (
> + L"ErrOutDev",
> + DevicePath,
> + Append
> + );
> + }
> +
> + //
> + // If the device path is an instance in the ConOut environment variable,
> + // then install EfiConsoleOutDeviceGuid onto ControllerHandle
> + //
> + if (IsInConOutVariable) {
> + NeedClose = FALSE;
> + Status = gBS->InstallMultipleProtocolInterfaces (
> + &ControllerHandle,
> + &gEfiConsoleOutDeviceGuid,
> + NULL,
> + NULL
> + );
> + }
> + //
> + // If the device path is an instance in the ErrOut environment variable,
> + // then install EfiStandardErrorDeviceGuid onto ControllerHandle
> //
> - if (IsHotPlugDevice (DevicePath)) {
> + if (IsInErrOutVariable) {
> + NeedClose = FALSE;
> gBS->InstallMultipleProtocolInterfaces (
> &ControllerHandle,
> - &gEfiConsoleOutDeviceGuid,
> + &gEfiStandardErrorDeviceGuid,
> NULL,
> NULL
> );
> - //
> - // Append the device path to ConOutDev only if it is in ConOut variable.
> - //
> - if (IsInConOutVariable) {
> - ConPlatformUpdateDeviceVariable (
> - L"ConOutDev",
> - DevicePath,
> - Append
> - );
> - }
> - //
> - // Append the device path to ErrOutDev only if it is in ErrOut variable.
> - //
> - if (IsInErrOutVariable) {
> - ConPlatformUpdateDeviceVariable (
> - L"ErrOutDev",
> - DevicePath,
> - Append
> - );
> - }
> - } else {
> - //
> - // If it is not a hot-plug device, append the device path to
> - // the ConOutDev and ErrOutDev environment variable.
> - // For GOP device path, append the sibling device path as well.
> - //
> - if (!ConPlatformUpdateGopCandidate (DevicePath)) {
> - ConPlatformUpdateDeviceVariable (
> - L"ConOutDev",
> - DevicePath,
> - Append
> - );
> - //
> - // Then append the device path to the ErrOutDev environment variable
> - //
> - ConPlatformUpdateDeviceVariable (
> - L"ErrOutDev",
> - DevicePath,
> - Append
> - );
> - }
> -
> - //
> - // If the device path is an instance in the ConOut environment variable,
> - // then install EfiConsoleOutDeviceGuid onto ControllerHandle
> - //
> - if (IsInConOutVariable) {
> - NeedClose = FALSE;
> - Status = gBS->InstallMultipleProtocolInterfaces (
> - &ControllerHandle,
> - &gEfiConsoleOutDeviceGuid,
> - NULL,
> - NULL
> - );
> - }
> - //
> - // If the device path is an instance in the ErrOut environment variable,
> - // then install EfiStandardErrorDeviceGuid onto ControllerHandle
> - //
> - if (IsInErrOutVariable) {
> - NeedClose = FALSE;
> - gBS->InstallMultipleProtocolInterfaces (
> - &ControllerHandle,
> - &gEfiStandardErrorDeviceGuid,
> - NULL,
> - NULL
> - );
> - }
> + }
>
> - if (NeedClose) {
> - gBS->CloseProtocol (
> - ControllerHandle,
> - &gEfiSimpleTextOutProtocolGuid,
> - This->DriverBindingHandle,
> - ControllerHandle
> - );
> - }
> + if (NeedClose) {
> + gBS->CloseProtocol (
> + ControllerHandle,
> + &gEfiSimpleTextOutProtocolGuid,
> + This->DriverBindingHandle,
> + ControllerHandle
> + );
> }
>
> return EFI_SUCCESS;
> @@ -822,6 +762,288 @@ IsGopSibling (
> return (BOOLEAN) (CompareMem (Left, Right, (UINTN) NodeLeft - (UINTN)
> Left) == 0);
> }
>
> +/**
> + Check whether a USB device match the specified USB Class device path.
> This
> + function follows "Load Option Processing" behavior in UEFI specification.
> +
> + @param UsbIo USB I/O protocol associated with the USB device.
> + @param UsbClass The USB Class device path to match.
> +
> + @retval TRUE The USB device match the USB Class device path.
> + @retval FALSE The USB device does not match the USB Class device path.
> +
> +**/
> +BOOLEAN
> +MatchUsbClass (
> + IN EFI_USB_IO_PROTOCOL *UsbIo,
> + IN USB_CLASS_DEVICE_PATH *UsbClass
> + )
> +{
> + EFI_STATUS Status;
> + EFI_USB_DEVICE_DESCRIPTOR DevDesc;
> + EFI_USB_INTERFACE_DESCRIPTOR IfDesc;
> + UINT8 DeviceClass;
> + UINT8 DeviceSubClass;
> + UINT8 DeviceProtocol;
> +
> + if ((DevicePathType (UsbClass) != MESSAGING_DEVICE_PATH) ||
> + (DevicePathSubType (UsbClass) != MSG_USB_CLASS_DP)){
> + return FALSE;
> + }
> +
> + //
> + // Check Vendor Id and Product Id.
> + //
> + Status = UsbIo->UsbGetDeviceDescriptor (UsbIo, &DevDesc);
> + if (EFI_ERROR (Status)) {
> + return FALSE;
> + }
> +
> + if ((UsbClass->VendorId != 0xffff) &&
> + (UsbClass->VendorId != DevDesc.IdVendor)) {
> + return FALSE;
> + }
> +
> + if ((UsbClass->ProductId != 0xffff) &&
> + (UsbClass->ProductId != DevDesc.IdProduct)) {
> + return FALSE;
> + }
> +
> + DeviceClass = DevDesc.DeviceClass;
> + DeviceSubClass = DevDesc.DeviceSubClass;
> + DeviceProtocol = DevDesc.DeviceProtocol;
> + if (DeviceClass == 0) {
> + //
> + // If Class in Device Descriptor is set to 0, use the Class, SubClass and
> + // Protocol in Interface Descriptor instead.
> + //
> + Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &IfDesc);
> + if (EFI_ERROR (Status)) {
> + return FALSE;
> + }
> +
> + DeviceClass = IfDesc.InterfaceClass;
> + DeviceSubClass = IfDesc.InterfaceSubClass;
> + DeviceProtocol = IfDesc.InterfaceProtocol;
> + }
> +
> + //
> + // Check Class, SubClass and Protocol.
> + //
> + if ((UsbClass->DeviceClass != 0xff) &&
> + (UsbClass->DeviceClass != DeviceClass)) {
> + return FALSE;
> + }
> +
> + if ((UsbClass->DeviceSubClass != 0xff) &&
> + (UsbClass->DeviceSubClass != DeviceSubClass)) {
> + return FALSE;
> + }
> +
> + if ((UsbClass->DeviceProtocol != 0xff) &&
> + (UsbClass->DeviceProtocol != DeviceProtocol)) {
> + return FALSE;
> + }
> +
> + return TRUE;
> +}
> +
> +/**
> + Check whether a USB device match the specified USB WWID device path.
> This
> + function follows "Load Option Processing" behavior in UEFI specification.
> +
> + @param UsbIo USB I/O protocol associated with the USB device.
> + @param UsbWwid The USB WWID device path to match.
> +
> + @retval TRUE The USB device match the USB WWID device path.
> + @retval FALSE The USB device does not match the USB WWID device
> path.
> +
> +**/
> +BOOLEAN
> +MatchUsbWwid (
> + IN EFI_USB_IO_PROTOCOL *UsbIo,
> + IN USB_WWID_DEVICE_PATH *UsbWwid
> + )
> +{
> + EFI_STATUS Status;
> + EFI_USB_DEVICE_DESCRIPTOR DevDesc;
> + EFI_USB_INTERFACE_DESCRIPTOR IfDesc;
> + UINT16 *LangIdTable;
> + UINT16 TableSize;
> + UINT16 Index;
> + CHAR16 *CompareStr;
> + UINTN CompareLen;
> + CHAR16 *SerialNumberStr;
> + UINTN Length;
> +
> + if ((DevicePathType (UsbWwid) != MESSAGING_DEVICE_PATH) ||
> + (DevicePathSubType (UsbWwid) != MSG_USB_WWID_DP)) {
> + return FALSE;
> + }
> +
> + //
> + // Check Vendor Id and Product Id.
> + //
> + Status = UsbIo->UsbGetDeviceDescriptor (UsbIo, &DevDesc);
> + if (EFI_ERROR (Status)) {
> + return FALSE;
> + }
> + if ((DevDesc.IdVendor != UsbWwid->VendorId) ||
> + (DevDesc.IdProduct != UsbWwid->ProductId)) {
> + return FALSE;
> + }
> +
> + //
> + // Check Interface Number.
> + //
> + Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &IfDesc);
> + if (EFI_ERROR (Status)) {
> + return FALSE;
> + }
> + if (IfDesc.InterfaceNumber != UsbWwid->InterfaceNumber) {
> + return FALSE;
> + }
> +
> + //
> + // Check Serial Number.
> + //
> + if (DevDesc.StrSerialNumber == 0) {
> + return FALSE;
> + }
> +
> + //
> + // Get all supported languages.
> + //
> + TableSize = 0;
> + LangIdTable = NULL;
> + Status = UsbIo->UsbGetSupportedLanguages (UsbIo, &LangIdTable,
> &TableSize);
> + if (EFI_ERROR (Status) || (TableSize == 0) || (LangIdTable == NULL)) {
> + return FALSE;
> + }
> +
> + //
> + // Serial number in USB WWID device path is the last 64-or-less UTF-16
> characters.
> + //
> + CompareStr = (CHAR16 *) (UINTN) (UsbWwid + 1);
> + CompareLen = (DevicePathNodeLength (UsbWwid) - sizeof
> (USB_WWID_DEVICE_PATH)) / sizeof (CHAR16);
> + if (CompareStr[CompareLen - 1] == L'\0') {
> + CompareLen--;
> + }
> +
> + //
> + // Compare serial number in each supported language.
> + //
> + for (Index = 0; Index < TableSize / sizeof (UINT16); Index++) {
> + SerialNumberStr = NULL;
> + Status = UsbIo->UsbGetStringDescriptor (
> + UsbIo,
> + LangIdTable[Index],
> + DevDesc.StrSerialNumber,
> + &SerialNumberStr
> + );
> + if (EFI_ERROR (Status) || (SerialNumberStr == NULL)) {
> + continue;
> + }
> +
> + Length = StrLen (SerialNumberStr);
> + if ((Length >= CompareLen) &&
> + (CompareMem (SerialNumberStr + Length - CompareLen, CompareStr,
> CompareLen * sizeof (CHAR16)) == 0)) {
> + FreePool (SerialNumberStr);
> + return TRUE;
> + }
> +
> + FreePool (SerialNumberStr);
> + }
> +
> + return FALSE;
> +}
> +
> +/**
> + Compare whether a full console device path matches a USB shortform
> device path.
> +
> + @param[in] FullPath Full console device path.
> + @param[in] ShortformPath Short-form device path. Short-form device
> node may in the beginning or in the middle.
> +
> + @retval TRUE The full console device path matches the short-form device
> path.
> + @retval FALSE The full console device path doesn't match the short-form
> device path.
> +**/
> +BOOLEAN
> +MatchUsbShortformDevicePath (
> + IN EFI_DEVICE_PATH_PROTOCOL *FullPath,
> + IN EFI_DEVICE_PATH_PROTOCOL *ShortformPath
> + )
> +{
> + EFI_STATUS Status;
> + EFI_DEVICE_PATH_PROTOCOL *ShortformNode;
> + EFI_DEVICE_PATH_PROTOCOL *ShortformRemainingDevicePath;
> + UINTN ParentDevicePathSize;
> + EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
> + EFI_USB_IO_PROTOCOL *UsbIo;
> + EFI_HANDLE Handle;
> +
> + for ( ShortformNode = ShortformPath
> + ; !IsDevicePathEnd (ShortformNode)
> + ; ShortformNode = NextDevicePathNode (ShortformNode)
> + ) {
> + if ((DevicePathType (ShortformNode) == MESSAGING_DEVICE_PATH) &&
> + ((DevicePathSubType (ShortformNode) == MSG_USB_CLASS_DP) ||
> + (DevicePathSubType (ShortformNode) == MSG_USB_WWID_DP))
> + ) {
> + break;
> + }
> + }
> +
> + //
> + // Skip further compare when it's not a shortform device path.
> + //
> + if (IsDevicePathEnd (ShortformNode)) {
> + return FALSE;
> + }
> +
> + //
> + // Match the parent device path below USB layer when the ShortformPath
> doesn't start with short-form node.
> + //
> + ParentDevicePathSize = (UINTN) ShortformNode - (UINTN)
> ShortformPath;
> + ShortformRemainingDevicePath = NextDevicePathNode (ShortformNode);
> +
> + RemainingDevicePath = FullPath;
> + Status = gBS->LocateDevicePath (&gEfiUsbIoProtocolGuid,
> &RemainingDevicePath, &Handle);
> + if (EFI_ERROR (Status)) {
> + return FALSE;
> + }
> +
> + if (ParentDevicePathSize != 0) {
> + //
> + // Skip comparing the parent device path when ShortformPath begins
> with short-form node.
> + //
> + if ((ParentDevicePathSize != (UINTN) RemainingDevicePath - (UINTN)
> FullPath) ||
> + (CompareMem (FullPath, ShortformPath, ParentDevicePathSize) != 0))
> {
> + return FALSE;
> + }
> + }
> +
> + //
> + // Match the remaining device path above USB layer.
> + // For USB keyboard, the remaining device path above USB layer is END
> node.
> + //
> + if (CompareMem (RemainingDevicePath, ShortformRemainingDevicePath,
> GetDevicePathSize (RemainingDevicePath)) != 0) {
> + return FALSE;
> + }
> +
> + //
> + // Match the USB layer.
> + //
> + Status = gBS->HandleProtocol(
> + Handle,
> + &gEfiUsbIoProtocolGuid,
> + (VOID **) &UsbIo
> + );
> + ASSERT_EFI_ERROR (Status);
> +
> + return MatchUsbClass (UsbIo, (USB_CLASS_DEVICE_PATH
> *)ShortformNode) ||
> + MatchUsbWwid (UsbIo, (USB_WWID_DEVICE_PATH
> *)ShortformNode);
> +}
> +
> /**
> Function compares a device path data structure to that of all the nodes of a
> second device path instance.
> @@ -881,7 +1103,8 @@ ConPlatformMatchDevicePaths (
> // Search for the match of 'Single' in 'Multi'
> //
> while (DevicePathInst != NULL) {
> - if ((CompareMem (Single, DevicePathInst, Size) == 0) || IsGopSibling
> (Single, DevicePathInst)) {
> + if ((CompareMem (Single, DevicePathInst, Size) == 0) ||
> + IsGopSibling (Single, DevicePathInst) || MatchUsbShortformDevicePath
> (Single, DevicePathInst)) {
> if (!Delete) {
> //
> // If Delete is FALSE, return EFI_SUCCESS if Single is found in Multi.
> @@ -1029,53 +1252,6 @@ ConPlatformUpdateDeviceVariable (
> return Status;
> }
>
> -/**
> - Check if the device supports hot-plug through its device path.
> -
> - This function could be updated to check more types of Hot Plug devices.
> - Currently, it checks USB and PCCard device.
> -
> - @param DevicePath Pointer to device's device path.
> -
> - @retval TRUE The devcie is a hot-plug device
> - @retval FALSE The devcie is not a hot-plug device.
> -
> -**/
> -BOOLEAN
> -IsHotPlugDevice (
> - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
> - )
> -{
> - EFI_DEVICE_PATH_PROTOCOL *CheckDevicePath;
> -
> - CheckDevicePath = DevicePath;
> - while (!IsDevicePathEnd (CheckDevicePath)) {
> - //
> - // Check device whether is hot plug device or not throught Device Path
> - //
> - if ((DevicePathType (CheckDevicePath) == MESSAGING_DEVICE_PATH)
> &&
> - (DevicePathSubType (CheckDevicePath) == MSG_USB_DP ||
> - DevicePathSubType (CheckDevicePath) == MSG_USB_CLASS_DP ||
> - DevicePathSubType (CheckDevicePath) == MSG_USB_WWID_DP)) {
> - //
> - // If Device is USB device
> - //
> - return TRUE;
> - }
> - if ((DevicePathType (CheckDevicePath) == HARDWARE_DEVICE_PATH)
> &&
> - (DevicePathSubType (CheckDevicePath) == HW_PCCARD_DP)) {
> - //
> - // If Device is PCCard
> - //
> - return TRUE;
> - }
> -
> - CheckDevicePath = NextDevicePathNode (CheckDevicePath);
> - }
> -
> - return FALSE;
> -}
> -
> /**
> Update ConOutDev and ErrOutDev variables to add the device path of
> GOP controller itself and the sibling controllers.
> diff --git
> a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h
> b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h
> index 6d853c1360..28f882afeb 100644
> --- a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h
> +++ b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h
> @@ -1,7 +1,7 @@
> /** @file
> Header file for Console Platfrom DXE Driver.
>
> -Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> 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
> @@ -21,6 +21,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY
> KIND, EITHER EXPRESS OR IMPLIED.
> #include <Protocol/DevicePath.h>
> #include <Protocol/SimpleTextIn.h>
> #include <Protocol/PciIo.h>
> +#include <Protocol/UsbIo.h>
> #include <Protocol/GraphicsOutput.h>
>
> #include <Guid/GlobalVariable.h>
> @@ -294,23 +295,6 @@ ConPlatformUpdateDeviceVariable (
> IN CONPLATFORM_VAR_OPERATION Operation
> );
>
> -/**
> - Check if the device supports hot-plug through its device path.
> -
> - This function could be updated to check more types of Hot Plug devices.
> - Currently, it checks USB and PCCard device.
> -
> - @param DevicePath Pointer to device's device path.
> -
> - @retval TRUE The devcie is a hot-plug device
> - @retval FALSE The devcie is not a hot-plug device.
> -
> -**/
> -BOOLEAN
> -IsHotPlugDevice (
> - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
> - );
> -
> //
> // EFI Component Name Functions
> //
> --
> 2.16.1.windows.1
next prev parent reply other threads:[~2018-05-02 7:50 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-25 5:44 [PATCH] MdeModulePkg/ConPlatform: Support short-form USB device path Ruiyu Ni
2018-04-25 14:16 ` Laszlo Ersek
2018-04-26 6:52 ` Ni, Ruiyu
2018-04-26 7:04 ` Zeng, Star
2018-05-02 7:50 ` Ni, Ruiyu [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-09-10 10:05 Ruiyu Ni
2018-09-12 1:47 ` Zeng, Star
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=734D49CCEBEEF84792F5B80ED585239D5BC84FC7@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox