+++ /dev/null
-/** @file\r
- This guid is used to specify the device is the hot plug device.\r
- If the device is the hot plug device, this guid as the protocol guid\r
- will be installed into this device handle.\r
-\r
-Copyright (c) 2006 - 2008, 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
-**/\r
-\r
-#ifndef __HOT_PLUG_DEVICE_H__\r
-#define __HOT_PLUG_DEVICE_H__\r
-\r
-#define HOT_PLUG_DEVICE_GUID \\r
- { 0x220ac432, 0x1d43, 0x49e5, {0xa7, 0x4f, 0x4c, 0x9d, 0xa6, 0x7a, 0xd2, 0x3b } }\r
-\r
-extern EFI_GUID gEfiHotPlugDeviceGuid;\r
-#endif\r
## Include/Protocol/TcgPlatform.h\r
gEfiTcgPlatformProtocolGuid = { 0x8c4c9a41, 0xbf56, 0x4627, { 0x9e, 0xa, 0xc8, 0x38, 0x6d, 0x66, 0x11, 0x5c }}\r
\r
- ## Protocol Guid specify the device is the hot plug device.\r
- gEfiHotPlugDeviceGuid = { 0x220AC432, 0x1D43, 0x49E5, { 0xA7, 0x4F, 0x4C, 0x9D, 0xA6, 0x7A, 0xD2, 0x3B }}\r
-\r
[PcdsFeatureFlag.common]\r
## Indicate whether platform can support update capsule across a system reset\r
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE|BOOLEAN|0x0001001d\r
return Status;\r
}\r
//\r
- // Check the device handle, if it is a hot plug device,\r
+ // Check the device path, if it is a hot plug device,\r
// do not put the device path into ConInDev, and install\r
// gEfiConsoleInDeviceGuid to the device handle directly.\r
// The policy is, make hot plug device plug in and play immediately.\r
//\r
- if (IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) {\r
+ if (IsHotPlugDevice (DevicePath)) {\r
gBS->InstallMultipleProtocolInterfaces (\r
&ControllerHandle,\r
&gEfiConsoleInDeviceGuid,\r
return Status;\r
}\r
//\r
- // Check the device handle, if it is a hot plug device,\r
+ // Check the device path, if it is a hot plug device,\r
// do not put the device path into ConOutDev and ErrOutDev,\r
// and install gEfiConsoleOutDeviceGuid to the device handle directly.\r
// The policy is, make hot plug device plug in and play immediately.\r
//\r
- if (IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) {\r
+ if (IsHotPlugDevice (DevicePath)) {\r
gBS->InstallMultipleProtocolInterfaces (\r
&ControllerHandle,\r
&gEfiConsoleOutDeviceGuid,\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
\r
//\r
- // If it is not a hot-plug device, first delete it from the ConInDev variable.\r
+ // Get the Device Path Protocol firstly\r
//\r
- if (!IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) {\r
+ Status = gBS->OpenProtocol (\r
+ ControllerHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ (VOID **) &DevicePath,\r
+ This->DriverBindingHandle,\r
+ ControllerHandle,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+ //\r
+ // If there is device path on ControllerHandle\r
+ //\r
+ if (!EFI_ERROR (Status)) {\r
//\r
- // Get the Device Path Protocol so the environment variables can be updated\r
+ // If it is not a hot-plug device, first delete it from the ConInDev variable.\r
//\r
- Status = gBS->OpenProtocol (\r
- ControllerHandle,\r
- &gEfiDevicePathProtocolGuid,\r
- (VOID **) &DevicePath,\r
- This->DriverBindingHandle,\r
- ControllerHandle,\r
- EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
- );\r
- if (!EFI_ERROR (Status)) {\r
+ if (!IsHotPlugDevice (DevicePath)) {\r
//\r
// Remove DevicePath from ConInDev\r
//\r
);\r
}\r
}\r
+\r
//\r
// Uninstall the Console Device GUIDs from Controller Handle\r
//\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
\r
//\r
- // If it is not a hot-plug device, first delete it from the ConOutDev and ErrOutDev variable.\r
+ // Get the Device Path Protocol firstly\r
//\r
- if (!IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) {\r
+ Status = gBS->OpenProtocol (\r
+ ControllerHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ (VOID **) &DevicePath,\r
+ This->DriverBindingHandle,\r
+ ControllerHandle,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
//\r
- // Get the Device Path Protocol so the environment variables can be updated\r
+ // If it is not a hot-plug device, first delete it from the ConOutDev and ErrOutDev variable.\r
//\r
- Status = gBS->OpenProtocol (\r
- ControllerHandle,\r
- &gEfiDevicePathProtocolGuid,\r
- (VOID **) &DevicePath,\r
- This->DriverBindingHandle,\r
- ControllerHandle,\r
- EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
- );\r
- if (!EFI_ERROR (Status)) {\r
+ if (!IsHotPlugDevice (DevicePath)) {\r
//\r
// Remove DevicePath from ConOutDev, and ErrOutDev\r
//\r
);\r
}\r
}\r
+\r
//\r
// Uninstall the Console Device GUIDs from Controller Handle\r
//\r
}\r
\r
/**\r
- Check if the device supports hot-plug.\r
+ Check if the device supports hot-plug through its device path.\r
+\r
+ This function could be updated to check more types of Hot Plug devices.\r
+ Currently, it checks USB and PCCard device.\r
\r
- @param DriverBindingHandle Protocol instance pointer.\r
- @param ControllerHandle Handle of device to check.\r
+ @param DevicePath Pointer to device's device path.\r
\r
@retval TRUE The devcie is a hot-plug device\r
@retval FALSE The devcie is not a hot-plug device.\r
**/\r
BOOLEAN\r
IsHotPlugDevice (\r
- EFI_HANDLE DriverBindingHandle,\r
- EFI_HANDLE ControllerHandle\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_DEVICE_PATH_PROTOCOL *CheckDevicePath;\r
\r
- //\r
- // HotPlugDeviceGuid indicates ControllerHandle stands for a hot plug device.\r
- //\r
- Status = gBS->OpenProtocol (\r
- ControllerHandle,\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
- DriverBindingHandle,\r
- ControllerHandle,\r
- EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return FALSE;\r
+ CheckDevicePath = DevicePath;\r
+ while (!IsDevicePathEnd (CheckDevicePath)) {\r
+ //\r
+ // Check device whether is hot plug device or not throught Device Path\r
+ // \r
+ if ((DevicePathType (CheckDevicePath) == MESSAGING_DEVICE_PATH) &&\r
+ (DevicePathSubType (CheckDevicePath) == MSG_USB_DP ||\r
+ DevicePathSubType (CheckDevicePath) == MSG_USB_CLASS_DP ||\r
+ DevicePathSubType (CheckDevicePath) == MSG_USB_WWID_DP)) {\r
+ //\r
+ // If Device is USB device\r
+ //\r
+ return TRUE;\r
+ }\r
+ if ((DevicePathType (CheckDevicePath) == HARDWARE_DEVICE_PATH) &&\r
+ (DevicePathSubType (CheckDevicePath) == HW_PCCARD_DP)) {\r
+ //\r
+ // If Device is PCCard\r
+ //\r
+ return TRUE;\r
+ }\r
+ \r
+ CheckDevicePath = NextDevicePathNode (CheckDevicePath);\r
}\r
\r
- return TRUE;\r
+ return FALSE;\r
}\r
+\r
#include <Protocol/SimpleTextOut.h>\r
#include <Protocol/DevicePath.h>\r
#include <Protocol/SimpleTextIn.h>\r
-#include <Protocol/HotPlugDevice.h>\r
\r
#include <Guid/GlobalVariable.h>\r
#include <Guid/ConsoleInDevice.h>\r
);\r
\r
/**\r
- Check if the device supports hot-plug.\r
+ Check if the device supports hot-plug through its device path.\r
\r
- @param DriverBindingHandle Protocol instance pointer.\r
- @param ControllerHandle Handle of device to check.\r
+ This function could be updated to check more types of Hot Plug devices.\r
+ Currently, it checks USB and PCCard device.\r
+\r
+ @param DevicePath Pointer to device's device path.\r
\r
@retval TRUE The devcie is a hot-plug device\r
@retval FALSE The devcie is not a hot-plug device.\r
**/\r
BOOLEAN\r
IsHotPlugDevice (\r
- EFI_HANDLE DriverBindingHandle,\r
- EFI_HANDLE ControllerHandle\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
);\r
\r
//\r
gEfiDevicePathProtocolGuid ## TO_START\r
gEfiSimpleTextInProtocolGuid ## TO_START\r
gEfiSimpleTextOutProtocolGuid ## TO_START\r
- gEfiHotPlugDeviceGuid ## SOMETIMES_CONSUMES (Used to check if it's a hot-plug device)\r
\ No newline at end of file
if (EFI_ERROR (Status)) {\r
goto Error;\r
}\r
- //\r
- // if the serial device is a hot plug device, do not update the\r
- // ConInDev, ConOutDev, and StdErrDev variables.\r
- //\r
- Status = gBS->OpenProtocol (\r
- Controller,\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
- This->DriverBindingHandle,\r
- Controller,\r
- EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
- );\r
- if (EFI_ERROR (Status)) {\r
+\r
+ if (IsHotPlugDevice (ParentDevicePath)) {\r
+ //\r
+ // if the serial device is a hot plug device, do not update the\r
+ // ConInDev, ConOutDev, and StdErrDev variables.\r
+ //\r
TerminalUpdateConsoleDevVariable (L"ConInDev", ParentDevicePath);\r
TerminalUpdateConsoleDevVariable (L"ConOutDev", ParentDevicePath);\r
TerminalUpdateConsoleDevVariable (L"ErrOutDev", ParentDevicePath);\r
if (EFI_ERROR (Status)) {\r
goto Error;\r
}\r
- //\r
- // if the serial device is a hot plug device, attaches the HotPlugGuid\r
- // onto the terminal device handle.\r
- //\r
- Status = gBS->OpenProtocol (\r
- Controller,\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
- This->DriverBindingHandle,\r
- Controller,\r
- EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- Status = gBS->InstallMultipleProtocolInterfaces (\r
- &TerminalDevice->Handle,\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
- NULL\r
- );\r
- }\r
+\r
//\r
// Register the Parent-Child relationship via\r
// EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.\r
FreeUnicodeStringTable (TerminalDevice->ControllerNameTable);\r
}\r
\r
- Status = gBS->OpenProtocol (\r
- ChildHandleBuffer[Index],\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
- This->DriverBindingHandle,\r
- Controller,\r
- EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- Status = gBS->UninstallMultipleProtocolInterfaces (\r
- ChildHandleBuffer[Index],\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
- NULL\r
- );\r
- } else {\r
- Status = EFI_SUCCESS;\r
- }\r
-\r
gBS->CloseEvent (TerminalDevice->TwoSecondTimeOut);\r
gBS->CloseEvent (TerminalDevice->SimpleInput.WaitForKey);\r
gBS->CloseEvent (TerminalDevice->SimpleInputEx.WaitForKeyEx);\r
\r
return Status;\r
}\r
+\r
+/**\r
+ Check if the device supports hot-plug through its device path.\r
+\r
+ This function could be updated to check more types of Hot Plug devices.\r
+ Currently, it checks USB and PCCard device.\r
+\r
+ @param DevicePath Pointer to device's device path.\r
+\r
+ @retval TRUE The devcie is a hot-plug device\r
+ @retval FALSE The devcie is not a hot-plug device.\r
+\r
+**/\r
+BOOLEAN\r
+IsHotPlugDevice (\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
+ )\r
+{\r
+ EFI_DEVICE_PATH_PROTOCOL *CheckDevicePath;\r
+\r
+ CheckDevicePath = DevicePath;\r
+ while (!IsDevicePathEnd (CheckDevicePath)) {\r
+ //\r
+ // Check device whether is hot plug device or not throught Device Path\r
+ // \r
+ if ((DevicePathType (CheckDevicePath) == MESSAGING_DEVICE_PATH) &&\r
+ (DevicePathSubType (CheckDevicePath) == MSG_USB_DP ||\r
+ DevicePathSubType (CheckDevicePath) == MSG_USB_CLASS_DP ||\r
+ DevicePathSubType (CheckDevicePath) == MSG_USB_WWID_DP)) {\r
+ //\r
+ // If Device is USB device\r
+ //\r
+ return TRUE;\r
+ }\r
+ if ((DevicePathType (CheckDevicePath) == HARDWARE_DEVICE_PATH) &&\r
+ (DevicePathSubType (CheckDevicePath) == HW_PCCARD_DP)) {\r
+ //\r
+ // If Device is PCCard\r
+ //\r
+ return TRUE;\r
+ }\r
+ \r
+ CheckDevicePath = NextDevicePathNode (CheckDevicePath);\r
+ }\r
+\r
+ return FALSE;\r
+}\r
+\r
#include <Guid/GlobalVariable.h>\r
#include <Guid/PcAnsi.h>\r
\r
-#include <Protocol/HotPlugDevice.h>\r
#include <Protocol/SimpleTextOut.h>\r
#include <Protocol/SerialIo.h>\r
#include <Protocol/DevicePath.h>\r
IN CHAR16 CharC\r
);\r
\r
+/**\r
+ Check if the device supports hot-plug through its device path.\r
+\r
+ This function could be updated to check more types of Hot Plug devices.\r
+ Currently, it checks USB and PCCard device.\r
+\r
+ @param DevicePath Pointer to device's device path.\r
+\r
+ @retval TRUE The devcie is a hot-plug device\r
+ @retval FALSE The devcie is not a hot-plug device.\r
+\r
+**/\r
+BOOLEAN\r
+IsHotPlugDevice (\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
+ );\r
+\r
#endif\r
gEfiSimpleTextInProtocolGuid ## BY_START\r
gEfiSimpleTextInputExProtocolGuid ## BY_START\r
gEfiSimpleTextOutProtocolGuid ## BY_START\r
- gEfiHotPlugDeviceGuid ## SOMETIMES_CONSUMES\r
\r
[Pcd]\r
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueRemoteConsoleError\r