1bcecde140a561c64e297225904afebebd62336cejljusten/** @file 2bcecde140a561c64e297225904afebebd62336cejljusten 3402e4a9d777677296945afa020194bf4123885e2niruiyuCopyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> 4bcecde140a561c64e297225904afebebd62336cejljusten 5bcecde140a561c64e297225904afebebd62336cejljustenThis program and the accompanying materials 6bcecde140a561c64e297225904afebebd62336cejljustenare licensed and made available under the terms and conditions 7bcecde140a561c64e297225904afebebd62336cejljustenof the BSD License which accompanies this distribution. The 8bcecde140a561c64e297225904afebebd62336cejljustenfull text of the license may be found at 9bcecde140a561c64e297225904afebebd62336cejljustenhttp://opensource.org/licenses/bsd-license.php 10bcecde140a561c64e297225904afebebd62336cejljusten 11bcecde140a561c64e297225904afebebd62336cejljustenTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12bcecde140a561c64e297225904afebebd62336cejljustenWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13bcecde140a561c64e297225904afebebd62336cejljusten 14bcecde140a561c64e297225904afebebd62336cejljusten**/ 15bcecde140a561c64e297225904afebebd62336cejljusten 16bcecde140a561c64e297225904afebebd62336cejljusten#ifndef _BIOS_KEYBOARD_H_ 17bcecde140a561c64e297225904afebebd62336cejljusten#define _BIOS_KEYBOARD_H_ 18bcecde140a561c64e297225904afebebd62336cejljusten 19bcecde140a561c64e297225904afebebd62336cejljusten 20bcecde140a561c64e297225904afebebd62336cejljusten#include <FrameworkDxe.h> 21bcecde140a561c64e297225904afebebd62336cejljusten 22bcecde140a561c64e297225904afebebd62336cejljusten#include <Guid/StatusCodeDataTypeId.h> 23bcecde140a561c64e297225904afebebd62336cejljusten#include <Protocol/SimpleTextIn.h> 24bcecde140a561c64e297225904afebebd62336cejljusten#include <Protocol/SimpleTextInEx.h> 25bcecde140a561c64e297225904afebebd62336cejljusten#include <Protocol/LegacyBios.h> 26bcecde140a561c64e297225904afebebd62336cejljusten#include <Protocol/IsaIo.h> 27bcecde140a561c64e297225904afebebd62336cejljusten#include <Protocol/DevicePath.h> 28bcecde140a561c64e297225904afebebd62336cejljusten#include <Protocol/Ps2Policy.h> 29bcecde140a561c64e297225904afebebd62336cejljusten 30bcecde140a561c64e297225904afebebd62336cejljusten#include <Library/DebugLib.h> 31bcecde140a561c64e297225904afebebd62336cejljusten#include <Library/UefiLib.h> 32bcecde140a561c64e297225904afebebd62336cejljusten#include <Library/BaseMemoryLib.h> 33bcecde140a561c64e297225904afebebd62336cejljusten#include <Library/ReportStatusCodeLib.h> 34bcecde140a561c64e297225904afebebd62336cejljusten#include <Library/UefiDriverEntryPoint.h> 35bcecde140a561c64e297225904afebebd62336cejljusten#include <Library/UefiBootServicesTableLib.h> 36bcecde140a561c64e297225904afebebd62336cejljusten#include <Library/MemoryAllocationLib.h> 37bcecde140a561c64e297225904afebebd62336cejljusten#include <Library/BaseLib.h> 38f6c014fb14b19ebbccfb7725df28178e34602e05li-elvin#include <Library/PcdLib.h> 39bcecde140a561c64e297225904afebebd62336cejljusten 40bcecde140a561c64e297225904afebebd62336cejljusten// 41bcecde140a561c64e297225904afebebd62336cejljusten// Driver Binding Externs 42bcecde140a561c64e297225904afebebd62336cejljusten// 43bcecde140a561c64e297225904afebebd62336cejljustenextern EFI_DRIVER_BINDING_PROTOCOL gBiosKeyboardDriverBinding; 44bcecde140a561c64e297225904afebebd62336cejljustenextern EFI_COMPONENT_NAME_PROTOCOL gBiosKeyboardComponentName; 45bcecde140a561c64e297225904afebebd62336cejljustenextern EFI_COMPONENT_NAME2_PROTOCOL gBiosKeyboardComponentName2; 46bcecde140a561c64e297225904afebebd62336cejljusten 47bcecde140a561c64e297225904afebebd62336cejljusten 48bcecde140a561c64e297225904afebebd62336cejljusten#include <IndustryStandard/Pci.h> 49bcecde140a561c64e297225904afebebd62336cejljusten 50bcecde140a561c64e297225904afebebd62336cejljusten// 51bcecde140a561c64e297225904afebebd62336cejljusten// BISO Keyboard Defines 52bcecde140a561c64e297225904afebebd62336cejljusten// 53bcecde140a561c64e297225904afebebd62336cejljusten#define CHAR_SCANCODE 0xe0 54bcecde140a561c64e297225904afebebd62336cejljusten#define CHAR_ESC 0x1b 55bcecde140a561c64e297225904afebebd62336cejljusten 56bcecde140a561c64e297225904afebebd62336cejljusten#define KEYBOARD_8042_DATA_REGISTER 0x60 57bcecde140a561c64e297225904afebebd62336cejljusten#define KEYBOARD_8042_STATUS_REGISTER 0x64 58bcecde140a561c64e297225904afebebd62336cejljusten#define KEYBOARD_8042_COMMAND_REGISTER 0x64 59bcecde140a561c64e297225904afebebd62336cejljusten 60bcecde140a561c64e297225904afebebd62336cejljusten#define KEYBOARD_TIMEOUT 65536 // 0.07s 61bcecde140a561c64e297225904afebebd62336cejljusten#define KEYBOARD_WAITFORVALUE_TIMEOUT 1000000 // 1s 62bcecde140a561c64e297225904afebebd62336cejljusten#define KEYBOARD_BAT_TIMEOUT 4000000 // 4s 63bcecde140a561c64e297225904afebebd62336cejljusten#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s 64bcecde140a561c64e297225904afebebd62336cejljusten// KEYBOARD COMMAND BYTE -- read by writing command KBC_CMDREG_VIA64_CMDBYTE_R to 64H, then read from 60H 65bcecde140a561c64e297225904afebebd62336cejljusten// write by wrting command KBC_CMDREG_VIA64_CMDBYTE_W to 64H, then write to 60H 66bcecde140a561c64e297225904afebebd62336cejljusten// 7: Reserved 67bcecde140a561c64e297225904afebebd62336cejljusten// 6: PC/XT translation mode convert 68bcecde140a561c64e297225904afebebd62336cejljusten// 5: Disable Auxiliary device interface 69bcecde140a561c64e297225904afebebd62336cejljusten// 4: Disable keyboard interface 70bcecde140a561c64e297225904afebebd62336cejljusten// 3: Reserved 71bcecde140a561c64e297225904afebebd62336cejljusten// 2: System Flag: selftest successful 72bcecde140a561c64e297225904afebebd62336cejljusten// 1: Enable Auxiliary device interrupt 73bcecde140a561c64e297225904afebebd62336cejljusten// 0: Enable Keyboard interrupt ) 74bcecde140a561c64e297225904afebebd62336cejljusten// 75bcecde140a561c64e297225904afebebd62336cejljusten#define KB_CMMBYTE_KSCAN2UNI_COV (0x1 << 6) 76bcecde140a561c64e297225904afebebd62336cejljusten#define KB_CMMBYTE_DISABLE_AUX (0x1 << 5) 77bcecde140a561c64e297225904afebebd62336cejljusten#define KB_CMMBYTE_DISABLE_KB (0x1 << 4) 78bcecde140a561c64e297225904afebebd62336cejljusten#define KB_CMMBYTE_SLFTEST_SUCC (0x1 << 2) 79bcecde140a561c64e297225904afebebd62336cejljusten#define KB_CMMBYTE_ENABLE_AUXINT (0x1 << 1) 80bcecde140a561c64e297225904afebebd62336cejljusten#define KB_CMMBYTE_ENABLE_KBINT (0x1 << 0) 81bcecde140a561c64e297225904afebebd62336cejljusten 82bcecde140a561c64e297225904afebebd62336cejljusten// 83bcecde140a561c64e297225904afebebd62336cejljusten// KEYBOARD CONTROLLER STATUS REGISTER - read from 64h 84bcecde140a561c64e297225904afebebd62336cejljusten// 7: Parity error 85bcecde140a561c64e297225904afebebd62336cejljusten// 6: General time out 86bcecde140a561c64e297225904afebebd62336cejljusten// 5: Output buffer holds data for AUX 87bcecde140a561c64e297225904afebebd62336cejljusten// 4: Keyboard is not locked 88bcecde140a561c64e297225904afebebd62336cejljusten// 3: Command written via 64h / Data written via 60h 89bcecde140a561c64e297225904afebebd62336cejljusten// 2: KBC self-test successful / Power-on reset 90bcecde140a561c64e297225904afebebd62336cejljusten// 1: Input buffer holds CPU data / empty 91bcecde140a561c64e297225904afebebd62336cejljusten// 0: Output buffer holds keyboard data / empty 92bcecde140a561c64e297225904afebebd62336cejljusten// 93bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_STSREG_VIA64_PARE (0x1 << 7) 94bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_STSREG_VIA64_TIM (0x1 << 6) 95bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_STSREG_VIA64_AUXB (0x1 << 5) 96bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_STSREG_VIA64_KEYL (0x1 << 4) 97bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_STSREG_VIA64_C_D (0x1 << 3) 98bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_STSREG_VIA64_SYSF (0x1 << 2) 99bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_STSREG_VIA64_INPB (0x1 << 1) 100bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_STSREG_VIA64_OUTB (0x1 << 0) 101bcecde140a561c64e297225904afebebd62336cejljusten 102bcecde140a561c64e297225904afebebd62336cejljusten// 103bcecde140a561c64e297225904afebebd62336cejljusten// COMMANDs of KEYBOARD CONTROLLER COMMAND REGISTER - write to 64h 104bcecde140a561c64e297225904afebebd62336cejljusten// 105bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_CMDBYTE_R 0x20 106bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_CMDBYTE_W 0x60 107bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_AUX_DISABLE 0xA7 108bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_AUX_ENABLE 0xA8 109bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_KBC_SLFTEST 0xAA 110bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_KB_CKECK 0xAB 111bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_KB_DISABLE 0xAD 112bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_KB_ENABLE 0xAE 113bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_INTP_LOW_R 0xC0 114bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_INTP_HIGH_R 0xC2 115bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_OUTP_R 0xD0 116bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_OUTP_W 0xD1 117bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_OUTB_KB_W 0xD2 118bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_OUTB_AUX_W 0xD3 119bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDREG_VIA64_AUX_W 0xD4 120bcecde140a561c64e297225904afebebd62336cejljusten 121bcecde140a561c64e297225904afebebd62336cejljusten// 122bcecde140a561c64e297225904afebebd62336cejljusten// echos of KEYBOARD CONTROLLER COMMAND - read from 60h 123bcecde140a561c64e297225904afebebd62336cejljusten// 124bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDECHO_KBCSLFTEST_OK 0x55 125bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDECHO_KBCHECK_OK 0x00 126bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDECHO_ACK 0xFA 127bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDECHO_BATTEST_OK 0xAA 128bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_CMDECHO_BATTEST_FAILE 0xFC 129bcecde140a561c64e297225904afebebd62336cejljusten 130bcecde140a561c64e297225904afebebd62336cejljusten// 131bcecde140a561c64e297225904afebebd62336cejljusten// OUTPUT PORT COMMANDs - write port by writing KBC_CMDREG_VIA64_OUTP_W via 64H, then write the command to 60H 132bcecde140a561c64e297225904afebebd62336cejljusten// drive data and clock of KB to high for at least 500us for BAT needs 133bcecde140a561c64e297225904afebebd62336cejljusten// 134bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_OUTPORT_DCHIGH_BAT 0xC0 135bcecde140a561c64e297225904afebebd62336cejljusten// 136bcecde140a561c64e297225904afebebd62336cejljusten// scan code set type 137bcecde140a561c64e297225904afebebd62336cejljusten// 138bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_SCODESET1 0x01 139bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_SCODESET2 0x02 140bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_SCODESET3 0x03 141bcecde140a561c64e297225904afebebd62336cejljusten 142bcecde140a561c64e297225904afebebd62336cejljusten// 143bcecde140a561c64e297225904afebebd62336cejljusten// COMMANDs written to INPUT BUFFER - write to 60h 144bcecde140a561c64e297225904afebebd62336cejljusten// 145bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBECHO 0xEE 146bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBSCODE 0xF0 147bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBTYPE 0xF2 148bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBDELAY 0xF3 149bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBEN 0xF4 150bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBSTDDIS 0xF5 151bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBSTDEN 0xF6 152bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBRESEND 0xFE 153bcecde140a561c64e297225904afebebd62336cejljusten#define KBC_INPBUF_VIA60_KBRESET 0xFF 154bcecde140a561c64e297225904afebebd62336cejljusten 155bcecde140a561c64e297225904afebebd62336cejljusten// 156bcecde140a561c64e297225904afebebd62336cejljusten// 0040h:0017h - KEYBOARD - STATUS FLAGS 1 157bcecde140a561c64e297225904afebebd62336cejljusten// 7 INSert active 158bcecde140a561c64e297225904afebebd62336cejljusten// 6 Caps Lock active 159bcecde140a561c64e297225904afebebd62336cejljusten// 5 Num Lock active 160bcecde140a561c64e297225904afebebd62336cejljusten// 4 Scroll Lock active 161bcecde140a561c64e297225904afebebd62336cejljusten// 3 either Alt pressed 162bcecde140a561c64e297225904afebebd62336cejljusten// 2 either Ctrl pressed 163bcecde140a561c64e297225904afebebd62336cejljusten// 1 Left Shift pressed 164bcecde140a561c64e297225904afebebd62336cejljusten// 0 Right Shift pressed 165bcecde140a561c64e297225904afebebd62336cejljusten// 166bcecde140a561c64e297225904afebebd62336cejljusten// 0040h:0018h - KEYBOARD - STATUS FLAGS 2 167bcecde140a561c64e297225904afebebd62336cejljusten// 7: insert key is depressed 168bcecde140a561c64e297225904afebebd62336cejljusten// 6: caps-lock key is depressed (does not work well) 169bcecde140a561c64e297225904afebebd62336cejljusten// 5: num-lock key is depressed (does not work well) 170bcecde140a561c64e297225904afebebd62336cejljusten// 4: scroll lock key is depressed (does not work well) 171bcecde140a561c64e297225904afebebd62336cejljusten// 3: suspend key has been toggled (does not work well) 172bcecde140a561c64e297225904afebebd62336cejljusten// 2: system key is pressed and held (does not work well) 173bcecde140a561c64e297225904afebebd62336cejljusten// 1: left ALT key is pressed 174bcecde140a561c64e297225904afebebd62336cejljusten// 0: left CTRL key is pressed 175bcecde140a561c64e297225904afebebd62336cejljusten// 176bcecde140a561c64e297225904afebebd62336cejljusten#define KB_INSERT_BIT (0x1 << 7) 177bcecde140a561c64e297225904afebebd62336cejljusten#define KB_CAPS_LOCK_BIT (0x1 << 6) 178bcecde140a561c64e297225904afebebd62336cejljusten#define KB_NUM_LOCK_BIT (0x1 << 5) 179bcecde140a561c64e297225904afebebd62336cejljusten#define KB_SCROLL_LOCK_BIT (0x1 << 4) 180bcecde140a561c64e297225904afebebd62336cejljusten#define KB_ALT_PRESSED (0x1 << 3) 181bcecde140a561c64e297225904afebebd62336cejljusten#define KB_CTRL_PRESSED (0x1 << 2) 182bcecde140a561c64e297225904afebebd62336cejljusten#define KB_LEFT_SHIFT_PRESSED (0x1 << 1) 183bcecde140a561c64e297225904afebebd62336cejljusten#define KB_RIGHT_SHIFT_PRESSED (0x1 << 0) 184bcecde140a561c64e297225904afebebd62336cejljusten 185bcecde140a561c64e297225904afebebd62336cejljusten#define KB_SUSPEND_PRESSED (0x1 << 3) 186bcecde140a561c64e297225904afebebd62336cejljusten#define KB_SYSREQ_PRESSED (0x1 << 2) 187bcecde140a561c64e297225904afebebd62336cejljusten#define KB_LEFT_ALT_PRESSED (0x1 << 1) 188bcecde140a561c64e297225904afebebd62336cejljusten#define KB_LEFT_CTRL_PRESSED (0x1 << 0) 189bcecde140a561c64e297225904afebebd62336cejljusten 190bcecde140a561c64e297225904afebebd62336cejljusten// 191bcecde140a561c64e297225904afebebd62336cejljusten// BIOS Keyboard Device Structure 192bcecde140a561c64e297225904afebebd62336cejljusten// 193bcecde140a561c64e297225904afebebd62336cejljusten#define BIOS_KEYBOARD_DEV_SIGNATURE SIGNATURE_32 ('B', 'K', 'B', 'D') 194bcecde140a561c64e297225904afebebd62336cejljusten#define BIOS_KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('c', 'b', 'k', 'h') 195bcecde140a561c64e297225904afebebd62336cejljusten 196bcecde140a561c64e297225904afebebd62336cejljustentypedef struct _BIOS_KEYBOARD_CONSOLE_IN_EX_NOTIFY { 197bcecde140a561c64e297225904afebebd62336cejljusten UINTN Signature; 198bcecde140a561c64e297225904afebebd62336cejljusten EFI_KEY_DATA KeyData; 199bcecde140a561c64e297225904afebebd62336cejljusten EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn; 200bcecde140a561c64e297225904afebebd62336cejljusten LIST_ENTRY NotifyEntry; 201bcecde140a561c64e297225904afebebd62336cejljusten} BIOS_KEYBOARD_CONSOLE_IN_EX_NOTIFY; 202bcecde140a561c64e297225904afebebd62336cejljusten 203bcecde140a561c64e297225904afebebd62336cejljusten#define QUEUE_MAX_COUNT 32 204bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 205bcecde140a561c64e297225904afebebd62336cejljusten UINTN Front; 206bcecde140a561c64e297225904afebebd62336cejljusten UINTN Rear; 207bcecde140a561c64e297225904afebebd62336cejljusten EFI_KEY_DATA Buffer[QUEUE_MAX_COUNT]; 208bcecde140a561c64e297225904afebebd62336cejljusten} SIMPLE_QUEUE; 209bcecde140a561c64e297225904afebebd62336cejljusten 210bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 211bcecde140a561c64e297225904afebebd62336cejljusten UINTN Signature; 212bcecde140a561c64e297225904afebebd62336cejljusten EFI_HANDLE Handle; 213bcecde140a561c64e297225904afebebd62336cejljusten EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; 214bcecde140a561c64e297225904afebebd62336cejljusten EFI_ISA_IO_PROTOCOL *IsaIo; 215bcecde140a561c64e297225904afebebd62336cejljusten EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn; 216bcecde140a561c64e297225904afebebd62336cejljusten EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInputEx; 217bcecde140a561c64e297225904afebebd62336cejljusten UINT16 DataRegisterAddress; 218bcecde140a561c64e297225904afebebd62336cejljusten UINT16 StatusRegisterAddress; 219bcecde140a561c64e297225904afebebd62336cejljusten UINT16 CommandRegisterAddress; 220bcecde140a561c64e297225904afebebd62336cejljusten BOOLEAN ExtendedKeyboard; 221bcecde140a561c64e297225904afebebd62336cejljusten 222bcecde140a561c64e297225904afebebd62336cejljusten // 223bcecde140a561c64e297225904afebebd62336cejljusten // Buffer storing EFI_KEY_DATA 224bcecde140a561c64e297225904afebebd62336cejljusten // 225bcecde140a561c64e297225904afebebd62336cejljusten SIMPLE_QUEUE Queue; 226bcecde140a561c64e297225904afebebd62336cejljusten 227bcecde140a561c64e297225904afebebd62336cejljusten // 228bcecde140a561c64e297225904afebebd62336cejljusten // Notification Function List 229bcecde140a561c64e297225904afebebd62336cejljusten // 230bcecde140a561c64e297225904afebebd62336cejljusten LIST_ENTRY NotifyList; 231bcecde140a561c64e297225904afebebd62336cejljusten EFI_EVENT TimerEvent; 232bcecde140a561c64e297225904afebebd62336cejljusten 233bcecde140a561c64e297225904afebebd62336cejljusten} BIOS_KEYBOARD_DEV; 234bcecde140a561c64e297225904afebebd62336cejljusten 235bcecde140a561c64e297225904afebebd62336cejljusten#define BIOS_KEYBOARD_DEV_FROM_THIS(a) CR (a, BIOS_KEYBOARD_DEV, SimpleTextIn, BIOS_KEYBOARD_DEV_SIGNATURE) 236bcecde140a561c64e297225904afebebd62336cejljusten#define TEXT_INPUT_EX_BIOS_KEYBOARD_DEV_FROM_THIS(a) \ 237bcecde140a561c64e297225904afebebd62336cejljusten CR (a, \ 238bcecde140a561c64e297225904afebebd62336cejljusten BIOS_KEYBOARD_DEV, \ 239bcecde140a561c64e297225904afebebd62336cejljusten SimpleTextInputEx, \ 240bcecde140a561c64e297225904afebebd62336cejljusten BIOS_KEYBOARD_DEV_SIGNATURE \ 241bcecde140a561c64e297225904afebebd62336cejljusten ) 242bcecde140a561c64e297225904afebebd62336cejljusten 243bcecde140a561c64e297225904afebebd62336cejljusten// 244bcecde140a561c64e297225904afebebd62336cejljusten// Global Variables 245bcecde140a561c64e297225904afebebd62336cejljusten// 246bcecde140a561c64e297225904afebebd62336cejljustenextern EFI_DRIVER_BINDING_PROTOCOL gBiosKeyboardDriverBinding; 247bcecde140a561c64e297225904afebebd62336cejljusten 248bcecde140a561c64e297225904afebebd62336cejljusten// 249bcecde140a561c64e297225904afebebd62336cejljusten// Driver Binding Protocol functions 250bcecde140a561c64e297225904afebebd62336cejljusten// 251bcecde140a561c64e297225904afebebd62336cejljusten 252bcecde140a561c64e297225904afebebd62336cejljusten/** 253bcecde140a561c64e297225904afebebd62336cejljusten Check whether the driver supports this device. 254bcecde140a561c64e297225904afebebd62336cejljusten 255bcecde140a561c64e297225904afebebd62336cejljusten @param This The Udriver binding protocol. 256bcecde140a561c64e297225904afebebd62336cejljusten @param Controller The controller handle to check. 257bcecde140a561c64e297225904afebebd62336cejljusten @param RemainingDevicePath The remaining device path. 258bcecde140a561c64e297225904afebebd62336cejljusten 259bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The driver supports this controller. 260bcecde140a561c64e297225904afebebd62336cejljusten @retval other This device isn't supported. 261bcecde140a561c64e297225904afebebd62336cejljusten 262bcecde140a561c64e297225904afebebd62336cejljusten**/ 263bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 264bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 265bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardDriverBindingSupported ( 266bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_DRIVER_BINDING_PROTOCOL *This, 267bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_HANDLE Controller, 268bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath 269bcecde140a561c64e297225904afebebd62336cejljusten ); 270bcecde140a561c64e297225904afebebd62336cejljusten 271bcecde140a561c64e297225904afebebd62336cejljusten/** 272bcecde140a561c64e297225904afebebd62336cejljusten Starts the device with this driver. 273bcecde140a561c64e297225904afebebd62336cejljusten 274bcecde140a561c64e297225904afebebd62336cejljusten @param This The driver binding instance. 275bcecde140a561c64e297225904afebebd62336cejljusten @param Controller Handle of device to bind driver to. 276bcecde140a561c64e297225904afebebd62336cejljusten @param RemainingDevicePath Optional parameter use to pick a specific child 277bcecde140a561c64e297225904afebebd62336cejljusten device to start. 278bcecde140a561c64e297225904afebebd62336cejljusten 279bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The controller is controlled by the driver. 280bcecde140a561c64e297225904afebebd62336cejljusten @retval Other This controller cannot be started. 281bcecde140a561c64e297225904afebebd62336cejljusten 282bcecde140a561c64e297225904afebebd62336cejljusten**/ 283bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 284bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 285bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardDriverBindingStart ( 286bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_DRIVER_BINDING_PROTOCOL *This, 287bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_HANDLE Controller, 288bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath 289bcecde140a561c64e297225904afebebd62336cejljusten ); 290bcecde140a561c64e297225904afebebd62336cejljusten 291bcecde140a561c64e297225904afebebd62336cejljusten/** 292bcecde140a561c64e297225904afebebd62336cejljusten Stop the device handled by this driver. 293bcecde140a561c64e297225904afebebd62336cejljusten 294bcecde140a561c64e297225904afebebd62336cejljusten @param This The driver binding protocol. 295bcecde140a561c64e297225904afebebd62336cejljusten @param Controller The controller to release. 296bcecde140a561c64e297225904afebebd62336cejljusten @param NumberOfChildren The number of handles in ChildHandleBuffer. 297bcecde140a561c64e297225904afebebd62336cejljusten @param ChildHandleBuffer The array of child handle. 298bcecde140a561c64e297225904afebebd62336cejljusten 299bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The device was stopped. 300bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error. 301bcecde140a561c64e297225904afebebd62336cejljusten @retval Others Fail to uninstall protocols attached on the device. 302bcecde140a561c64e297225904afebebd62336cejljusten 303bcecde140a561c64e297225904afebebd62336cejljusten**/ 304bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 305bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 306bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardDriverBindingStop ( 307bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_DRIVER_BINDING_PROTOCOL *This, 308bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_HANDLE Controller, 309bcecde140a561c64e297225904afebebd62336cejljusten IN UINTN NumberOfChildren, 310bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_HANDLE *ChildHandleBuffer 311bcecde140a561c64e297225904afebebd62336cejljusten ); 312bcecde140a561c64e297225904afebebd62336cejljusten 313bcecde140a561c64e297225904afebebd62336cejljusten/** 314bcecde140a561c64e297225904afebebd62336cejljusten Retrieves a Unicode string that is the user readable name of the driver. 315bcecde140a561c64e297225904afebebd62336cejljusten 316bcecde140a561c64e297225904afebebd62336cejljusten This function retrieves the user readable name of a driver in the form of a 317bcecde140a561c64e297225904afebebd62336cejljusten Unicode string. If the driver specified by This has a user readable name in 318bcecde140a561c64e297225904afebebd62336cejljusten the language specified by Language, then a pointer to the driver name is 319bcecde140a561c64e297225904afebebd62336cejljusten returned in DriverName, and EFI_SUCCESS is returned. If the driver specified 320bcecde140a561c64e297225904afebebd62336cejljusten by This does not support the language specified by Language, 321bcecde140a561c64e297225904afebebd62336cejljusten then EFI_UNSUPPORTED is returned. 322bcecde140a561c64e297225904afebebd62336cejljusten 323bcecde140a561c64e297225904afebebd62336cejljusten @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 324bcecde140a561c64e297225904afebebd62336cejljusten EFI_COMPONENT_NAME_PROTOCOL instance. 325bcecde140a561c64e297225904afebebd62336cejljusten 326bcecde140a561c64e297225904afebebd62336cejljusten @param Language[in] A pointer to a Null-terminated ASCII string 327bcecde140a561c64e297225904afebebd62336cejljusten array indicating the language. This is the 328bcecde140a561c64e297225904afebebd62336cejljusten language of the driver name that the caller is 329bcecde140a561c64e297225904afebebd62336cejljusten requesting, and it must match one of the 330bcecde140a561c64e297225904afebebd62336cejljusten languages specified in SupportedLanguages. The 331bcecde140a561c64e297225904afebebd62336cejljusten number of languages supported by a driver is up 332bcecde140a561c64e297225904afebebd62336cejljusten to the driver writer. Language is specified 333bcecde140a561c64e297225904afebebd62336cejljusten in RFC 4646 or ISO 639-2 language code format. 334bcecde140a561c64e297225904afebebd62336cejljusten 335bcecde140a561c64e297225904afebebd62336cejljusten @param DriverName[out] A pointer to the Unicode string to return. 336bcecde140a561c64e297225904afebebd62336cejljusten This Unicode string is the name of the 337bcecde140a561c64e297225904afebebd62336cejljusten driver specified by This in the language 338bcecde140a561c64e297225904afebebd62336cejljusten specified by Language. 339bcecde140a561c64e297225904afebebd62336cejljusten 340bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The Unicode string for the Driver specified by 341bcecde140a561c64e297225904afebebd62336cejljusten This and the language specified by Language was 342bcecde140a561c64e297225904afebebd62336cejljusten returned in DriverName. 343bcecde140a561c64e297225904afebebd62336cejljusten 344bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER Language is NULL. 345bcecde140a561c64e297225904afebebd62336cejljusten 346bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER DriverName is NULL. 347bcecde140a561c64e297225904afebebd62336cejljusten 348bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_UNSUPPORTED The driver specified by This does not support 349bcecde140a561c64e297225904afebebd62336cejljusten the language specified by Language. 350bcecde140a561c64e297225904afebebd62336cejljusten 351bcecde140a561c64e297225904afebebd62336cejljusten**/ 352bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 353bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 354bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardComponentNameGetDriverName ( 355bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_COMPONENT_NAME_PROTOCOL *This, 356bcecde140a561c64e297225904afebebd62336cejljusten IN CHAR8 *Language, 357bcecde140a561c64e297225904afebebd62336cejljusten OUT CHAR16 **DriverName 358bcecde140a561c64e297225904afebebd62336cejljusten ); 359bcecde140a561c64e297225904afebebd62336cejljusten 360bcecde140a561c64e297225904afebebd62336cejljusten 361bcecde140a561c64e297225904afebebd62336cejljusten/** 362bcecde140a561c64e297225904afebebd62336cejljusten Retrieves a Unicode string that is the user readable name of the controller 363bcecde140a561c64e297225904afebebd62336cejljusten that is being managed by a driver. 364bcecde140a561c64e297225904afebebd62336cejljusten 365bcecde140a561c64e297225904afebebd62336cejljusten This function retrieves the user readable name of the controller specified by 366bcecde140a561c64e297225904afebebd62336cejljusten ControllerHandle and ChildHandle in the form of a Unicode string. If the 367bcecde140a561c64e297225904afebebd62336cejljusten driver specified by This has a user readable name in the language specified by 368bcecde140a561c64e297225904afebebd62336cejljusten Language, then a pointer to the controller name is returned in ControllerName, 369bcecde140a561c64e297225904afebebd62336cejljusten and EFI_SUCCESS is returned. If the driver specified by This is not currently 370bcecde140a561c64e297225904afebebd62336cejljusten managing the controller specified by ControllerHandle and ChildHandle, 371bcecde140a561c64e297225904afebebd62336cejljusten then EFI_UNSUPPORTED is returned. If the driver specified by This does not 372bcecde140a561c64e297225904afebebd62336cejljusten support the language specified by Language, then EFI_UNSUPPORTED is returned. 373bcecde140a561c64e297225904afebebd62336cejljusten 374bcecde140a561c64e297225904afebebd62336cejljusten @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 375bcecde140a561c64e297225904afebebd62336cejljusten EFI_COMPONENT_NAME_PROTOCOL instance. 376bcecde140a561c64e297225904afebebd62336cejljusten 377bcecde140a561c64e297225904afebebd62336cejljusten @param ControllerHandle[in] The handle of a controller that the driver 378bcecde140a561c64e297225904afebebd62336cejljusten specified by This is managing. This handle 379bcecde140a561c64e297225904afebebd62336cejljusten specifies the controller whose name is to be 380bcecde140a561c64e297225904afebebd62336cejljusten returned. 381bcecde140a561c64e297225904afebebd62336cejljusten 382bcecde140a561c64e297225904afebebd62336cejljusten @param ChildHandle[in] The handle of the child controller to retrieve 383bcecde140a561c64e297225904afebebd62336cejljusten the name of. This is an optional parameter that 384bcecde140a561c64e297225904afebebd62336cejljusten may be NULL. It will be NULL for device 385bcecde140a561c64e297225904afebebd62336cejljusten drivers. It will also be NULL for a bus drivers 386bcecde140a561c64e297225904afebebd62336cejljusten that wish to retrieve the name of the bus 387bcecde140a561c64e297225904afebebd62336cejljusten controller. It will not be NULL for a bus 388bcecde140a561c64e297225904afebebd62336cejljusten driver that wishes to retrieve the name of a 389bcecde140a561c64e297225904afebebd62336cejljusten child controller. 390bcecde140a561c64e297225904afebebd62336cejljusten 391bcecde140a561c64e297225904afebebd62336cejljusten @param Language[in] A pointer to a Null-terminated ASCII string 392bcecde140a561c64e297225904afebebd62336cejljusten array indicating the language. This is the 393bcecde140a561c64e297225904afebebd62336cejljusten language of the driver name that the caller is 394bcecde140a561c64e297225904afebebd62336cejljusten requesting, and it must match one of the 395bcecde140a561c64e297225904afebebd62336cejljusten languages specified in SupportedLanguages. The 396bcecde140a561c64e297225904afebebd62336cejljusten number of languages supported by a driver is up 397bcecde140a561c64e297225904afebebd62336cejljusten to the driver writer. Language is specified in 398bcecde140a561c64e297225904afebebd62336cejljusten RFC 4646 or ISO 639-2 language code format. 399bcecde140a561c64e297225904afebebd62336cejljusten 400bcecde140a561c64e297225904afebebd62336cejljusten @param ControllerName[out] A pointer to the Unicode string to return. 401bcecde140a561c64e297225904afebebd62336cejljusten This Unicode string is the name of the 402bcecde140a561c64e297225904afebebd62336cejljusten controller specified by ControllerHandle and 403bcecde140a561c64e297225904afebebd62336cejljusten ChildHandle in the language specified by 404bcecde140a561c64e297225904afebebd62336cejljusten Language from the point of view of the driver 405bcecde140a561c64e297225904afebebd62336cejljusten specified by This. 406bcecde140a561c64e297225904afebebd62336cejljusten 407bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The Unicode string for the user readable name in 408bcecde140a561c64e297225904afebebd62336cejljusten the language specified by Language for the 409bcecde140a561c64e297225904afebebd62336cejljusten driver specified by This was returned in 410bcecde140a561c64e297225904afebebd62336cejljusten DriverName. 411bcecde140a561c64e297225904afebebd62336cejljusten 4120c9f676d5012f4d7d5cfd8195e07c403222a0265niruiyu @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. 413bcecde140a561c64e297225904afebebd62336cejljusten 414bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid 415bcecde140a561c64e297225904afebebd62336cejljusten EFI_HANDLE. 416bcecde140a561c64e297225904afebebd62336cejljusten 417bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER Language is NULL. 418bcecde140a561c64e297225904afebebd62336cejljusten 419bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER ControllerName is NULL. 420bcecde140a561c64e297225904afebebd62336cejljusten 421bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_UNSUPPORTED The driver specified by This is not currently 422bcecde140a561c64e297225904afebebd62336cejljusten managing the controller specified by 423bcecde140a561c64e297225904afebebd62336cejljusten ControllerHandle and ChildHandle. 424bcecde140a561c64e297225904afebebd62336cejljusten 425bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_UNSUPPORTED The driver specified by This does not support 426bcecde140a561c64e297225904afebebd62336cejljusten the language specified by Language. 427bcecde140a561c64e297225904afebebd62336cejljusten 428bcecde140a561c64e297225904afebebd62336cejljusten**/ 429bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 430bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 431bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardComponentNameGetControllerName ( 432bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_COMPONENT_NAME_PROTOCOL *This, 433bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_HANDLE ControllerHandle, 434bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_HANDLE ChildHandle OPTIONAL, 435bcecde140a561c64e297225904afebebd62336cejljusten IN CHAR8 *Language, 436bcecde140a561c64e297225904afebebd62336cejljusten OUT CHAR16 **ControllerName 437bcecde140a561c64e297225904afebebd62336cejljusten ); 438bcecde140a561c64e297225904afebebd62336cejljusten 439bcecde140a561c64e297225904afebebd62336cejljusten 440bcecde140a561c64e297225904afebebd62336cejljusten// 441bcecde140a561c64e297225904afebebd62336cejljusten// Simple Text Input Protocol functions 442bcecde140a561c64e297225904afebebd62336cejljusten// 443bcecde140a561c64e297225904afebebd62336cejljusten/** 444bcecde140a561c64e297225904afebebd62336cejljusten Reset the Keyboard and do BAT test for it, if (ExtendedVerification == TRUE) then do some extra keyboard validations. 445bcecde140a561c64e297225904afebebd62336cejljusten 446bcecde140a561c64e297225904afebebd62336cejljusten @param This Pointer of simple text Protocol. 447bcecde140a561c64e297225904afebebd62336cejljusten @param ExtendedVerification Whether perform the extra validation of keyboard. True: perform; FALSE: skip. 448bcecde140a561c64e297225904afebebd62336cejljusten 449bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The command byte is written successfully. 450bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_DEVICE_ERROR Errors occurred during reseting keyboard. 451bcecde140a561c64e297225904afebebd62336cejljusten 452bcecde140a561c64e297225904afebebd62336cejljusten**/ 453bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 454bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 455bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardReset ( 456bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, 457bcecde140a561c64e297225904afebebd62336cejljusten IN BOOLEAN ExtendedVerification 458bcecde140a561c64e297225904afebebd62336cejljusten ); 459bcecde140a561c64e297225904afebebd62336cejljusten 460bcecde140a561c64e297225904afebebd62336cejljusten/** 461bcecde140a561c64e297225904afebebd62336cejljusten Read out the scan code of the key that has just been stroked. 462bcecde140a561c64e297225904afebebd62336cejljusten 463bcecde140a561c64e297225904afebebd62336cejljusten @param This Pointer of simple text Protocol. 464bcecde140a561c64e297225904afebebd62336cejljusten @param Key Pointer for store the key that read out. 465bcecde140a561c64e297225904afebebd62336cejljusten 466bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The key is read out successfully. 467bcecde140a561c64e297225904afebebd62336cejljusten @retval other The key reading failed. 468bcecde140a561c64e297225904afebebd62336cejljusten 469bcecde140a561c64e297225904afebebd62336cejljusten**/ 470bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 471bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 472bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardReadKeyStroke ( 473bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, 474bcecde140a561c64e297225904afebebd62336cejljusten OUT EFI_INPUT_KEY *Key 475bcecde140a561c64e297225904afebebd62336cejljusten ); 476bcecde140a561c64e297225904afebebd62336cejljusten 477bcecde140a561c64e297225904afebebd62336cejljusten// 478bcecde140a561c64e297225904afebebd62336cejljusten// Private worker functions 479bcecde140a561c64e297225904afebebd62336cejljusten// 480bcecde140a561c64e297225904afebebd62336cejljusten/** 481bcecde140a561c64e297225904afebebd62336cejljusten Waiting on the keyboard event, if there's any key pressed by the user, signal the event 482bcecde140a561c64e297225904afebebd62336cejljusten 483bcecde140a561c64e297225904afebebd62336cejljusten @param Event The event that be siganlled when any key has been stroked. 484bcecde140a561c64e297225904afebebd62336cejljusten @param Context Pointer of the protocol EFI_SIMPLE_TEXT_INPUT_PROTOCOL. 485bcecde140a561c64e297225904afebebd62336cejljusten 486bcecde140a561c64e297225904afebebd62336cejljusten**/ 487bcecde140a561c64e297225904afebebd62336cejljustenVOID 488bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 489bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardWaitForKey ( 490bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_EVENT Event, 491bcecde140a561c64e297225904afebebd62336cejljusten IN VOID *Context 492bcecde140a561c64e297225904afebebd62336cejljusten ); 493bcecde140a561c64e297225904afebebd62336cejljusten 494bcecde140a561c64e297225904afebebd62336cejljusten/** 495bcecde140a561c64e297225904afebebd62336cejljusten Check key buffer to get the key stroke status. 496bcecde140a561c64e297225904afebebd62336cejljusten 497bcecde140a561c64e297225904afebebd62336cejljusten @param This Pointer of the protocol EFI_SIMPLE_TEXT_IN_PROTOCOL. 498bcecde140a561c64e297225904afebebd62336cejljusten 499bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS A key is being pressed now. 500bcecde140a561c64e297225904afebebd62336cejljusten @retval Other No key is now pressed. 501bcecde140a561c64e297225904afebebd62336cejljusten 502bcecde140a561c64e297225904afebebd62336cejljusten**/ 503bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 504bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 505bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardCheckForKey ( 506bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This 507bcecde140a561c64e297225904afebebd62336cejljusten ); 508bcecde140a561c64e297225904afebebd62336cejljusten 509bcecde140a561c64e297225904afebebd62336cejljusten/** 510bcecde140a561c64e297225904afebebd62336cejljusten Convert unicode combined with scan code of key to the counterpart of EFIScancode of it. 511bcecde140a561c64e297225904afebebd62336cejljusten 512bcecde140a561c64e297225904afebebd62336cejljusten @param KeyChar Unicode of key. 513bcecde140a561c64e297225904afebebd62336cejljusten @param ScanCode Scan code of key. 514bcecde140a561c64e297225904afebebd62336cejljusten 515bcecde140a561c64e297225904afebebd62336cejljusten @return The value of EFI Scancode for the key. 516bcecde140a561c64e297225904afebebd62336cejljusten @retval SCAN_NULL No corresponding value in the EFI convert table is found for the key. 517bcecde140a561c64e297225904afebebd62336cejljusten 518bcecde140a561c64e297225904afebebd62336cejljusten**/ 519bcecde140a561c64e297225904afebebd62336cejljustenUINT16 520bcecde140a561c64e297225904afebebd62336cejljustenConvertToEFIScanCode ( 521bcecde140a561c64e297225904afebebd62336cejljusten IN CHAR16 KeyChar, 522bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 ScanCode 523bcecde140a561c64e297225904afebebd62336cejljusten ); 524bcecde140a561c64e297225904afebebd62336cejljusten 525bcecde140a561c64e297225904afebebd62336cejljusten/** 526bcecde140a561c64e297225904afebebd62336cejljusten Check whether there is Ps/2 Keyboard device in system by 0xF4 Keyboard Command 527bcecde140a561c64e297225904afebebd62336cejljusten If Keyboard receives 0xF4, it will respond with 'ACK'. If it doesn't respond, the device 528bcecde140a561c64e297225904afebebd62336cejljusten should not be in system. 529bcecde140a561c64e297225904afebebd62336cejljusten 530bcecde140a561c64e297225904afebebd62336cejljusten @param BiosKeyboardPrivate Keyboard Private Data Struture 531bcecde140a561c64e297225904afebebd62336cejljusten 532bcecde140a561c64e297225904afebebd62336cejljusten @retval TRUE Keyboard in System. 533bcecde140a561c64e297225904afebebd62336cejljusten @retval FALSE Keyboard not in System. 534bcecde140a561c64e297225904afebebd62336cejljusten 535bcecde140a561c64e297225904afebebd62336cejljusten**/ 536bcecde140a561c64e297225904afebebd62336cejljustenBOOLEAN 537bcecde140a561c64e297225904afebebd62336cejljustenCheckKeyboardConnect ( 538bcecde140a561c64e297225904afebebd62336cejljusten IN BIOS_KEYBOARD_DEV *BiosKeyboardPrivate 539bcecde140a561c64e297225904afebebd62336cejljusten ); 540bcecde140a561c64e297225904afebebd62336cejljusten 541bcecde140a561c64e297225904afebebd62336cejljusten/** 542bcecde140a561c64e297225904afebebd62336cejljusten Timer event handler: read a series of key stroke from 8042 543bcecde140a561c64e297225904afebebd62336cejljusten and put them into memory key buffer. 544bcecde140a561c64e297225904afebebd62336cejljusten It is registered as running under TPL_NOTIFY 545bcecde140a561c64e297225904afebebd62336cejljusten 546bcecde140a561c64e297225904afebebd62336cejljusten @param Event The timer event 547bcecde140a561c64e297225904afebebd62336cejljusten @param Context A BIOS_KEYBOARD_DEV pointer 548bcecde140a561c64e297225904afebebd62336cejljusten 549bcecde140a561c64e297225904afebebd62336cejljusten**/ 550bcecde140a561c64e297225904afebebd62336cejljustenVOID 551bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 552bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardTimerHandler ( 553bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_EVENT Event, 554bcecde140a561c64e297225904afebebd62336cejljusten IN VOID *Context 555bcecde140a561c64e297225904afebebd62336cejljusten ); 556bcecde140a561c64e297225904afebebd62336cejljusten 557bcecde140a561c64e297225904afebebd62336cejljusten/** 558bcecde140a561c64e297225904afebebd62336cejljusten Reset the input device and optionaly run diagnostics 559bcecde140a561c64e297225904afebebd62336cejljusten 560bcecde140a561c64e297225904afebebd62336cejljusten @param This Protocol instance pointer. 561bcecde140a561c64e297225904afebebd62336cejljusten @param ExtendedVerification Driver may perform diagnostics on reset. 562bcecde140a561c64e297225904afebebd62336cejljusten 563bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The device was reset. 564bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_DEVICE_ERROR The device is not functioning properly and could 565bcecde140a561c64e297225904afebebd62336cejljusten not be reset. 566bcecde140a561c64e297225904afebebd62336cejljusten 567bcecde140a561c64e297225904afebebd62336cejljusten**/ 568bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 569bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 570bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardResetEx ( 571bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 572bcecde140a561c64e297225904afebebd62336cejljusten IN BOOLEAN ExtendedVerification 573bcecde140a561c64e297225904afebebd62336cejljusten ); 574bcecde140a561c64e297225904afebebd62336cejljusten 575bcecde140a561c64e297225904afebebd62336cejljusten/** 576bcecde140a561c64e297225904afebebd62336cejljusten Reads the next keystroke from the input device. The WaitForKey Event can 577bcecde140a561c64e297225904afebebd62336cejljusten be used to test for existance of a keystroke via WaitForEvent () call. 578bcecde140a561c64e297225904afebebd62336cejljusten 579bcecde140a561c64e297225904afebebd62336cejljusten @param This Protocol instance pointer. 580bcecde140a561c64e297225904afebebd62336cejljusten @param KeyData A pointer to a buffer that is filled in with the keystroke 581bcecde140a561c64e297225904afebebd62336cejljusten state data for the key that was pressed. 582bcecde140a561c64e297225904afebebd62336cejljusten 583bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The keystroke information was returned. 584bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_NOT_READY There was no keystroke data availiable. 585bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_DEVICE_ERROR The keystroke information was not returned due to 586bcecde140a561c64e297225904afebebd62336cejljusten hardware errors. 587bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER KeyData is NULL. 588bcecde140a561c64e297225904afebebd62336cejljusten 589bcecde140a561c64e297225904afebebd62336cejljusten**/ 590bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 591bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 592bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardReadKeyStrokeEx ( 593bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 594bcecde140a561c64e297225904afebebd62336cejljusten OUT EFI_KEY_DATA *KeyData 595bcecde140a561c64e297225904afebebd62336cejljusten ); 596bcecde140a561c64e297225904afebebd62336cejljusten 597bcecde140a561c64e297225904afebebd62336cejljusten/** 598bcecde140a561c64e297225904afebebd62336cejljusten Set certain state for the input device. 599bcecde140a561c64e297225904afebebd62336cejljusten 600bcecde140a561c64e297225904afebebd62336cejljusten @param This Protocol instance pointer. 601bcecde140a561c64e297225904afebebd62336cejljusten @param KeyToggleState A pointer to the EFI_KEY_TOGGLE_STATE to set the 602bcecde140a561c64e297225904afebebd62336cejljusten state for the input device. 603bcecde140a561c64e297225904afebebd62336cejljusten 604bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The device state was set successfully. 605bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_DEVICE_ERROR The device is not functioning correctly and could 606bcecde140a561c64e297225904afebebd62336cejljusten not have the setting adjusted. 607bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_UNSUPPORTED The device does not have the ability to set its state. 608bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER KeyToggleState is NULL. 609bcecde140a561c64e297225904afebebd62336cejljusten 610bcecde140a561c64e297225904afebebd62336cejljusten**/ 611bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 612bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 613bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardSetState ( 614bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 615bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_KEY_TOGGLE_STATE *KeyToggleState 616bcecde140a561c64e297225904afebebd62336cejljusten ); 617bcecde140a561c64e297225904afebebd62336cejljusten 618bcecde140a561c64e297225904afebebd62336cejljusten/** 619bcecde140a561c64e297225904afebebd62336cejljusten Register a notification function for a particular keystroke for the input device. 620bcecde140a561c64e297225904afebebd62336cejljusten 621bcecde140a561c64e297225904afebebd62336cejljusten @param This Protocol instance pointer. 622bcecde140a561c64e297225904afebebd62336cejljusten @param KeyData A pointer to a buffer that is filled in with the keystroke 623bcecde140a561c64e297225904afebebd62336cejljusten information data for the key that was pressed. 624bcecde140a561c64e297225904afebebd62336cejljusten @param KeyNotificationFunction Points to the function to be called when the key 625bcecde140a561c64e297225904afebebd62336cejljusten sequence is typed specified by KeyData. 626bcecde140a561c64e297225904afebebd62336cejljusten @param NotifyHandle Points to the unique handle assigned to the registered notification. 627bcecde140a561c64e297225904afebebd62336cejljusten 628bcecde140a561c64e297225904afebebd62336cejljusten 629bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The notification function was registered successfully. 630bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necesssary data structures. 631bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER KeyData or NotifyHandle is NULL. 632bcecde140a561c64e297225904afebebd62336cejljusten 633bcecde140a561c64e297225904afebebd62336cejljusten**/ 634bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 635bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 636bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardRegisterKeyNotify ( 637bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 638bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_KEY_DATA *KeyData, 639bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, 640402e4a9d777677296945afa020194bf4123885e2niruiyu OUT VOID **NotifyHandle 641bcecde140a561c64e297225904afebebd62336cejljusten ); 642bcecde140a561c64e297225904afebebd62336cejljusten 643bcecde140a561c64e297225904afebebd62336cejljusten/** 644bcecde140a561c64e297225904afebebd62336cejljusten Remove a registered notification function from a particular keystroke. 645bcecde140a561c64e297225904afebebd62336cejljusten 646bcecde140a561c64e297225904afebebd62336cejljusten @param This Protocol instance pointer. 647bcecde140a561c64e297225904afebebd62336cejljusten @param NotificationHandle The handle of the notification function being unregistered. 648bcecde140a561c64e297225904afebebd62336cejljusten 649bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The notification function was unregistered successfully. 650bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER The NotificationHandle is invalid. 651bcecde140a561c64e297225904afebebd62336cejljusten 652bcecde140a561c64e297225904afebebd62336cejljusten**/ 653bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 654bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 655bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardUnregisterKeyNotify ( 656bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 657402e4a9d777677296945afa020194bf4123885e2niruiyu IN VOID *NotificationHandle 658bcecde140a561c64e297225904afebebd62336cejljusten ); 659bcecde140a561c64e297225904afebebd62336cejljusten 660bcecde140a561c64e297225904afebebd62336cejljusten/** 661bcecde140a561c64e297225904afebebd62336cejljusten Wait for a specific value to be presented in 662bcecde140a561c64e297225904afebebd62336cejljusten Data register of Keyboard Controller by keyboard and then read it, 663bcecde140a561c64e297225904afebebd62336cejljusten used in keyboard commands ack 664bcecde140a561c64e297225904afebebd62336cejljusten 665bcecde140a561c64e297225904afebebd62336cejljusten @param BiosKeyboardPrivate Keyboard instance pointer. 666bcecde140a561c64e297225904afebebd62336cejljusten @param Value The value to be waited for 667bcecde140a561c64e297225904afebebd62336cejljusten @param WaitForValueTimeOut The limit of microseconds for timeout 668bcecde140a561c64e297225904afebebd62336cejljusten 669bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The command byte is written successfully. 670bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_TIMEOUT Timeout occurred during writing. 671bcecde140a561c64e297225904afebebd62336cejljusten 672bcecde140a561c64e297225904afebebd62336cejljusten**/ 673bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 674bcecde140a561c64e297225904afebebd62336cejljustenKeyboardWaitForValue ( 675bcecde140a561c64e297225904afebebd62336cejljusten IN BIOS_KEYBOARD_DEV *BiosKeyboardPrivate, 676bcecde140a561c64e297225904afebebd62336cejljusten IN UINT8 Value, 677bcecde140a561c64e297225904afebebd62336cejljusten IN UINTN WaitForValueTimeOut 678bcecde140a561c64e297225904afebebd62336cejljusten ); 679bcecde140a561c64e297225904afebebd62336cejljusten 680bcecde140a561c64e297225904afebebd62336cejljusten/** 681bcecde140a561c64e297225904afebebd62336cejljusten Write data byte to input buffer or input/output ports of Keyboard Controller with delay and waiting for buffer-empty state. 682bcecde140a561c64e297225904afebebd62336cejljusten 683bcecde140a561c64e297225904afebebd62336cejljusten @param BiosKeyboardPrivate Keyboard instance pointer. 684bcecde140a561c64e297225904afebebd62336cejljusten @param Data Data byte to write. 685bcecde140a561c64e297225904afebebd62336cejljusten 686bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS The data byte is written successfully. 687bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_TIMEOUT Timeout occurred during writing. 688bcecde140a561c64e297225904afebebd62336cejljusten 689bcecde140a561c64e297225904afebebd62336cejljusten**/ 690bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 691bcecde140a561c64e297225904afebebd62336cejljustenKeyboardWrite ( 692bcecde140a561c64e297225904afebebd62336cejljusten IN BIOS_KEYBOARD_DEV *BiosKeyboardPrivate, 693bcecde140a561c64e297225904afebebd62336cejljusten IN UINT8 Data 694bcecde140a561c64e297225904afebebd62336cejljusten ); 695bcecde140a561c64e297225904afebebd62336cejljusten 696bcecde140a561c64e297225904afebebd62336cejljusten/** 697bcecde140a561c64e297225904afebebd62336cejljusten Free keyboard notify list. 698bcecde140a561c64e297225904afebebd62336cejljusten 699bcecde140a561c64e297225904afebebd62336cejljusten @param ListHead The list head 700bcecde140a561c64e297225904afebebd62336cejljusten 701bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_SUCCESS Free the notify list successfully 702bcecde140a561c64e297225904afebebd62336cejljusten @retval EFI_INVALID_PARAMETER ListHead is invalid. 703bcecde140a561c64e297225904afebebd62336cejljusten 704bcecde140a561c64e297225904afebebd62336cejljusten**/ 705bcecde140a561c64e297225904afebebd62336cejljustenEFI_STATUS 706bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardFreeNotifyList ( 707bcecde140a561c64e297225904afebebd62336cejljusten IN OUT LIST_ENTRY *ListHead 708bcecde140a561c64e297225904afebebd62336cejljusten ); 709bcecde140a561c64e297225904afebebd62336cejljusten 710bcecde140a561c64e297225904afebebd62336cejljusten/** 711bcecde140a561c64e297225904afebebd62336cejljusten Check if key is registered. 712bcecde140a561c64e297225904afebebd62336cejljusten 713bcecde140a561c64e297225904afebebd62336cejljusten @param RegsiteredData A pointer to a buffer that is filled in with the keystroke 714bcecde140a561c64e297225904afebebd62336cejljusten state data for the key that was registered. 715bcecde140a561c64e297225904afebebd62336cejljusten @param InputData A pointer to a buffer that is filled in with the keystroke 716bcecde140a561c64e297225904afebebd62336cejljusten state data for the key that was pressed. 717bcecde140a561c64e297225904afebebd62336cejljusten 718bcecde140a561c64e297225904afebebd62336cejljusten @retval TRUE Key be pressed matches a registered key. 719bcecde140a561c64e297225904afebebd62336cejljusten @retval FLASE Match failed. 720bcecde140a561c64e297225904afebebd62336cejljusten 721bcecde140a561c64e297225904afebebd62336cejljusten**/ 722bcecde140a561c64e297225904afebebd62336cejljustenBOOLEAN 723bcecde140a561c64e297225904afebebd62336cejljustenIsKeyRegistered ( 724bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_KEY_DATA *RegsiteredData, 725bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_KEY_DATA *InputData 726bcecde140a561c64e297225904afebebd62336cejljusten ); 727bcecde140a561c64e297225904afebebd62336cejljusten 728bcecde140a561c64e297225904afebebd62336cejljusten/** 729bcecde140a561c64e297225904afebebd62336cejljusten Waiting on the keyboard event, if there's any key pressed by the user, signal the event 730bcecde140a561c64e297225904afebebd62336cejljusten 731bcecde140a561c64e297225904afebebd62336cejljusten @param Event The event that be siganlled when any key has been stroked. 732bcecde140a561c64e297225904afebebd62336cejljusten @param Context Pointer of the protocol EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL. 733bcecde140a561c64e297225904afebebd62336cejljusten 734bcecde140a561c64e297225904afebebd62336cejljusten**/ 735bcecde140a561c64e297225904afebebd62336cejljustenVOID 736bcecde140a561c64e297225904afebebd62336cejljustenEFIAPI 737bcecde140a561c64e297225904afebebd62336cejljustenBiosKeyboardWaitForKeyEx ( 738bcecde140a561c64e297225904afebebd62336cejljusten IN EFI_EVENT Event, 739bcecde140a561c64e297225904afebebd62336cejljusten IN VOID *Context 740bcecde140a561c64e297225904afebebd62336cejljusten ); 741bcecde140a561c64e297225904afebebd62336cejljusten 742bcecde140a561c64e297225904afebebd62336cejljusten#endif 743bcecde140a561c64e297225904afebebd62336cejljusten 744