/**@file\r
- PS/2 Keyboard driver\r
- Routines that support SIMPLE_TEXT_IN protocol\r
+ Routines implements SIMPLE_TEXT_IN protocol's interfaces based on 8042 interfaces\r
+ provided by Ps2KbdCtrller.c.\r
\r
Copyright (c) 2006 - 2007, Intel Corporation\r
All rights reserved. This program and the accompanying materials\r
\r
#include "Ps2Keyboard.h"\r
\r
-//\r
-// function declarations\r
-//\r
+/**\r
+ Check keyboard for given key value\r
+ \r
+ @param This Point to instance of EFI_SIMPLE_TEXT_INPUT_PROTOCOL\r
+ \r
+ @retval EFI_SUCCESS success check keyboard value\r
+ @retval !EFI_SUCCESS Fail to get char from keyboard\r
+**/\r
EFI_STATUS\r
-EFIAPI\r
-KeyboardEfiReset (\r
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
- IN BOOLEAN ExtendedVerification\r
- );\r
+KeyboardCheckForKey (\r
+ IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This\r
+ )\r
+{\r
+ KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;\r
\r
-EFI_STATUS\r
-EFIAPI\r
-KeyboardReadKeyStroke (\r
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
- OUT EFI_INPUT_KEY *Key\r
- );\r
+ ConsoleIn = KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);\r
\r
-VOID\r
-EFIAPI\r
-KeyboardWaitForKey (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- );\r
+ //\r
+ // If ready to read next key, check it\r
+ //\r
+ if (ConsoleIn->Key.ScanCode == SCAN_NULL && ConsoleIn->Key.UnicodeChar == 0x00) {\r
+ return KeyGetchar (ConsoleIn);\r
+ }\r
\r
-EFI_STATUS\r
-KeyboardCheckForKey (\r
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This\r
- );\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Judge whether is a registed key\r
\r
-STATIC\r
+ @param RegsiteredData A pointer to a buffer that is filled in with the keystroke \r
+ state data for the key that was registered.\r
+ @param InputData A pointer to a buffer that is filled in with the keystroke \r
+ state data for the key that was pressed.\r
+\r
+ @retval TRUE Key be pressed matches a registered key.\r
+ @retval FLASE Match failed. \r
+ \r
+**/\r
BOOLEAN\r
IsKeyRegistered (\r
IN EFI_KEY_DATA *RegsiteredData,\r
IN EFI_KEY_DATA *InputData\r
)\r
-/*++\r
\r
-Routine Description:\r
+{\r
+ ASSERT (RegsiteredData != NULL && InputData != NULL);\r
+ \r
+ if ((RegsiteredData->Key.ScanCode != InputData->Key.ScanCode) ||\r
+ (RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar)) {\r
+ return FALSE; \r
+ } \r
+ \r
+ //\r
+ // Assume KeyShiftState/KeyToggleState = 0 in Registered key data means these state could be ignored.\r
+ //\r
+ if (RegsiteredData->KeyState.KeyShiftState != 0 &&\r
+ RegsiteredData->KeyState.KeyShiftState != InputData->KeyState.KeyShiftState) {\r
+ return FALSE; \r
+ } \r
+ if (RegsiteredData->KeyState.KeyToggleState != 0 &&\r
+ RegsiteredData->KeyState.KeyToggleState != InputData->KeyState.KeyToggleState) {\r
+ return FALSE; \r
+ } \r
+ \r
+ return TRUE;\r
\r
-Arguments:\r
+}\r
\r
- RegsiteredData - A pointer to a buffer that is filled in with the keystroke \r
- state data for the key that was registered.\r
- InputData - A pointer to a buffer that is filled in with the keystroke \r
- state data for the key that was pressed.\r
+/**\r
+ Reads the next keystroke from the input device. The WaitForKey Event can \r
+ be used to test for existance of a keystroke via WaitForEvent () call.\r
+ \r
+ @param ConsoleInDev Ps2 Keyboard private structure\r
+ @param KeyData A pointer to a buffer that is filled in with the keystroke \r
+ state data for the key that was pressed.\r
\r
-Returns:\r
- TRUE - Key be pressed matches a registered key.\r
- FLASE - Match failed. \r
\r
---*/\r
-;\r
-STATIC\r
+ @retval EFI_SUCCESS The keystroke information was returned.\r
+ @retval EFI_NOT_READY There was no keystroke data availiable.\r
+ @retval EFI_DEVICE_ERROR The keystroke information was not returned due to \r
+ hardware errors.\r
+ @retval EFI_INVALID_PARAMETER KeyData is NULL. \r
+\r
+**/\r
EFI_STATUS\r
KeyboardReadKeyStrokeWorker (\r
IN KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev,\r
OUT EFI_KEY_DATA *KeyData\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Reads the next keystroke from the input device. The WaitForKey Event can \r
- be used to test for existance of a keystroke via WaitForEvent () call.\r
-\r
- Arguments:\r
- ConsoleInDev - Ps2 Keyboard private structure\r
- KeyData - A pointer to a buffer that is filled in with the keystroke \r
- state data for the key that was pressed.\r
\r
- Returns:\r
- EFI_SUCCESS - The keystroke information was returned.\r
- EFI_NOT_READY - There was no keystroke data availiable.\r
- EFI_DEVICE_ERROR - The keystroke information was not returned due to \r
- hardware errors.\r
- EFI_INVALID_PARAMETER - KeyData is NULL. \r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
EFI_TPL OldTpl;\r
LIST_ENTRY *Link;\r
KEYBOARD_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
EFI_KEY_DATA OriginalKeyData;\r
+ \r
if (KeyData == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
gBS->RestoreTPL (OldTpl);\r
return EFI_NOT_READY;\r
}\r
+ \r
CopyMem (&KeyData->Key, &ConsoleInDev->Key, sizeof (EFI_INPUT_KEY));\r
\r
ConsoleInDev->Key.ScanCode = SCAN_NULL; \r
if (ConsoleInDev->Ctrled) {\r
if (OriginalKeyData.Key.UnicodeChar >= 0x01 && OriginalKeyData.Key.UnicodeChar <= 0x1A) {\r
if (ConsoleInDev->CapsLock) {\r
- OriginalKeyData.Key.UnicodeChar = (CHAR16)(OriginalKeyData.Key.UnicodeChar + 'A' - 1);\r
+ OriginalKeyData.Key.UnicodeChar = (CHAR16)(OriginalKeyData.Key.UnicodeChar + L'A' - 1);\r
} else {\r
- OriginalKeyData.Key.UnicodeChar = (CHAR16)(OriginalKeyData.Key.UnicodeChar + 'a' - 1);\r
+ OriginalKeyData.Key.UnicodeChar = (CHAR16)(OriginalKeyData.Key.UnicodeChar + L'a' - 1);\r
} \r
}\r
}\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Perform 8042 controller and keyboard initialization which implement SIMPLE_TEXT_IN.Reset()\r
+\r
+ @param This Pointer to instance of EFI_SIMPLE_TEXT_INPUT_PROTOCOL\r
+ @param ExtendedVerification Indicate that the driver may perform a more \r
+ exhaustive verification operation of the device during \r
+ reset, now this par is ignored in this driver \r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
KeyboardEfiReset (\r
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
IN BOOLEAN ExtendedVerification\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Implement SIMPLE_TEXT_IN.Reset()\r
- Perform 8042 controller and keyboard initialization\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-// GC_TODO: This - add argument and description to function comment\r
-// GC_TODO: ExtendedVerification - add argument and description to function comment\r
-// GC_TODO: EFI_DEVICE_ERROR - add return value to function comment\r
-// GC_TODO: EFI_DEVICE_ERROR - add return value to function comment\r
-// GC_TODO: EFI_SUCCESS - add return value to function comment\r
{\r
EFI_STATUS Status;\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Retrieve key values for driver user which implement SIMPLE_TEXT_IN.ReadKeyStroke().\r
+\r
+ @param This Pointer to instance of EFI_SIMPLE_TEXT_INPUT_PROTOCOL\r
+ @param Key The output buffer for key value \r
+\r
+ @retval EFI_SUCCESS success to read key stroke\r
+**/\r
EFI_STATUS\r
EFIAPI\r
KeyboardReadKeyStroke (\r
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
OUT EFI_INPUT_KEY *Key\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Implement SIMPLE_TEXT_IN.ReadKeyStroke().\r
- Retrieve key values for driver user.\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-// GC_TODO: This - add argument and description to function comment\r
-// GC_TODO: Key - add argument and description to function comment\r
-// GC_TODO: EFI_DEVICE_ERROR - add return value to function comment\r
-// GC_TODO: EFI_NOT_READY - add return value to function comment\r
-// GC_TODO: EFI_SUCCESS - add return value to function comment\r
{\r
EFI_STATUS Status;\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;\r
\r
}\r
\r
+/**\r
+ Event notification function for SIMPLE_TEXT_IN.WaitForKey event\r
+ Signal the event if there is key available\r
+\r
+ @param Event the event object\r
+ @param Context waitting context\r
+\r
+**/\r
VOID\r
EFIAPI\r
KeyboardWaitForKey (\r
IN EFI_EVENT Event,\r
IN VOID *Context\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Event notification function for SIMPLE_TEXT_IN.WaitForKey event\r
- Signal the event if there is key available\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-// GC_TODO: Event - add argument and description to function comment\r
-// GC_TODO: Context - add argument and description to function comment\r
{\r
EFI_TPL OldTpl;\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;\r
return ;\r
}\r
\r
-EFI_STATUS\r
-KeyboardCheckForKey (\r
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
-\r
---*/\r
-{\r
- KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;\r
-\r
- ConsoleIn = KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);\r
-\r
- //\r
- // If ready to read next key, check it\r
- //\r
- if (ConsoleIn->Key.ScanCode == SCAN_NULL && ConsoleIn->Key.UnicodeChar == 0x00) {\r
- return KeyGetchar (ConsoleIn);\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-BOOLEAN\r
-IsKeyRegistered (\r
- IN EFI_KEY_DATA *RegsiteredData,\r
- IN EFI_KEY_DATA *InputData\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-Arguments:\r
-\r
- RegsiteredData - A pointer to a buffer that is filled in with the keystroke \r
- state data for the key that was registered.\r
- InputData - A pointer to a buffer that is filled in with the keystroke \r
- state data for the key that was pressed.\r
-\r
-Returns:\r
- TRUE - Key be pressed matches a registered key.\r
- FLASE - Match failed. \r
- \r
---*/\r
-{\r
- ASSERT (RegsiteredData != NULL && InputData != NULL);\r
- \r
- if ((RegsiteredData->Key.ScanCode != InputData->Key.ScanCode) ||\r
- (RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar)) {\r
- return FALSE; \r
- } \r
- \r
- //\r
- // Assume KeyShiftState/KeyToggleState = 0 in Registered key data means these state could be ignored.\r
- //\r
- if (RegsiteredData->KeyState.KeyShiftState != 0 &&\r
- RegsiteredData->KeyState.KeyShiftState != InputData->KeyState.KeyShiftState) {\r
- return FALSE; \r
- } \r
- if (RegsiteredData->KeyState.KeyToggleState != 0 &&\r
- RegsiteredData->KeyState.KeyToggleState != InputData->KeyState.KeyToggleState) {\r
- return FALSE; \r
- } \r
- \r
- return TRUE;\r
+/**\r
+ Event notification function for SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx event\r
+ Signal the event if there is key available\r
\r
-}\r
+ @param Event event object\r
+ @param Context waiting context\r
\r
+**/\r
VOID\r
EFIAPI\r
KeyboardWaitForKeyEx (\r
IN EFI_EVENT Event,\r
IN VOID *Context\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Event notification function for SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx event\r
- Signal the event if there is key available\r
\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
{\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;\r
\r
\r
}\r
\r
+/**\r
+ Reset the input device and optionaly run diagnostics\r
+\r
+ @param This Protocol instance pointer.\r
+ @param ExtendedVerification Driver may perform diagnostics on reset.\r
+\r
+ @retval EFI_SUCCESS The device was reset.\r
+ @retval EFI_DEVICE_ERROR The device is not functioning properly and could \r
+ not be reset.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
KeyboardEfiResetEx (\r
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
IN BOOLEAN ExtendedVerification\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Reset the input device and optionaly run diagnostics\r
\r
- Arguments:\r
- This - Protocol instance pointer.\r
- ExtendedVerification - Driver may perform diagnostics on reset.\r
-\r
- Returns:\r
- EFI_SUCCESS - The device was reset.\r
- EFI_DEVICE_ERROR - The device is not functioning properly and could \r
- not be reset.\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Reads the next keystroke from the input device. The WaitForKey Event can \r
+ be used to test for existance of a keystroke via WaitForEvent () call.\r
+\r
+\r
+ @param This Protocol instance pointer.\r
+ @param KeyData A pointer to a buffer that is filled in with the keystroke \r
+ state data for the key that was pressed.\r
+\r
+ @retval EFI_SUCCESS The keystroke information was returned.\r
+ @retval EFI_NOT_READY There was no keystroke data availiable.\r
+ @retval EFI_DEVICE_ERROR The keystroke information was not returned due to \r
+ hardware errors.\r
+ @retval EFI_INVALID_PARAMETER KeyData is NULL. \r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
KeyboardReadKeyStrokeEx (\r
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
OUT EFI_KEY_DATA *KeyData\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Reads the next keystroke from the input device. The WaitForKey Event can \r
- be used to test for existance of a keystroke via WaitForEvent () call.\r
-\r
- Arguments:\r
- This - Protocol instance pointer.\r
- KeyData - A pointer to a buffer that is filled in with the keystroke \r
- state data for the key that was pressed.\r
-\r
- Returns:\r
- EFI_SUCCESS - The keystroke information was returned.\r
- EFI_NOT_READY - There was no keystroke data availiable.\r
- EFI_DEVICE_ERROR - The keystroke information was not returned due to \r
- hardware errors.\r
- EFI_INVALID_PARAMETER - KeyData is NULL. \r
\r
---*/\r
{\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;\r
\r
\r
}\r
\r
+/**\r
+ Set certain state for the input device.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param KeyToggleState A pointer to the EFI_KEY_TOGGLE_STATE to set the \r
+ state for the input device.\r
+\r
+ @retval EFI_SUCCESS The device state was set successfully.\r
+ @retval EFI_DEVICE_ERROR The device is not functioning correctly and could \r
+ not have the setting adjusted.\r
+ @retval EFI_UNSUPPORTED The device does not have the ability to set its state.\r
+ @retval EFI_INVALID_PARAMETER KeyToggleState is NULL. \r
+\r
+**/ \r
EFI_STATUS\r
EFIAPI\r
KeyboardSetState (\r
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
IN EFI_KEY_TOGGLE_STATE *KeyToggleState\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Set certain state for the input device.\r
\r
- Arguments:\r
- This - Protocol instance pointer.\r
- KeyToggleState - A pointer to the EFI_KEY_TOGGLE_STATE to set the \r
- state for the input device.\r
-\r
- Returns:\r
- EFI_SUCCESS - The device state was set successfully.\r
- EFI_DEVICE_ERROR - The device is not functioning correctly and could \r
- not have the setting adjusted.\r
- EFI_UNSUPPORTED - The device does not have the ability to set its state.\r
- EFI_INVALID_PARAMETER - KeyToggleState is NULL. \r
-\r
---*/ \r
{\r
EFI_STATUS Status;\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;\r
return Status;\r
\r
}\r
+\r
+/**\r
+ Register a notification function for a particular keystroke for the input device.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param KeyData A pointer to a buffer that is filled in with the keystroke \r
+ information data for the key that was pressed.\r
+ @param KeyNotificationFunction Points to the function to be called when the key \r
+ sequence is typed specified by KeyData. \r
+ @param NotifyHandle Points to the unique handle assigned to the registered notification. \r
+\r
+ @retval EFI_SUCCESS The notification function was registered successfully.\r
+ @retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necesssary data structures.\r
+ @retval EFI_INVALID_PARAMETER KeyData or NotifyHandle or KeyNotificationFunction is NULL. \r
+ \r
+**/ \r
EFI_STATUS\r
EFIAPI\r
KeyboardRegisterKeyNotify (\r
IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction,\r
OUT EFI_HANDLE *NotifyHandle\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Register a notification function for a particular keystroke for the input device.\r
-\r
- Arguments:\r
- This - Protocol instance pointer.\r
- KeyData - A pointer to a buffer that is filled in with the keystroke \r
- information data for the key that was pressed.\r
- KeyNotificationFunction - Points to the function to be called when the key \r
- sequence is typed specified by KeyData. \r
- NotifyHandle - Points to the unique handle assigned to the registered notification. \r
-\r
- Returns:\r
- EFI_SUCCESS - The notification function was registered successfully.\r
- EFI_OUT_OF_RESOURCES - Unable to allocate resources for necesssary data structures.\r
- EFI_INVALID_PARAMETER - KeyData or NotifyHandle is NULL. \r
- \r
---*/ \r
{\r
EFI_STATUS Status;\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;\r
\r
NewNotify->Signature = KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE; \r
NewNotify->KeyNotificationFn = KeyNotificationFunction;\r
+ NewNotify->NotifyHandle = (EFI_HANDLE) NewNotify;\r
CopyMem (&NewNotify->KeyData, KeyData, sizeof (EFI_KEY_DATA));\r
InsertTailList (&ConsoleInDev->NotifyList, &NewNotify->NotifyEntry);\r
\r
- //\r
- // Use gSimpleTextInExNotifyGuid to get a valid EFI_HANDLE\r
- // \r
- Status = gBS->InstallMultipleProtocolInterfaces (\r
- &NewNotify->NotifyHandle,\r
- &gSimpleTextInExNotifyGuid,\r
- NULL,\r
- NULL\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
*NotifyHandle = NewNotify->NotifyHandle; \r
Status = EFI_SUCCESS;\r
\r
\r
}\r
\r
+/**\r
+ Remove a registered notification function from a particular keystroke.\r
+\r
+ @param This Protocol instance pointer. \r
+ @param NotificationHandle The handle of the notification function being unregistered.\r
+\r
+ \r
+ @retval EFI_SUCCESS The notification function was unregistered successfully.\r
+ @retval EFI_INVALID_PARAMETER The NotificationHandle is invalid.\r
+ \r
+**/ \r
EFI_STATUS\r
EFIAPI\r
KeyboardUnregisterKeyNotify (\r
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
IN EFI_HANDLE NotificationHandle\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Remove a registered notification function from a particular keystroke.\r
-\r
- Arguments:\r
- This - Protocol instance pointer. \r
- NotificationHandle - The handle of the notification function being unregistered.\r
-\r
- Returns:\r
- EFI_SUCCESS - The notification function was unregistered successfully.\r
- EFI_INVALID_PARAMETER - The NotificationHandle is invalid.\r
- EFI_NOT_FOUND - Can not find the matching entry in database. \r
- \r
---*/ \r
{\r
EFI_STATUS Status;\r
KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;\r
if (NotificationHandle == NULL) {\r
return EFI_INVALID_PARAMETER;\r
} \r
- \r
- Status = gBS->OpenProtocol (\r
- NotificationHandle,\r
- &gSimpleTextInExNotifyGuid,\r
- NULL,\r
- NULL,\r
- NULL,\r
- EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
\r
+ if (((KEYBOARD_CONSOLE_IN_EX_NOTIFY *) NotificationHandle)->Signature != KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE) {\r
+ return EFI_INVALID_PARAMETER;\r
+ } \r
+ \r
ConsoleInDev = TEXT_INPUT_EX_KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);\r
\r
//\r
// Remove the notification function from NotifyList and free resources\r
//\r
RemoveEntryList (&CurrentNotify->NotifyEntry); \r
- Status = gBS->UninstallMultipleProtocolInterfaces (\r
- CurrentNotify->NotifyHandle,\r
- &gSimpleTextInExNotifyGuid,\r
- NULL,\r
- NULL\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ \r
gBS->FreePool (CurrentNotify); \r
Status = EFI_SUCCESS;\r
goto Exit;\r
//\r
// Can not find the specified Notification Handle\r
//\r
- Status = EFI_NOT_FOUND;\r
+ Status = EFI_INVALID_PARAMETER;\r
Exit:\r
//\r
// Leave critical section and return\r