ed838d0c |
1 | /** @file\r |
2 | \r |
d7db0902 |
3 | Helper routine and corresponding data struct used by USB Mouse Driver.\r |
bb80e3b2 |
4 | \r |
5 | Copyright (c) 2004 - 2008, Intel Corporation\r |
ed838d0c |
6 | All rights reserved. This program and the accompanying materials\r |
7 | are licensed and made available under the terms and conditions of the BSD License\r |
8 | which accompanies this distribution. The full text of the license may be found at\r |
9 | http://opensource.org/licenses/bsd-license.php\r |
10 | \r |
11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r |
12 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r |
13 | \r |
ed838d0c |
14 | **/\r |
15 | \r |
bb80e3b2 |
16 | #ifndef _EFI_USB_MOUSE_H_\r |
17 | #define _EFI_USB_MOUSE_H_\r |
ed838d0c |
18 | \r |
ed7748fe |
19 | \r |
60c93673 |
20 | #include <Uefi.h>\r |
ed7748fe |
21 | \r |
ed838d0c |
22 | #include <Protocol/SimplePointer.h>\r |
23 | #include <Protocol/UsbIo.h>\r |
24 | #include <Protocol/DevicePath.h>\r |
ed7748fe |
25 | \r |
ed838d0c |
26 | #include <Library/ReportStatusCodeLib.h>\r |
27 | #include <Library/BaseMemoryLib.h>\r |
28 | #include <Library/UefiDriverEntryPoint.h>\r |
29 | #include <Library/UefiBootServicesTableLib.h>\r |
30 | #include <Library/UefiLib.h>\r |
31 | #include <Library/MemoryAllocationLib.h>\r |
32 | #include <Library/PcdLib.h>\r |
dfb74df5 |
33 | #include <Library/UefiUsbLib.h>\r |
ed838d0c |
34 | \r |
35 | #include <IndustryStandard/Usb.h>\r |
36 | \r |
37 | #define CLASS_HID 3\r |
38 | #define SUBCLASS_BOOT 1\r |
39 | #define PROTOCOL_MOUSE 2\r |
40 | \r |
41 | #define BOOT_PROTOCOL 0\r |
42 | #define REPORT_PROTOCOL 1\r |
43 | \r |
f3f2e05d |
44 | #define USB_MOUSE_DEV_SIGNATURE SIGNATURE_32 ('u', 'm', 'o', 'u')\r |
ed838d0c |
45 | \r |
46 | typedef struct {\r |
47 | BOOLEAN ButtonDetected;\r |
48 | UINT8 ButtonMinIndex;\r |
49 | UINT8 ButtonMaxIndex;\r |
50 | UINT8 Reserved;\r |
51 | } PRIVATE_DATA;\r |
52 | \r |
53 | typedef struct {\r |
54 | UINTN Signature;\r |
55 | EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r |
56 | EFI_EVENT DelayedRecoveryEvent;\r |
57 | EFI_USB_IO_PROTOCOL *UsbIo;\r |
58 | EFI_USB_INTERFACE_DESCRIPTOR *InterfaceDescriptor;\r |
59 | EFI_USB_ENDPOINT_DESCRIPTOR *IntEndpointDescriptor;\r |
60 | UINT8 NumberOfButtons;\r |
61 | INT32 XLogicMax;\r |
62 | INT32 XLogicMin;\r |
63 | INT32 YLogicMax;\r |
64 | INT32 YLogicMin;\r |
65 | EFI_SIMPLE_POINTER_PROTOCOL SimplePointerProtocol;\r |
66 | EFI_SIMPLE_POINTER_STATE State;\r |
67 | EFI_SIMPLE_POINTER_MODE Mode;\r |
68 | BOOLEAN StateChanged;\r |
69 | PRIVATE_DATA PrivateData;\r |
70 | EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r |
71 | } USB_MOUSE_DEV;\r |
72 | \r |
73 | #define USB_MOUSE_DEV_FROM_MOUSE_PROTOCOL(a) \\r |
74 | CR(a, USB_MOUSE_DEV, SimplePointerProtocol, USB_MOUSE_DEV_SIGNATURE)\r |
75 | \r |
bb80e3b2 |
76 | \r |
77 | /**\r |
78 | Timer handler for Delayed Recovery timer.\r |
79 | \r |
80 | @param Event The Delayed Recovery event.\r |
81 | @param Context Points to the USB_KB_DEV instance.\r |
82 | \r |
83 | \r |
84 | **/\r |
ed838d0c |
85 | VOID\r |
86 | EFIAPI\r |
87 | USBMouseRecoveryHandler (\r |
88 | IN EFI_EVENT Event,\r |
89 | IN VOID *Context\r |
90 | );\r |
91 | \r |
92 | //\r |
93 | // Global Variables\r |
94 | //\r |
62b9bb55 |
95 | extern EFI_DRIVER_BINDING_PROTOCOL gUsbMouseDriverBinding;\r |
96 | extern EFI_COMPONENT_NAME_PROTOCOL gUsbMouseComponentName;\r |
97 | extern EFI_COMPONENT_NAME2_PROTOCOL gUsbMouseComponentName2;\r |
98 | extern EFI_GUID gEfiUsbMouseDriverGuid;\r |
ed838d0c |
99 | \r |
bb80e3b2 |
100 | \r |
101 | /**\r |
102 | Report Status Code in Usb Bot Driver.\r |
103 | \r |
104 | @param DevicePath Use this to get Device Path\r |
105 | @param CodeType Status Code Type\r |
106 | @param CodeValue Status Code Value\r |
107 | \r |
108 | @return None\r |
109 | \r |
110 | **/\r |
ed838d0c |
111 | VOID\r |
112 | MouseReportStatusCode (\r |
113 | IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r |
114 | IN EFI_STATUS_CODE_TYPE CodeType,\r |
115 | IN EFI_STATUS_CODE_VALUE Value\r |
116 | );\r |
117 | \r |
aa79b0b3 |
118 | /**\r |
119 | The USB Mouse driver entry pointer.\r |
120 | \r |
121 | @param ImageHandle The driver image handle.\r |
122 | @param SystemTable The system table.\r |
123 | \r |
124 | @return EFI_SUCCESS The component name protocol is installed.\r |
125 | @return Others Failed to init the usb driver.\r |
126 | \r |
127 | **/\r |
128 | EFI_STATUS\r |
129 | EFIAPI\r |
130 | USBMouseDriverBindingEntryPoint (\r |
131 | IN EFI_HANDLE ImageHandle,\r |
132 | IN EFI_SYSTEM_TABLE *SystemTable\r |
133 | );\r |
134 | \r |
135 | /**\r |
136 | Test to see if this driver supports ControllerHandle. Any ControllerHandle\r |
137 | that has UsbIoProtocol installed will be supported.\r |
138 | \r |
139 | @param This Protocol instance pointer.\r |
140 | @param Controller Handle of device to test.\r |
141 | @param RemainingDevicePath Not used.\r |
142 | \r |
143 | @retval EFI_SUCCESS This driver supports this device.\r |
144 | @retval EFI_UNSUPPORTED This driver does not support this device.\r |
145 | \r |
146 | **/\r |
147 | EFI_STATUS\r |
148 | EFIAPI\r |
149 | USBMouseDriverBindingSupported (\r |
150 | IN EFI_DRIVER_BINDING_PROTOCOL *This,\r |
151 | IN EFI_HANDLE Controller,\r |
152 | IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r |
153 | );\r |
154 | \r |
155 | /**\r |
156 | Starting the Usb Mouse Driver.\r |
157 | \r |
158 | @param This Protocol instance pointer.\r |
159 | @param Controller Handle of device to test\r |
160 | @param RemainingDevicePath Not used\r |
161 | \r |
162 | @retval EFI_SUCCESS This driver supports this device.\r |
163 | @retval EFI_UNSUPPORTED This driver does not support this device.\r |
164 | @retval EFI_DEVICE_ERROR This driver cannot be started due to device Error.\r |
165 | @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.\r |
166 | @retval EFI_ALREADY_STARTED Thios driver has been started.\r |
167 | \r |
168 | **/\r |
169 | EFI_STATUS\r |
170 | EFIAPI\r |
171 | USBMouseDriverBindingStart (\r |
172 | IN EFI_DRIVER_BINDING_PROTOCOL *This,\r |
173 | IN EFI_HANDLE Controller,\r |
174 | IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r |
175 | );\r |
176 | \r |
177 | /**\r |
178 | Stop this driver on ControllerHandle. Support stoping any child handles\r |
179 | created by this driver.\r |
180 | \r |
181 | @param This Protocol instance pointer.\r |
182 | @param Controller Handle of device to stop driver on.\r |
183 | @param NumberOfChildren Number of Children in the ChildHandleBuffer.\r |
184 | @param ChildHandleBuffer List of handles for the children we need to stop.\r |
185 | \r |
186 | @retval EFI_SUCCESS The controller or children are stopped.\r |
187 | @retval Other Failed to stop the driver.\r |
188 | \r |
189 | **/\r |
190 | EFI_STATUS\r |
191 | EFIAPI\r |
192 | USBMouseDriverBindingStop (\r |
193 | IN EFI_DRIVER_BINDING_PROTOCOL *This,\r |
194 | IN EFI_HANDLE Controller,\r |
195 | IN UINTN NumberOfChildren,\r |
196 | IN EFI_HANDLE *ChildHandleBuffer\r |
197 | );\r |
198 | \r |
ed838d0c |
199 | #endif\r |