TianoCore EDK2 master
Loading...
Searching...
No Matches
UsbMouseAbsolutePointer.h File Reference

Go to the source code of this file.

Data Structures

struct  USB_DESC_HEAD
 
struct  USB_MOUSE_BUTTON_DATA
 
struct  USB_MOUSE_ABSOLUTE_POINTER_DEV
 
union  HID_DATA
 
struct  HID_ITEM
 

Macros

#define CLASS_HID   3
 
#define SUBCLASS_BOOT   1
 
#define PROTOCOL_MOUSE   2
 
#define BOOT_PROTOCOL   0
 
#define REPORT_PROTOCOL   1
 
#define USB_MOUSE_ABSOLUTE_POINTER_DEV_SIGNATURE   SIGNATURE_32 ('u', 'm', 's', 't')
 
#define USB_MOUSE_ABSOLUTE_POINTER_DEV_FROM_MOUSE_PROTOCOL(a)    CR(a, USB_MOUSE_ABSOLUTE_POINTER_DEV, AbsolutePointerProtocol, USB_MOUSE_ABSOLUTE_POINTER_DEV_SIGNATURE)
 

Functions

EFI_STATUS EFIAPI USBMouseAbsolutePointerDriverBindingSupported (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
 
EFI_STATUS EFIAPI USBMouseAbsolutePointerDriverBindingStart (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
 
EFI_STATUS EFIAPI USBMouseAbsolutePointerDriverBindingStop (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
 
EFI_STATUS EFIAPI UsbMouseAbsolutePointerComponentNameGetDriverName (IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName)
 
EFI_STATUS EFIAPI UsbMouseAbsolutePointerComponentNameGetControllerName (IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName)
 
EFI_STATUS EFIAPI GetMouseAbsolutePointerState (IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, OUT EFI_ABSOLUTE_POINTER_STATE *State)
 
EFI_STATUS EFIAPI UsbMouseAbsolutePointerReset (IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
 
VOID EFIAPI UsbMouseAbsolutePointerWaitForInput (IN EFI_EVENT Event, IN VOID *Context)
 
BOOLEAN IsUsbMouse (IN EFI_USB_IO_PROTOCOL *UsbIo)
 
EFI_STATUS InitializeUsbMouseDevice (IN USB_MOUSE_ABSOLUTE_POINTER_DEV *UsbMouseAbsolutePointerDev)
 
EFI_STATUS EFIAPI OnMouseInterruptComplete (IN VOID *Data, IN UINTN DataLength, IN VOID *Context, IN UINT32 Result)
 
VOID EFIAPI USBMouseRecoveryHandler (IN EFI_EVENT Event, IN VOID *Context)
 
EFI_STATUS ParseMouseReportDescriptor (OUT USB_MOUSE_ABSOLUTE_POINTER_DEV *UsbMouseAbsolutePointer, IN UINT8 *ReportDescriptor, IN UINTN ReportSize)
 

Variables

EFI_DRIVER_BINDING_PROTOCOL gUsbMouseAbsolutePointerDriverBinding
 
EFI_COMPONENT_NAME_PROTOCOL gUsbMouseAbsolutePointerComponentName
 
EFI_COMPONENT_NAME2_PROTOCOL gUsbMouseAbsolutePointerComponentName2
 

Detailed Description

Helper routine and corresponding data struct used by USB Mouse Absolute Pointer Driver.

Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file UsbMouseAbsolutePointer.h.

Macro Definition Documentation

◆ BOOT_PROTOCOL

#define BOOT_PROTOCOL   0

Definition at line 33 of file UsbMouseAbsolutePointer.h.

◆ CLASS_HID

#define CLASS_HID   3

Definition at line 29 of file UsbMouseAbsolutePointer.h.

◆ PROTOCOL_MOUSE

#define PROTOCOL_MOUSE   2

Definition at line 31 of file UsbMouseAbsolutePointer.h.

◆ REPORT_PROTOCOL

#define REPORT_PROTOCOL   1

Definition at line 34 of file UsbMouseAbsolutePointer.h.

◆ SUBCLASS_BOOT

#define SUBCLASS_BOOT   1

Definition at line 30 of file UsbMouseAbsolutePointer.h.

◆ USB_MOUSE_ABSOLUTE_POINTER_DEV_FROM_MOUSE_PROTOCOL

#define USB_MOUSE_ABSOLUTE_POINTER_DEV_FROM_MOUSE_PROTOCOL (   a)     CR(a, USB_MOUSE_ABSOLUTE_POINTER_DEV, AbsolutePointerProtocol, USB_MOUSE_ABSOLUTE_POINTER_DEV_SIGNATURE)

Definition at line 104 of file UsbMouseAbsolutePointer.h.

◆ USB_MOUSE_ABSOLUTE_POINTER_DEV_SIGNATURE

#define USB_MOUSE_ABSOLUTE_POINTER_DEV_SIGNATURE   SIGNATURE_32 ('u', 'm', 's', 't')

Definition at line 36 of file UsbMouseAbsolutePointer.h.

Function Documentation

◆ GetMouseAbsolutePointerState()

EFI_STATUS EFIAPI GetMouseAbsolutePointerState ( IN EFI_ABSOLUTE_POINTER_PROTOCOL This,
OUT EFI_ABSOLUTE_POINTER_STATE State 
)

Retrieves the current state of a pointer device.

Parameters
ThisA pointer to the EFI_ABSOLUTE_POINTER_PROTOCOL instance.
MouseStateA pointer to the state information on the pointer device.
Return values
EFI_SUCCESSThe state of the pointer device was returned in State.
EFI_NOT_READYThe state of the pointer device has not changed since the last call to GetState().
EFI_DEVICE_ERRORA device error occurred while attempting to retrieve the pointer device's current state.
EFI_INVALID_PARAMETERState is NULL.

Definition at line 876 of file UsbMouseAbsolutePointer.c.

◆ InitializeUsbMouseDevice()

EFI_STATUS InitializeUsbMouseDevice ( IN USB_MOUSE_ABSOLUTE_POINTER_DEV UsbMouseAbsolutePointerDev)

Initialize the USB mouse device.

This function retrieves and parses HID report descriptor, and initializes state of USB_MOUSE_ABSOLUTE_POINTER_DEV. Then it sets indefinite idle rate for the device. Finally it creates event for delayed recovery, which deals with device error.

Parameters
UsbMouseAbsolutePointerDevDevice instance to be initialized.
Return values
EFI_SUCCESSUSB mouse device successfully initialized.
EFI_UNSUPPORTEDHID descriptor type is not report descriptor.
OtherUSB mouse device was not initialized successfully.

Definition at line 537 of file UsbMouseAbsolutePointer.c.

◆ IsUsbMouse()

BOOLEAN IsUsbMouse ( IN EFI_USB_IO_PROTOCOL UsbIo)

Uses USB I/O to check whether the device is a USB mouse device.

Parameters
UsbIoPointer to a USB I/O protocol instance.
Return values
TRUEDevice is a USB mouse device.
FALSEDevice is a not USB mouse device.

Definition at line 491 of file UsbMouseAbsolutePointer.c.

◆ OnMouseInterruptComplete()

EFI_STATUS EFIAPI OnMouseInterruptComplete ( IN VOID *  Data,
IN UINTN  DataLength,
IN VOID *  Context,
IN UINT32  Result 
)

Handler function for USB mouse's asynchronous interrupt transfer.

This function is the handler function for USB mouse's asynchronous interrupt transfer to manage the mouse. It parses data returned from asynchronous interrupt transfer, and get button and movement state.

Parameters
DataA pointer to a buffer that is filled with key data which is retrieved via asynchronous interrupt transfer.
DataLengthIndicates the size of the data buffer.
ContextPointing to USB_KB_DEV instance.
ResultIndicates the result of the asynchronous interrupt transfer.
Return values
EFI_SUCCESSAsynchronous interrupt transfer is handled successfully.
EFI_DEVICE_ERRORHardware error occurs.

Definition at line 744 of file UsbMouseAbsolutePointer.c.

◆ ParseMouseReportDescriptor()

EFI_STATUS ParseMouseReportDescriptor ( OUT USB_MOUSE_ABSOLUTE_POINTER_DEV UsbMouseAbsolutePointer,
IN UINT8 *  ReportDescriptor,
IN UINTN  ReportSize 
)

Parse Mouse Report Descriptor.

According to USB HID Specification, report descriptors are composed of pieces of information. Each piece of information is called an Item. This function retrieves each item from the report descriptor and updates USB_MOUSE_ABSOLUTE_POINTER_DEV.

Parameters
UsbMouseAbsolutePointerThe instance of USB_MOUSE_ABSOLUTE_POINTER_DEV
ReportDescriptorReport descriptor to parse
ReportSizeReport descriptor size
Return values
EFI_SUCCESSReport descriptor successfully parsed.
EFI_UNSUPPORTEDReport descriptor contains long item.

Definition at line 242 of file MouseHid.c.

◆ UsbMouseAbsolutePointerComponentNameGetControllerName()

EFI_STATUS EFIAPI UsbMouseAbsolutePointerComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL This,
IN EFI_HANDLE  ControllerHandle,
IN EFI_HANDLE ChildHandle  OPTIONAL,
IN CHAR8 *  Language,
OUT CHAR16 **  ControllerName 
)

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.

Parameters
ThisA pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance.
ControllerHandleThe handle of a controller that the driver specified by This is managing. This handle specifies the controller whose name is to be returned.
ChildHandleThe 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.
LanguageA 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 4646 or ISO 639-2 language code format.
ControllerNameA 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.
Return values
EFI_SUCCESSThe Unicode string for the user readable name in the language specified by Language for the driver specified by This was returned in DriverName.
EFI_INVALID_PARAMETERControllerHandle is NULL.
EFI_INVALID_PARAMETERChildHandle is not NULL and it is not a valid EFI_HANDLE.
EFI_INVALID_PARAMETERLanguage is NULL.
EFI_INVALID_PARAMETERControllerName is NULL.
EFI_UNSUPPORTEDThe driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle.
EFI_UNSUPPORTEDThe driver specified by This does not support the language specified by Language.

Definition at line 145 of file ComponentName.c.

◆ UsbMouseAbsolutePointerComponentNameGetDriverName()

EFI_STATUS EFIAPI UsbMouseAbsolutePointerComponentNameGetDriverName ( IN EFI_COMPONENT_NAME_PROTOCOL This,
IN CHAR8 *  Language,
OUT CHAR16 **  DriverName 
)

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.

Parameters
ThisA pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance.
LanguageA 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 4646 or ISO 639-2 language code format.
DriverNameA 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.
Return values
EFI_SUCCESSThe Unicode string for the Driver specified by This and the language specified by Language was returned in DriverName.
EFI_INVALID_PARAMETERLanguage is NULL.
EFI_INVALID_PARAMETERDriverName is NULL.
EFI_UNSUPPORTEDThe driver specified by This does not support the language specified by Language.

Definition at line 70 of file ComponentName.c.

◆ USBMouseAbsolutePointerDriverBindingStart()

EFI_STATUS EFIAPI USBMouseAbsolutePointerDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN EFI_DEVICE_PATH_PROTOCOL RemainingDevicePath 
)

Starts the mouse device with this driver.

This function consumes USB I/O Protocol, initializes USB mouse device, installs Absolute Pointer Protocol, and submits Asynchronous Interrupt Transfer to manage the USB mouse device.

Parameters
ThisThe driver binding instance.
ControllerHandle of device to bind driver to.
RemainingDevicePathOptional parameter use to pick a specific child device to start.
Return values
EFI_SUCCESSThis driver supports this device.
EFI_UNSUPPORTEDThis driver does not support this device.
EFI_DEVICE_ERRORThis driver cannot be started due to device Error.
EFI_OUT_OF_RESOURCESCan't allocate memory resources.
EFI_ALREADY_STARTEDThis driver has been started.

Definition at line 128 of file UsbMouseAbsolutePointer.c.

◆ USBMouseAbsolutePointerDriverBindingStop()

EFI_STATUS EFIAPI USBMouseAbsolutePointerDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN UINTN  NumberOfChildren,
IN EFI_HANDLE ChildHandleBuffer 
)

Stop the USB mouse device handled by this driver.

Parameters
ThisThe driver binding protocol.
ControllerThe controller to release.
NumberOfChildrenThe number of handles in ChildHandleBuffer.
ChildHandleBufferThe array of child handle.
Return values
EFI_SUCCESSThe device was stopped.
EFI_UNSUPPORTEDAbsolute Pointer Protocol is not installed on Controller.
OthersFail to uninstall protocols attached on the device.

Definition at line 395 of file UsbMouseAbsolutePointer.c.

◆ USBMouseAbsolutePointerDriverBindingSupported()

EFI_STATUS EFIAPI USBMouseAbsolutePointerDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN EFI_DEVICE_PATH_PROTOCOL RemainingDevicePath 
)

Check whether USB Mouse Absolute Pointer Driver supports this device.

Parameters
ThisThe driver binding protocol.
ControllerThe controller handle to check.
RemainingDevicePathThe remaining device path.
Return values
EFI_SUCCESSThe driver supports this controller.
otherThis device isn't supported.

Definition at line 67 of file UsbMouseAbsolutePointer.c.

◆ UsbMouseAbsolutePointerReset()

EFI_STATUS EFIAPI UsbMouseAbsolutePointerReset ( IN EFI_ABSOLUTE_POINTER_PROTOCOL This,
IN BOOLEAN  ExtendedVerification 
)

Resets the pointer device hardware.

Parameters
ThisA pointer to the EFI_ABSOLUTE_POINTER_PROTOCOL instance.
ExtendedVerificationIndicates that the driver may perform a more exhaustive verification operation of the device during reset.
Return values
EFI_SUCCESSThe device was reset.
EFI_DEVICE_ERRORThe device is not functioning correctly and could not be reset.

Definition at line 921 of file UsbMouseAbsolutePointer.c.

◆ UsbMouseAbsolutePointerWaitForInput()

VOID EFIAPI UsbMouseAbsolutePointerWaitForInput ( IN EFI_EVENT  Event,
IN VOID *  Context 
)

Event notification function for EFI_ABSOLUTE_POINTER_PROTOCOL.WaitForInput event.

Parameters
EventEvent to be signaled when there's input from mouse.
ContextPoints to USB_MOUSE_ABSOLUTE_POINTER_DEV instance.

Definition at line 966 of file UsbMouseAbsolutePointer.c.

◆ USBMouseRecoveryHandler()

VOID EFIAPI USBMouseRecoveryHandler ( IN EFI_EVENT  Event,
IN VOID *  Context 
)

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.

Parameters
EventThe Delayed Recovery event.
ContextPoints to the USB_MOUSE_ABSOLUTE_POINTER_DEV instance.

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.

Parameters
EventThe Delayed Recovery event.
ContextPoints to the USB_MOUSE_DEV instance.

Definition at line 998 of file UsbMouseAbsolutePointer.c.

Variable Documentation

◆ gUsbMouseAbsolutePointerComponentName

EFI_COMPONENT_NAME_PROTOCOL gUsbMouseAbsolutePointerComponentName
extern

Definition at line 14 of file ComponentName.c.

◆ gUsbMouseAbsolutePointerComponentName2

EFI_COMPONENT_NAME2_PROTOCOL gUsbMouseAbsolutePointerComponentName2
extern

Definition at line 23 of file ComponentName.c.

◆ gUsbMouseAbsolutePointerDriverBinding

EFI_DRIVER_BINDING_PROTOCOL gUsbMouseAbsolutePointerDriverBinding
extern

Definition at line 11 of file UsbMouseAbsolutePointer.c.