// Install Simple Text Input Protocol and Simple Text Input Ex Protocol\r
// for the USB keyboard device.\r
// USB keyboard is a hot plug device, and expected to work immediately\r
- // when plugging into system, so a HotPlugDeviceGuid is installed onto\r
- // the usb keyboard device handle, to distinguish it from other conventional\r
- // console devices.\r
+ // when plugging into system, other conventional console devices could\r
+ // distinguish it by its device path.\r
//\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&Controller,\r
&UsbKeyboardDevice->SimpleInput,\r
&gEfiSimpleTextInputExProtocolGuid,\r
&UsbKeyboardDevice->SimpleInputEx,\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
NULL\r
);\r
if (EFI_ERROR (Status)) {\r
&UsbKeyboardDevice->SimpleInput,\r
&gEfiSimpleTextInputExProtocolGuid,\r
&UsbKeyboardDevice->SimpleInputEx,\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
NULL\r
);\r
goto ErrorExit;\r
&UsbKeyboardDevice->SimpleInput,\r
&gEfiSimpleTextInputExProtocolGuid,\r
&UsbKeyboardDevice->SimpleInputEx,\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
NULL\r
);\r
goto ErrorExit;\r
&UsbKeyboardDevice->SimpleInput,\r
&gEfiSimpleTextInputExProtocolGuid,\r
&UsbKeyboardDevice->SimpleInputEx,\r
- &gEfiHotPlugDeviceGuid,\r
- NULL,\r
NULL\r
);\r
//\r
#include <Protocol/UsbIo.h>\r
#include <Protocol/DevicePath.h>\r
#include <Protocol/SimpleTextInExNotify.h>\r
-#include <Protocol/HotPlugDevice.h>\r
\r
#include <Guid/HiiKeyBoardLayout.h>\r
\r
gEfiDevicePathProtocolGuid ## TO_START\r
gEfiSimpleTextInProtocolGuid ## BY_START\r
gEfiSimpleTextInputExProtocolGuid ## BY_START\r
- gEfiHotPlugDeviceGuid ## BY_START\r
##\r
# If HII Database Protocol exists, then keyboard layout from HII database is used.\r
# Otherwise, USB keyboard module tries to use its carried default layout.\r
+++ /dev/null
-/** @file\r
- This protocol guid is used to specify the device is the hot plug device.\r
- If the device is the hot plug device, this 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/SimpleTextInExNotify.h\r
gSimpleTextInExNotifyGuid = { 0x856f2def, 0x4e93, 0x4d6b, { 0x94, 0xce, 0x1c, 0xfe, 0x47, 0x01, 0x3e, 0xa5 }} \r
\r
- ## Protocol Guid specify the device is the hot plug device.\r
- ## Include/Protocol/HotPlugDevice.h\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
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
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
)\r
{\r
- //\r
- // Check device whether is hot plug device or not throught Device Path\r
- // \r
- if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&\r
- (DevicePathSubType (DevicePath) == MSG_USB_DP ||\r
- DevicePathSubType (DevicePath) == MSG_USB_CLASS_DP ||\r
- DevicePathSubType (DevicePath) == MSG_USB_WWID_DP)) {\r
- //\r
- // If Device is USB device\r
- //\r
- return TRUE;\r
- }\r
- if ((DevicePathType (DevicePath) == HARDWARE_DEVICE_PATH) &&\r
- (DevicePathSubType (DevicePath) == HW_PCCARD_DP)) {\r
- //\r
- // If Device is PCCard\r
+ EFI_DEVICE_PATH_PROTOCOL *CheckDevicePath;\r
+\r
+ CheckDevicePath = DevicePath;\r
+ while (!IsDevicePathEnd (CheckDevicePath)) {\r
//\r
- return TRUE;\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
#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
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
#include <Guid/PcAnsi.h>\r
\r
#include <Protocol/SimpleTextInExNotify.h>\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
gEfiSimpleTextInputExProtocolGuid ## BY_START\r
gEfiSimpleTextOutProtocolGuid ## BY_START\r
gSimpleTextInExNotifyGuid ## SOMETIMES_CONSUMES\r
- gEfiHotPlugDeviceGuid ## SOMETIMES_CONSUMES\r
\r
[Pcd]\r
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueRemoteConsoleError\r