mirror of https://github.com/acidanthera/audk.git
Code Scrub for UsbKbDxe module.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7028 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
619c3f0826
commit
b4e73a6373
|
@ -1,6 +1,5 @@
|
|||
/** @file
|
||||
|
||||
UEFI Component Name(2) protocol implementation for Usb Keyboard driver.
|
||||
UEFI Component Name(2) protocol implementation for USB Keyboard driver.
|
||||
|
||||
Copyright (c) 2004 - 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
|
@ -16,136 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
|
||||
#include "KeyBoard.h"
|
||||
|
||||
//
|
||||
// EFI Component Name Functions
|
||||
//
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
This function retrieves the user readable name of a driver in the form of a
|
||||
Unicode string. If the driver specified by This has a user readable name in
|
||||
the language specified by Language, then a pointer to the driver name is
|
||||
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
|
||||
by This does not support the language specified by Language,
|
||||
then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified
|
||||
in RFC 3066 or ISO 639-2 language code format.
|
||||
|
||||
@param DriverName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
driver specified by This in the language
|
||||
specified by Language.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the Driver specified by
|
||||
This and the language specified by Language was
|
||||
returned in DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER DriverName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UsbKeyboardComponentNameGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
|
||||
This function retrieves the user readable name of the controller specified by
|
||||
ControllerHandle and ChildHandle in the form of a Unicode string. If the
|
||||
driver specified by This has a user readable name in the language specified by
|
||||
Language, then a pointer to the controller name is returned in ControllerName,
|
||||
and EFI_SUCCESS is returned. If the driver specified by This is not currently
|
||||
managing the controller specified by ControllerHandle and ChildHandle,
|
||||
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
|
||||
support the language specified by Language, then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param ControllerHandle[in] The handle of a controller that the driver
|
||||
specified by This is managing. This handle
|
||||
specifies the controller whose name is to be
|
||||
returned.
|
||||
|
||||
@param ChildHandle[in] The handle of the child controller to retrieve
|
||||
the name of. This is an optional parameter that
|
||||
may be NULL. It will be NULL for device
|
||||
drivers. It will also be NULL for a bus drivers
|
||||
that wish to retrieve the name of the bus
|
||||
controller. It will not be NULL for a bus
|
||||
driver that wishes to retrieve the name of a
|
||||
child controller.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified in
|
||||
RFC 3066 or ISO 639-2 language code format.
|
||||
|
||||
@param ControllerName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
controller specified by ControllerHandle and
|
||||
ChildHandle in the language specified by
|
||||
Language from the point of view of the driver
|
||||
specified by This.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the user readable name in
|
||||
the language specified by Language for the
|
||||
driver specified by This was returned in
|
||||
DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
|
||||
EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This is not currently
|
||||
managing the controller specified by
|
||||
ControllerHandle and ChildHandle.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UsbKeyboardComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// EFI Component Name Protocol
|
||||
//
|
||||
|
@ -170,7 +39,6 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mUsbKeyboardDriverNameTab
|
|||
{ NULL , NULL }
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
|
@ -181,10 +49,9 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mUsbKeyboardDriverNameTab
|
|||
by This does not support the language specified by Language,
|
||||
then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
@param This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
@param Language A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
|
@ -192,8 +59,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mUsbKeyboardDriverNameTab
|
|||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified
|
||||
in RFC 3066 or ISO 639-2 language code format.
|
||||
|
||||
@param DriverName[out] A pointer to the Unicode string to return.
|
||||
@param DriverName A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
driver specified by This in the language
|
||||
specified by Language.
|
||||
|
@ -201,11 +67,8 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mUsbKeyboardDriverNameTab
|
|||
@retval EFI_SUCCESS The Unicode string for the Driver specified by
|
||||
This and the language specified by Language was
|
||||
returned in DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER DriverName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
|
@ -240,15 +103,13 @@ UsbKeyboardComponentNameGetDriverName (
|
|||
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
|
||||
support the language specified by Language, then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
@param This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param ControllerHandle[in] The handle of a controller that the driver
|
||||
@param ControllerHandle The handle of a controller that the driver
|
||||
specified by This is managing. This handle
|
||||
specifies the controller whose name is to be
|
||||
returned.
|
||||
|
||||
@param ChildHandle[in] The handle of the child controller to retrieve
|
||||
@param ChildHandle The handle of the child controller to retrieve
|
||||
the name of. This is an optional parameter that
|
||||
may be NULL. It will be NULL for device
|
||||
drivers. It will also be NULL for a bus drivers
|
||||
|
@ -256,8 +117,7 @@ UsbKeyboardComponentNameGetDriverName (
|
|||
controller. It will not be NULL for a bus
|
||||
driver that wishes to retrieve the name of a
|
||||
child controller.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
@param Language A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
|
@ -265,8 +125,7 @@ UsbKeyboardComponentNameGetDriverName (
|
|||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified in
|
||||
RFC 3066 or ISO 639-2 language code format.
|
||||
|
||||
@param ControllerName[out] A pointer to the Unicode string to return.
|
||||
@param ControllerName A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
controller specified by ControllerHandle and
|
||||
ChildHandle in the language specified by
|
||||
|
@ -277,20 +136,14 @@ UsbKeyboardComponentNameGetDriverName (
|
|||
the language specified by Language for the
|
||||
driver specified by This was returned in
|
||||
DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
|
||||
EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This is not currently
|
||||
managing the controller specified by
|
||||
ControllerHandle and ChildHandle.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
|
@ -329,11 +182,11 @@ UsbKeyboardComponentNameGetControllerName (
|
|||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
gBS->CloseProtocol (
|
||||
ControllerHandle,
|
||||
&gEfiUsbIoProtocolGuid,
|
||||
gUsbKeyboardDriverBinding.DriverBindingHandle,
|
||||
ControllerHandle
|
||||
);
|
||||
ControllerHandle,
|
||||
&gEfiUsbIoProtocolGuid,
|
||||
gUsbKeyboardDriverBinding.DriverBindingHandle,
|
||||
ControllerHandle
|
||||
);
|
||||
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/** @file
|
||||
USB Keyboard Driver that includes the implementation of interface.
|
||||
USB Keyboard Driver that manages USB keyboard and produces Simple Text Input
|
||||
Protocol and Simple Text Input Ex Protocol.
|
||||
|
||||
Copyright (c) 2004 - 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
|
@ -99,8 +100,8 @@ USBKeyboardDriverBindingSupported (
|
|||
}
|
||||
|
||||
//
|
||||
// Use the USB I/O Protocol interface to check whether the Controller is
|
||||
// the Keyboard controller that can be managed by this driver.
|
||||
// Use the USB I/O Protocol interface to check whether Controller is
|
||||
// a keyboard device that can be managed by this driver.
|
||||
//
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
|
@ -119,7 +120,11 @@ USBKeyboardDriverBindingSupported (
|
|||
}
|
||||
|
||||
/**
|
||||
Start running driver on the controller.
|
||||
Starts the device with this driver.
|
||||
|
||||
This function produces Simple Text Input Protocol and Simple Text Input Ex Protocol,
|
||||
initializes the keyboard device, and submit Asynchronous Interrupt Transfer to manage
|
||||
this keyboard device.
|
||||
|
||||
@param This The USB keyboard driver binding instance.
|
||||
@param Controller Handle of device to bind driver to.
|
||||
|
@ -128,7 +133,7 @@ USBKeyboardDriverBindingSupported (
|
|||
|
||||
@retval EFI_SUCCESS The controller is controlled by the usb keyboard driver.
|
||||
@retval EFI_UNSUPPORTED No interrupt endpoint can be found.
|
||||
@retval Other The keyboard driver cannot support this controller.
|
||||
@retval Other This controller cannot be started.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -201,9 +206,6 @@ USBKeyboardDriverBindingStart (
|
|||
UsbKeyboardDevice->DevicePath
|
||||
);
|
||||
|
||||
//
|
||||
// Initialize UsbKeyboardDevice
|
||||
//
|
||||
UsbKeyboardDevice->UsbIo = UsbIo;
|
||||
|
||||
//
|
||||
|
@ -405,17 +407,18 @@ ErrorExit:
|
|||
|
||||
|
||||
/**
|
||||
Stop handling the controller by this USB keyboard driver.
|
||||
Stop the USB keyboard device handled by this driver.
|
||||
|
||||
@param This The USB keyboard driver binding protocol.
|
||||
@param Controller The controller to release.
|
||||
@param NumberOfChildren The number of handles in ChildHandleBuffer.
|
||||
@param ChildHandleBuffer The array of child handle.
|
||||
|
||||
@retval EFI_SUCCESS The controller or children are stopped.
|
||||
@retval EFI_SUCCESS The device was stopped.
|
||||
@retval EFI_UNSUPPORTED Simple Text In Protocol or Simple Text In Ex Protocol
|
||||
is not installed on Controller.
|
||||
@retval EFI_DEVICE_ERROR Failed to stop the driver.
|
||||
@retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
|
||||
@retval Others Fail to uninstall protocols attached on the device.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -454,9 +457,7 @@ USBKeyboardDriverBindingStop (
|
|||
if (EFI_ERROR (Status)) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
//
|
||||
// Get USB_KB_DEV instance.
|
||||
//
|
||||
|
||||
UsbKeyboardDevice = USB_KB_DEV_FROM_THIS (SimpleInput);
|
||||
|
||||
//
|
||||
|
@ -520,28 +521,29 @@ USBKeyboardDriverBindingStop (
|
|||
}
|
||||
|
||||
/**
|
||||
Internal function to read the next keystroke from the input device.
|
||||
Internal function to read the next keystroke from the keyboard buffer.
|
||||
|
||||
@param UsbKeyboardDevice Usb keyboard's private structure.
|
||||
@param KeyData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was pressed.
|
||||
@param UsbKeyboardDevice USB keyboard's private structure.
|
||||
@param KeyData A pointer to buffer to hold the keystroke
|
||||
data for the key that was pressed.
|
||||
|
||||
@return EFI_SUCCESS The keystroke information was returned.
|
||||
@return EFI_NOT_READY There was no keystroke data availiable.
|
||||
@return EFI_DEVICE_ERROR The keystroke information was not returned due to
|
||||
@retval EFI_SUCCESS The keystroke information was returned.
|
||||
@retval EFI_NOT_READY There was no keystroke data availiable.
|
||||
@retval EFI_DEVICE_ERROR The keystroke information was not returned due to
|
||||
hardware errors.
|
||||
@return EFI_INVALID_PARAMETER KeyData is NULL.
|
||||
@retval EFI_INVALID_PARAMETER KeyData is NULL.
|
||||
@retval Others Fail to translate keycode into EFI_INPUT_KEY
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
USBKeyboardReadKeyStrokeWorker (
|
||||
IN USB_KB_DEV *UsbKeyboardDevice,
|
||||
OUT EFI_KEY_DATA *KeyData
|
||||
IN OUT USB_KB_DEV *UsbKeyboardDevice,
|
||||
OUT EFI_KEY_DATA *KeyData
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 KeyChar;
|
||||
UINT8 KeyCode;
|
||||
LIST_ENTRY *Link;
|
||||
KEYBOARD_CONSOLE_IN_EX_NOTIFY *CurrentNotify;
|
||||
EFI_KEY_DATA OriginalKeyData;
|
||||
|
@ -551,10 +553,10 @@ USBKeyboardReadKeyStrokeWorker (
|
|||
}
|
||||
|
||||
//
|
||||
// If there is no saved ASCII byte, fetch it
|
||||
// If there is no saved USB keycode, fetch it
|
||||
// by calling USBKeyboardCheckForKey().
|
||||
//
|
||||
if (UsbKeyboardDevice->CurKeyChar == 0) {
|
||||
if (UsbKeyboardDevice->CurKeyCode == 0) {
|
||||
Status = USBKeyboardCheckForKey (UsbKeyboardDevice);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return EFI_NOT_READY;
|
||||
|
@ -565,15 +567,15 @@ USBKeyboardReadKeyStrokeWorker (
|
|||
KeyData->Key.ScanCode = SCAN_NULL;
|
||||
|
||||
//
|
||||
// Store the key char read by USBKeyboardCheckForKey() and clear it.
|
||||
// Store the current keycode and clear it.
|
||||
//
|
||||
KeyChar = UsbKeyboardDevice->CurKeyChar;
|
||||
UsbKeyboardDevice->CurKeyChar = 0;
|
||||
KeyCode = UsbKeyboardDevice->CurKeyCode;
|
||||
UsbKeyboardDevice->CurKeyCode = 0;
|
||||
|
||||
//
|
||||
// Translate saved ASCII byte into EFI_INPUT_KEY
|
||||
// Translate saved USB keycode into EFI_INPUT_KEY
|
||||
//
|
||||
Status = UsbKeyCodeToEfiInputKey (UsbKeyboardDevice, KeyChar, &KeyData->Key);
|
||||
Status = UsbKeyCodeToEfiInputKey (UsbKeyboardDevice, KeyCode, &KeyData->Key);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
@ -594,9 +596,9 @@ USBKeyboardReadKeyStrokeWorker (
|
|||
// here switch them back for notification function.
|
||||
//
|
||||
CopyMem (&OriginalKeyData, KeyData, sizeof (EFI_KEY_DATA));
|
||||
if (UsbKeyboardDevice->CtrlOn != 0) {
|
||||
if (UsbKeyboardDevice->CtrlOn) {
|
||||
if (OriginalKeyData.Key.UnicodeChar >= 0x01 && OriginalKeyData.Key.UnicodeChar <= 0x1A) {
|
||||
if (UsbKeyboardDevice->CapsOn != 0) {
|
||||
if (UsbKeyboardDevice->CapsOn) {
|
||||
OriginalKeyData.Key.UnicodeChar = (CHAR16)(OriginalKeyData.Key.UnicodeChar + 'A' - 1);
|
||||
} else {
|
||||
OriginalKeyData.Key.UnicodeChar = (CHAR16)(OriginalKeyData.Key.UnicodeChar + 'a' - 1);
|
||||
|
@ -617,24 +619,21 @@ USBKeyboardReadKeyStrokeWorker (
|
|||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
Reset USB Keyboard.
|
||||
Reset the input device and optionaly run diagnostics
|
||||
|
||||
There are 2 types of reset for USB keyboard.
|
||||
For non-exhaustive reset, only keyboard buffer is cleared.
|
||||
For exhaustive reset, in addition to clearance of keyboard buffer, the hardware status
|
||||
is also re-initialized.
|
||||
|
||||
@param This The protocol instance of EFI_SIMPLE_TEXT_INPUT_PROTOCOL.
|
||||
@param ExtendedVerification Indicates if exhaustive reset is used.
|
||||
TRUE for exhaustive reset.
|
||||
FALSE for non-exhaustive reset.
|
||||
@param This Protocol instance pointer.
|
||||
@param ExtendedVerification Driver may perform diagnostics on reset.
|
||||
|
||||
@retval EFI_SUCCESS Keyboard is reset successfully.
|
||||
@retval EFI_DEVICE_ERROR Failed to reset keyboard.
|
||||
@retval EFI_SUCCESS The device was reset.
|
||||
@retval EFI_DEVICE_ERROR The device is not functioning properly and could not be reset.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -669,7 +668,7 @@ USBKeyboardReset (
|
|||
// Clear the key buffer of this USB keyboard
|
||||
//
|
||||
InitUSBKeyBuffer (&(UsbKeyboardDevice->KeyboardBuffer));
|
||||
UsbKeyboardDevice->CurKeyChar = 0;
|
||||
UsbKeyboardDevice->CurKeyCode = 0;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
@ -678,7 +677,7 @@ USBKeyboardReset (
|
|||
// Exhaustive reset
|
||||
//
|
||||
Status = InitUSBKeyboard (UsbKeyboardDevice);
|
||||
UsbKeyboardDevice->CurKeyChar = 0;
|
||||
UsbKeyboardDevice->CurKeyCode = 0;
|
||||
if (EFI_ERROR (Status)) {
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
@ -688,14 +687,16 @@ USBKeyboardReset (
|
|||
|
||||
|
||||
/**
|
||||
Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke() function.
|
||||
Reads the next keystroke from the input device.
|
||||
|
||||
@param This The EFI_SIMPLE_TEXT_INPUT_PROTOCOL instance.
|
||||
@param Key A pointer to a buffer that is filled in with the keystroke
|
||||
information for the key that was pressed.
|
||||
|
||||
@retval EFI_SUCCESS Read key stroke successfully.
|
||||
@retval Other Read key stroke failed.
|
||||
@retval EFI_SUCCESS The keystroke information was returned.
|
||||
@retval EFI_NOT_READY There was no keystroke data availiable.
|
||||
@retval EFI_DEVICE_ERROR The keydtroke information was not returned due to
|
||||
hardware errors.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -719,12 +720,12 @@ USBKeyboardReadKeyStroke (
|
|||
CopyMem (Key, &KeyData.Key, sizeof (EFI_INPUT_KEY));
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Handler function for WaitForKey event.
|
||||
Event notification function registered for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx
|
||||
and EFI_SIMPLE_TEXT_INPUT_PROTOCOL.WaitForKey.
|
||||
|
||||
@param Event Event to be signaled when a key is pressed.
|
||||
@param Context Points to USB_KB_DEV instance.
|
||||
|
@ -741,7 +742,7 @@ USBKeyboardWaitForKey (
|
|||
|
||||
UsbKeyboardDevice = (USB_KB_DEV *) Context;
|
||||
|
||||
if (UsbKeyboardDevice->CurKeyChar == 0) {
|
||||
if (UsbKeyboardDevice->CurKeyCode == 0) {
|
||||
if (EFI_ERROR (USBKeyboardCheckForKey (UsbKeyboardDevice))) {
|
||||
//
|
||||
// If no pending key, simply return.
|
||||
|
@ -757,7 +758,7 @@ USBKeyboardWaitForKey (
|
|||
|
||||
|
||||
/**
|
||||
Check whether there is key pending.
|
||||
Check whether there is key pending in the keyboard buffer.
|
||||
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
|
||||
|
@ -768,53 +769,50 @@ USBKeyboardWaitForKey (
|
|||
EFI_STATUS
|
||||
EFIAPI
|
||||
USBKeyboardCheckForKey (
|
||||
IN USB_KB_DEV *UsbKeyboardDevice
|
||||
IN OUT USB_KB_DEV *UsbKeyboardDevice
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 KeyChar;
|
||||
UINT8 KeyCode;
|
||||
|
||||
//
|
||||
// Fetch raw data from the USB keyboard input,
|
||||
// and translate it into ASCII data.
|
||||
// Fetch raw data from the USB keyboard buffer,
|
||||
// and translate it into USB keycode.
|
||||
//
|
||||
Status = USBParseKey (UsbKeyboardDevice, &KeyChar);
|
||||
Status = USBParseKey (UsbKeyboardDevice, &KeyCode);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return EFI_NOT_READY;
|
||||
}
|
||||
|
||||
UsbKeyboardDevice->CurKeyChar = KeyChar;
|
||||
UsbKeyboardDevice->CurKeyCode = KeyCode;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Free keyboard notify list.
|
||||
|
||||
@param ListHead The list head.
|
||||
@param NotifyList The keyboard notify list to free.
|
||||
|
||||
@retval EFI_SUCCESS Free the notify list successfully.
|
||||
@retval EFI_INVALID_PARAMETER ListHead is invalid.
|
||||
@retval EFI_INVALID_PARAMETER NotifyList is NULL.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
KbdFreeNotifyList (
|
||||
IN OUT LIST_ENTRY *ListHead
|
||||
IN OUT LIST_ENTRY *NotifyList
|
||||
)
|
||||
{
|
||||
KEYBOARD_CONSOLE_IN_EX_NOTIFY *NotifyNode;
|
||||
LIST_ENTRY *Link;
|
||||
|
||||
if (ListHead == NULL) {
|
||||
if (NotifyList == NULL) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
while (!IsListEmpty (ListHead)) {
|
||||
NotifyNode = CR (
|
||||
ListHead->ForwardLink,
|
||||
KEYBOARD_CONSOLE_IN_EX_NOTIFY,
|
||||
NotifyEntry,
|
||||
USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE
|
||||
);
|
||||
RemoveEntryList (ListHead->ForwardLink);
|
||||
while (!IsListEmpty (NotifyList)) {
|
||||
Link = GetFirstNode (NotifyList);
|
||||
NotifyNode = CR (Link, KEYBOARD_CONSOLE_IN_EX_NOTIFY, NotifyEntry, USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE);
|
||||
RemoveEntryList (Link);
|
||||
gBS->FreePool (NotifyNode);
|
||||
}
|
||||
|
||||
|
@ -822,15 +820,13 @@ KbdFreeNotifyList (
|
|||
}
|
||||
|
||||
/**
|
||||
Whether the pressed key matches a registered key or not.
|
||||
Check whether the pressed key matches a registered key or not.
|
||||
|
||||
@param RegsiteredData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was registered.
|
||||
@param InputData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was pressed.
|
||||
@param RegsiteredData A pointer to keystroke data for the key that was registered.
|
||||
@param InputData A pointer to keystroke data for the key that was pressed.
|
||||
|
||||
@retval TRUE Key pressed matches a registered key.
|
||||
@retval FLASE Match failed.
|
||||
@retval FLASE Key pressed does not matche a registered key.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
|
@ -860,21 +856,31 @@ IsKeyRegistered (
|
|||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
// Simple Text Input Ex protocol functions
|
||||
//
|
||||
/**
|
||||
The extension routine to reset the input device.
|
||||
Resets the input device hardware.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ExtendedVerification Driver may perform diagnostics on reset.
|
||||
The Reset() function resets the input device hardware. As part
|
||||
of initialization process, the firmware/device will make a quick
|
||||
but reasonable attempt to verify that the device is functioning.
|
||||
If the ExtendedVerification flag is TRUE the firmware may take
|
||||
an extended amount of time to verify the device is operating on
|
||||
reset. Otherwise the reset operation is to occur as quickly as
|
||||
possible. The hardware verification process is not defined by
|
||||
this specification and is left up to the platform firmware or
|
||||
driver to implement.
|
||||
|
||||
@retval EFI_SUCCESS The device was reset.
|
||||
@retval EFI_DEVICE_ERROR The device is not functioning properly and could
|
||||
not be reset.
|
||||
@param This A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance.
|
||||
|
||||
@param ExtendedVerification Indicates that the driver may perform a more exhaustive
|
||||
verification operation of the device during reset.
|
||||
|
||||
@retval EFI_SUCCESS The device was reset.
|
||||
@retval EFI_DEVICE_ERROR The device is not functioning correctly and could not be reset.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -906,16 +912,17 @@ USBKeyboardResetEx (
|
|||
}
|
||||
|
||||
/**
|
||||
Reads the next keystroke from the input device. The WaitForKey Event can
|
||||
be used to test for existance of a keystroke via WaitForEvent () call.
|
||||
Reads the next keystroke from the input device.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param KeyData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was pressed.
|
||||
@param This Protocol instance pointer.
|
||||
@param KeyData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was pressed.
|
||||
|
||||
@return EFI_SUCCESS The keystroke information was returned successfully.
|
||||
@retval EFI_INVALID_PARAMETER KeyData is NULL.
|
||||
@retval Other Read key stroke information failed.
|
||||
@retval EFI_SUCCESS The keystroke information was returned.
|
||||
@retval EFI_NOT_READY There was no keystroke data available.
|
||||
@retval EFI_DEVICE_ERROR The keystroke information was not returned due to
|
||||
hardware errors.
|
||||
@retval EFI_INVALID_PARAMETER KeyData is NULL.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -944,8 +951,10 @@ USBKeyboardReadKeyStrokeEx (
|
|||
@param KeyToggleState A pointer to the EFI_KEY_TOGGLE_STATE to set the
|
||||
state for the input device.
|
||||
|
||||
@retval EFI_SUCCESS The device state was set successfully.
|
||||
@retval EFI_UNSUPPORTED The device does not have the ability to set its state.
|
||||
@retval EFI_SUCCESS The device state was set appropriately.
|
||||
@retval EFI_DEVICE_ERROR The device is not functioning correctly and could
|
||||
not have the setting adjusted.
|
||||
@retval EFI_UNSUPPORTED The device does not support the ability to have its state set.
|
||||
@retval EFI_INVALID_PARAMETER KeyToggleState is NULL.
|
||||
|
||||
**/
|
||||
|
@ -973,18 +982,18 @@ USBKeyboardSetState (
|
|||
// Update the status light
|
||||
//
|
||||
|
||||
UsbKeyboardDevice->ScrollOn = 0;
|
||||
UsbKeyboardDevice->NumLockOn = 0;
|
||||
UsbKeyboardDevice->CapsOn = 0;
|
||||
UsbKeyboardDevice->ScrollOn = FALSE;
|
||||
UsbKeyboardDevice->NumLockOn = FALSE;
|
||||
UsbKeyboardDevice->CapsOn = FALSE;
|
||||
|
||||
if ((*KeyToggleState & EFI_SCROLL_LOCK_ACTIVE) == EFI_SCROLL_LOCK_ACTIVE) {
|
||||
UsbKeyboardDevice->ScrollOn = 1;
|
||||
UsbKeyboardDevice->ScrollOn = TRUE;
|
||||
}
|
||||
if ((*KeyToggleState & EFI_NUM_LOCK_ACTIVE) == EFI_NUM_LOCK_ACTIVE) {
|
||||
UsbKeyboardDevice->NumLockOn = 1;
|
||||
UsbKeyboardDevice->NumLockOn = TRUE;
|
||||
}
|
||||
if ((*KeyToggleState & EFI_CAPS_LOCK_ACTIVE) == EFI_CAPS_LOCK_ACTIVE) {
|
||||
UsbKeyboardDevice->CapsOn = 1;
|
||||
UsbKeyboardDevice->CapsOn = TRUE;
|
||||
}
|
||||
|
||||
SetKeyLED (UsbKeyboardDevice);
|
||||
|
@ -1007,7 +1016,7 @@ USBKeyboardSetState (
|
|||
|
||||
@retval EFI_SUCCESS The notification function was registered successfully.
|
||||
@retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necesssary data structures.
|
||||
@retval EFI_INVALID_PARAMETER KeyData or NotifyHandle is NULL.
|
||||
@retval EFI_INVALID_PARAMETER KeyData or NotifyHandle or KeyNotificationFunction is NULL.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -1088,9 +1097,8 @@ USBKeyboardRegisterKeyNotify (
|
|||
@param NotificationHandle The handle of the notification function being unregistered.
|
||||
|
||||
@retval EFI_SUCCESS The notification function was unregistered successfully.
|
||||
@retval EFI_INVALID_PARAMETER The NotificationHandle is invalid or opening gSimpleTextInExNotifyGuid
|
||||
on NotificationHandle fails.
|
||||
@retval EFI_NOT_FOUND Can not find the matching entry in database.
|
||||
@retval EFI_INVALID_PARAMETER The NotificationHandle is invalid
|
||||
@retval EFI_NOT_FOUND Cannot find the matching entry in database.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
|
|
@ -54,8 +54,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#define REPORT_PROTOCOL 1
|
||||
|
||||
typedef struct {
|
||||
UINT8 Down;
|
||||
UINT8 KeyCode;
|
||||
BOOLEAN Down;
|
||||
UINT8 KeyCode;
|
||||
} USB_KEY;
|
||||
|
||||
typedef struct {
|
||||
|
@ -110,31 +110,31 @@ typedef struct {
|
|||
EFI_USB_ENDPOINT_DESCRIPTOR IntEndpointDescriptor;
|
||||
|
||||
USB_KB_BUFFER KeyboardBuffer;
|
||||
UINT8 CtrlOn;
|
||||
UINT8 AltOn;
|
||||
UINT8 ShiftOn;
|
||||
UINT8 NumLockOn;
|
||||
UINT8 CapsOn;
|
||||
UINT8 ScrollOn;
|
||||
BOOLEAN CtrlOn;
|
||||
BOOLEAN AltOn;
|
||||
BOOLEAN ShiftOn;
|
||||
BOOLEAN NumLockOn;
|
||||
BOOLEAN CapsOn;
|
||||
BOOLEAN ScrollOn;
|
||||
UINT8 LastKeyCodeArray[8];
|
||||
UINT8 CurKeyChar;
|
||||
UINT8 CurKeyCode;
|
||||
|
||||
UINT8 RepeatKey;
|
||||
EFI_EVENT RepeatTimer;
|
||||
|
||||
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
|
||||
|
||||
UINT8 LeftCtrlOn;
|
||||
UINT8 LeftAltOn;
|
||||
UINT8 LeftShiftOn;
|
||||
UINT8 LeftLogoOn;
|
||||
UINT8 RightCtrlOn;
|
||||
UINT8 RightAltOn;
|
||||
UINT8 RightShiftOn;
|
||||
UINT8 RightLogoOn;
|
||||
UINT8 MenuKeyOn;
|
||||
UINT8 SysReqOn;
|
||||
UINT8 AltGrOn;
|
||||
BOOLEAN LeftCtrlOn;
|
||||
BOOLEAN LeftAltOn;
|
||||
BOOLEAN LeftShiftOn;
|
||||
BOOLEAN LeftLogoOn;
|
||||
BOOLEAN RightCtrlOn;
|
||||
BOOLEAN RightAltOn;
|
||||
BOOLEAN RightShiftOn;
|
||||
BOOLEAN RightLogoOn;
|
||||
BOOLEAN MenuKeyOn;
|
||||
BOOLEAN SysReqOn;
|
||||
BOOLEAN AltGrOn;
|
||||
|
||||
EFI_KEY_STATE KeyState;
|
||||
//
|
||||
|
@ -164,24 +164,20 @@ extern EFI_GUID gSimpleTextInExNotifyGuid;
|
|||
#define TEXT_INPUT_EX_USB_KB_DEV_FROM_THIS(a) \
|
||||
CR(a, USB_KB_DEV, SimpleInputEx, USB_KB_DEV_SIGNATURE)
|
||||
|
||||
|
||||
#define MOD_CONTROL_L 0x01
|
||||
#define MOD_CONTROL_R 0x10
|
||||
#define MOD_SHIFT_L 0x02
|
||||
#define MOD_SHIFT_R 0x20
|
||||
#define MOD_ALT_L 0x04
|
||||
#define MOD_ALT_R 0x40
|
||||
#define MOD_WIN_L 0x08
|
||||
#define MOD_WIN_R 0x80
|
||||
|
||||
typedef struct {
|
||||
UINT8 Mask;
|
||||
UINT8 Key;
|
||||
} KB_MODIFIER;
|
||||
|
||||
#define USB_KEYCODE_MAX_MAKE 0x62
|
||||
|
||||
#define USBKBD_VALID_KEYCODE(key) ((UINT8) (key) > 3)
|
||||
//
|
||||
// According to Universal Serial Bus HID Usage Tables document ver 1.12,
|
||||
// a Boot Keyboard should support the keycode range from 0x0 to 0x65 and 0xE0 to 0xE7.
|
||||
// 0xE0 to 0xE7 are for modifier keys, and 0x0 to 0x3 are reserved for typical
|
||||
// keyboard status or keyboard errors.
|
||||
// So the number of valid non-modifier USB keycodes is 0x62, and the number of
|
||||
// valid keycodes is 0x6A.
|
||||
//
|
||||
#define NUMBER_OF_VALID_NON_MODIFIER_USB_KEYCODE 0x62
|
||||
#define NUMBER_OF_VALID_USB_KEYCODE 0x6A
|
||||
//
|
||||
// 0x0 to 0x3 are reserved for typical keyboard status or keyboard errors.
|
||||
//
|
||||
#define USBKBD_VALID_KEYCODE(Key) ((UINT8) (Key) > 3)
|
||||
|
||||
typedef struct {
|
||||
UINT8 NumLock : 1;
|
||||
|
@ -213,7 +209,11 @@ USBKeyboardDriverBindingSupported (
|
|||
);
|
||||
|
||||
/**
|
||||
Start running driver on the controller.
|
||||
Starts the device with this driver.
|
||||
|
||||
This function produces Simple Text Input Protocol and Simple Text Input Ex Protocol,
|
||||
initializes the keyboard device, and submit Asynchronous Interrupt Transfer to manage
|
||||
this keyboard device.
|
||||
|
||||
@param This The USB keyboard driver binding instance.
|
||||
@param Controller Handle of device to bind driver to.
|
||||
|
@ -222,7 +222,7 @@ USBKeyboardDriverBindingSupported (
|
|||
|
||||
@retval EFI_SUCCESS The controller is controlled by the usb keyboard driver.
|
||||
@retval EFI_UNSUPPORTED No interrupt endpoint can be found.
|
||||
@retval Other The keyboard driver cannot support this controller.
|
||||
@retval Other This controller cannot be started.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -234,17 +234,18 @@ USBKeyboardDriverBindingStart (
|
|||
);
|
||||
|
||||
/**
|
||||
Stop handling the controller by this USB keyboard driver.
|
||||
Stop the USB keyboard device handled by this driver.
|
||||
|
||||
@param This The USB keyboard driver binding protocol.
|
||||
@param Controller The controller to release.
|
||||
@param NumberOfChildren The number of handles in ChildHandleBuffer.
|
||||
@param ChildHandleBuffer The array of child handle.
|
||||
|
||||
@retval EFI_SUCCESS The controller or children are stopped.
|
||||
@retval EFI_SUCCESS The device was stopped.
|
||||
@retval EFI_UNSUPPORTED Simple Text In Protocol or Simple Text In Ex Protocol
|
||||
is not installed on Controller.
|
||||
@retval EFI_DEVICE_ERROR Failed to stop the driver.
|
||||
@retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
|
||||
@retval Others Fail to uninstall protocols attached on the device.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -256,24 +257,135 @@ USBKeyboardDriverBindingStop (
|
|||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
);
|
||||
|
||||
//
|
||||
// EFI Component Name Functions
|
||||
//
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
This function retrieves the user readable name of a driver in the form of a
|
||||
Unicode string. If the driver specified by This has a user readable name in
|
||||
the language specified by Language, then a pointer to the driver name is
|
||||
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
|
||||
by This does not support the language specified by Language,
|
||||
then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
@param Language A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified
|
||||
in RFC 3066 or ISO 639-2 language code format.
|
||||
@param DriverName A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
driver specified by This in the language
|
||||
specified by Language.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the Driver specified by
|
||||
This and the language specified by Language was
|
||||
returned in DriverName.
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
@retval EFI_INVALID_PARAMETER DriverName is NULL.
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UsbKeyboardComponentNameGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
);
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
|
||||
This function retrieves the user readable name of the controller specified by
|
||||
ControllerHandle and ChildHandle in the form of a Unicode string. If the
|
||||
driver specified by This has a user readable name in the language specified by
|
||||
Language, then a pointer to the controller name is returned in ControllerName,
|
||||
and EFI_SUCCESS is returned. If the driver specified by This is not currently
|
||||
managing the controller specified by ControllerHandle and ChildHandle,
|
||||
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
|
||||
support the language specified by Language, then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
@param ControllerHandle The handle of a controller that the driver
|
||||
specified by This is managing. This handle
|
||||
specifies the controller whose name is to be
|
||||
returned.
|
||||
@param ChildHandle The handle of the child controller to retrieve
|
||||
the name of. This is an optional parameter that
|
||||
may be NULL. It will be NULL for device
|
||||
drivers. It will also be NULL for a bus drivers
|
||||
that wish to retrieve the name of the bus
|
||||
controller. It will not be NULL for a bus
|
||||
driver that wishes to retrieve the name of a
|
||||
child controller.
|
||||
@param Language A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified in
|
||||
RFC 3066 or ISO 639-2 language code format.
|
||||
@param ControllerName A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
controller specified by ControllerHandle and
|
||||
ChildHandle in the language specified by
|
||||
Language from the point of view of the driver
|
||||
specified by This.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the user readable name in
|
||||
the language specified by Language for the
|
||||
driver specified by This was returned in
|
||||
DriverName.
|
||||
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
|
||||
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
|
||||
EFI_HANDLE.
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
|
||||
@retval EFI_UNSUPPORTED The driver specified by This is not currently
|
||||
managing the controller specified by
|
||||
ControllerHandle and ChildHandle.
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UsbKeyboardComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
);
|
||||
|
||||
//
|
||||
// Functions of Simple Text Input Protocol
|
||||
//
|
||||
/**
|
||||
Reset USB Keyboard.
|
||||
Reset the input device and optionaly run diagnostics
|
||||
|
||||
There are 2 types of reset for USB keyboard.
|
||||
For non-exhaustive reset, only keyboard buffer is cleared.
|
||||
For exhaustive reset, in addition to clearance of keyboard buffer, the hardware status
|
||||
is also re-initialized.
|
||||
|
||||
@param This The protocol instance of EFI_SIMPLE_TEXT_INPUT_PROTOCOL.
|
||||
@param ExtendedVerification Indicates if exhaustive reset is used.
|
||||
TRUE for exhaustive reset.
|
||||
FALSE for non-exhaustive reset.
|
||||
@param This Protocol instance pointer.
|
||||
@param ExtendedVerification Driver may perform diagnostics on reset.
|
||||
|
||||
@retval EFI_SUCCESS Keyboard is reset successfully.
|
||||
@retval EFI_DEVICE_ERROR Failed to reset keyboard.
|
||||
@retval EFI_SUCCESS The device was reset.
|
||||
@retval EFI_DEVICE_ERROR The device is not functioning properly and could not be reset.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -284,14 +396,16 @@ USBKeyboardReset (
|
|||
);
|
||||
|
||||
/**
|
||||
Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke() function.
|
||||
Reads the next keystroke from the input device.
|
||||
|
||||
@param This The EFI_SIMPLE_TEXT_INPUT_PROTOCOL instance.
|
||||
@param Key A pointer to a buffer that is filled in with the keystroke
|
||||
information for the key that was pressed.
|
||||
|
||||
@retval EFI_SUCCESS Read key stroke successfully.
|
||||
@retval Other Read key stroke failed.
|
||||
@retval EFI_SUCCESS The keystroke information was returned.
|
||||
@retval EFI_NOT_READY There was no keystroke data availiable.
|
||||
@retval EFI_DEVICE_ERROR The keydtroke information was not returned due to
|
||||
hardware errors.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -305,14 +419,25 @@ USBKeyboardReadKeyStroke (
|
|||
// Simple Text Input Ex protocol functions
|
||||
//
|
||||
/**
|
||||
The extension routine to reset the input device.
|
||||
Resets the input device hardware.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ExtendedVerification Driver may perform diagnostics on reset.
|
||||
The Reset() function resets the input device hardware. As part
|
||||
of initialization process, the firmware/device will make a quick
|
||||
but reasonable attempt to verify that the device is functioning.
|
||||
If the ExtendedVerification flag is TRUE the firmware may take
|
||||
an extended amount of time to verify the device is operating on
|
||||
reset. Otherwise the reset operation is to occur as quickly as
|
||||
possible. The hardware verification process is not defined by
|
||||
this specification and is left up to the platform firmware or
|
||||
driver to implement.
|
||||
|
||||
@retval EFI_SUCCESS The device was reset.
|
||||
@retval EFI_DEVICE_ERROR The device is not functioning properly and could
|
||||
not be reset.
|
||||
@param This A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance.
|
||||
|
||||
@param ExtendedVerification Indicates that the driver may perform a more exhaustive
|
||||
verification operation of the device during reset.
|
||||
|
||||
@retval EFI_SUCCESS The device was reset.
|
||||
@retval EFI_DEVICE_ERROR The device is not functioning correctly and could not be reset.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -323,16 +448,17 @@ USBKeyboardResetEx (
|
|||
);
|
||||
|
||||
/**
|
||||
Reads the next keystroke from the input device. The WaitForKey Event can
|
||||
be used to test for existance of a keystroke via WaitForEvent () call.
|
||||
Reads the next keystroke from the input device.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param KeyData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was pressed.
|
||||
@param This Protocol instance pointer.
|
||||
@param KeyData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was pressed.
|
||||
|
||||
@return EFI_SUCCESS The keystroke information was returned successfully.
|
||||
@retval EFI_INVALID_PARAMETER KeyData is NULL.
|
||||
@retval Other Read key stroke information failed.
|
||||
@retval EFI_SUCCESS The keystroke information was returned.
|
||||
@retval EFI_NOT_READY There was no keystroke data available.
|
||||
@retval EFI_DEVICE_ERROR The keystroke information was not returned due to
|
||||
hardware errors.
|
||||
@retval EFI_INVALID_PARAMETER KeyData is NULL.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -349,8 +475,10 @@ USBKeyboardReadKeyStrokeEx (
|
|||
@param KeyToggleState A pointer to the EFI_KEY_TOGGLE_STATE to set the
|
||||
state for the input device.
|
||||
|
||||
@retval EFI_SUCCESS The device state was set successfully.
|
||||
@retval EFI_UNSUPPORTED The device does not have the ability to set its state.
|
||||
@retval EFI_SUCCESS The device state was set appropriately.
|
||||
@retval EFI_DEVICE_ERROR The device is not functioning correctly and could
|
||||
not have the setting adjusted.
|
||||
@retval EFI_UNSUPPORTED The device does not support the ability to have its state set.
|
||||
@retval EFI_INVALID_PARAMETER KeyToggleState is NULL.
|
||||
|
||||
**/
|
||||
|
@ -373,7 +501,7 @@ USBKeyboardSetState (
|
|||
|
||||
@retval EFI_SUCCESS The notification function was registered successfully.
|
||||
@retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necesssary data structures.
|
||||
@retval EFI_INVALID_PARAMETER KeyData or NotifyHandle is NULL.
|
||||
@retval EFI_INVALID_PARAMETER KeyData or NotifyHandle or KeyNotificationFunction is NULL.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -392,9 +520,8 @@ USBKeyboardRegisterKeyNotify (
|
|||
@param NotificationHandle The handle of the notification function being unregistered.
|
||||
|
||||
@retval EFI_SUCCESS The notification function was unregistered successfully.
|
||||
@retval EFI_INVALID_PARAMETER The NotificationHandle is invalid or opening gSimpleTextInExNotifyGuid
|
||||
on NotificationHandle fails.
|
||||
@retval EFI_NOT_FOUND Can not find the matching entry in database.
|
||||
@retval EFI_INVALID_PARAMETER The NotificationHandle is invalid
|
||||
@retval EFI_NOT_FOUND Cannot find the matching entry in database.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -405,7 +532,8 @@ USBKeyboardUnregisterKeyNotify (
|
|||
);
|
||||
|
||||
/**
|
||||
Handler function for WaitForKey event.
|
||||
Event notification function registered for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx
|
||||
and EFI_SIMPLE_TEXT_INPUT_PROTOCOL.WaitForKey.
|
||||
|
||||
@param Event Event to be signaled when a key is pressed.
|
||||
@param Context Points to USB_KB_DEV instance.
|
||||
|
@ -421,20 +549,20 @@ USBKeyboardWaitForKey (
|
|||
/**
|
||||
Free keyboard notify list.
|
||||
|
||||
@param ListHead The list head.
|
||||
@param NotifyList The keyboard notify list to free.
|
||||
|
||||
@retval EFI_SUCCESS Free the notify list successfully.
|
||||
@retval EFI_INVALID_PARAMETER ListHead is invalid.
|
||||
@retval EFI_INVALID_PARAMETER NotifyList is NULL.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
KbdFreeNotifyList (
|
||||
IN OUT LIST_ENTRY *ListHead
|
||||
IN OUT LIST_ENTRY *NotifyList
|
||||
);
|
||||
|
||||
/**
|
||||
Check whether there is key pending.
|
||||
Check whether there is key pending in the keyboard buffer.
|
||||
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
|
||||
|
@ -445,19 +573,17 @@ KbdFreeNotifyList (
|
|||
EFI_STATUS
|
||||
EFIAPI
|
||||
USBKeyboardCheckForKey (
|
||||
IN USB_KB_DEV *UsbKeyboardDevice
|
||||
IN OUT USB_KB_DEV *UsbKeyboardDevice
|
||||
);
|
||||
|
||||
/**
|
||||
Whether the pressed key matches a registered key or not.
|
||||
Check whether the pressed key matches a registered key or not.
|
||||
|
||||
@param RegsiteredData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was registered.
|
||||
@param InputData A pointer to a buffer that is filled in with the keystroke
|
||||
state data for the key that was pressed.
|
||||
@param RegsiteredData A pointer to keystroke data for the key that was registered.
|
||||
@param InputData A pointer to keystroke data for the key that was pressed.
|
||||
|
||||
@retval TRUE Key pressed matches a registered key.
|
||||
@retval FLASE Match failed.
|
||||
@retval FLASE Key pressed does not matche a registered key.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -19,10 +19,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include "EfiKey.h"
|
||||
|
||||
/**
|
||||
Uses USB I/O to check whether the device is a USB Keyboard device.
|
||||
Uses USB I/O to check whether the device is a USB keyboard device.
|
||||
|
||||
@param UsbIo Points to a USB I/O protocol instance.
|
||||
@retval None
|
||||
@param UsbIo Pointer to a USB I/O protocol instance.
|
||||
|
||||
@retval TRUE Device is a USB keyboard device.
|
||||
@retval FALSE Device is a not USB keyboard device.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
|
@ -32,37 +34,43 @@ IsUSBKeyboard (
|
|||
);
|
||||
|
||||
/**
|
||||
Initialize USB Keyboard device and all private data structures.
|
||||
Initialize USB keyboard device and all private data structures.
|
||||
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
|
||||
@retval EFI_SUCCESS Initialization is successful.
|
||||
@retval EFI_DEVICE_ERROR Configure hardware failed.
|
||||
@retval EFI_DEVICE_ERROR Keyboard initialization failed.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InitUSBKeyboard (
|
||||
IN USB_KB_DEV *UsbKeyboardDevice
|
||||
IN OUT USB_KB_DEV *UsbKeyboardDevice
|
||||
);
|
||||
|
||||
/**
|
||||
Initialize USB Keyboard layout.
|
||||
Initialize USB keyboard layout.
|
||||
|
||||
This function initializes Key Convertion Table for the USB keyboard device.
|
||||
It first tries to retrieve layout from HII database. If failed and default
|
||||
layout is enabled, then it just uses the default layout.
|
||||
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
|
||||
@retval EFI_SUCCESS Initialization Success.
|
||||
@retval Other Keyboard layout initial failed.
|
||||
@retval EFI_SUCCESS Initialization succeeded.
|
||||
@retval EFI_NOT_READY Keyboard layout cannot be retrieve from HII
|
||||
database, and default layout is disabled.
|
||||
@retval Other Fail to register event to EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InitKeyboardLayout (
|
||||
IN USB_KB_DEV *UsbKeyboardDevice
|
||||
OUT USB_KB_DEV *UsbKeyboardDevice
|
||||
);
|
||||
|
||||
/**
|
||||
Destroy resources for Keyboard layout.
|
||||
Destroy resources for keyboard layout.
|
||||
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
|
||||
|
@ -70,11 +78,16 @@ InitKeyboardLayout (
|
|||
VOID
|
||||
EFIAPI
|
||||
ReleaseKeyboardLayoutResources (
|
||||
IN USB_KB_DEV *UsbKeyboardDevice
|
||||
IN OUT USB_KB_DEV *UsbKeyboardDevice
|
||||
);
|
||||
|
||||
/**
|
||||
Handler function for USB Keyboard's asynchronous interrupt transfer.
|
||||
Handler function for USB keyboard's asynchronous interrupt transfer.
|
||||
|
||||
This function is the handler function for USB keyboard's asynchronous interrupt transfer
|
||||
to manage the keyboard. It parses the USB keyboard input report, and inserts data to
|
||||
keyboard buffer according to state of modifer keys and normal keys. Timer for repeat key
|
||||
is also set accordingly.
|
||||
|
||||
@param Data A pointer to a buffer that is filled with key data which is
|
||||
retrieved via asynchronous interrupt transfer.
|
||||
|
@ -82,8 +95,8 @@ ReleaseKeyboardLayoutResources (
|
|||
@param Context Pointing to USB_KB_DEV instance.
|
||||
@param Result Indicates the result of the asynchronous interrupt transfer.
|
||||
|
||||
@retval EFI_SUCCESS Handler is successful.
|
||||
@retval EFI_DEVICE_ERROR Hardware Error
|
||||
@retval EFI_SUCCESS Asynchronous interrupt transfer is handled successfully.
|
||||
@retval EFI_DEVICE_ERROR Hardware error occurs.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
@ -96,12 +109,17 @@ KeyboardHandler (
|
|||
);
|
||||
|
||||
/**
|
||||
Timer handler for Delayed Recovery timer.
|
||||
Handler for Delayed Recovery event.
|
||||
|
||||
This function is the handler for Delayed Recovery event triggered
|
||||
by timer.
|
||||
After a device error occurs, the event would be triggered
|
||||
with interval of EFI_USB_INTERRUPT_DELAY. EFI_USB_INTERRUPT_DELAY
|
||||
is defined in USB standard for error handling.
|
||||
|
||||
@param Event The Delayed Recovery event.
|
||||
@param Context Points to the USB_KB_DEV instance.
|
||||
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
|
@ -111,62 +129,67 @@ USBKeyboardRecoveryHandler (
|
|||
);
|
||||
|
||||
/**
|
||||
Retrieves a key character after parsing the raw data in keyboard buffer.
|
||||
Retrieves a USB keycode after parsing the raw data in keyboard buffer.
|
||||
|
||||
This function parses keyboard buffer. It updates state of modifier key for
|
||||
USB_KB_DEV instancem, and returns keycode for output.
|
||||
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
@param KeyChar Points to the Key character after key parsing.
|
||||
@param KeyCode Pointer to the USB keycode for output.
|
||||
|
||||
@retval EFI_SUCCESS Parse key is successful.
|
||||
@retval EFI_NOT_READY Device is not ready.
|
||||
@retval EFI_SUCCESS Keycode successfully parsed.
|
||||
@retval EFI_NOT_READY Keyboard buffer is not ready for a valid keycode
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
USBParseKey (
|
||||
IN OUT USB_KB_DEV *UsbKeyboardDevice,
|
||||
OUT UINT8 *KeyChar
|
||||
OUT UINT8 *KeyCode
|
||||
);
|
||||
|
||||
/**
|
||||
Converts USB Keyboard code to EFI Scan Code.
|
||||
Converts USB Keycode ranging from 0x4 to 0x65 to EFI_INPUT_KEY.
|
||||
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
@param KeyChar Indicates the key code that will be interpreted.
|
||||
@param Key A pointer to a buffer that is filled in with
|
||||
the keystroke information for the key that
|
||||
was pressed.
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
@param KeyCode Indicates the key code that will be interpreted.
|
||||
@param Key A pointer to a buffer that is filled in with
|
||||
the keystroke information for the key that
|
||||
was pressed.
|
||||
|
||||
@retval EFI_NOT_READY Device is not ready
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_INVALID_PARAMETER KeyCode is not in the range of 0x4 to 0x65.
|
||||
@retval EFI_INVALID_PARAMETER Translated EFI_INPUT_KEY has zero for both ScanCode and UnicodeChar.
|
||||
@retval EFI_NOT_READY KeyCode represents a dead key with EFI_NS_KEY_MODIFIER
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UsbKeyCodeToEfiInputKey (
|
||||
IN USB_KB_DEV *UsbKeyboardDevice,
|
||||
IN UINT8 KeyChar,
|
||||
IN UINT8 KeyCode,
|
||||
OUT EFI_INPUT_KEY *Key
|
||||
);
|
||||
|
||||
/**
|
||||
Resets USB Keyboard Buffer.
|
||||
Resets USB keyboard buffer.
|
||||
|
||||
@param KeyboardBuffer Points to the USB Keyboard Buffer.
|
||||
@param KeyboardBuffer Points to the USB keyboard buffer.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
InitUSBKeyBuffer (
|
||||
IN OUT USB_KB_BUFFER *KeyboardBuffer
|
||||
OUT USB_KB_BUFFER *KeyboardBuffer
|
||||
);
|
||||
|
||||
/**
|
||||
Check whether USB Keyboard buffer is empty.
|
||||
Check whether USB keyboard buffer is empty.
|
||||
|
||||
@param KeyboardBuffer USB Keyboard Buffer.
|
||||
@param KeyboardBuffer USB keyboard buffer
|
||||
|
||||
@retval TRUE Key buffer is empty.
|
||||
@retval FALSE Key buffer is not empty.
|
||||
@retval TRUE Keyboard buffer is empty.
|
||||
@retval FALSE Keyboard buffer is not empty.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
|
@ -176,12 +199,12 @@ IsUSBKeyboardBufferEmpty (
|
|||
);
|
||||
|
||||
/**
|
||||
Check whether USB Keyboard buffer is full.
|
||||
Check whether USB keyboard buffer is full.
|
||||
|
||||
@param KeyboardBuffer USB Keyboard Buffer.
|
||||
@param KeyboardBuffer USB keyboard buffer
|
||||
|
||||
@retval TRUE Key buffer is full.
|
||||
@retval FALSE Key buffer is not full.
|
||||
@retval TRUE Keyboard buffer is full.
|
||||
@retval FALSE Keyboard buffer is not full.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
|
@ -191,11 +214,12 @@ IsUSBKeyboardBufferFull (
|
|||
);
|
||||
|
||||
/**
|
||||
Inserts a key code into keyboard buffer.
|
||||
Inserts a keycode into keyboard buffer.
|
||||
|
||||
@param KeyboardBuffer Points to the USB Keyboard Buffer.
|
||||
@param Key Key code
|
||||
@param Down Special key
|
||||
@param KeyboardBuffer Points to the USB keyboard buffer.
|
||||
@param Key Keycode to insert.
|
||||
@param Down TRUE means key is pressed.
|
||||
FALSE means key is released.
|
||||
|
||||
**/
|
||||
VOID
|
||||
|
@ -207,29 +231,34 @@ InsertKeyCode (
|
|||
);
|
||||
|
||||
/**
|
||||
Pops a key code off from keyboard buffer.
|
||||
Remove a keycode from keyboard buffer and return it.
|
||||
|
||||
@param KeyboardBuffer Points to the USB Keyboard Buffer.
|
||||
@param UsbKey Points to the buffer that contains a usb key code.
|
||||
@param KeyboardBuffer Points to the USB keyboard buffer.
|
||||
@param UsbKey Points to the buffer that contains keycode for output.
|
||||
|
||||
@retval EFI_SUCCESS Success
|
||||
@retval EFI_DEVICE_ERROR Hardware Error
|
||||
@retval EFI_SUCCESS Keycode successfully removed from keyboard buffer.
|
||||
@retval EFI_DEVICE_ERROR Keyboard buffer is empty.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RemoveKeyCode (
|
||||
IN OUT USB_KB_BUFFER *KeyboardBuffer,
|
||||
OUT USB_KEY *UsbKey
|
||||
OUT USB_KEY *UsbKey
|
||||
);
|
||||
|
||||
/**
|
||||
Timer handler for Repeat Key timer.
|
||||
Handler for Repeat Key event.
|
||||
|
||||
This function is the handler for Repeat Key event triggered
|
||||
by timer.
|
||||
After a repeatable key is pressed, the event would be triggered
|
||||
with interval of USBKBD_REPEAT_DELAY. Once the event is triggered,
|
||||
following trigger will come with interval of USBKBD_REPEAT_RATE.
|
||||
|
||||
@param Event The Repeat Key event.
|
||||
@param Context Points to the USB_KB_DEV instance.
|
||||
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
|
@ -239,7 +268,7 @@ USBKeyboardRepeatHandler (
|
|||
);
|
||||
|
||||
/**
|
||||
Sets USB Keyboard LED state.
|
||||
Sets USB keyboard LED state.
|
||||
|
||||
@param UsbKeyboardDevice The USB_KB_DEV instance.
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#/** @file
|
||||
# Component name for module UsbKb
|
||||
# USB Keyboard Driver that manages USB keyboard and produces Simple Text Input
|
||||
# Protocol and Simple Text Input Ex Protocol.
|
||||
#
|
||||
# FIX ME!
|
||||
# Copyright (c) 2006, Intel Corporation.
|
||||
# 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
|
||||
|
|
Loading…
Reference in New Issue