From 4986c56135200fb7de90b78c47ea47381bfda95f Mon Sep 17 00:00:00 2001 From: vanjeff Date: Tue, 24 Feb 2009 08:03:42 +0000 Subject: temporary roll back changing on gEfiHotPlugDevice. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7640 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Include/Protocol/HotPlugDevice.h | 24 ++++ MdeModulePkg/MdeModulePkg.dec | 2 + .../Universal/Console/ConPlatformDxe/ConPlatform.c | 159 +++++++++------------ .../Universal/Console/ConPlatformDxe/ConPlatform.h | 12 +- .../Console/ConPlatformDxe/ConPlatformDxe.inf | 1 + .../Universal/Console/TerminalDxe/Terminal.c | 106 +++++++------- .../Universal/Console/TerminalDxe/Terminal.h | 18 +-- .../Universal/Console/TerminalDxe/TerminalDxe.inf | 1 + 8 files changed, 157 insertions(+), 166 deletions(-) create mode 100644 MdeModulePkg/Include/Protocol/HotPlugDevice.h (limited to 'MdeModulePkg') diff --git a/MdeModulePkg/Include/Protocol/HotPlugDevice.h b/MdeModulePkg/Include/Protocol/HotPlugDevice.h new file mode 100644 index 0000000000..ae6ef46c93 --- /dev/null +++ b/MdeModulePkg/Include/Protocol/HotPlugDevice.h @@ -0,0 +1,24 @@ +/** @file + This guid is used to specify the device is the hot plug device. + If the device is the hot plug device, this guid as the protocol guid + will be installed into this device handle. + +Copyright (c) 2006 - 2008, 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. + +**/ + +#ifndef __HOT_PLUG_DEVICE_H__ +#define __HOT_PLUG_DEVICE_H__ + +#define HOT_PLUG_DEVICE_GUID \ + { 0x220ac432, 0x1d43, 0x49e5, {0xa7, 0x4f, 0x4c, 0x9d, 0xa6, 0x7a, 0xd2, 0x3b } } + +extern EFI_GUID gEfiHotPlugDeviceGuid; +#endif diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index 8b5866a5ae..c8fde3abdc 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -226,6 +226,8 @@ ## Protocol Guid specify the Simple TextIn Notify handle. ## Include/Protocol/SimpleTextInExNotify.h gSimpleTextInExNotifyGuid = { 0x856f2def, 0x4e93, 0x4d6b, { 0x94, 0xce, 0x1c, 0xfe, 0x47, 0x01, 0x3e, 0xa5 }} + ## Protocol Guid specify the device is the hot plug device. + gEfiHotPlugDeviceGuid = { 0x220AC432, 0x1D43, 0x49E5, { 0xA7, 0x4F, 0x4C, 0x9D, 0xA6, 0x7A, 0xD2, 0x3B }} [PcdsFeatureFlag.common] ## Indicate whether platform can support update capsule across a system reset diff --git a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.c b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.c index f6483ed1fd..f3aa4a4fb3 100644 --- a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.c +++ b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.c @@ -256,12 +256,12 @@ ConPlatformTextInDriverBindingStart ( return Status; } // - // Check the device path, if it is a hot plug device, + // Check the device handle, 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 (IsHotPlugDevice (DevicePath)) { + if (IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) { gBS->InstallMultipleProtocolInterfaces ( &ControllerHandle, &gEfiConsoleInDeviceGuid, @@ -373,12 +373,12 @@ ConPlatformTextOutDriverBindingStart ( return Status; } // - // Check the device path, if it is a hot plug device, + // Check the device handle, 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 (IsHotPlugDevice (DevicePath)) { + if (IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) { gBS->InstallMultipleProtocolInterfaces ( &ControllerHandle, &gEfiConsoleOutDeviceGuid, @@ -481,36 +481,32 @@ ConPlatformTextInDriverBindingStop ( EFI_STATUS Status; EFI_DEVICE_PATH_PROTOCOL *DevicePath; - // - // Get the Device Path Protocol firstly - // - Status = gBS->OpenProtocol ( - ControllerHandle, - &gEfiDevicePathProtocolGuid, - (VOID **) &DevicePath, - This->DriverBindingHandle, - ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - - if (EFI_ERROR (Status)) { - return Status; - } - // // If it is not a hot-plug device, first delete it from the ConInDev variable. // - if (!IsHotPlugDevice (DevicePath)) { - // - // Remove DevicePath from ConInDev + if (!IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) { // - ConPlatformUpdateDeviceVariable ( - L"ConInDev", - DevicePath, - DELETE - ); + // Get the Device Path Protocol so the environment variables can be updated + // + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiDevicePathProtocolGuid, + (VOID **) &DevicePath, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + if (!EFI_ERROR (Status)) { + // + // Remove DevicePath from ConInDev + // + ConPlatformUpdateDeviceVariable ( + L"ConInDev", + DevicePath, + DELETE + ); + } } - // // Uninstall the Console Device GUIDs from Controller Handle // @@ -560,41 +556,37 @@ ConPlatformTextOutDriverBindingStop ( EFI_STATUS Status; EFI_DEVICE_PATH_PROTOCOL *DevicePath; - // - // Get the Device Path Protocol firstly - // - Status = gBS->OpenProtocol ( - ControllerHandle, - &gEfiDevicePathProtocolGuid, - (VOID **) &DevicePath, - This->DriverBindingHandle, - ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - - if (EFI_ERROR (Status)) { - return Status; - } - // // If it is not a hot-plug device, first delete it from the ConOutDev and ErrOutDev variable. // - if (!IsHotPlugDevice (DevicePath)) { + if (!IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) { // - // Remove DevicePath from ConOutDev, and ErrOutDev + // Get the Device Path Protocol so the environment variables can be updated // - ConPlatformUpdateDeviceVariable ( - L"ConOutDev", - DevicePath, - DELETE - ); - ConPlatformUpdateDeviceVariable ( - L"ErrOutDev", - DevicePath, - DELETE - ); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiDevicePathProtocolGuid, + (VOID **) &DevicePath, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + if (!EFI_ERROR (Status)) { + // + // Remove DevicePath from ConOutDev, and ErrOutDev + // + ConPlatformUpdateDeviceVariable ( + L"ConOutDev", + DevicePath, + DELETE + ); + ConPlatformUpdateDeviceVariable ( + L"ErrOutDev", + DevicePath, + DELETE + ); + } } - // // Uninstall the Console Device GUIDs from Controller Handle // @@ -937,12 +929,10 @@ ConPlatformUpdateDeviceVariable ( } /** - 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. + Check if the device supports hot-plug. - @param DevicePath Pointer to device's device path. + @param DriverBindingHandle Protocol instance pointer. + @param ControllerHandle Handle of device to check. @retval TRUE The devcie is a hot-plug device @retval FALSE The devcie is not a hot-plug device. @@ -950,35 +940,26 @@ ConPlatformUpdateDeviceVariable ( **/ BOOLEAN IsHotPlugDevice ( - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath + EFI_HANDLE DriverBindingHandle, + EFI_HANDLE ControllerHandle ) { - EFI_DEVICE_PATH_PROTOCOL *CheckDevicePath; + EFI_STATUS Status; - 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); + // + // HotPlugDeviceGuid indicates ControllerHandle stands for a hot plug device. + // + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiHotPlugDeviceGuid, + NULL, + DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL + ); + if (EFI_ERROR (Status)) { + return FALSE; } - return FALSE; + return TRUE; } diff --git a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h index a47ad1ce30..f7883dce6c 100644 --- a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h +++ b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h @@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include @@ -292,12 +293,10 @@ ConPlatformUpdateDeviceVariable ( ); /** - Check if the device supports hot-plug through its device path. + Check if the device supports hot-plug. - 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. + @param DriverBindingHandle Protocol instance pointer. + @param ControllerHandle Handle of device to check. @retval TRUE The devcie is a hot-plug device @retval FALSE The devcie is not a hot-plug device. @@ -305,7 +304,8 @@ ConPlatformUpdateDeviceVariable ( **/ BOOLEAN IsHotPlugDevice ( - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath + EFI_HANDLE DriverBindingHandle, + EFI_HANDLE ControllerHandle ); // diff --git a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf index 892d051a1a..a96a6330a0 100644 --- a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf +++ b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf @@ -87,4 +87,5 @@ gEfiDevicePathProtocolGuid ## TO_START gEfiSimpleTextInProtocolGuid ## TO_START gEfiSimpleTextOutProtocolGuid ## TO_START + gEfiHotPlugDeviceGuid ## SOMETIMES_CONSUMES (Used to check if it's a hot-plug device) \ No newline at end of file diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c index 1da6d90677..92ec98a09f 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c @@ -300,12 +300,19 @@ TerminalDriverBindingStart ( if (EFI_ERROR (Status)) { goto Error; } - - if (IsHotPlugDevice (ParentDevicePath)) { - // - // if the serial device is a hot plug device, do not update the - // ConInDev, ConOutDev, and StdErrDev variables. - // + // + // if the serial device is a hot plug device, do not update the + // ConInDev, ConOutDev, and StdErrDev variables. + // + Status = gBS->OpenProtocol ( + Controller, + &gEfiHotPlugDeviceGuid, + NULL, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL + ); + if (EFI_ERROR (Status)) { TerminalUpdateConsoleDevVariable (L"ConInDev", ParentDevicePath); TerminalUpdateConsoleDevVariable (L"ConOutDev", ParentDevicePath); TerminalUpdateConsoleDevVariable (L"ErrOutDev", ParentDevicePath); @@ -620,7 +627,26 @@ TerminalDriverBindingStart ( if (EFI_ERROR (Status)) { goto Error; } - + // + // if the serial device is a hot plug device, attaches the HotPlugGuid + // onto the terminal device handle. + // + Status = gBS->OpenProtocol ( + Controller, + &gEfiHotPlugDeviceGuid, + NULL, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL + ); + if (!EFI_ERROR (Status)) { + Status = gBS->InstallMultipleProtocolInterfaces ( + &TerminalDevice->Handle, + &gEfiHotPlugDeviceGuid, + NULL, + NULL + ); + } // // Register the Parent-Child relationship via // EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER. @@ -860,6 +886,25 @@ TerminalDriverBindingStop ( FreeUnicodeStringTable (TerminalDevice->ControllerNameTable); } + Status = gBS->OpenProtocol ( + ChildHandleBuffer[Index], + &gEfiHotPlugDeviceGuid, + NULL, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL + ); + if (!EFI_ERROR (Status)) { + Status = gBS->UninstallMultipleProtocolInterfaces ( + ChildHandleBuffer[Index], + &gEfiHotPlugDeviceGuid, + NULL, + NULL + ); + } else { + Status = EFI_SUCCESS; + } + gBS->CloseEvent (TerminalDevice->TwoSecondTimeOut); gBS->CloseEvent (TerminalDevice->SimpleInput.WaitForKey); gBS->CloseEvent (TerminalDevice->SimpleInputEx.WaitForKeyEx); @@ -1277,50 +1322,3 @@ InitializeTerminal( 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; -} diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h index 7327da003a..af3afecd15 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h @@ -22,6 +22,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include +#include #include #include #include @@ -1346,21 +1347,4 @@ TerminalIsValidEfiCntlChar ( IN CHAR16 CharC ); -/** - 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 - ); - #endif diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf index 1d849c698b..204ca6040b 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf @@ -73,6 +73,7 @@ gEfiSimpleTextInputExProtocolGuid ## BY_START gEfiSimpleTextOutProtocolGuid ## BY_START gSimpleTextInExNotifyGuid ## SOMETIMES_CONSUMES + gEfiHotPlugDeviceGuid ## SOMETIMES_CONSUMES [Pcd] gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueRemoteConsoleError -- cgit v1.2.3