]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouse.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbMouseDxe / UsbMouse.c
index 677815a8ade3de3a298b8326679d1e65e8d0218a..451d4b934f4cfbabd395052e981b7e8e103f37ac 100644 (file)
@@ -8,7 +8,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 \r
 #include "UsbMouse.h"\r
 \r
-EFI_DRIVER_BINDING_PROTOCOL gUsbMouseDriverBinding = {\r
+EFI_DRIVER_BINDING_PROTOCOL  gUsbMouseDriverBinding = {\r
   USBMouseDriverBindingSupported,\r
   USBMouseDriverBindingStart,\r
   USBMouseDriverBindingStop,\r
@@ -32,11 +32,11 @@ EFI_DRIVER_BINDING_PROTOCOL gUsbMouseDriverBinding = {
 EFI_STATUS\r
 EFIAPI\r
 USBMouseDriverBindingEntryPoint (\r
-  IN EFI_HANDLE           ImageHandle,\r
-  IN EFI_SYSTEM_TABLE     *SystemTable\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  EFI_STATUS              Status;\r
+  EFI_STATUS  Status;\r
 \r
   Status = EfiLibInstallDriverBindingComponentName2 (\r
              ImageHandle,\r
@@ -51,7 +51,6 @@ USBMouseDriverBindingEntryPoint (
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   Check whether USB mouse driver supports this device.\r
 \r
@@ -66,18 +65,18 @@ USBMouseDriverBindingEntryPoint (
 EFI_STATUS\r
 EFIAPI\r
 USBMouseDriverBindingSupported (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN EFI_HANDLE                     Controller,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
   )\r
 {\r
-  EFI_STATUS          Status;\r
-  EFI_USB_IO_PROTOCOL *UsbIo;\r
+  EFI_STATUS           Status;\r
+  EFI_USB_IO_PROTOCOL  *UsbIo;\r
 \r
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiUsbIoProtocolGuid,\r
-                  (VOID **) &UsbIo,\r
+                  (VOID **)&UsbIo,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
@@ -96,20 +95,19 @@ USBMouseDriverBindingSupported (
   }\r
 \r
   gBS->CloseProtocol (\r
-        Controller,\r
-        &gEfiUsbIoProtocolGuid,\r
-        This->DriverBindingHandle,\r
-        Controller\r
-        );\r
+         Controller,\r
+         &gEfiUsbIoProtocolGuid,\r
+         This->DriverBindingHandle,\r
+         Controller\r
+         );\r
 \r
   return Status;\r
 }\r
 \r
-\r
 /**\r
   Starts the mouse device with this driver.\r
 \r
-  This function consumes USB I/O Portocol, intializes USB mouse device,\r
+  This function consumes USB I/O Protocol, initializes USB mouse device,\r
   installs Simple Pointer Protocol, and submits Asynchronous Interrupt\r
   Transfer to manage the USB mouse device.\r
 \r
@@ -128,22 +126,22 @@ USBMouseDriverBindingSupported (
 EFI_STATUS\r
 EFIAPI\r
 USBMouseDriverBindingStart (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN EFI_HANDLE                     Controller,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
   )\r
 {\r
-  EFI_STATUS                  Status;\r
-  EFI_USB_IO_PROTOCOL         *UsbIo;\r
-  USB_MOUSE_DEV               *UsbMouseDevice;\r
-  UINT8                       EndpointNumber;\r
-  EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;\r
-  UINT8                       Index;\r
-  UINT8                       EndpointAddr;\r
-  UINT8                       PollingInterval;\r
-  UINT8                       PacketSize;\r
-  BOOLEAN                     Found;\r
-  EFI_TPL                     OldTpl;\r
+  EFI_STATUS                   Status;\r
+  EFI_USB_IO_PROTOCOL          *UsbIo;\r
+  USB_MOUSE_DEV                *UsbMouseDevice;\r
+  UINT8                        EndpointNumber;\r
+  EFI_USB_ENDPOINT_DESCRIPTOR  EndpointDescriptor;\r
+  UINT8                        Index;\r
+  UINT8                        EndpointAddr;\r
+  UINT8                        PollingInterval;\r
+  UINT8                        PacketSize;\r
+  BOOLEAN                      Found;\r
+  EFI_TPL                      OldTpl;\r
 \r
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
   //\r
@@ -152,7 +150,7 @@ USBMouseDriverBindingStart (
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiUsbIoProtocolGuid,\r
-                  (VOID **) &UsbIo,\r
+                  (VOID **)&UsbIo,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
@@ -173,7 +171,7 @@ USBMouseDriverBindingStart (
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiDevicePathProtocolGuid,\r
-                  (VOID **) &UsbMouseDevice->DevicePath,\r
+                  (VOID **)&UsbMouseDevice->DevicePath,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -203,7 +201,7 @@ USBMouseDriverBindingStart (
   EndpointNumber = UsbMouseDevice->InterfaceDescriptor.NumEndpoints;\r
 \r
   //\r
-  // Traverse endpoints to find interrupt endpoint\r
+  // Traverse endpoints to find interrupt endpoint IN\r
   //\r
   Found = FALSE;\r
   for (Index = 0; Index < EndpointNumber; Index++) {\r
@@ -213,11 +211,13 @@ USBMouseDriverBindingStart (
              &EndpointDescriptor\r
              );\r
 \r
-    if ((EndpointDescriptor.Attributes & (BIT0 | BIT1)) == USB_ENDPOINT_INTERRUPT) {\r
+    if (((EndpointDescriptor.Attributes & (BIT0 | BIT1)) == USB_ENDPOINT_INTERRUPT) &&\r
+        ((EndpointDescriptor.EndpointAddress & USB_ENDPOINT_DIR_IN) != 0))\r
+    {\r
       //\r
       // We only care interrupt endpoint here\r
       //\r
-      CopyMem(&UsbMouseDevice->IntEndpointDescriptor, &EndpointDescriptor, sizeof(EndpointDescriptor));\r
+      CopyMem (&UsbMouseDevice->IntEndpointDescriptor, &EndpointDescriptor, sizeof (EndpointDescriptor));\r
       Found = TRUE;\r
       break;\r
     }\r
@@ -264,9 +264,9 @@ USBMouseDriverBindingStart (
   //\r
   // Initialize and install EFI Simple Pointer Protocol.\r
   //\r
-  UsbMouseDevice->SimplePointerProtocol.GetState  = GetMouseState;\r
-  UsbMouseDevice->SimplePointerProtocol.Reset     = UsbMouseReset;\r
-  UsbMouseDevice->SimplePointerProtocol.Mode      = &UsbMouseDevice->Mode;\r
+  UsbMouseDevice->SimplePointerProtocol.GetState = GetMouseState;\r
+  UsbMouseDevice->SimplePointerProtocol.Reset    = UsbMouseReset;\r
+  UsbMouseDevice->SimplePointerProtocol.Mode     = &UsbMouseDevice->Mode;\r
 \r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_WAIT,\r
@@ -306,7 +306,7 @@ USBMouseDriverBindingStart (
   //\r
   EndpointAddr    = UsbMouseDevice->IntEndpointDescriptor.EndpointAddress;\r
   PollingInterval = UsbMouseDevice->IntEndpointDescriptor.Interval;\r
-  PacketSize      = (UINT8) (UsbMouseDevice->IntEndpointDescriptor.MaxPacketSize);\r
+  PacketSize      = (UINT8)(UsbMouseDevice->IntEndpointDescriptor.MaxPacketSize);\r
 \r
   Status = UsbIo->UsbAsyncInterruptTransfer (\r
                     UsbIo,\r
@@ -350,17 +350,17 @@ USBMouseDriverBindingStart (
 \r
   return EFI_SUCCESS;\r
 \r
-//\r
-// Error handler\r
-//\r
+  //\r
+  // Error handler\r
+  //\r
 ErrorExit:\r
   if (EFI_ERROR (Status)) {\r
     gBS->CloseProtocol (\r
-          Controller,\r
-          &gEfiUsbIoProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
+           Controller,\r
+           &gEfiUsbIoProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           Controller\r
+           );\r
 \r
     if (UsbMouseDevice != NULL) {\r
       if ((UsbMouseDevice->SimplePointerProtocol).WaitForInput != NULL) {\r
@@ -377,7 +377,6 @@ ErrorExit1:
   return Status;\r
 }\r
 \r
-\r
 /**\r
   Stop the USB mouse device handled by this driver.\r
 \r
@@ -394,21 +393,21 @@ ErrorExit1:
 EFI_STATUS\r
 EFIAPI\r
 USBMouseDriverBindingStop (\r
-  IN  EFI_DRIVER_BINDING_PROTOCOL   *This,\r
-  IN  EFI_HANDLE                    Controller,\r
-  IN  UINTN                         NumberOfChildren,\r
-  IN  EFI_HANDLE                    *ChildHandleBuffer\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN  EFI_HANDLE                   Controller,\r
+  IN  UINTN                        NumberOfChildren,\r
+  IN  EFI_HANDLE                   *ChildHandleBuffer\r
   )\r
 {\r
-  EFI_STATUS                  Status;\r
-  USB_MOUSE_DEV               *UsbMouseDevice;\r
-  EFI_SIMPLE_POINTER_PROTOCOL *SimplePointerProtocol;\r
-  EFI_USB_IO_PROTOCOL         *UsbIo;\r
+  EFI_STATUS                   Status;\r
+  USB_MOUSE_DEV                *UsbMouseDevice;\r
+  EFI_SIMPLE_POINTER_PROTOCOL  *SimplePointerProtocol;\r
+  EFI_USB_IO_PROTOCOL          *UsbIo;\r
 \r
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiSimplePointerProtocolGuid,\r
-                  (VOID **) &SimplePointerProtocol,\r
+                  (VOID **)&SimplePointerProtocol,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -477,10 +476,8 @@ USBMouseDriverBindingStop (
   FreePool (UsbMouseDevice);\r
 \r
   return EFI_SUCCESS;\r
-\r
 }\r
 \r
-\r
 /**\r
   Uses USB I/O to check whether the device is a USB mouse device.\r
 \r
@@ -492,7 +489,7 @@ USBMouseDriverBindingStop (
 **/\r
 BOOLEAN\r
 IsUsbMouse (\r
-  IN  EFI_USB_IO_PROTOCOL     *UsbIo\r
+  IN  EFI_USB_IO_PROTOCOL  *UsbIo\r
   )\r
 {\r
   EFI_STATUS                    Status;\r
@@ -513,14 +510,14 @@ IsUsbMouse (
   if ((InterfaceDescriptor.InterfaceClass == CLASS_HID) &&\r
       (InterfaceDescriptor.InterfaceSubClass == SUBCLASS_BOOT) &&\r
       (InterfaceDescriptor.InterfaceProtocol == PROTOCOL_MOUSE)\r
-      ) {\r
+      )\r
+  {\r
     return TRUE;\r
   }\r
 \r
   return FALSE;\r
 }\r
 \r
-\r
 /**\r
   Initialize the USB mouse device.\r
 \r
@@ -538,20 +535,20 @@ IsUsbMouse (
 **/\r
 EFI_STATUS\r
 InitializeUsbMouseDevice (\r
-  IN OUT USB_MOUSE_DEV           *UsbMouseDev\r
+  IN OUT USB_MOUSE_DEV  *UsbMouseDev\r
   )\r
 {\r
-  EFI_USB_IO_PROTOCOL       *UsbIo;\r
-  UINT8                     Protocol;\r
-  EFI_STATUS                Status;\r
-  EFI_USB_HID_DESCRIPTOR    *MouseHidDesc;\r
-  UINT8                     *ReportDesc;\r
-  EFI_USB_CONFIG_DESCRIPTOR ConfigDesc;\r
-  VOID                      *Buf;\r
-  UINT32                    TransferResult;\r
-  UINT16                    Total;\r
-  USB_DESC_HEAD             *Head;\r
-  BOOLEAN                   Start;\r
+  EFI_USB_IO_PROTOCOL        *UsbIo;\r
+  UINT8                      Protocol;\r
+  EFI_STATUS                 Status;\r
+  EFI_USB_HID_DESCRIPTOR     *MouseHidDesc;\r
+  UINT8                      *ReportDesc;\r
+  EFI_USB_CONFIG_DESCRIPTOR  ConfigDesc;\r
+  VOID                       *Buf;\r
+  UINT32                     TransferResult;\r
+  UINT16                     Total;\r
+  USB_DESC_HEAD              *Head;\r
+  BOOLEAN                    Start;\r
 \r
   UsbIo = UsbMouseDev->UsbIo;\r
 \r
@@ -588,9 +585,9 @@ InitializeUsbMouseDevice (
     return Status;\r
   }\r
 \r
-  Total = 0;\r
-  Start = FALSE;\r
-  Head  = (USB_DESC_HEAD *)Buf;\r
+  Total        = 0;\r
+  Start        = FALSE;\r
+  Head         = (USB_DESC_HEAD *)Buf;\r
   MouseHidDesc = NULL;\r
 \r
   //\r
@@ -601,19 +598,23 @@ InitializeUsbMouseDevice (
   while (Total < ConfigDesc.TotalLength) {\r
     if (Head->Type == USB_DESC_TYPE_INTERFACE) {\r
       if ((((USB_INTERFACE_DESCRIPTOR *)Head)->InterfaceNumber == UsbMouseDev->InterfaceDescriptor.InterfaceNumber) &&\r
-        (((USB_INTERFACE_DESCRIPTOR *)Head)->AlternateSetting == UsbMouseDev->InterfaceDescriptor.AlternateSetting)) {\r
+          (((USB_INTERFACE_DESCRIPTOR *)Head)->AlternateSetting == UsbMouseDev->InterfaceDescriptor.AlternateSetting))\r
+      {\r
         Start = TRUE;\r
       }\r
     }\r
+\r
     if (Start && (Head->Type == USB_DESC_TYPE_ENDPOINT)) {\r
       break;\r
     }\r
+\r
     if (Start && (Head->Type == USB_DESC_TYPE_HID)) {\r
       MouseHidDesc = (EFI_USB_HID_DESCRIPTOR *)Head;\r
       break;\r
     }\r
+\r
     Total = Total + (UINT16)Head->Len;\r
-    Head  = (USB_DESC_HEAD*)((UINT8 *)Buf + Total);\r
+    Head  = (USB_DESC_HEAD *)((UINT8 *)Buf + Total);\r
   }\r
 \r
   if (MouseHidDesc == NULL) {\r
@@ -667,9 +668,11 @@ InitializeUsbMouseDevice (
   if (UsbMouseDev->NumberOfButtons >= 1) {\r
     UsbMouseDev->Mode.LeftButton = TRUE;\r
   }\r
+\r
   if (UsbMouseDev->NumberOfButtons > 1) {\r
     UsbMouseDev->Mode.RightButton = TRUE;\r
   }\r
+\r
   UsbMouseDev->Mode.ResolutionX = 8;\r
   UsbMouseDev->Mode.ResolutionY = 8;\r
   UsbMouseDev->Mode.ResolutionZ = 0;\r
@@ -719,7 +722,6 @@ InitializeUsbMouseDevice (
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   Handler function for USB mouse's asynchronous interrupt transfer.\r
 \r
@@ -740,19 +742,19 @@ InitializeUsbMouseDevice (
 EFI_STATUS\r
 EFIAPI\r
 OnMouseInterruptComplete (\r
-  IN  VOID        *Data,\r
-  IN  UINTN       DataLength,\r
-  IN  VOID        *Context,\r
-  IN  UINT32      Result\r
+  IN  VOID    *Data,\r
+  IN  UINTN   DataLength,\r
+  IN  VOID    *Context,\r
+  IN  UINT32  Result\r
   )\r
 {\r
-  USB_MOUSE_DEV       *UsbMouseDevice;\r
-  EFI_USB_IO_PROTOCOL *UsbIo;\r
-  UINT8               EndpointAddr;\r
-  UINT32              UsbResult;\r
+  USB_MOUSE_DEV        *UsbMouseDevice;\r
+  EFI_USB_IO_PROTOCOL  *UsbIo;\r
+  UINT8                EndpointAddr;\r
+  UINT32               UsbResult;\r
 \r
-  UsbMouseDevice  = (USB_MOUSE_DEV *) Context;\r
-  UsbIo           = UsbMouseDevice->UsbIo;\r
+  UsbMouseDevice = (USB_MOUSE_DEV *)Context;\r
+  UsbIo          = UsbMouseDevice->UsbIo;\r
 \r
   if (Result != EFI_USB_NOERROR) {\r
     //\r
@@ -801,7 +803,7 @@ OnMouseInterruptComplete (
   //\r
   // If no error and no data, just return EFI_SUCCESS.\r
   //\r
-  if (DataLength == 0 || Data == NULL) {\r
+  if ((DataLength == 0) || (Data == NULL)) {\r
     return EFI_SUCCESS;\r
   }\r
 \r
@@ -823,13 +825,13 @@ OnMouseInterruptComplete (
 \r
   UsbMouseDevice->StateChanged = TRUE;\r
 \r
-  UsbMouseDevice->State.LeftButton  = (BOOLEAN) ((*(UINT8 *) Data & BIT0) != 0);\r
-  UsbMouseDevice->State.RightButton = (BOOLEAN) ((*(UINT8 *) Data & BIT1) != 0);\r
-  UsbMouseDevice->State.RelativeMovementX += *((INT8 *) Data + 1);\r
-  UsbMouseDevice->State.RelativeMovementY += *((INT8 *) Data + 2);\r
+  UsbMouseDevice->State.LeftButton         = (BOOLEAN)((*(UINT8 *)Data & BIT0) != 0);\r
+  UsbMouseDevice->State.RightButton        = (BOOLEAN)((*(UINT8 *)Data & BIT1) != 0);\r
+  UsbMouseDevice->State.RelativeMovementX += *((INT8 *)Data + 1);\r
+  UsbMouseDevice->State.RelativeMovementY += *((INT8 *)Data + 2);\r
 \r
   if (DataLength > 3) {\r
-    UsbMouseDevice->State.RelativeMovementZ += *((INT8 *) Data + 3);\r
+    UsbMouseDevice->State.RelativeMovementZ += *((INT8 *)Data + 3);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -856,7 +858,7 @@ GetMouseState (
   OUT  EFI_SIMPLE_POINTER_STATE     *MouseState\r
   )\r
 {\r
-  USB_MOUSE_DEV *MouseDev;\r
+  USB_MOUSE_DEV  *MouseDev;\r
 \r
   if (MouseState == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -884,12 +886,11 @@ GetMouseState (
   MouseDev->State.RelativeMovementY = 0;\r
   MouseDev->State.RelativeMovementZ = 0;\r
 \r
-  MouseDev->StateChanged            = FALSE;\r
+  MouseDev->StateChanged = FALSE;\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   Resets the pointer device hardware.\r
 \r
@@ -904,13 +905,13 @@ GetMouseState (
 EFI_STATUS\r
 EFIAPI\r
 UsbMouseReset (\r
-  IN EFI_SIMPLE_POINTER_PROTOCOL    *This,\r
-  IN BOOLEAN                        ExtendedVerification\r
+  IN EFI_SIMPLE_POINTER_PROTOCOL  *This,\r
+  IN BOOLEAN                      ExtendedVerification\r
   )\r
 {\r
-  USB_MOUSE_DEV       *UsbMouseDevice;\r
+  USB_MOUSE_DEV  *UsbMouseDevice;\r
 \r
-  UsbMouseDevice  = USB_MOUSE_DEV_FROM_MOUSE_PROTOCOL (This);\r
+  UsbMouseDevice = USB_MOUSE_DEV_FROM_MOUSE_PROTOCOL (This);\r
 \r
   REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
     EFI_PROGRESS_CODE,\r
@@ -940,13 +941,13 @@ UsbMouseReset (
 VOID\r
 EFIAPI\r
 UsbMouseWaitForInput (\r
-  IN  EFI_EVENT               Event,\r
-  IN  VOID                    *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   )\r
 {\r
-  USB_MOUSE_DEV *UsbMouseDev;\r
+  USB_MOUSE_DEV  *UsbMouseDev;\r
 \r
-  UsbMouseDev = (USB_MOUSE_DEV *) Context;\r
+  UsbMouseDev = (USB_MOUSE_DEV *)Context;\r
 \r
   //\r
   // If there's input from mouse, signal the event.\r
@@ -972,16 +973,16 @@ UsbMouseWaitForInput (
 VOID\r
 EFIAPI\r
 USBMouseRecoveryHandler (\r
-  IN    EFI_EVENT    Event,\r
-  IN    VOID         *Context\r
+  IN    EFI_EVENT  Event,\r
+  IN    VOID       *Context\r
   )\r
 {\r
-  USB_MOUSE_DEV       *UsbMouseDev;\r
-  EFI_USB_IO_PROTOCOL *UsbIo;\r
+  USB_MOUSE_DEV        *UsbMouseDev;\r
+  EFI_USB_IO_PROTOCOL  *UsbIo;\r
 \r
-  UsbMouseDev = (USB_MOUSE_DEV *) Context;\r
+  UsbMouseDev = (USB_MOUSE_DEV *)Context;\r
 \r
-  UsbIo       = UsbMouseDev->UsbIo;\r
+  UsbIo = UsbMouseDev->UsbIo;\r
 \r
   //\r
   // Re-submit Asynchronous Interrupt Transfer for recovery.\r