From 52e6faea636bbd42360d8e151e1abb86df2b3dfc Mon Sep 17 00:00:00 2001 From: eric_tian Date: Wed, 28 Nov 2007 03:43:57 +0000 Subject: change "Ps2MouseSimulateTouchPad" to "Ps2MouseAbsolutePointer" for more clearing the name's meaning. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4339 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.c | 36 +- .../Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.h | 2 +- .../Ps2MouseSimulateTouchPadDxe/ComponentName.c | 38 +- .../Ps2MouseAbsolutePointer.c | 799 +++++++++++++++++++++ .../Ps2MouseAbsolutePointer.h | 301 ++++++++ .../Ps2MouseAbsolutePointerDxe.inf | 58 ++ .../Ps2MouseAbsolutePointerDxe.msa | 98 +++ .../Ps2MouseSimulateTouchPad.c | 799 --------------------- .../Ps2MouseSimulateTouchPad.h | 301 -------- .../Ps2MouseSimulateTouchPadDxe.inf | 58 -- .../Ps2MouseSimulateTouchPadDxe.msa | 98 --- 11 files changed, 1294 insertions(+), 1294 deletions(-) create mode 100644 IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointer.c create mode 100644 IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointer.h create mode 100644 IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointerDxe.inf create mode 100644 IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointerDxe.msa delete mode 100644 IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPad.c delete mode 100644 IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPad.h delete mode 100644 IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPadDxe.inf delete mode 100644 IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPadDxe.msa (limited to 'IntelFrameworkModulePkg/Bus/Isa') diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.c b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.c index 719a650cb6..895c1c25a5 100644 --- a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.c +++ b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.c @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ -#include "Ps2MouseSimulateTouchPad.h" +#include "Ps2MouseAbsolutePointer.h" #include "CommPs2.h" UINT8 SampleRateTbl[MAX_SR] = { 0xa, 0x14, 0x28, 0x3c, 0x50, 0x64, 0xc8 }; @@ -430,7 +430,7 @@ Returns: EFI_STATUS PS2MouseGetPacket ( - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev ) /*++ @@ -474,15 +474,15 @@ Returns: // // Read mouse first byte data, if failed, immediately return // - KbcDisableAux (MouseSimulateTouchPadDev->IsaIo); - Status = PS2MouseRead (MouseSimulateTouchPadDev->IsaIo, &Data, &Count, State); + KbcDisableAux (MouseAbsolutePointerDev->IsaIo); + Status = PS2MouseRead (MouseAbsolutePointerDev->IsaIo, &Data, &Count, State); if (EFI_ERROR (Status)) { - KbcEnableAux (MouseSimulateTouchPadDev->IsaIo); + KbcEnableAux (MouseAbsolutePointerDev->IsaIo); return EFI_NOT_READY; } if (Count != 1) { - KbcEnableAux (MouseSimulateTouchPadDev->IsaIo); + KbcEnableAux (MouseAbsolutePointerDev->IsaIo); return EFI_NOT_READY; } @@ -490,18 +490,18 @@ Returns: Packet[0] = Data; State = PS2_READ_DATA_BYTE; - CheckKbStatus (MouseSimulateTouchPadDev->IsaIo, &KeyboardEnable); - KbcDisableKb (MouseSimulateTouchPadDev->IsaIo); - KbcEnableAux (MouseSimulateTouchPadDev->IsaIo); + CheckKbStatus (MouseAbsolutePointerDev->IsaIo, &KeyboardEnable); + KbcDisableKb (MouseAbsolutePointerDev->IsaIo); + KbcEnableAux (MouseAbsolutePointerDev->IsaIo); } break; case PS2_READ_DATA_BYTE: Count = 2; - Status = PS2MouseRead (MouseSimulateTouchPadDev->IsaIo, (Packet + 1), &Count, State); + Status = PS2MouseRead (MouseAbsolutePointerDev->IsaIo, (Packet + 1), &Count, State); if (EFI_ERROR (Status)) { if (KeyboardEnable) { - KbcEnableKb (MouseSimulateTouchPadDev->IsaIo); + KbcEnableKb (MouseAbsolutePointerDev->IsaIo); } return EFI_NOT_READY; @@ -509,7 +509,7 @@ Returns: if (Count != 2) { if (KeyboardEnable) { - KbcEnableKb (MouseSimulateTouchPadDev->IsaIo); + KbcEnableKb (MouseAbsolutePointerDev->IsaIo); } return EFI_NOT_READY; @@ -520,7 +520,7 @@ Returns: case PS2_PROCESS_PACKET: if (KeyboardEnable) { - KbcEnableKb (MouseSimulateTouchPadDev->IsaIo); + KbcEnableKb (MouseAbsolutePointerDev->IsaIo); } // // Decode the packet @@ -558,11 +558,11 @@ Returns: // // Update mouse state // - MouseSimulateTouchPadDev->State.CurrentX += RelativeMovementX; - MouseSimulateTouchPadDev->State.CurrentY -= RelativeMovementY; - MouseSimulateTouchPadDev->State.CurrentZ = 0; - MouseSimulateTouchPadDev->State.ActiveButtons = (UINT8) (LButton || RButton) & 0x3; - MouseSimulateTouchPadDev->StateChanged = TRUE; + MouseAbsolutePointerDev->State.CurrentX += RelativeMovementX; + MouseAbsolutePointerDev->State.CurrentY -= RelativeMovementY; + MouseAbsolutePointerDev->State.CurrentZ = 0; + MouseAbsolutePointerDev->State.ActiveButtons = (UINT8) (LButton || RButton) & 0x3; + MouseAbsolutePointerDev->StateChanged = TRUE; return EFI_SUCCESS; } diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.h b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.h index 9702cb5dcf..869ac01992 100644 --- a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.h +++ b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/CommPs2.h @@ -343,7 +343,7 @@ Returns: EFI_STATUS PS2MouseGetPacket ( - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev ) /*++ diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/ComponentName.c b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/ComponentName.c index d59fabee6d..c20e875e51 100644 --- a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/ComponentName.c +++ b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/ComponentName.c @@ -11,28 +11,28 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ -#include "Ps2MouseSimulateTouchPad.h" +#include "Ps2MouseAbsolutePointer.h" // // EFI Component Name Protocol // -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gPs2MouseSimulateTouchPadComponentName = { - Ps2MouseSimulateTouchPadComponentNameGetDriverName, - Ps2MouseSimulateTouchPadComponentNameGetControllerName, +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gPs2MouseAbsolutePointerComponentName = { + Ps2MouseAbsolutePointerComponentNameGetDriverName, + Ps2MouseAbsolutePointerComponentNameGetControllerName, "eng" }; // // EFI Component Name 2 Protocol // -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gPs2MouseSimulateTouchPadComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) Ps2MouseSimulateTouchPadComponentNameGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) Ps2MouseSimulateTouchPadComponentNameGetControllerName, +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gPs2MouseAbsolutePointerComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) Ps2MouseAbsolutePointerComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) Ps2MouseAbsolutePointerComponentNameGetControllerName, "en" }; -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mPs2MouseSimulateTouchPadDriverNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mPs2MouseAbsolutePointerDriverNameTable[] = { { "eng;en", L"faked PS/2 Touchpad Driver" @@ -84,7 +84,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mPs2MouseSimulateTouchPad **/ EFI_STATUS EFIAPI -Ps2MouseSimulateTouchPadComponentNameGetDriverName ( +Ps2MouseAbsolutePointerComponentNameGetDriverName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName @@ -93,9 +93,9 @@ Ps2MouseSimulateTouchPadComponentNameGetDriverName ( return LookupUnicodeString2 ( Language, This->SupportedLanguages, - mPs2MouseSimulateTouchPadDriverNameTable, + mPs2MouseAbsolutePointerDriverNameTable, DriverName, - (BOOLEAN)(This == &gPs2MouseSimulateTouchPadComponentName) + (BOOLEAN)(This == &gPs2MouseAbsolutePointerComponentName) ); } @@ -169,7 +169,7 @@ Ps2MouseSimulateTouchPadComponentNameGetDriverName ( **/ EFI_STATUS EFIAPI -Ps2MouseSimulateTouchPadComponentNameGetControllerName ( +Ps2MouseAbsolutePointerComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, @@ -179,7 +179,7 @@ Ps2MouseSimulateTouchPadComponentNameGetControllerName ( { EFI_STATUS Status; EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointerProtocol; - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev; + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev; EFI_ISA_IO_PROTOCOL *IsaIoProtocol; // @@ -195,7 +195,7 @@ Ps2MouseSimulateTouchPadComponentNameGetControllerName ( ControllerHandle, &gEfiIsaIoProtocolGuid, (VOID **) &IsaIoProtocol, - gPS2MouseSimulateTouchPadDriver.DriverBindingHandle, + gPS2MouseAbsolutePointerDriver.DriverBindingHandle, ControllerHandle, EFI_OPEN_PROTOCOL_BY_DRIVER ); @@ -203,7 +203,7 @@ Ps2MouseSimulateTouchPadComponentNameGetControllerName ( gBS->CloseProtocol ( ControllerHandle, &gEfiIsaIoProtocolGuid, - gPS2MouseSimulateTouchPadDriver.DriverBindingHandle, + gPS2MouseAbsolutePointerDriver.DriverBindingHandle, ControllerHandle ); @@ -220,7 +220,7 @@ Ps2MouseSimulateTouchPadComponentNameGetControllerName ( ControllerHandle, &gEfiAbsolutePointerProtocolGuid, (VOID **) &AbsolutePointerProtocol, - gPS2MouseSimulateTouchPadDriver.DriverBindingHandle, + gPS2MouseAbsolutePointerDriver.DriverBindingHandle, ControllerHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL ); @@ -228,13 +228,13 @@ Ps2MouseSimulateTouchPadComponentNameGetControllerName ( return Status; } - MouseSimulateTouchPadDev = PS2_MOUSE_SIMULATE_TOUCHPAD_DEV_FROM_THIS (AbsolutePointerProtocol); + MouseAbsolutePointerDev = PS2_MOUSE_ABSOLUTE_POINTER_DEV_FROM_THIS (AbsolutePointerProtocol); return LookupUnicodeString2 ( Language, This->SupportedLanguages, - MouseSimulateTouchPadDev->ControllerNameTable, + MouseAbsolutePointerDev->ControllerNameTable, ControllerName, - (BOOLEAN)(This == &gPs2MouseSimulateTouchPadComponentName) + (BOOLEAN)(This == &gPs2MouseAbsolutePointerComponentName) ); } diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointer.c b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointer.c new file mode 100644 index 0000000000..930b49fe9a --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointer.c @@ -0,0 +1,799 @@ +/**@file + A faked PS/2 Touchpad driver. Routines that interacts with callers, + conforming to EFI driver model + +Copyright (c) 2006 - 2007, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "Ps2MouseAbsolutePointer.h" +#include "CommPs2.h" + +// +// DriverBinding Protocol Instance +// +EFI_DRIVER_BINDING_PROTOCOL gPS2MouseAbsolutePointerDriver = { + PS2MouseAbsolutePointerDriverSupported, + PS2MouseAbsolutePointerDriverStart, + PS2MouseAbsolutePointerDriverStop, + 0x1, + NULL, + NULL +}; + +EFI_STATUS +EFIAPI +PS2MouseAbsolutePointerDriverSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ) +/*++ + +Routine Description: + + ControllerDriver Protocol Method + +Arguments: + +Returns: + +--*/ +// GC_TODO: This - add argument and description to function comment +// GC_TODO: Controller - add argument and description to function comment +// GC_TODO: RemainingDevicePath - add argument and description to function comment +{ + EFI_STATUS Status; + EFI_ISA_IO_PROTOCOL *IsaIo; + + Status = EFI_SUCCESS; + + // + // Open the IO Abstraction(s) needed to perform the supported test + // + Status = gBS->OpenProtocol ( + Controller, + &gEfiIsaIoProtocolGuid, + (VOID **) &IsaIo, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + if (EFI_ERROR (Status)) { + return Status; + } + // + // Use the ISA I/O Protocol to see if Controller is the Mouse controller + // + switch (IsaIo->ResourceList->Device.HID) { + case EISA_PNP_ID (0xF03): + // + // Microsoft PS/2 style mouse + // + case EISA_PNP_ID (0xF13): + // + // PS/2 Port for PS/2-style Mice + // + break; + + case EISA_PNP_ID (0x303): + // + // IBM Enhanced (101/102-key, PS/2 mouse support) + // + if (IsaIo->ResourceList->Device.UID == 1) { + break; + } + + default: + Status = EFI_UNSUPPORTED; + break; + } + // + // Close the I/O Abstraction(s) used to perform the supported test + // + gBS->CloseProtocol ( + Controller, + &gEfiIsaIoProtocolGuid, + This->DriverBindingHandle, + Controller + ); + + return Status; +} + +EFI_STATUS +EFIAPI +PS2MouseAbsolutePointerDriverStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ) +/*++ + +Routine Description: + Start protocol interfaces for the mouse device handles. + +Arguments: + This - Protocol instance pointer. + Controller - Handle of device to bind driver to. + RemainingDevicePath - Not used. + +Returns: + EFI_SUCCESS - This driver is added to DeviceHandle. + other - Errors occurred. + +--*/ +{ + EFI_STATUS Status; + EFI_STATUS EmptyStatus; + EFI_ISA_IO_PROTOCOL *IsaIo; + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev; + UINT8 Data; + EFI_TPL OldTpl; + EFI_STATUS_CODE_VALUE StatusCode; + EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; + + StatusCode = 0; + MouseAbsolutePointerDev = NULL; + IsaIo = NULL; + + // + // Open the device path protocol + // + Status = gBS->OpenProtocol ( + Controller, + &gEfiDevicePathProtocolGuid, + (VOID **) &ParentDevicePath, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + if (EFI_ERROR (Status)) { + return Status; + } + // + // Report that the keyboard is being enabled + // + REPORT_STATUS_CODE_WITH_DEVICE_PATH ( + EFI_PROGRESS_CODE, + EFI_PERIPHERAL_MOUSE | EFI_P_PC_ENABLE, + ParentDevicePath + ); + + // + // Get the ISA I/O Protocol on Controller's handle + // + Status = gBS->OpenProtocol ( + Controller, + &gEfiIsaIoProtocolGuid, + (VOID **) &IsaIo, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + if (EFI_ERROR (Status)) { + gBS->CloseProtocol ( + Controller, + &gEfiDevicePathProtocolGuid, + This->DriverBindingHandle, + Controller + ); + return EFI_INVALID_PARAMETER; + } + // + // Raise TPL to avoid keyboard operation impact + // + OldTpl = gBS->RaiseTPL (TPL_NOTIFY); + + // + // Allocate private data + // + MouseAbsolutePointerDev = AllocateZeroPool (sizeof (PS2_MOUSE_ABSOLUTE_POINTER_DEV)); + if (MouseAbsolutePointerDev == NULL) { + Status = EFI_OUT_OF_RESOURCES; + goto ErrorExit; + } + // + // Setup the device instance + // + MouseAbsolutePointerDev->Signature = PS2_MOUSE_ABSOLUTE_POINTER_DEV_SIGNATURE; + MouseAbsolutePointerDev->Handle = Controller; + MouseAbsolutePointerDev->SampleRate = SSR_20; + MouseAbsolutePointerDev->Resolution = CMR4; + MouseAbsolutePointerDev->Scaling = SF1; + MouseAbsolutePointerDev->DataPackageSize = 3; + MouseAbsolutePointerDev->IsaIo = IsaIo; + MouseAbsolutePointerDev->DevicePath = ParentDevicePath; + + // + // Resolution = 4 counts/mm + // + MouseAbsolutePointerDev->Mode.AbsoluteMaxX = 1024; + MouseAbsolutePointerDev->Mode.AbsoluteMinX = 0; + MouseAbsolutePointerDev->Mode.AbsoluteMaxY = 798; + MouseAbsolutePointerDev->Mode.AbsoluteMinY = 0; + MouseAbsolutePointerDev->Mode.AbsoluteMaxZ = 0; + MouseAbsolutePointerDev->Mode.AbsoluteMinZ = 0; + MouseAbsolutePointerDev->Mode.Attributes = 0x03; + + MouseAbsolutePointerDev->AbsolutePointerProtocol.Reset = MouseAbsolutePointerReset; + MouseAbsolutePointerDev->AbsolutePointerProtocol.GetState = MouseAbsolutePointerGetState; + MouseAbsolutePointerDev->AbsolutePointerProtocol.Mode = &(MouseAbsolutePointerDev->Mode); + + // + // Initialize keyboard controller if necessary + // + IsaIo->Io.Read (IsaIo, EfiIsaIoWidthUint8, KBC_CMD_STS_PORT, 1, &Data); + if ((Data & KBC_SYSF) != KBC_SYSF) { + Status = KbcSelfTest (IsaIo); + if (EFI_ERROR (Status)) { + StatusCode = EFI_PERIPHERAL_MOUSE | EFI_P_EC_CONTROLLER_ERROR; + goto ErrorExit; + } + } + + KbcEnableAux (IsaIo); + + REPORT_STATUS_CODE_WITH_DEVICE_PATH ( + EFI_PROGRESS_CODE, + EFI_PERIPHERAL_MOUSE | EFI_P_PC_PRESENCE_DETECT, + ParentDevicePath + ); + + // + // Reset the mouse + // + Status = MouseAbsolutePointerDev->AbsolutePointerProtocol.Reset (&MouseAbsolutePointerDev->AbsolutePointerProtocol, TRUE); + if (EFI_ERROR (Status)) { + // + // mouse not connected + // + Status = EFI_SUCCESS; + StatusCode = EFI_PERIPHERAL_MOUSE | EFI_P_EC_NOT_DETECTED; + goto ErrorExit; + } + // + // Setup the WaitForKey event + // + Status = gBS->CreateEvent ( + EVT_NOTIFY_WAIT, + TPL_NOTIFY, + MouseAbsolutePointerWaitForInput, + MouseAbsolutePointerDev, + &((MouseAbsolutePointerDev->AbsolutePointerProtocol).WaitForInput) + ); + if (EFI_ERROR (Status)) { + Status = EFI_OUT_OF_RESOURCES; + goto ErrorExit; + } + // + // Setup a periodic timer, used to poll mouse state + // + Status = gBS->CreateEvent ( + EVT_TIMER | EVT_NOTIFY_SIGNAL, + TPL_NOTIFY, + PollMouseAbsolutePointer, + MouseAbsolutePointerDev, + &MouseAbsolutePointerDev->TimerEvent + ); + if (EFI_ERROR (Status)) { + Status = EFI_OUT_OF_RESOURCES; + goto ErrorExit; + } + // + // Start timer to poll mouse (100 samples per second) + // + Status = gBS->SetTimer (MouseAbsolutePointerDev->TimerEvent, TimerPeriodic, 100000); + if (EFI_ERROR (Status)) { + Status = EFI_OUT_OF_RESOURCES; + goto ErrorExit; + } + + MouseAbsolutePointerDev->ControllerNameTable = NULL; + AddUnicodeString2 ( + "eng", + gPs2MouseAbsolutePointerComponentName.SupportedLanguages, + &MouseAbsolutePointerDev->ControllerNameTable, + L"Faked PS/2 Touchpad Device", + TRUE + ); + AddUnicodeString2 ( + "en", + gPs2MouseAbsolutePointerComponentName2.SupportedLanguages, + &MouseAbsolutePointerDev->ControllerNameTable, + L"Faked PS/2 Touchpad Device", + FALSE + ); + + + // + // Install protocol interfaces for the mouse device. + // + Status = gBS->InstallMultipleProtocolInterfaces ( + &Controller, + &gEfiAbsolutePointerProtocolGuid, + &MouseAbsolutePointerDev->AbsolutePointerProtocol, + NULL + ); + if (EFI_ERROR (Status)) { + goto ErrorExit; + } + + gBS->RestoreTPL (OldTpl); + + return Status; + +ErrorExit: + + KbcDisableAux (IsaIo); + + if (StatusCode != 0) { + REPORT_STATUS_CODE_WITH_DEVICE_PATH ( + EFI_ERROR_CODE | EFI_ERROR_MINOR, + StatusCode, + ParentDevicePath + ); + } + + if ((MouseAbsolutePointerDev != NULL) && (MouseAbsolutePointerDev->AbsolutePointerProtocol.WaitForInput != NULL)) { + gBS->CloseEvent (MouseAbsolutePointerDev->AbsolutePointerProtocol.WaitForInput); + } + + if ((MouseAbsolutePointerDev != NULL) && (MouseAbsolutePointerDev->TimerEvent != NULL)) { + gBS->CloseEvent (MouseAbsolutePointerDev->TimerEvent); + } + + if ((MouseAbsolutePointerDev != NULL) && (MouseAbsolutePointerDev->ControllerNameTable != NULL)) { + FreeUnicodeStringTable (MouseAbsolutePointerDev->ControllerNameTable); + } + // + // Since there will be no timer handler for mouse input any more, + // exhaust input data just in case there is still mouse data left + // + EmptyStatus = EFI_SUCCESS; + while (!EFI_ERROR (EmptyStatus)) { + EmptyStatus = In8042Data (IsaIo, &Data); + } + + if (MouseAbsolutePointerDev != NULL) { + gBS->FreePool (MouseAbsolutePointerDev); + } + + gBS->CloseProtocol ( + Controller, + &gEfiDevicePathProtocolGuid, + This->DriverBindingHandle, + Controller + ); + + gBS->CloseProtocol ( + Controller, + &gEfiIsaIoProtocolGuid, + This->DriverBindingHandle, + Controller + ); + + gBS->RestoreTPL (OldTpl); + + return Status; +} + +EFI_STATUS +EFIAPI +PS2MouseAbsolutePointerDriverStop ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer + ) +/*++ + + Routine Description: + + Arguments: + + Returns: + +--*/ +// GC_TODO: This - add argument and description to function comment +// GC_TODO: Controller - add argument and description to function comment +// GC_TODO: NumberOfChildren - add argument and description to function comment +// GC_TODO: ChildHandleBuffer - add argument and description to function comment +// GC_TODO: EFI_SUCCESS - add return value to function comment +// GC_TODO: EFI_SUCCESS - add return value to function comment +{ + EFI_STATUS Status; + EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointerProtocol; + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev; + UINT8 Data; + + Status = gBS->OpenProtocol ( + Controller, + &gEfiAbsolutePointerProtocolGuid, + (VOID **) &AbsolutePointerProtocol, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + if (EFI_ERROR (Status)) { + return EFI_SUCCESS; + } + + MouseAbsolutePointerDev = PS2_MOUSE_ABSOLUTE_POINTER_DEV_FROM_THIS (AbsolutePointerProtocol); + + // + // Report that the keyboard is being disabled + // + REPORT_STATUS_CODE_WITH_DEVICE_PATH ( + EFI_PROGRESS_CODE, + EFI_PERIPHERAL_MOUSE | EFI_P_PC_DISABLE, + MouseAbsolutePointerDev->DevicePath + ); + + Status = gBS->UninstallProtocolInterface ( + Controller, + &gEfiAbsolutePointerProtocolGuid, + &MouseAbsolutePointerDev->AbsolutePointerProtocol + ); + if (EFI_ERROR (Status)) { + return Status; + } + // + // Disable mouse on keyboard controller + // + KbcDisableAux (MouseAbsolutePointerDev->IsaIo); + + // + // Cancel mouse data polling timer, close timer event + // + gBS->SetTimer (MouseAbsolutePointerDev->TimerEvent, TimerCancel, 0); + gBS->CloseEvent (MouseAbsolutePointerDev->TimerEvent); + + // + // Since there will be no timer handler for mouse input any more, + // exhaust input data just in case there is still mouse data left + // + Status = EFI_SUCCESS; + while (!EFI_ERROR (Status)) { + Status = In8042Data (MouseAbsolutePointerDev->IsaIo, &Data); + } + + gBS->CloseEvent (MouseAbsolutePointerDev->AbsolutePointerProtocol.WaitForInput); + FreeUnicodeStringTable (MouseAbsolutePointerDev->ControllerNameTable); + gBS->FreePool (MouseAbsolutePointerDev); + + gBS->CloseProtocol ( + Controller, + &gEfiDevicePathProtocolGuid, + This->DriverBindingHandle, + Controller + ); + + gBS->CloseProtocol ( + Controller, + &gEfiIsaIoProtocolGuid, + This->DriverBindingHandle, + Controller + ); + + return EFI_SUCCESS; +} + +EFI_STATUS +EFIAPI +MouseAbsolutePointerReset ( + IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ) +/*++ + +Routine Description: + + Reset the Mouse and do BAT test for it, if ExtendedVerification isTRUE and there is a mouse device connectted to system + +Arguments: + + This - Pointer of simple pointer Protocol. + ExtendedVerification - Whether configure mouse parameters. True: do; FALSE: skip. + +Returns: + + EFI_SUCCESS - The command byte is written successfully. + EFI_DEVICE_ERROR - Errors occurred during reseting keyboard. + +--*/ +{ + EFI_STATUS Status; + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev; + EFI_TPL OldTpl; + BOOLEAN KeyboardEnable; + UINT8 Data; + + MouseAbsolutePointerDev = PS2_MOUSE_ABSOLUTE_POINTER_DEV_FROM_THIS (This); + + // + // Report reset progress code + // + REPORT_STATUS_CODE_WITH_DEVICE_PATH ( + EFI_PROGRESS_CODE, + EFI_PERIPHERAL_MOUSE | EFI_P_PC_RESET, + MouseAbsolutePointerDev->DevicePath + ); + + KeyboardEnable = FALSE; + + // + // Raise TPL to avoid keyboard operation impact + // + OldTpl = gBS->RaiseTPL (TPL_NOTIFY); + + ZeroMem (&MouseAbsolutePointerDev->State, sizeof (EFI_ABSOLUTE_POINTER_STATE)); + MouseAbsolutePointerDev->StateChanged = FALSE; + + // + // Exhaust input data + // + Status = EFI_SUCCESS; + while (!EFI_ERROR (Status)) { + Status = In8042Data (MouseAbsolutePointerDev->IsaIo, &Data); + } + + CheckKbStatus (MouseAbsolutePointerDev->IsaIo, &KeyboardEnable); + + KbcDisableKb (MouseAbsolutePointerDev->IsaIo); + + MouseAbsolutePointerDev->IsaIo->Io.Read (MouseAbsolutePointerDev->IsaIo, EfiIsaIoWidthUint8, KBC_CMD_STS_PORT, 1, &Data); + + // + // if there's data block on KBC data port, read it out + // + if ((Data & KBC_OUTB) == KBC_OUTB) { + MouseAbsolutePointerDev->IsaIo->Io.Read (MouseAbsolutePointerDev->IsaIo, EfiIsaIoWidthUint8, KBC_DATA_PORT, 1, &Data); + } + + Status = EFI_SUCCESS; + // + // The PS2 mouse driver reset behavior is always successfully return no matter wheater or not there is mouse connected to system. + // This behavior is needed by performance speed. The following mouse command only succeessfully finish when mouse device is + // connected to system, so if PS2 mouse device not connect to system or user not ask for, we skip the mouse configuration and enabling + // + if (ExtendedVerification && CheckMouseAbsolutePointerConnect (MouseAbsolutePointerDev)) { + // + // Send mouse reset command and set mouse default configure + // + Status = PS2MouseReset (MouseAbsolutePointerDev->IsaIo); + if (EFI_ERROR (Status)) { + Status = EFI_DEVICE_ERROR; + goto Exit; + } + + Status = PS2MouseSetSampleRate (MouseAbsolutePointerDev->IsaIo, MouseAbsolutePointerDev->SampleRate); + if (EFI_ERROR (Status)) { + Status = EFI_DEVICE_ERROR; + goto Exit; + } + + Status = PS2MouseSetResolution (MouseAbsolutePointerDev->IsaIo, MouseAbsolutePointerDev->Resolution); + if (EFI_ERROR (Status)) { + Status = EFI_DEVICE_ERROR; + goto Exit; + } + + Status = PS2MouseSetScaling (MouseAbsolutePointerDev->IsaIo, MouseAbsolutePointerDev->Scaling); + if (EFI_ERROR (Status)) { + Status = EFI_DEVICE_ERROR; + goto Exit; + } + + Status = PS2MouseEnable (MouseAbsolutePointerDev->IsaIo); + if (EFI_ERROR (Status)) { + Status = EFI_DEVICE_ERROR; + goto Exit; + } + } +Exit: + gBS->RestoreTPL (OldTpl); + + if (KeyboardEnable) { + KbcEnableKb (MouseAbsolutePointerDev->IsaIo); + } + + return Status; +} + +BOOLEAN +CheckMouseAbsolutePointerConnect ( + IN PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev + ) +/*++ + +Routine Description: + + Check whether there is Ps/2 mouse device in system + +Arguments: + + PS2_MOUSE_DEV - Mouse Private Data Structure + +Returns: + + TRUE - Keyboard in System. + FALSE - Keyboard not in System. + +--*/ +{ + EFI_STATUS Status; + + Status = PS2MouseEnable (MouseAbsolutePointerDev->IsaIo); + if (!EFI_ERROR (Status)) { + return TRUE; + } + + return FALSE; +} + +EFI_STATUS +EFIAPI +MouseAbsolutePointerGetState ( + IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, + IN OUT EFI_ABSOLUTE_POINTER_STATE *State + ) +/*++ + +Routine Description: + + GC_TODO: Add function description + +Arguments: + + This - GC_TODO: add argument description + State - GC_TODO: add argument description + +Returns: + + EFI_INVALID_PARAMETER - GC_TODO: Add description for return value + EFI_NOT_READY - GC_TODO: Add description for return value + EFI_SUCCESS - GC_TODO: Add description for return value + +--*/ +{ + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev; + EFI_TPL OldTpl; + + MouseAbsolutePointerDev = PS2_MOUSE_ABSOLUTE_POINTER_DEV_FROM_THIS (This); + + if (State == NULL) { + return EFI_INVALID_PARAMETER; + } + + if (!MouseAbsolutePointerDev->StateChanged) { + return EFI_NOT_READY; + } + + OldTpl = gBS->RaiseTPL (TPL_NOTIFY); + CopyMem (State, &(MouseAbsolutePointerDev->State), sizeof (EFI_ABSOLUTE_POINTER_STATE)); + + // + // clear mouse state + // + MouseAbsolutePointerDev->State.CurrentX = 0; + MouseAbsolutePointerDev->State.CurrentY = 0; + MouseAbsolutePointerDev->State.CurrentZ = 0; + MouseAbsolutePointerDev->State.ActiveButtons = 0x0; + MouseAbsolutePointerDev->StateChanged = FALSE; + gBS->RestoreTPL (OldTpl); + + return EFI_SUCCESS; +} + +VOID +EFIAPI +MouseAbsolutePointerWaitForInput ( + IN EFI_EVENT Event, + IN VOID *Context + ) +/*++ + +Routine Description: + + Event notification function for SIMPLE_POINTER.WaitForInput event + Signal the event if there is input from mouse + +Arguments: + +Returns: + +--*/ +// GC_TODO: Event - add argument and description to function comment +// GC_TODO: Context - add argument and description to function comment +{ + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev; + + MouseAbsolutePointerDev = (PS2_MOUSE_ABSOLUTE_POINTER_DEV *) Context; + + // + // Someone is waiting on the mouse event, if there's + // input from mouse, signal the event + // + if (MouseAbsolutePointerDev->StateChanged) { + gBS->SignalEvent (Event); + } + +} + +VOID +EFIAPI +PollMouseAbsolutePointer( + IN EFI_EVENT Event, + IN VOID *Context + ) +/*++ + +Routine Description: + + Event notification function for TimerEvent event + If mouse device is connected to system, try to get the mouse packet data + +Arguments: + + Event - TimerEvent in PS2_MOUSE_DEV + Context - Pointer to PS2_MOUSE_DEV structure + +Returns: + + None + +--*/ +{ + PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev; + + MouseAbsolutePointerDev = (PS2_MOUSE_ABSOLUTE_POINTER_DEV *) Context; + + // + // Polling mouse packet data + // + PS2MouseGetPacket (MouseAbsolutePointerDev); +} + +/** + The user Entry Point for module Ps2MouseAbsolutePointer. The user code starts with this function. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + @retval other Some error occurs when executing this entry point. + +**/ +EFI_STATUS +EFIAPI +InitializePs2MouseAbsolutePointer( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + // + // Install driver model protocol(s). + // + Status = EfiLibInstallDriverBindingComponentName2 ( + ImageHandle, + SystemTable, + &gPS2MouseAbsolutePointerDriver, + ImageHandle, + &gPs2MouseAbsolutePointerComponentName, + &gPs2MouseAbsolutePointerComponentName2 + ); + ASSERT_EFI_ERROR (Status); + + + return Status; +} diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointer.h b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointer.h new file mode 100644 index 0000000000..46cdff9db7 --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointer.h @@ -0,0 +1,301 @@ +/**@file + A Ps2MouseAbsolutePointer driver header file + +Copyright (c) 2006 - 2007, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _PS2MOUSEABSOLUTEPOINTER_H +#define _PS2MOUSEABSOLUTEPOINTER_H + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// +// PS/2 mouse sample rate +// +typedef enum { + SSR_10, + SSR_20, + SSR_40, + SSR_60, + SSR_80, + SSR_100, + SSR_200, + MAX_SR +} MOUSE_SR; + +// +// PS/2 mouse resolution +// +typedef enum { + CMR1, + CMR2, + CMR4, + CMR8, + MAX_CMR +} MOUSE_RE; + +// +// PS/2 mouse scaling +// +typedef enum { + SF1, + SF2 +} MOUSE_SF; + +// +// Driver Private Data +// +#define PS2_MOUSE_ABSOLUTE_POINTER_DEV_SIGNATURE EFI_SIGNATURE_32 ('p', '2', 's', 't') + +typedef struct { + UINTN Signature; + + EFI_HANDLE Handle; + EFI_ABSOLUTE_POINTER_PROTOCOL AbsolutePointerProtocol; + EFI_ABSOLUTE_POINTER_STATE State; + EFI_ABSOLUTE_POINTER_MODE Mode; + BOOLEAN StateChanged; + + // + // PS2 Mouse device specific information + // + MOUSE_SR SampleRate; + MOUSE_RE Resolution; + MOUSE_SF Scaling; + UINT8 DataPackageSize; + + EFI_ISA_IO_PROTOCOL *IsaIo; + + EFI_EVENT TimerEvent; + + EFI_UNICODE_STRING_TABLE *ControllerNameTable; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; +} PS2_MOUSE_ABSOLUTE_POINTER_DEV; + +#define PS2_MOUSE_ABSOLUTE_POINTER_DEV_FROM_THIS(a) CR (a, PS2_MOUSE_ABSOLUTE_POINTER_DEV, AbsolutePointerProtocol, PS2_MOUSE_ABSOLUTE_POINTER_DEV_SIGNATURE) + +// +// Global Variables +// +extern EFI_DRIVER_BINDING_PROTOCOL gPS2MouseAbsolutePointerDriver; +extern EFI_COMPONENT_NAME_PROTOCOL gPs2MouseAbsolutePointerComponentName; +extern EFI_COMPONENT_NAME2_PROTOCOL gPs2MouseAbsolutePointerComponentName2; + +// +// Function prototypes +// +EFI_STATUS +EFIAPI +PS2MouseAbsolutePointerDriverSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ); + +EFI_STATUS +EFIAPI +PS2MouseAbsolutePointerDriverStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ); + +EFI_STATUS +EFIAPI +PS2MouseAbsolutePointerDriverStop ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer + ); + +// +// EFI Component Name Functions +// +/** + 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. + + @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or + EFI_COMPONENT_NAME_PROTOCOL instance. + + @param Language[in] A 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 3066 or ISO 639-2 language code format. + + @param DriverName[out] A 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. + + @retval EFI_SUCCESS The Unicode string for the Driver specified by + This and the language specified by Language was + returned in DriverName. + + @retval EFI_INVALID_PARAMETER Language is NULL. + + @retval EFI_INVALID_PARAMETER DriverName is NULL. + + @retval EFI_UNSUPPORTED The driver specified by This does not support + the language specified by Language. + +**/ +EFI_STATUS +EFIAPI +Ps2MouseAbsolutePointerComponentNameGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ); + + +/** + 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. + + @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or + EFI_COMPONENT_NAME_PROTOCOL instance. + + @param ControllerHandle[in] The handle of a controller that the driver + specified by This is managing. This handle + specifies the controller whose name is to be + returned. + + @param ChildHandle[in] The 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. + + @param Language[in] A 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 3066 or ISO 639-2 language code format. + + @param ControllerName[out] A 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. + + @retval EFI_SUCCESS The Unicode string for the user readable name in + the language specified by Language for the + driver specified by This was returned in + DriverName. + + @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. + + @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid + EFI_HANDLE. + + @retval EFI_INVALID_PARAMETER Language is NULL. + + @retval EFI_INVALID_PARAMETER ControllerName is NULL. + + @retval EFI_UNSUPPORTED The driver specified by This is not currently + managing the controller specified by + ControllerHandle and ChildHandle. + + @retval EFI_UNSUPPORTED The driver specified by This does not support + the language specified by Language. + +**/ +EFI_STATUS +EFIAPI +Ps2MouseAbsolutePointerComponentNameGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ); + + +EFI_STATUS +EFIAPI +MouseAbsolutePointerReset ( + IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ); + +EFI_STATUS +EFIAPI +MouseAbsolutePointerGetState ( + IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, + IN OUT EFI_ABSOLUTE_POINTER_STATE *State + ); + +VOID +EFIAPI +MouseAbsolutePointerWaitForInput ( + IN EFI_EVENT Event, + IN VOID *Context + ); + +VOID +EFIAPI +PollMouseAbsolutePointer ( + IN EFI_EVENT Event, + IN VOID *Context + ); + +EFI_STATUS +In8042Data ( + IN EFI_ISA_IO_PROTOCOL *IsaIo, + IN OUT UINT8 *Data + ); +BOOLEAN +CheckMouseAbsolutePointerConnect ( + IN PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev + ); + +#endif diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointerDxe.inf b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointerDxe.inf new file mode 100644 index 0000000000..25c62c66d7 --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointerDxe.inf @@ -0,0 +1,58 @@ +#/** @file +# Ps2 Mouse Simulate TouchPad Driver +# +# This dirver directly uses IsaIo protocol service to support a faked Ps2 TouchPad work. +# Copyright (c) 2006 - 2007, Intel Corporation. +# +# Copyright (c) 2006 - 2007, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# +#**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = Ps2MouseAbsolutePointerDxe + FILE_GUID = 2899C94A-1FB6-4b1a-B96B-8364975303E0 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + ENTRY_POINT = InitializePs2MouseAbsolutePointer + +# VALID_ARCHITECTURES = IA32 X64 IPF EBC + +[Sources.common] + ComponentName.c + CommPs2.h + CommPs2.c + Ps2MouseAbsolutePointer.h + Ps2MouseAbsolutePointer.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec + +[LibraryClasses] + ReportStatusCodeLib + UefiBootServicesTableLib + MemoryAllocationLib + BaseMemoryLib + UefiLib + UefiDriverEntryPoint + DebugLib + +[Protocols] + gEfiIsaIoProtocolGuid # PROTOCOL TO_START + gEfiAbsolutePointerProtocolGuid # PROTOCOL BY_START + gEfiDevicePathProtocolGuid # PROTOCOL TO_START + diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointerDxe.msa b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointerDxe.msa new file mode 100644 index 0000000000..7509b324b4 --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseAbsolutePointerDxe.msa @@ -0,0 +1,98 @@ + + + + Ps2MouseAbsolutePointer + DXE_DRIVER + 2899C94A-1FB6-4b1a-B96B-8364975303E0 + 1.0 + Ps2 Mouse Absolute Pointer Driver + This dirver directly uses IsaIo protocol service to support a faked Ps2 touchpad work. + Copyright (c) 2006 - 2007, Intel Corporation. + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + Ps2MouseAbsolutePointer + + + + DebugLib + + + UefiDriverModelLib + + + UefiDriverEntryPoint + + + UefiLib + + + BaseMemoryLib + + + MemoryAllocationLib + + + UefiBootServicesTableLib + + + ReportStatusCodeLib + + + + Ps2MouseAbsolutePointer.c + Ps2MouseAbsolutePointer.h + CommPs2.c + CommPs2.h + ComponentName.c + + + + + + + + gEfiDevicePathProtocolGuid + + + gEfiAbsolutePointerProtocolGuid + + + gEfiIsaIoProtocolGuid + + + + + + EVENT_TYPE_RELATIVE_TIMER + Set up a time event to wait for the faked touchpad input + + + EVENT_TYPE_PERIODIC_TIMER + Set up a periodic timer to poll the faked touchpad state at a fixed interval + + + + + EVENT_TYPE_RELATIVE_TIMER + Signal an event whenever these is a pending event from the faked touchpad input + + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + gPS2MouseAbsolutePointerDriver + gPs2MouseAbsolutePointerComponentName + + + \ No newline at end of file diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPad.c b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPad.c deleted file mode 100644 index c787656205..0000000000 --- a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPad.c +++ /dev/null @@ -1,799 +0,0 @@ -/**@file - A faked PS/2 Touchpad driver. Routines that interacts with callers, - conforming to EFI driver model - -Copyright (c) 2006 - 2007, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include "Ps2MouseSimulateTouchPad.h" -#include "CommPs2.h" - -// -// DriverBinding Protocol Instance -// -EFI_DRIVER_BINDING_PROTOCOL gPS2MouseSimulateTouchPadDriver = { - PS2MouseSimulateTouchPadDriverSupported, - PS2MouseSimulateTouchPadDriverStart, - PS2MouseSimulateTouchPadDriverStop, - 0x1, - NULL, - NULL -}; - -EFI_STATUS -EFIAPI -PS2MouseSimulateTouchPadDriverSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath - ) -/*++ - -Routine Description: - - ControllerDriver Protocol Method - -Arguments: - -Returns: - ---*/ -// GC_TODO: This - add argument and description to function comment -// GC_TODO: Controller - add argument and description to function comment -// GC_TODO: RemainingDevicePath - add argument and description to function comment -{ - EFI_STATUS Status; - EFI_ISA_IO_PROTOCOL *IsaIo; - - Status = EFI_SUCCESS; - - // - // Open the IO Abstraction(s) needed to perform the supported test - // - Status = gBS->OpenProtocol ( - Controller, - &gEfiIsaIoProtocolGuid, - (VOID **) &IsaIo, - This->DriverBindingHandle, - Controller, - EFI_OPEN_PROTOCOL_BY_DRIVER - ); - if (EFI_ERROR (Status)) { - return Status; - } - // - // Use the ISA I/O Protocol to see if Controller is the Mouse controller - // - switch (IsaIo->ResourceList->Device.HID) { - case EISA_PNP_ID (0xF03): - // - // Microsoft PS/2 style mouse - // - case EISA_PNP_ID (0xF13): - // - // PS/2 Port for PS/2-style Mice - // - break; - - case EISA_PNP_ID (0x303): - // - // IBM Enhanced (101/102-key, PS/2 mouse support) - // - if (IsaIo->ResourceList->Device.UID == 1) { - break; - } - - default: - Status = EFI_UNSUPPORTED; - break; - } - // - // Close the I/O Abstraction(s) used to perform the supported test - // - gBS->CloseProtocol ( - Controller, - &gEfiIsaIoProtocolGuid, - This->DriverBindingHandle, - Controller - ); - - return Status; -} - -EFI_STATUS -EFIAPI -PS2MouseSimulateTouchPadDriverStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath - ) -/*++ - -Routine Description: - Start protocol interfaces for the mouse device handles. - -Arguments: - This - Protocol instance pointer. - Controller - Handle of device to bind driver to. - RemainingDevicePath - Not used. - -Returns: - EFI_SUCCESS - This driver is added to DeviceHandle. - other - Errors occurred. - ---*/ -{ - EFI_STATUS Status; - EFI_STATUS EmptyStatus; - EFI_ISA_IO_PROTOCOL *IsaIo; - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev; - UINT8 Data; - EFI_TPL OldTpl; - EFI_STATUS_CODE_VALUE StatusCode; - EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; - - StatusCode = 0; - MouseSimulateTouchPadDev = NULL; - IsaIo = NULL; - - // - // Open the device path protocol - // - Status = gBS->OpenProtocol ( - Controller, - &gEfiDevicePathProtocolGuid, - (VOID **) &ParentDevicePath, - This->DriverBindingHandle, - Controller, - EFI_OPEN_PROTOCOL_BY_DRIVER - ); - if (EFI_ERROR (Status)) { - return Status; - } - // - // Report that the keyboard is being enabled - // - REPORT_STATUS_CODE_WITH_DEVICE_PATH ( - EFI_PROGRESS_CODE, - EFI_PERIPHERAL_MOUSE | EFI_P_PC_ENABLE, - ParentDevicePath - ); - - // - // Get the ISA I/O Protocol on Controller's handle - // - Status = gBS->OpenProtocol ( - Controller, - &gEfiIsaIoProtocolGuid, - (VOID **) &IsaIo, - This->DriverBindingHandle, - Controller, - EFI_OPEN_PROTOCOL_BY_DRIVER - ); - if (EFI_ERROR (Status)) { - gBS->CloseProtocol ( - Controller, - &gEfiDevicePathProtocolGuid, - This->DriverBindingHandle, - Controller - ); - return EFI_INVALID_PARAMETER; - } - // - // Raise TPL to avoid keyboard operation impact - // - OldTpl = gBS->RaiseTPL (TPL_NOTIFY); - - // - // Allocate private data - // - MouseSimulateTouchPadDev = AllocateZeroPool (sizeof (PS2_MOUSE_SIMULATE_TOUCHPAD_DEV)); - if (MouseSimulateTouchPadDev == NULL) { - Status = EFI_OUT_OF_RESOURCES; - goto ErrorExit; - } - // - // Setup the device instance - // - MouseSimulateTouchPadDev->Signature = PS2_MOUSE_SIMULATE_TOUCHPAD_DEV_SIGNATURE; - MouseSimulateTouchPadDev->Handle = Controller; - MouseSimulateTouchPadDev->SampleRate = SSR_20; - MouseSimulateTouchPadDev->Resolution = CMR4; - MouseSimulateTouchPadDev->Scaling = SF1; - MouseSimulateTouchPadDev->DataPackageSize = 3; - MouseSimulateTouchPadDev->IsaIo = IsaIo; - MouseSimulateTouchPadDev->DevicePath = ParentDevicePath; - - // - // Resolution = 4 counts/mm - // - MouseSimulateTouchPadDev->Mode.AbsoluteMaxX = 1024; - MouseSimulateTouchPadDev->Mode.AbsoluteMinX = 0; - MouseSimulateTouchPadDev->Mode.AbsoluteMaxY = 798; - MouseSimulateTouchPadDev->Mode.AbsoluteMinY = 0; - MouseSimulateTouchPadDev->Mode.AbsoluteMaxZ = 0; - MouseSimulateTouchPadDev->Mode.AbsoluteMinZ = 0; - MouseSimulateTouchPadDev->Mode.Attributes = 0x03; - - MouseSimulateTouchPadDev->AbsolutePointerProtocol.Reset = MouseSimulateTouchPadReset; - MouseSimulateTouchPadDev->AbsolutePointerProtocol.GetState = MouseSimulateTouchPadGetState; - MouseSimulateTouchPadDev->AbsolutePointerProtocol.Mode = &(MouseSimulateTouchPadDev->Mode); - - // - // Initialize keyboard controller if necessary - // - IsaIo->Io.Read (IsaIo, EfiIsaIoWidthUint8, KBC_CMD_STS_PORT, 1, &Data); - if ((Data & KBC_SYSF) != KBC_SYSF) { - Status = KbcSelfTest (IsaIo); - if (EFI_ERROR (Status)) { - StatusCode = EFI_PERIPHERAL_MOUSE | EFI_P_EC_CONTROLLER_ERROR; - goto ErrorExit; - } - } - - KbcEnableAux (IsaIo); - - REPORT_STATUS_CODE_WITH_DEVICE_PATH ( - EFI_PROGRESS_CODE, - EFI_PERIPHERAL_MOUSE | EFI_P_PC_PRESENCE_DETECT, - ParentDevicePath - ); - - // - // Reset the mouse - // - Status = MouseSimulateTouchPadDev->AbsolutePointerProtocol.Reset (&MouseSimulateTouchPadDev->AbsolutePointerProtocol, TRUE); - if (EFI_ERROR (Status)) { - // - // mouse not connected - // - Status = EFI_SUCCESS; - StatusCode = EFI_PERIPHERAL_MOUSE | EFI_P_EC_NOT_DETECTED; - goto ErrorExit; - } - // - // Setup the WaitForKey event - // - Status = gBS->CreateEvent ( - EVT_NOTIFY_WAIT, - TPL_NOTIFY, - MouseSimulateTouchPadWaitForInput, - MouseSimulateTouchPadDev, - &((MouseSimulateTouchPadDev->AbsolutePointerProtocol).WaitForInput) - ); - if (EFI_ERROR (Status)) { - Status = EFI_OUT_OF_RESOURCES; - goto ErrorExit; - } - // - // Setup a periodic timer, used to poll mouse state - // - Status = gBS->CreateEvent ( - EVT_TIMER | EVT_NOTIFY_SIGNAL, - TPL_NOTIFY, - PollMouseSimulateTouchPad, - MouseSimulateTouchPadDev, - &MouseSimulateTouchPadDev->TimerEvent - ); - if (EFI_ERROR (Status)) { - Status = EFI_OUT_OF_RESOURCES; - goto ErrorExit; - } - // - // Start timer to poll mouse (100 samples per second) - // - Status = gBS->SetTimer (MouseSimulateTouchPadDev->TimerEvent, TimerPeriodic, 100000); - if (EFI_ERROR (Status)) { - Status = EFI_OUT_OF_RESOURCES; - goto ErrorExit; - } - - MouseSimulateTouchPadDev->ControllerNameTable = NULL; - AddUnicodeString2 ( - "eng", - gPs2MouseSimulateTouchPadComponentName.SupportedLanguages, - &MouseSimulateTouchPadDev->ControllerNameTable, - L"Faked PS/2 Touchpad Device", - TRUE - ); - AddUnicodeString2 ( - "en", - gPs2MouseSimulateTouchPadComponentName2.SupportedLanguages, - &MouseSimulateTouchPadDev->ControllerNameTable, - L"Faked PS/2 Touchpad Device", - FALSE - ); - - - // - // Install protocol interfaces for the mouse device. - // - Status = gBS->InstallMultipleProtocolInterfaces ( - &Controller, - &gEfiAbsolutePointerProtocolGuid, - &MouseSimulateTouchPadDev->AbsolutePointerProtocol, - NULL - ); - if (EFI_ERROR (Status)) { - goto ErrorExit; - } - - gBS->RestoreTPL (OldTpl); - - return Status; - -ErrorExit: - - KbcDisableAux (IsaIo); - - if (StatusCode != 0) { - REPORT_STATUS_CODE_WITH_DEVICE_PATH ( - EFI_ERROR_CODE | EFI_ERROR_MINOR, - StatusCode, - ParentDevicePath - ); - } - - if ((MouseSimulateTouchPadDev != NULL) && (MouseSimulateTouchPadDev->AbsolutePointerProtocol.WaitForInput != NULL)) { - gBS->CloseEvent (MouseSimulateTouchPadDev->AbsolutePointerProtocol.WaitForInput); - } - - if ((MouseSimulateTouchPadDev != NULL) && (MouseSimulateTouchPadDev->TimerEvent != NULL)) { - gBS->CloseEvent (MouseSimulateTouchPadDev->TimerEvent); - } - - if ((MouseSimulateTouchPadDev != NULL) && (MouseSimulateTouchPadDev->ControllerNameTable != NULL)) { - FreeUnicodeStringTable (MouseSimulateTouchPadDev->ControllerNameTable); - } - // - // Since there will be no timer handler for mouse input any more, - // exhaust input data just in case there is still mouse data left - // - EmptyStatus = EFI_SUCCESS; - while (!EFI_ERROR (EmptyStatus)) { - EmptyStatus = In8042Data (IsaIo, &Data); - } - - if (MouseSimulateTouchPadDev != NULL) { - gBS->FreePool (MouseSimulateTouchPadDev); - } - - gBS->CloseProtocol ( - Controller, - &gEfiDevicePathProtocolGuid, - This->DriverBindingHandle, - Controller - ); - - gBS->CloseProtocol ( - Controller, - &gEfiIsaIoProtocolGuid, - This->DriverBindingHandle, - Controller - ); - - gBS->RestoreTPL (OldTpl); - - return Status; -} - -EFI_STATUS -EFIAPI -PS2MouseSimulateTouchPadDriverStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer - ) -/*++ - - Routine Description: - - Arguments: - - Returns: - ---*/ -// GC_TODO: This - add argument and description to function comment -// GC_TODO: Controller - add argument and description to function comment -// GC_TODO: NumberOfChildren - add argument and description to function comment -// GC_TODO: ChildHandleBuffer - add argument and description to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - EFI_STATUS Status; - EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointerProtocol; - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev; - UINT8 Data; - - Status = gBS->OpenProtocol ( - Controller, - &gEfiAbsolutePointerProtocolGuid, - (VOID **) &AbsolutePointerProtocol, - This->DriverBindingHandle, - Controller, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - return EFI_SUCCESS; - } - - MouseSimulateTouchPadDev = PS2_MOUSE_SIMULATE_TOUCHPAD_DEV_FROM_THIS (AbsolutePointerProtocol); - - // - // Report that the keyboard is being disabled - // - REPORT_STATUS_CODE_WITH_DEVICE_PATH ( - EFI_PROGRESS_CODE, - EFI_PERIPHERAL_MOUSE | EFI_P_PC_DISABLE, - MouseSimulateTouchPadDev->DevicePath - ); - - Status = gBS->UninstallProtocolInterface ( - Controller, - &gEfiAbsolutePointerProtocolGuid, - &MouseSimulateTouchPadDev->AbsolutePointerProtocol - ); - if (EFI_ERROR (Status)) { - return Status; - } - // - // Disable mouse on keyboard controller - // - KbcDisableAux (MouseSimulateTouchPadDev->IsaIo); - - // - // Cancel mouse data polling timer, close timer event - // - gBS->SetTimer (MouseSimulateTouchPadDev->TimerEvent, TimerCancel, 0); - gBS->CloseEvent (MouseSimulateTouchPadDev->TimerEvent); - - // - // Since there will be no timer handler for mouse input any more, - // exhaust input data just in case there is still mouse data left - // - Status = EFI_SUCCESS; - while (!EFI_ERROR (Status)) { - Status = In8042Data (MouseSimulateTouchPadDev->IsaIo, &Data); - } - - gBS->CloseEvent (MouseSimulateTouchPadDev->AbsolutePointerProtocol.WaitForInput); - FreeUnicodeStringTable (MouseSimulateTouchPadDev->ControllerNameTable); - gBS->FreePool (MouseSimulateTouchPadDev); - - gBS->CloseProtocol ( - Controller, - &gEfiDevicePathProtocolGuid, - This->DriverBindingHandle, - Controller - ); - - gBS->CloseProtocol ( - Controller, - &gEfiIsaIoProtocolGuid, - This->DriverBindingHandle, - Controller - ); - - return EFI_SUCCESS; -} - -EFI_STATUS -EFIAPI -MouseSimulateTouchPadReset ( - IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, - IN BOOLEAN ExtendedVerification - ) -/*++ - -Routine Description: - - Reset the Mouse and do BAT test for it, if ExtendedVerification isTRUE and there is a mouse device connectted to system - -Arguments: - - This - Pointer of simple pointer Protocol. - ExtendedVerification - Whether configure mouse parameters. True: do; FALSE: skip. - -Returns: - - EFI_SUCCESS - The command byte is written successfully. - EFI_DEVICE_ERROR - Errors occurred during reseting keyboard. - ---*/ -{ - EFI_STATUS Status; - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev; - EFI_TPL OldTpl; - BOOLEAN KeyboardEnable; - UINT8 Data; - - MouseSimulateTouchPadDev = PS2_MOUSE_SIMULATE_TOUCHPAD_DEV_FROM_THIS (This); - - // - // Report reset progress code - // - REPORT_STATUS_CODE_WITH_DEVICE_PATH ( - EFI_PROGRESS_CODE, - EFI_PERIPHERAL_MOUSE | EFI_P_PC_RESET, - MouseSimulateTouchPadDev->DevicePath - ); - - KeyboardEnable = FALSE; - - // - // Raise TPL to avoid keyboard operation impact - // - OldTpl = gBS->RaiseTPL (TPL_NOTIFY); - - ZeroMem (&MouseSimulateTouchPadDev->State, sizeof (EFI_ABSOLUTE_POINTER_STATE)); - MouseSimulateTouchPadDev->StateChanged = FALSE; - - // - // Exhaust input data - // - Status = EFI_SUCCESS; - while (!EFI_ERROR (Status)) { - Status = In8042Data (MouseSimulateTouchPadDev->IsaIo, &Data); - } - - CheckKbStatus (MouseSimulateTouchPadDev->IsaIo, &KeyboardEnable); - - KbcDisableKb (MouseSimulateTouchPadDev->IsaIo); - - MouseSimulateTouchPadDev->IsaIo->Io.Read (MouseSimulateTouchPadDev->IsaIo, EfiIsaIoWidthUint8, KBC_CMD_STS_PORT, 1, &Data); - - // - // if there's data block on KBC data port, read it out - // - if ((Data & KBC_OUTB) == KBC_OUTB) { - MouseSimulateTouchPadDev->IsaIo->Io.Read (MouseSimulateTouchPadDev->IsaIo, EfiIsaIoWidthUint8, KBC_DATA_PORT, 1, &Data); - } - - Status = EFI_SUCCESS; - // - // The PS2 mouse driver reset behavior is always successfully return no matter wheater or not there is mouse connected to system. - // This behavior is needed by performance speed. The following mouse command only succeessfully finish when mouse device is - // connected to system, so if PS2 mouse device not connect to system or user not ask for, we skip the mouse configuration and enabling - // - if (ExtendedVerification && CheckMouseSimulateTouchPadConnect (MouseSimulateTouchPadDev)) { - // - // Send mouse reset command and set mouse default configure - // - Status = PS2MouseReset (MouseSimulateTouchPadDev->IsaIo); - if (EFI_ERROR (Status)) { - Status = EFI_DEVICE_ERROR; - goto Exit; - } - - Status = PS2MouseSetSampleRate (MouseSimulateTouchPadDev->IsaIo, MouseSimulateTouchPadDev->SampleRate); - if (EFI_ERROR (Status)) { - Status = EFI_DEVICE_ERROR; - goto Exit; - } - - Status = PS2MouseSetResolution (MouseSimulateTouchPadDev->IsaIo, MouseSimulateTouchPadDev->Resolution); - if (EFI_ERROR (Status)) { - Status = EFI_DEVICE_ERROR; - goto Exit; - } - - Status = PS2MouseSetScaling (MouseSimulateTouchPadDev->IsaIo, MouseSimulateTouchPadDev->Scaling); - if (EFI_ERROR (Status)) { - Status = EFI_DEVICE_ERROR; - goto Exit; - } - - Status = PS2MouseEnable (MouseSimulateTouchPadDev->IsaIo); - if (EFI_ERROR (Status)) { - Status = EFI_DEVICE_ERROR; - goto Exit; - } - } -Exit: - gBS->RestoreTPL (OldTpl); - - if (KeyboardEnable) { - KbcEnableKb (MouseSimulateTouchPadDev->IsaIo); - } - - return Status; -} - -BOOLEAN -CheckMouseSimulateTouchPadConnect ( - IN PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev - ) -/*++ - -Routine Description: - - Check whether there is Ps/2 mouse device in system - -Arguments: - - PS2_MOUSE_DEV - Mouse Private Data Structure - -Returns: - - TRUE - Keyboard in System. - FALSE - Keyboard not in System. - ---*/ -{ - EFI_STATUS Status; - - Status = PS2MouseEnable (MouseSimulateTouchPadDev->IsaIo); - if (!EFI_ERROR (Status)) { - return TRUE; - } - - return FALSE; -} - -EFI_STATUS -EFIAPI -MouseSimulateTouchPadGetState ( - IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, - IN OUT EFI_ABSOLUTE_POINTER_STATE *State - ) -/*++ - -Routine Description: - - GC_TODO: Add function description - -Arguments: - - This - GC_TODO: add argument description - State - GC_TODO: add argument description - -Returns: - - EFI_INVALID_PARAMETER - GC_TODO: Add description for return value - EFI_NOT_READY - GC_TODO: Add description for return value - EFI_SUCCESS - GC_TODO: Add description for return value - ---*/ -{ - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev; - EFI_TPL OldTpl; - - MouseSimulateTouchPadDev = PS2_MOUSE_SIMULATE_TOUCHPAD_DEV_FROM_THIS (This); - - if (State == NULL) { - return EFI_INVALID_PARAMETER; - } - - if (!MouseSimulateTouchPadDev->StateChanged) { - return EFI_NOT_READY; - } - - OldTpl = gBS->RaiseTPL (TPL_NOTIFY); - CopyMem (State, &(MouseSimulateTouchPadDev->State), sizeof (EFI_ABSOLUTE_POINTER_STATE)); - - // - // clear mouse state - // - MouseSimulateTouchPadDev->State.CurrentX = 0; - MouseSimulateTouchPadDev->State.CurrentY = 0; - MouseSimulateTouchPadDev->State.CurrentZ = 0; - MouseSimulateTouchPadDev->State.ActiveButtons = 0x0; - MouseSimulateTouchPadDev->StateChanged = FALSE; - gBS->RestoreTPL (OldTpl); - - return EFI_SUCCESS; -} - -VOID -EFIAPI -MouseSimulateTouchPadWaitForInput ( - IN EFI_EVENT Event, - IN VOID *Context - ) -/*++ - -Routine Description: - - Event notification function for SIMPLE_POINTER.WaitForInput event - Signal the event if there is input from mouse - -Arguments: - -Returns: - ---*/ -// GC_TODO: Event - add argument and description to function comment -// GC_TODO: Context - add argument and description to function comment -{ - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev; - - MouseSimulateTouchPadDev = (PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *) Context; - - // - // Someone is waiting on the mouse event, if there's - // input from mouse, signal the event - // - if (MouseSimulateTouchPadDev->StateChanged) { - gBS->SignalEvent (Event); - } - -} - -VOID -EFIAPI -PollMouseSimulateTouchPad( - IN EFI_EVENT Event, - IN VOID *Context - ) -/*++ - -Routine Description: - - Event notification function for TimerEvent event - If mouse device is connected to system, try to get the mouse packet data - -Arguments: - - Event - TimerEvent in PS2_MOUSE_DEV - Context - Pointer to PS2_MOUSE_DEV structure - -Returns: - - None - ---*/ -{ - PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseSimulateTouchPadDev; - - MouseSimulateTouchPadDev = (PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *) Context; - - // - // Polling mouse packet data - // - PS2MouseGetPacket (MouseSimulateTouchPadDev); -} - -/** - The user Entry Point for module Ps2MouseSimulateTouchPad. The user code starts with this function. - - @param[in] ImageHandle The firmware allocated handle for the EFI image. - @param[in] SystemTable A pointer to the EFI System Table. - - @retval EFI_SUCCESS The entry point is executed successfully. - @retval other Some error occurs when executing this entry point. - -**/ -EFI_STATUS -EFIAPI -InitializePs2MouseSimulateTouchPad( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - - // - // Install driver model protocol(s). - // - Status = EfiLibInstallDriverBindingComponentName2 ( - ImageHandle, - SystemTable, - &gPS2MouseSimulateTouchPadDriver, - ImageHandle, - &gPs2MouseSimulateTouchPadComponentName, - &gPs2MouseSimulateTouchPadComponentName2 - ); - ASSERT_EFI_ERROR (Status); - - - return Status; -} diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPad.h b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPad.h deleted file mode 100644 index 26b4f3363f..0000000000 --- a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPad.h +++ /dev/null @@ -1,301 +0,0 @@ -/**@file - A faked PS/2 Touchpad driver header file - -Copyright (c) 2006 - 2007, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#ifndef _PS2MOUSESIMULATETOUCHPAD_H -#define _PS2MOUSESIMULATETOUCHPAD_H - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -// -// PS/2 mouse sample rate -// -typedef enum { - SSR_10, - SSR_20, - SSR_40, - SSR_60, - SSR_80, - SSR_100, - SSR_200, - MAX_SR -} MOUSE_SR; - -// -// PS/2 mouse resolution -// -typedef enum { - CMR1, - CMR2, - CMR4, - CMR8, - MAX_CMR -} MOUSE_RE; - -// -// PS/2 mouse scaling -// -typedef enum { - SF1, - SF2 -} MOUSE_SF; - -// -// Driver Private Data -// -#define PS2_MOUSE_SIMULATE_TOUCHPAD_DEV_SIGNATURE EFI_SIGNATURE_32 ('p', '2', 's', 't') - -typedef struct { - UINTN Signature; - - EFI_HANDLE Handle; - EFI_ABSOLUTE_POINTER_PROTOCOL AbsolutePointerProtocol; - EFI_ABSOLUTE_POINTER_STATE State; - EFI_ABSOLUTE_POINTER_MODE Mode; - BOOLEAN StateChanged; - - // - // PS2 Mouse device specific information - // - MOUSE_SR SampleRate; - MOUSE_RE Resolution; - MOUSE_SF Scaling; - UINT8 DataPackageSize; - - EFI_ISA_IO_PROTOCOL *IsaIo; - - EFI_EVENT TimerEvent; - - EFI_UNICODE_STRING_TABLE *ControllerNameTable; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; -} PS2_MOUSE_SIMULATE_TOUCHPAD_DEV; - -#define PS2_MOUSE_SIMULATE_TOUCHPAD_DEV_FROM_THIS(a) CR (a, PS2_MOUSE_SIMULATE_TOUCHPAD_DEV, AbsolutePointerProtocol, PS2_MOUSE_SIMULATE_TOUCHPAD_DEV_SIGNATURE) - -// -// Global Variables -// -extern EFI_DRIVER_BINDING_PROTOCOL gPS2MouseSimulateTouchPadDriver; -extern EFI_COMPONENT_NAME_PROTOCOL gPs2MouseSimulateTouchPadComponentName; -extern EFI_COMPONENT_NAME2_PROTOCOL gPs2MouseSimulateTouchPadComponentName2; - -// -// Function prototypes -// -EFI_STATUS -EFIAPI -PS2MouseSimulateTouchPadDriverSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath - ); - -EFI_STATUS -EFIAPI -PS2MouseSimulateTouchPadDriverStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath - ); - -EFI_STATUS -EFIAPI -PS2MouseSimulateTouchPadDriverStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer - ); - -// -// EFI Component Name Functions -// -/** - 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. - - @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or - EFI_COMPONENT_NAME_PROTOCOL instance. - - @param Language[in] A 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 3066 or ISO 639-2 language code format. - - @param DriverName[out] A 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. - - @retval EFI_SUCCESS The Unicode string for the Driver specified by - This and the language specified by Language was - returned in DriverName. - - @retval EFI_INVALID_PARAMETER Language is NULL. - - @retval EFI_INVALID_PARAMETER DriverName is NULL. - - @retval EFI_UNSUPPORTED The driver specified by This does not support - the language specified by Language. - -**/ -EFI_STATUS -EFIAPI -Ps2MouseSimulateTouchPadComponentNameGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName - ); - - -/** - 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. - - @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or - EFI_COMPONENT_NAME_PROTOCOL instance. - - @param ControllerHandle[in] The handle of a controller that the driver - specified by This is managing. This handle - specifies the controller whose name is to be - returned. - - @param ChildHandle[in] The 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. - - @param Language[in] A 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 3066 or ISO 639-2 language code format. - - @param ControllerName[out] A 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. - - @retval EFI_SUCCESS The Unicode string for the user readable name in - the language specified by Language for the - driver specified by This was returned in - DriverName. - - @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. - - @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid - EFI_HANDLE. - - @retval EFI_INVALID_PARAMETER Language is NULL. - - @retval EFI_INVALID_PARAMETER ControllerName is NULL. - - @retval EFI_UNSUPPORTED The driver specified by This is not currently - managing the controller specified by - ControllerHandle and ChildHandle. - - @retval EFI_UNSUPPORTED The driver specified by This does not support - the language specified by Language. - -**/ -EFI_STATUS -EFIAPI -Ps2MouseSimulateTouchPadComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName - ); - - -EFI_STATUS -EFIAPI -MouseSimulateTouchPadReset ( - IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, - IN BOOLEAN ExtendedVerification - ); - -EFI_STATUS -EFIAPI -MouseSimulateTouchPadGetState ( - IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, - IN OUT EFI_ABSOLUTE_POINTER_STATE *State - ); - -VOID -EFIAPI -MouseSimulateTouchPadWaitForInput ( - IN EFI_EVENT Event, - IN VOID *Context - ); - -VOID -EFIAPI -PollMouseSimulateTouchPad ( - IN EFI_EVENT Event, - IN VOID *Context - ); - -EFI_STATUS -In8042Data ( - IN EFI_ISA_IO_PROTOCOL *IsaIo, - IN OUT UINT8 *Data - ); -BOOLEAN -CheckMouseSimulateTouchPadConnect ( - IN PS2_MOUSE_SIMULATE_TOUCHPAD_DEV *MouseDev - ); - -#endif diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPadDxe.inf b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPadDxe.inf deleted file mode 100644 index 0b5c40c1c3..0000000000 --- a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPadDxe.inf +++ /dev/null @@ -1,58 +0,0 @@ -#/** @file -# Ps2 Mouse Simulate TouchPad Driver -# -# This dirver directly uses IsaIo protocol service to support a faked Ps2 TouchPad work. -# Copyright (c) 2006 - 2007, Intel Corporation. -# -# Copyright (c) 2006 - 2007, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# -#**/ - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = Ps2MouseSimulateTouchPadDxe - FILE_GUID = 2899C94A-1FB6-4b1a-B96B-8364975303E0 - MODULE_TYPE = DXE_DRIVER - VERSION_STRING = 1.0 - EDK_RELEASE_VERSION = 0x00020000 - EFI_SPECIFICATION_VERSION = 0x00020000 - - ENTRY_POINT = InitializePs2MouseSimulateTouchPad - -# VALID_ARCHITECTURES = IA32 X64 IPF EBC - -[Sources.common] - ComponentName.c - CommPs2.h - CommPs2.c - Ps2MouseSimulateTouchPad.h - Ps2MouseSimulateTouchPad.c - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec - -[LibraryClasses] - ReportStatusCodeLib - UefiBootServicesTableLib - MemoryAllocationLib - BaseMemoryLib - UefiLib - UefiDriverEntryPoint - DebugLib - -[Protocols] - gEfiIsaIoProtocolGuid # PROTOCOL TO_START - gEfiAbsolutePointerProtocolGuid # PROTOCOL BY_START - gEfiDevicePathProtocolGuid # PROTOCOL TO_START - diff --git a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPadDxe.msa b/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPadDxe.msa deleted file mode 100644 index 5e0d108347..0000000000 --- a/IntelFrameworkModulePkg/Bus/Isa/Ps2MouseSimulateTouchPadDxe/Ps2MouseSimulateTouchPadDxe.msa +++ /dev/null @@ -1,98 +0,0 @@ - - - - Ps2MouseSimulateTouchPad - DXE_DRIVER - 2899C94A-1FB6-4b1a-B96B-8364975303E0 - 1.0 - Ps2 Mouse Simulate Touchpad Driver - This dirver directly uses IsaIo protocol service to support a faked Ps2 touchpad work. - Copyright (c) 2006 - 2007, Intel Corporation. - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 - - - IA32 X64 IPF EBC - false - Ps2MouseSimulateTouchPad - - - - DebugLib - - - UefiDriverModelLib - - - UefiDriverEntryPoint - - - UefiLib - - - BaseMemoryLib - - - MemoryAllocationLib - - - UefiBootServicesTableLib - - - ReportStatusCodeLib - - - - Ps2MouseSimulateTouchPad.c - Ps2MouseSimulateTouchPad.h - CommPs2.c - CommPs2.h - ComponentName.c - - - - - - - - gEfiDevicePathProtocolGuid - - - gEfiAbsolutePointerProtocolGuid - - - gEfiIsaIoProtocolGuid - - - - - - EVENT_TYPE_RELATIVE_TIMER - Set up a time event to wait for the faked touchpad input - - - EVENT_TYPE_PERIODIC_TIMER - Set up a periodic timer to poll the faked touchpad state at a fixed interval - - - - - EVENT_TYPE_RELATIVE_TIMER - Signal an event whenever these is a pending event from the faked touchpad input - - - - - EFI_SPECIFICATION_VERSION 0x00020000 - EDK_RELEASE_VERSION 0x00020000 - - gPS2MouseSimulateTouchPadDriver - gPs2MouseSimulateTouchPadComponentName - - - \ No newline at end of file -- cgit v1.2.3