OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
AppleKey.c
Go to the documentation of this file.
1
15#include "EfiKey.h"
16#include "AppleKey.h"
17
18#include <Library/DevicePathLib.h>
19#include <Library/UefiBootServicesTableLib.h>
20
21#define ASSERT_USB_KB_DEV_VALID(UsbKbDev) \
22 do { \
23 ASSERT ((UsbKbDev) != NULL); \
24 ASSERT ((UsbKbDev)->Signature == USB_KB_DEV_SIGNATURE); \
25 } while (FALSE)
26
27STATIC
28VOID
30 IN USB_KB_DEV *UsbKeyboardDevice,
32 )
33{
34 EFI_STATUS Status;
35
36 ASSERT_USB_KB_DEV_VALID (UsbKeyboardDevice);
37 ASSERT (KeyMapDb != NULL);
38
39 Status = KeyMapDb->CreateKeyStrokesBuffer (
40 KeyMapDb,
41 6,
42 &UsbKeyboardDevice->KeyMapDbIndex
43 );
44 if (!EFI_ERROR (Status)) {
45 UsbKeyboardDevice->KeyMapDb = KeyMapDb;
46 }
47}
48
56STATIC
57VOID
58EFIAPI
60 IN EFI_EVENT Event,
61 IN VOID *Context
62 )
63{
64 EFI_STATUS Status;
66 USB_KB_DEV *UsbKeyboardDevice;
67
68 ASSERT (Event != NULL);
70 ASSERT (((USB_KB_DEV *)Context)->KeyMapInstallNotifyEvent == Event);
71
72 UsbKeyboardDevice = (USB_KB_DEV *)Context;
73 Status = gBS->LocateProtocol (
75 UsbKeyboardDevice->KeyMapInstallRegistration,
76 (VOID **)&KeyMapDb
77 );
78 ASSERT (Status != EFI_NOT_FOUND);
79
80 UsbKbSetAppleKeyMapDb (UsbKeyboardDevice, KeyMapDb);
81
82 gBS->CloseEvent (UsbKeyboardDevice->KeyMapInstallNotifyEvent);
83 UsbKeyboardDevice->KeyMapInstallNotifyEvent = NULL;
84 UsbKeyboardDevice->KeyMapInstallRegistration = NULL;
85}
86
87VOID
89 IN USB_KB_DEV *UsbKeyboardDevice
90 )
91{
92 EFI_STATUS Status;
94
95 ASSERT_USB_KB_DEV_VALID (UsbKeyboardDevice);
96
97 Status = gBS->LocateProtocol (
99 NULL,
100 (VOID **)&KeyMapDb
101 );
102 if (!EFI_ERROR (Status)) {
103 UsbKbSetAppleKeyMapDb (UsbKeyboardDevice, KeyMapDb);
104 } else if (PcdGetBool (PcdNotifyAppleKeyMapDbInUsbKbDriver)) {
105 Status = gBS->CreateEvent (
106 EVT_NOTIFY_SIGNAL,
107 TPL_NOTIFY,
109 (VOID *)UsbKeyboardDevice,
110 &UsbKeyboardDevice->KeyMapInstallNotifyEvent
111 );
112 ASSERT_EFI_ERROR (Status);
113
114 Status = gBS->RegisterProtocolNotify (
116 UsbKeyboardDevice->KeyMapInstallNotifyEvent,
117 &UsbKeyboardDevice->KeyMapInstallRegistration
118 );
119 ASSERT_EFI_ERROR (Status);
120 }
121}
122
123VOID
125 IN USB_KB_DEV *UsbKeyboardDevice
126 )
127{
128 EFI_STATUS Status;
129
130 ASSERT_USB_KB_DEV_VALID (UsbKeyboardDevice);
131
132 if (UsbKeyboardDevice->KeyMapDb != NULL) {
133 Status = UsbKeyboardDevice->KeyMapDb->RemoveKeyStrokesBuffer (
134 UsbKeyboardDevice->KeyMapDb,
135 UsbKeyboardDevice->KeyMapDbIndex
136 );
137 ASSERT_EFI_ERROR (Status);
138 } else if (UsbKeyboardDevice->KeyMapInstallNotifyEvent != NULL) {
139 Status = gBS->CloseEvent (UsbKeyboardDevice->KeyMapInstallNotifyEvent);
140 ASSERT_EFI_ERROR (Status);
141
142 UsbKeyboardDevice->KeyMapInstallNotifyEvent = NULL;
143 }
144}
VOID UsbKbFreeAppleKeyMapDb(IN USB_KB_DEV *UsbKeyboardDevice)
Definition AppleKey.c:124
VOID UsbKbLocateAppleKeyMapDb(IN USB_KB_DEV *UsbKeyboardDevice)
Definition AppleKey.c:88
STATIC VOID UsbKbSetAppleKeyMapDb(IN USB_KB_DEV *UsbKeyboardDevice, IN APPLE_KEY_MAP_DATABASE_PROTOCOL *KeyMapDb)
Definition AppleKey.c:29
STATIC VOID EFIAPI UsbKbAppleKeyMapDbInstallNotify(IN EFI_EVENT Event, IN VOID *Context)
Definition AppleKey.c:59
#define ASSERT_USB_KB_DEV_VALID(UsbKbDev)
Definition AppleKey.c:21
EFI_GUID gAppleKeyMapDatabaseProtocolGuid
EFI_BOOT_SERVICES * gBS
#define ASSERT(x)
Definition coder.h:55
EFI_EVENT KeyMapInstallNotifyEvent
Definition EfiKey.h:158
VOID * KeyMapInstallRegistration
Definition EfiKey.h:159