From b7c51c9cf4864df6aabb99a1ae843becd577237c Mon Sep 17 00:00:00 2001 From: raywu Date: Fri, 15 Jun 2018 00:00:50 +0800 Subject: init. 1AQQW051 --- Include/Protocol/AmiUsbController.h | 1572 +++++++++++++++++++++++++++++++++++ 1 file changed, 1572 insertions(+) create mode 100644 Include/Protocol/AmiUsbController.h (limited to 'Include/Protocol/AmiUsbController.h') diff --git a/Include/Protocol/AmiUsbController.h b/Include/Protocol/AmiUsbController.h new file mode 100644 index 0000000..39d8d46 --- /dev/null +++ b/Include/Protocol/AmiUsbController.h @@ -0,0 +1,1572 @@ +//**************************************************************************** +//**************************************************************************** +//** ** +//** (C)Copyright 1985-2016, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Pkwy, Norcross, GA 30093 ** +//** ** +//** Phone (770)-246-8600 ** +//** ** +//**************************************************************************** +//**************************************************************************** + +//**************************************************************************** +// $Header: /Alaska/SOURCE/Modules/USB/ALASKA/Protocol/AmiUsbController.h 36 10/16/16 10:24p Wilsonlee $ +// +// $Revision: 36 $ +// +// $Date: 10/16/16 10:24p $ +// +//**************************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/USB/ALASKA/Protocol/AmiUsbController.h $ +// +// 36 10/16/16 10:24p Wilsonlee +// [TAG] EIP288158 +// [Category] Improvement +// [Description] Check if gUsbData is integrity. +// [Files] amiusb.cif, usbsb.c, AmiUsbLib.cif, AmiUsbLib.sdl, +// AmiUsbSmmGlobalDataValidationLib.c, +// AmiUsbSmmGlobalDataValidationLib.cif, +// AmiUsbSmmGlobalDataValidationLib.mak, Crc32.c, amiusb.c, amiusb.h, +// ehci.c, elib.c, ohci.c, syskbc.c, uhci.c, usb.c, usbCCID.c, usbdef.h, +// usbhid.c, usbhub.c, usbkbd.c, usbmass.c, usbms.c, usbrt.mak, xhci.c, +// amiusbhc.c, efiusbccid.c, efiusbmass.c, uhcd.c, usbmisc.c, +// AmiUsbController.h, AmiUsbLibInclude.cif, +// AmiUsbSmmGlobalDataValidationLib.h +// +// 35 3/02/16 9:43p Wilsonlee +// [TAG] EIP254309 +// [Category] Bug Fix +// [Severity] Normal +// [Symptom] GK-FORCE K83 USB KB function abnormal. +// [RootCause] This device has an interrupt out endpoint and doesn't +// support "Set Report" request. +// [Solution] Use the interrupt out endpoint instead of sending "Set +// Report" request. +// [Files] AmiUsbController.h, xhci.c, usbmass.c, usbkbd.h, usbkbd.c, +// usbhub.c, usbhid.c, usbdef.h, usbCCID.c, usb.c, uhci.c, ohci.c, ehci.c, +// amiusb.h, efiusbms,c, amiusbhc.c +// +// 34 11/04/15 9:54p Wilsonlee +// TAG] EIP241067 +// [Category] Improvement +// [Description] Add the device descriptor to the DEV_INFO structure. +// [Files] usb.c, usbdef.h, xhci.c, usbbus.c, AmiUsbController.h +// +// 33 4/10/15 3:07a Wilsonlee +// [TAG] EIP207413 +// [Category] Improvement +// [Description] Install UsbApiTable and UsbMassApitTable in +// AmiUsbSmmProtocol. +// [Files] amiusbhc.c, AmiUsbController.h, usbdef.h, usbCCID.c, uhci.c, +// ehci.c, amiusbrtCCID.h, amiusb.h, amiusb.c, uhcd.c +// +// 32 12/24/14 10:42p Wilsonlee +// [TAG] EIP196287 +// [Category] Improvement +// [Description] Display info of connected usb controllers and remove or +// grayed-out some item according the connected usb controller number. +// [Files] uhcd.c, usbport.c, usb.uni, usb.sd, usbsetup.c, +// AmiUsbController.h, UsbPolicy.h +// +// 31 6/11/14 8:23p Wilsonlee +// [TAG] EIP172625 +// [Category] Improvement +// [Description] Usb skip table function adds the flag +// "SKIP_FLAG_SKIP_MULTI_LEVEL" that skips usb ports include down stream +// ports. +// [Files] usbport.c, AmiUsbController.h +// +// 30 7/03/13 5:25a Ryanchou +// [TAG] EIP123988 +// [Category] Improvement +// [Description] Move the code creating BBS table to end of POST. +// [Files] UsbBbs.c, UsbInt13.c, UsbInt13.cif, UsbInt13.h, +// UsbInt13.mak, UsbInt13.sdl, efiusbmass.c, uhcd.c, uhcd.h, +// AmiUsbController.h +// +// 29 9/03/12 5:23a Roberthsu +// [TAG] EIP88776 +// [Category] Improvement +// [Description] Implement keep port function. +// [Files] usbport.c,AmiUsbController.h +// +// 28 8/29/12 8:42a Ryanchou +// [TAG] EIP77262 +// [Category] New Feature +// [Description] Remove SMM dependency of USB. +// [Files] usb.sdl, usbport.c, amiusb.c, amiusb.dxs, amiusb.h, ehci.c, +// elib.c, ohci.c, uhci.c, usb.c, usbdef.h, usbrt.mak, xhci.c, amiusbhc.c, +// efiusbccid.c, efiusbhid.c, efiusbkb.c, efiusbmass.c, uhcd.c, uhcd.dxs, +// uhcd.h, usbmisc.c, AmiUsbController.h +// +// 27 1/14/12 4:10a Ryanchou +// [TAG] EIP80609 +// [Category] Bug Fix +// [Severity] Important +// [Symptom] If to enable debug mode and set launch CSM is "Never" in +// setup, system will hang at 0xB1 +// [RootCause] The pointer AmiUsb is invalid if CSM is not launched, +// that may cause CPU exception. +// [Solution] Added USB smm protocol, and use SmmLocateProtocol to get +// the pointer. +// [Files] amiusb.c, AmiUsbController.h, usbrt.mak, usbsb.c +// +// 26 12/26/11 2:25a Roberthsu +// [TAG] EIP74609 +// [Category] Improvement +// [Description] Add check oemskiplist at check port change. +// [Files] usbport.c,usb.c,AmiUsbController.h +// +// 25 11/08/11 8:26a Wilsonlee +// [TAG] EIP74876 +// [Category] New Feature +// [Description] Add USB API for shutdown single USB controller. +// [Files] amiusb.c, amiusb.h, usb.c, usbdef.h, uhcd.c, uhcd.h, +// AmiUsbController.h +// +// 24 8/05/11 6:19a Ryanchou +// [TAG] EIP60706 +// [Category] Improvement +// [Description] Move gUsbBadDeviceTable into SMRAM. +// [Files] usbport.c, amiusb.c, usb.c, uhcd.c, AmiUsbController.h +// +// 23 7/15/11 6:31a Ryanchou +// [TAG] EIP38434 +// [Category] New Feature +// [Description] Added USB HID report protocol support. +// [Files] amiusb.c, AmiUsbController.h, amiusbhc.c, efiusbkb.c, +// efiusbkb.h, efiusbpoint.c, ehci.c, ohci.c, uhcd.c uhcd.cif, uhci.c, +// usb.c, usbdef.h, usbhid.c, usbkbd.c, usbkbd.h, usbms.c, usbpoint.c, +// usbrt.cif, usbsb.c, usbsetup.c, usbsrc.sdl, xhci.c +// +// 22 7/12/11 8:18a Ryanchou +// [TAG] EIP56918 +// [Category] New Feature +// [Description] Added CCID device support. +// [Files] amiusb.c, amiusb.h, amiusbrtCCID.h, ehci.c, ohci.c, uhci.c, +// usb.c, UsbCCID.c, usbdef.h, usbrt.cif, usbsetup.c, efiusbccid.c, +// framework.cif, uhcd.c, uhcd.cif, uhcd.h, usbsrc.sdl, AmiusbCCID.h, +// AmiUsbController.h, AmiUSBProtocols.cif +// +// 21 6/22/11 2:13a Ryanchou +// [TAG] EIP62695 +// [Improvement] Add new oemskiplist function +// [Description] Add skip function by controller or port.Skip by device +// type or port number. +// +// 20 4/06/11 3:28a Ryanchou +// [TAG] EIP55275 +// [Category] Bug Fix +// [Severity] Important +// [Symptom] EBDA:108 conflict +// [RootCause] The EIP48064 save EFI_USB_PROTOCOL pointer in EBDA:108, +// but Keymon filter driver used the same location. +// [Solution] Use the EBDA:32 to save EFI_USB_PROTOCOL pointer and add a +// signature in EFI_USB_PROTOCOL. +// [Files] amidef.h, AmiUsbController.h, uhcd.c, usbsb.c +// +// 19 4/06/11 12:45a Ryanchou +// [TAG] EIP51653 +// [Category] New Feature +// [Description] Added an interface that skips specific port +// enumeration. +// [Files] AmiUsbController.h, uhcd.c, uhcd.h, usb.c, usbdef.h, +// usbport.c +// +// 18 3/30/11 9:07a Ryanchou +// [TAG] EIP41483 +// [Category] Improvement +// [Description] Stop timer SMI after legacy shutdown. +// [Files] amiusb.c, AmiUsbController.h, ohci.c +// +// 17 2/22/11 5:11a Tonylo +// [TAG] EIP52339 +// [Category] New Feature +// [Description] USB changes of USB host safe disabling solution. +// [Files] USB.C +// UHCD.C +// UHCD.H +// AmiUsbController.h +// +// 16 11/22/10 8:46a Ryanchou +// [TAG] EIP48064 +// [Category] Improvement +// [Description] The SB template implemented elink +// AcpiEnableCallbackList, the XHCI/EHCI hand off function should be +// invoked via the elink AcpiEnableCallbackList. +// [Files] amidef.h, amiusb.c, amiusb.dxs, amiusb.h, +// AmiUsbController.h, usb.sdl, usbrt.mak, usbsb.c +// +// 15 7/15/10 4:45a Tonylo +// EIP15489 - Add USB HandOff function for shurdown/init USB legacy +// through USB API function. +// +// 14 4/02/10 9:00a Olegi +// +// 13 10/02/09 10:51a Olegi +// Code cleanup. +// +// 12 11/25/08 6:04p Olegi +// Support for OEM USB Boot Override feature. EIP#17052. +// +// 11 6/27/08 6:00p Olegi +// - USB_MASS_DEV structure has been updated +// - Several equates moved from USBDEF.H +// +// 10 5/16/08 12:07p Olegi +// Compliance with AMI coding standard. +// +// 9 8/09/07 3:50p Artems +// Added new protocol function GetRuntimeRegion +// +// 8 6/03/07 11:26p Olegi +// Added UsbBbsRemoveMassStorage function. +// +// 7 5/29/07 6:14p Olegi +// Added UsbChangeEfiToLegacy function. +// +// 1 3/15/05 9:23a Olegi +// Initial VSS check-in. +// +//**************************************************************************** + +// +//----------------------------------------------------------------------------- +// +// Name: AmiUsbController.h +// +// Description: AMI USB Driver Protocol definition +// +//----------------------------------------------------------------------------- +// + +#ifndef _USB_PROT_H +#define _USB_PROT_H + +#include +#include + +#define EFI_USB_PROTOCOL_GUID \ + { 0x2ad8e2d2, 0x2e91, 0x4cd1, 0x95, 0xf5, 0xe7, 0x8f, 0xe5, 0xeb, 0xe3, 0x16 } + +#define AMI_USB_SMM_PROTOCOL_GUID \ + { 0x3ef7500e, 0xcf55, 0x474f, 0x8e, 0x7e, 0x0, 0x9e, 0xe, 0xac, 0xec, 0xd2 } + +GUID_VARIABLE_DECLARATION(gEfiUsbProtocolGuid,EFI_USB_PROTOCOL_GUID); + +GUID_VARIABLE_DECLARATION(gAmiUsbSmmProtocolGuid,AMI_USB_SMM_PROTOCOL_GUID); + +#ifndef GUID_VARIABLE_DEFINITION +#include +#include + +typedef union { + VOID *fpUHCIDescPtrs; + VOID *fpOHCIDescPtrs; + VOID *fpEHCIDescPtrs; +} DESC_PTRS; + +typedef struct { + UINT8 Flag; + UINT8 ReportId; + UINT16 UsagePage; + UINT32 ReportCount; + UINT8 ReportSize; + UINT32 LogicalMin; + UINT32 LogicalMax; + UINT32 PhysicalMax; //(EIP127014) + UINT32 PhysicalMin; //(EIP127014) + UINT8 UnitExponent; //(EIP127014) + UINT16 UsageCount; + UINT16 *Usages; + UINT16 MaxUsages; + UINT16 UsageMin; + UINT16 UsageMax; +} HID_REPORT_FIELD; + +typedef struct { + UINT8 Flag; + UINT16 AbsMaxX; + UINT16 AbsMaxY; + UINT16 ReportDescLen; + UINT8 FieldCount; + HID_REPORT_FIELD **Fields; +} HID_REPORT; + +#pragma pack(push, 1) + +typedef struct { + UINT8 DescLength; + UINT8 DescType; + UINT16 BcdUsb; + UINT8 BaseClass; + UINT8 SubClass; + UINT8 Protocol; + UINT8 MaxPacketSize0; + UINT16 VendorId; + UINT16 DeviceId; + UINT16 BcdDevice; + UINT8 MfgStr; + UINT8 ProductStr; + UINT8 SerialStr; + UINT8 NumConfigs; +} DEV_DESC; + +#pragma pack(pop) + +typedef struct _HC_STRUC HC_STRUC; +typedef struct _DEV_INFO DEV_INFO; +typedef struct _DEV_DRIVER DEV_DRIVER; +typedef struct _URP_STRUC URP_STRUC; + +// +//---------------------------------------------------------------------------- +// Name: HC_STRUC +// +// Description: USB Host Controller structure +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bHCNumber UINT8 Host Controller number, 1-based +// bHCType UINT8 Host Controller Type, U/O/E HCI +// fpFrameList UINT32* Host Controller Frame List Address +// BaseAddress UINTN Host Controller Base Address, memory (EHCI,OHCI) or IO (UHCI) +// bNumPorts UINT8 Number of root ports, 1-based +// wBusDevFuncNum UINT16 PCI location, bus (Bits8..15), device (Bits3..7), function(bits0..2) +// fpIRQInfo IRQ_INFO IRQ information +// stDescPtrs DESC_PTRS Commonly used descriptor pointers, see definition of DESC_PTRS +// wAsyncListSize UINT16 Async. list size +// bOpRegOffset UINT8 Operation region offset +// dMaxBulkDataSize UINT32 Maximum Bulk Transfer data size +// dHCFlag UINT32 Host Controller flag +// bExtCapPtr UINT8 EHCI Extended Capabilities Pointer +// bRegOfs UINT8 EHCI Capabilities PCI register Offset +// DebugPort UINT8 Port number of EHCI debug port +// usbbus_data VOID* USB Bus data specific to this Host Controller +// Controller EFI_HANDLE EFI Handle of this controller +// pHCdp EFI_DEVICE_PATH_PROTOCOL* Pointer to this controller's device path +//---------------------------------------------------------------------------- +// + +struct _HC_STRUC { + UINT8 bHCNumber; + UINT8 bHCType; + UINT32 *fpFrameList; + UINTN BaseAddress; + UINTN BaseAddressSize; + UINT8 bNumPorts; + UINT16 wBusDevFuncNum; + UINT8 Irq; + DESC_PTRS stDescPtrs; + UINT16 wAsyncListSize; + UINT8 bOpRegOffset; + UINT32 dMaxBulkDataSize; + UINT32 dHCSParams; + UINT32 dHCCParams; + UINT32 dHCFlag; + UINT8 bExtCapPtr; // EHCI Extended Capabilities Pointer + UINT8 DebugPort; + VOID* usbbus_data; + EFI_HANDLE Controller; + EFI_DEVICE_PATH_PROTOCOL *pHCdp; + UINT8 PwrCapPtr; //(EIP54018+) + VOID *PciIo; + UINT16 Vid; + UINT16 Did; + EFI_HANDLE HwSmiHandle; + UINT16 SplitPeriodicIndex; +#if !USB_RUNTIME_DRIVER_IN_SMM + UINT32 MemPoolPages; + UINT8 *MemPool; + UINT32 MemBlkStsBytes; + UINT32 *MemBlkSts; +#endif +}; + +// +//---------------------------------------------------------------------------- +// Name: DEV_INFO +// +// Description: USB Device Information Structure +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bFlag UINT8 Device Information flags +// bDeviceType UINT8 Device Type +// wVendorId UINT16 Device VID +// wDeviceId UINT16 Device DID +// bDeviceAddress UINT8 Device USB Address +// bHCNumber UINT8 Host Controller Number this device is attached to +// bHubDeviceNumber UINT8 USB Hub Device Number this device is attached to +// bHubPortNumber UINT8 USB Hub Port Number this device is attached to +// bEndpointNum UINT8 Endpoint number +// bEndpointSpeed UINT8 Endpoint speed +// bLUN UINT8 Device Logical Unit number +// wEndp0MaxPacket UINT16 Endpoint0 max packet size, in Bytes +// bNumConfigs UINT8 Number of configurations +// bConfigNum UINT8 Active configuration number (0-based) +// bInterfaceNum UINT8 Active interface number +// bAltSettingNum UINT8 Alternate setting number (0-based) +// bCallBackIndex UINT8 Callback function index +// fpPollTDPtr UINT8* Polling TD pointer +// fpPollTEPtr UINT8* Polling ED pointer +// bHubNumPorts UINT8 Hub # of ports (USB hubs only) +// bHubPowerOnDelay UINT8 Hub power-on delay (USB hubs only) +// fpLUN0DevInfoPtr DEV_INFO* Pointer to Lun0 device (for multiple-LUN devices) +// wDataIn/OutSync UINT16 toggle tracking information +// bStorageType UINT8 USB_MASS_DEV_ARMD, USB_MASS_DEV_HDD, etc. +// wIntMaxPkt UINT16 Interrupt Max Packet size, in Bytes +// bPresent UINT8 Device presence indicator +// bIntEndpoint UINT8 Interrupt endpoint number +// bBulkInEndpoint UINT8 Bulk-In endpoint number +// bBulkOutEndpoint UINT8 Bulk-Out endpoint number +// bProtocol UINT8 Protocol +// wEmulationOption UINT16 USB Mass Storage Drive Emulation Option, from Setup +// bHiddenSectors UINT8 Number of hidden sectors, for USB mass storage devices only +// bSubClass UINT8 Device sub-class +// wBlockSize UINT16 USB Mass Storage Device block size, in Bytes +// dMaxLba UINT32 USB Mass Storage Device Maximum LBA number +// bHeads UINT8 USB Mass Storage Device # of heads +// bSectors UINT8 USB Mass Storage Device # of sectors +// wCylinders UINT16 USB Mass Storage Device # of cylinders +// bNonLBAHeads UINT8 USB Mass Storage Device # of heads reported in Non-LBA (CHS) functions +// bNonLBASectors UINT8 USB Mass Storage Device # of sectors reported in Non-LBA (CHS) functions +// wNonLBACylinders UINT16 USB Mass Storage Device # of cylinders reported in Non-LBA (CHS) functions +// bEmuType UINT8 USB Mass Storage Device emulation type +// bPhyDevType UINT8 USB Mass Storage Device physical type +// bMediaType UINT8 USB Mass Storage Device media type +// bDriveNumber UINT8 USB Mass Storage Device INT13 drive number +// wBulkInMaxPkt UINT16 USB Mass Storage Device Bulk-In max packet size, in Bytes +// wBulkOutMaxPkt UINT16 USB Mass Storage Device Bulk-Out max packet size, in Bytes +// wIncompatFlags UINT16 USB Mass Storage Device Incompatibility flags +// MassDev VOID* USB Mass Storage Device EFI handle +// fpDeviceDriver DEV_DRIVER* Device driver pointer +// bLastStatus UINT8 Last transaction status +// pExtra UINT8* Pointer to extra device specific data +// UINT32 UINT8 USB Mass Storage Device # of heads +// Handle UINT32[2] USB Device Handle +//---------------------------------------------------------------------------- +// +struct _DEV_INFO { + UINT32 Flag; //00 + UINT8 bDeviceType; //01 + UINT16 wVendorId; //02 + UINT16 wDeviceId; //04 + UINT8 bDeviceAddress; //06 + + UINT8 bHCNumber; //07 + UINT8 bHubDeviceNumber; //08 + UINT8 bHubPortNumber; //09 +// UINT8 bEndpointNum; //0A //(EIP70933-) + UINT8 bEndpointSpeed; //0B + UINT8 bLUN; //0C + UINT16 wEndp0MaxPacket;//0D +// UINT8 bNumConfigs; //0F + UINT8 bConfigNum; //10 + UINT8 bInterfaceNum; //11 + UINT8 bAltSettingNum; //12 + + UINT8 bCallBackIndex; //13 + UINT8 *fpPollTDPtr; //14 + UINT8 *fpPollEDPtr; //18 + + UINT8 bHubNumPorts; //1C + UINT8 bHubPowerOnDelay;//1D + + struct _DEV_INFO *fpLUN0DevInfoPtr; //1E +// UINT8 bDataSync; //22 + + UINT16 wDataInSync; // 22 + UINT16 wDataOutSync; // 24 + UINT8 bStorageType; // 26, USB_MASS_DEV_ARMD, USB_MASS_DEV_HDD, etc. + UINT16 IntInMaxPkt; //27 + UINT8 IntInEndpoint; //2A + UINT16 IntOutMaxPkt; + UINT8 IntOutEndpoint; + UINT8 bBulkInEndpoint; + UINT8 bBulkOutEndpoint; + + UINT8 bBaseClass; // BASE_CLASS_HID, BASE_CLASS_MASS_STORAGE or BASE_CLASS_HUB + UINT8 bSubClass; + UINT8 bProtocol; // + UINT16 wEmulationOption; // + UINT8 bHiddenSectors; // + + UINT16 wBlockSize; // + UINT64 MaxLba; // + UINT16 Heads; // + UINT8 bSectors; // + UINT16 wCylinders; // + UINT16 NonLBAHeads; // + UINT8 bNonLBASectors; // + UINT16 wNonLBACylinders; // + UINT8 bEmuType; // + UINT8 bPhyDevType; // + UINT8 bMediaType; // + UINT8 bDriveNumber; // + UINT16 wBulkInMaxPkt; // + UINT16 wBulkOutMaxPkt; // + UINT16 wIncompatFlags; // + VOID *MassDev; // + DEV_DRIVER *fpDeviceDriver; // + UINT8 bLastStatus; // + UINT8 *pExtra; // + UINT32 Handle[2]; + UINT8 DevNameString[64]; + VOID *DevMiscInfo; + UINT8 HubDepth; + UINT8 *fpPollDataBuffer; //Polling Data Buffer //(EIP54782+) + VOID *pCCIDDescriptor; // Ptr to CCID descriptor + UINT32 *DataRates; // List of DataRates supported by CCID + UINT32 *ClockFrequencies; // List of Frequencies suported by CCID + DLIST ICCDeviceList; // Linked list of ICC devices. :Linked to "ICCDeviceLink" + HID_REPORT HidReport; + UINT8 HidDevType; + UINT8 bPollInterval; //(EIP84455+) + UINT16 PollingLength; + UINT16 HubPortConnectMap; + UINT8 BpbMediaDesc; + DEV_DESC DevDesc; +}; + +// +//---------------------------------------------------------------------------- +// Name: DEV_DRIVER +// +// Description: USB Device Driver Structure +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevType UINT8 Device Type +// bBaseClass UINT8 Device Base Type +// bSubClass UINT8 Device Subclass +// bProtocol UINT8 Device Protocol +// pfnDeviceInit VOID Device Initialization Function +// pfnCheckDeviceType UINT8 Check Device Type Function +// pfnConfigureDevice DEV_INFO* Configure Device Function +// pfnDisconnectDevice UINT8 Disconnect Device Function +//---------------------------------------------------------------------------- +// + +struct _DEV_DRIVER { + UINT8 bDevType; + UINT8 bBaseClass; + UINT8 bSubClass; + UINT8 bProtocol; + VOID (*pfnDeviceInit)(VOID); + UINT8 (*pfnCheckDeviceType)(DEV_INFO*, UINT8, UINT8, UINT8); + DEV_INFO* (*pfnConfigureDevice)(HC_STRUC*, DEV_INFO*, UINT8*, UINT16, UINT16); + UINT8 (*pfnDisconnectDevice)(DEV_INFO*); + VOID (*pfnDriverRequest)(DEV_INFO*, URP_STRUC*); +}; + +#pragma pack(push, 1) + +// +//---------------------------------------------------------------------------- +// Name: CK_PRESENCE +// +// Description: This is a URP (USB Request Packet) structure for the BIOS +// API call CheckPresence (API #0) +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT16 wBiosRev; // USB BIOS Revision + UINT8 bBiosActive; // USB BIOS active/inactive + UINT8 bNumBootDev; // # of USB boot device + UINT16 wUsbDataArea; // USB Data area + UINT8 bNumKeyboards; // Number of USB keyboards present + UINT8 bNumMice; // Number of USB mice present + UINT8 bNumPoint; // Number of USB point present //<(EIP38434+) + UINT8 bNumHubs; // Number of USB hubs present + UINT8 bNumStorage; // Number of USB storage devices present +///////// DO NOT ADD ANY FIELD HERE. IF IT IS NECESSARY PLEASE UPDATE THE CODE +///////// IN THE FUNCTION USBWrap_GetDeviceCount in the file USBWRAP.ASM + UINT8 bNumHarddisk; // Number of hard disk emulated USB devices + UINT8 bNumCDROM; // Number of CDROM emulated USB devices + UINT8 bNumFloppy; // Number of floppy emulated USB devices +} CK_PRESENCE; + +// +//---------------------------------------------------------------------------- +// Name: START_HC +// +// Description: This is a URP (USB Request Packet) structure for the BIOS +// API call StartHC and MoveDataArea (API #20 & #24) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// wDataAreaFlag UINT16 Indicates which data area to use +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT16 wDataAreaFlag; // Data area to use +} START_HC; + +// +//---------------------------------------------------------------------------- +// Name: GET_DEV_INFO +// +// Description: This is a URP (USB Request Packet) structure for the BIOS +// API call GetDeviceInfo (API #25) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevNumber UINT8 Device # whose info is requested +// bHCNumber UINT8 HC # to which this device is connected (0 if no such device found) +// bDevType UINT8 Device type (0 if no such device found) +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevNumber; + UINT8 bHCNumber; + UINT8 bDevType; +} GET_DEV_INFO; + +// +//---------------------------------------------------------------------------- +// Name: CHK_DEV_PRSNC +// +// Description: This is a URP (USB Request Packet) structure for the BIOS +// API call CheckDevicePresence (API #26) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevType UINT8 Type of device to look for +// fpHCStruc FPHC_STRUC Pointer to HC being checked for device connection +// bNumber UINT8 Number of devices connected +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevType; + HC_STRUC *fpHCStruc; + UINT8 bNumber; +} CHK_DEV_PRSNC; + +typedef struct { + UINT8 ScrLock: 1; + UINT8 NumLock: 1; + UINT8 CapsLock: 1; + UINT8 Resrvd: 5; +} LED_MAP; + +// +//---------------------------------------------------------------------------- +// Name: KB_LEDS_DATA +// +// Description: This is a URP (USB Request Packet) structure for the BIOS +// API call LightenKeyboardLeds(API #2B) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// fpLedMap UINT32 32-bit Pointer to LED_MAP structure +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT32 fpLedMap; +} KB_LEDS_DATA; + +// +//---------------------------------------------------------------------------- +// Name: SECURITY_IF +// +// Description: This is a URP (USB Request Packet) structure for the BIOS +// API call SecurityInterface (API #2Ah) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// fpBuffer FAR Buffer pointer to read/write data +// dLength UINT32 Length of the buffer +// dWaitTime UINT32 Wait time for the transaction in msec +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT32 fpBuffer; + UINT32 dLength; + UINT32 dWaitTime; +} SECURITY_IF; + +// +//---------------------------------------------------------------------------- +// Name: MASS_GET_DEV_INFO +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassGetDeviceInfo (API #27h, SubFunc 00h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// bDevType UINT8 Device type byte (HDD, CD, Removable) +// bEmuType UINT8 Emulation type used +// fpDevId UINT32 Far pointer to the device ID +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // (Return value) + UINT32 dSenseData; // USB Sense data + UINT8 bDevType; // Device type + UINT8 bEmuType; // Emulation type +// UINT8 bPhyDevType; // Physical device type + UINT32 fpDevId; // Far ptr to the device id +// DO NOT ADD OR DELETE ANY FIELD ABOVE - This should match the MASS_INQUIRY +// structure for proper working + UINT8 bTotalMassDev; // TotalNumber of devices + UINT8 bReserved; + UINT16 wPciInfo; // PCI Bus/Dev/Func number of HC the device is connected to + UINT32 Handle[2]; // Device handle +} MASS_GET_DEV_INFO; + +// +//---------------------------------------------------------------------------- +// Name: MASS_GET_DEV_STATUS +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MASS_GET_DEV_STATUS (API #27h, SubFunc XXh) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// bDeviceStatus UINT8 Connection status of the Mass device +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; + UINT8 bDeviceStatus; +} MASS_GET_DEV_STATUS; + +// +//---------------------------------------------------------------------------- +// Name: MASS_GET_DEV_GEO +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassGetDeviceGeometry (API #27h, +// SubFunc 01h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// bNumHeads UINT8 Number of heads +// wNumCylinders UINT16 Number of cylinders +// bNumSectors UINT8 Number of sectors +// bLBANumHeads UINT8 Number of heads (for INT13h function 48h) +// wLBANumCyls UINT16 Number of cylinders (for INT13h function 48h) +// bLBANumSectors UINT8 Number of sectors (for INT13h function 48h) +// wUINT8sPerSector UINT16 Number of bytes per sector +// bMediaType UINT8 Media type +// dLastLBA UINT32 Last LBA address +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // (Return value) + UINT32 dSenseData; // USB Sense data + UINT16 NumHeads; + UINT16 wNumCylinders; + UINT8 bNumSectors; + UINT16 LBANumHeads; + UINT16 wLBANumCyls; + UINT8 bLBANumSectors; + UINT16 wBytesPerSector; + UINT8 bMediaType; + UINT64 LastLBA; + UINT8 bInt13FuncNum; //(EIP13457+) + UINT8 BpbMediaDesc; +} MASS_GET_DEV_GEO; + +// +//---------------------------------------------------------------------------- +// Name: MASS_RESET +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassResetDevice (API #27h, SubFunc 02h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT32 dSenseData; // USB Sense data +} MASS_RESET; + +// +//---------------------------------------------------------------------------- +// Name: MASS_ASSIGN_DRIVE_NUM +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call USBMass_AssignDriveNumber +// (API #27h, SubFunc 0Eh) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// bLogDevNum UINT8 Logical Drive Number to assign to the device +// bHeads UINT8 Number of heads +// bSectors UINT8 Number of sectors/track +// wCylinders UINT16 Number of cylinders +// wBlockSize UINT16 Sector size in bytes +// bLUN UINT8 Maximum LUNs in the system +// bSpeed UINT8 <>0 if the device is hi-speed device +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT8 bLogDevNum; // Logical Drive Number to assign to the device + UINT8 bHeads; + UINT8 bSectors; + UINT16 wCylinders; + UINT16 wBlockSize; + UINT8 bLUN; + UINT8 bSpeed; +} MASS_ASSIGN_DRIVE_NUM; + +// +//---------------------------------------------------------------------------- +// Name: MASS_READ +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassReadDevice (API #27h, SubFunc 03h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// dStartLBA UINT32 Starting LBA address +// wNumBlks UINT16 Number of blocks to read +// wPreSkipSize UINT16 Number of bytes to skip before +// wPostSkipSize UINT16 Number of bytes to skip after +// fpBufferPtr UINT32 Far buffer pointer +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 DevAddr; // USB Device Address + UINT32 SenseData; // USB Sense data + UINT64 StartLba; // Starting LBA address + UINT16 NumBlks; // Number of blocks to read + UINT16 PreSkipSize; // Number of bytes to skip before + UINT16 PostSkipSize; // Number of bytes to skip after + UINT32 BufferPtr; // Far buffer pointer +} MASS_READ; + +// +//---------------------------------------------------------------------------- +// Name: MASS_WRITE +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassWriteDevice (API #27h, SubFunc 04h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// dStartLBA UINT32 Starting LBA address +// wNumBlks UINT16 Number of blocks to write +// wPreSkipSize UINT16 Number of bytes to skip before +// wPostSkipSize UINT16 Number of bytes to skip after +// fpBufferPtr UINT32 Far buffer pointer +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 DevAddr; // USB Device Address + UINT32 SenseData; // USB Sense data + UINT64 StartLba; // Starting LBA address + UINT16 NumBlks; // Number of blocks to write + UINT16 PreSkipSize; // Number of bytes to skip before + UINT16 PostSkipSize; // Number of bytes to skip after + UINT32 BufferPtr; // Far buffer pointer +} MASS_WRITE; + +// +//---------------------------------------------------------------------------- +// Name: MASS_VERIFY +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassVerifyDevice (API #27h, SubFunc 05h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// dStartLBA UINT32 Starting LBA address +// wNumBlks UINT16 Number of blocks to verify +// wPreSkipSize UINT16 Number of bytes to skip before +// wPostSkipSize UINT16 Number of bytes to skip after +// fpBufferPtr UINT32 Far buffer pointer +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 DevAddr; // USB Device Address + UINT32 SenseData; // USB Sense data + UINT64 StartLba; // Starting LBA address + UINT16 NumBlks; // Number of blocks to verify + UINT16 PreSkipSize; // Number of bytes to skip before + UINT16 PostSkipSize; // Number of bytes to skip after + UINT32 BufferPtr; // Far buffer pointer +} MASS_VERIFY; + +// +//---------------------------------------------------------------------------- +// Name: MASS_FORMAT +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassFormatDevice (API #27h, SubFunc 06h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// bHeadNumber UINT8 Head number to format +// bTrackNumber UINT8 Track number to format +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT32 dSenseData; // USB Sense data + UINT8 bHeadNumber; // Head number to format + UINT8 bTrackNumber; // Track number to format +} MASS_FORMAT; + +// +//---------------------------------------------------------------------------- +// Name: MASS_REQ_SENSE +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassRequestSense (API #27h, SubFunc 07h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT32 dSenseData; // USB Sense data +} MASS_REQ_SENSE; + +// +//---------------------------------------------------------------------------- +// Name: MASS_TEST_UNIT_RDY +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassTestUnitReady (API #27h, SubFunc 08h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT32 dSenseData; // USB Sense data +} MASS_TEST_UNIT_RDY; + +// +//---------------------------------------------------------------------------- +// Name: MASS_START_STOP_UNIT +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassStartStopUnit (API #27h, SubFunc 09h) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// bCommand UINT8 0 - Stop, 1 - Start +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT32 dSenseData; // USB Sense data + UINT8 bCommand; // 0 - Stop, 1 - Start +} MASS_START_STOP_UNIT; + +// +//---------------------------------------------------------------------------- +// Name: MASS_READ_CAPACITY +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassReadCapacity (API #27h, SubFunc 0Ah) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// dMaxLBA UINT32 Maximum LBA address +// dBlockSize UINT32 Block size +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT32 dSenseData; // USB Sense data + UINT32 dMaxLBA; // Max LBA address + UINT32 dBlockSize; // Block size +} MASS_READ_CAPACITY; + +// +//---------------------------------------------------------------------------- +// Name: MASS_MODE_SENSE +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassModeSense (API #27h, SubFunc 0Bh) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// bNumHeads UINT8 Number of heads +// wNumCylinders UINT16 Number of cylinders +// bNumSectors UINT8 Number of sectors +// wBytesPerSector UINT16 Number of bytes per sector +// bMediaType UINT8 Media type +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT32 dSenseData; // USB Sense data + UINT8 bNumHeads; // Number of heads + UINT16 wNumCylinders; // Number of cylinders + UINT8 bNumSectors; // Number of sectors + UINT16 wBytesPerSector;// Number of bytes per sector + UINT8 bMediaType; // Media type +} MASS_MODE_SENSE; + +// +//---------------------------------------------------------------------------- +// Name: MASS_INQUIRY +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassInquiry (API #27h, SubFunc 0Ch) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr UINT8 USB device address of the device +// dSenseData UINT32 Sense data of the last command +// bDevType UINT8 Device type byte (HDD, CD, Removable) +// bEmuType BYTE Emulation type used +// fpDevId UINT32 Far pointer to the device ID +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; // USB Device Address + UINT32 dSenseData; // USB Sense data + UINT8 bDevType; // Device type + UINT8 bEmuType; // Emulation type + UINT32 fpDevId; // Far ptr to the device id +// DO NOT ADD OR DELETE ANY FIELD ABOVE - This should match the +// MASS_GET_DEV_INFO structure for proper working +} MASS_INQUIRY; + +typedef struct { + DEV_INFO *fpDevInfo; + MASS_INQUIRY *fpInqData; +} MASS_GET_DEV_PARMS; + +typedef struct { + DEV_INFO* fpDevInfo; +} MASS_CHK_DEV_READY; + +// +//---------------------------------------------------------------------------- +// Name: MASS_CMD_PASS_THRU +// +// Description: This is a Mass URP (Mass USB Request Packet) structure for +// the BIOS API call MassCmdPassThru command (API #27h, +// SubFunc 0Dh) +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bDevAddr BYTE USB device address of the device +// dSenseData UINT32 Sense data of the last command +// fpCmdBuffer UINT32 Far pointer to the command buffer +// wCmdLength UINT16 Command length +// fpDataBuffer UINT32 Far pointer for data buffer +// wDataLength UINT16 Data length +// bXferDir BYTE Data transfer direction +// +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT8 bDevAddr; + UINT32 dSenseData; + UINT32 fpCmdBuffer; + UINT16 wCmdLength; + UINT32 fpDataBuffer; + UINT16 wDataLength; + UINT8 bXferDir; +} MASS_CMD_PASS_THRU; + +// +//---------------------------------------------------------------------------- +// Name: HCPROC_PARAM +// +// Description: N/A +// +//---------------------------------------------------------------------------- +// + +typedef struct _HCPROC_PARAM{ + VOID* paramBuffer; //parameters as they should apear in stack of + // of the corresponding function invocation + unsigned bHCType; + unsigned paramSize; + UINTN retVal; +} HCPROC_PARAM; + +// +//---------------------------------------------------------------------------- +// Name: COREPROC_PARAM +// +// Description: This is a Core Procedure URP structure for +// the BIOS API call core command (API #2eh ) +//---------------------------------------------------------------------------- +// + +typedef struct _COREPROC_PARAM{ + VOID* paramBuffer; //parameters as they should apear in stack of + // of the corresponding function invocation + unsigned paramSize; + UINTN retVal; +} COREPROC_PARAM, * FPCOREPROC_PARAM; + +// +//---------------------------------------------------------------------------- +// Name: GET_DEV_ADDR +// +// Description: This is a URP structure for the BIOS API(API #32h) +//---------------------------------------------------------------------------- +// + +typedef struct { + UINT16 Vid; // Vendor Id + UINT16 Did; // Device Id + UINT8 DevAddr; // USB Device Address +} GET_DEV_ADDR; + +// +//---------------------------------------------------------------------------- +// Name: HC_START_STOP +// +// Description: This is a URP structure for the BIOS API(API #36) +//---------------------------------------------------------------------------- +// + +typedef struct { + BOOLEAN Start; + HC_STRUC *HcStruc; +} HC_START_STOP; + +// +//---------------------------------------------------------------------------- +// Name: CCID_GETSMARTCLASSDESCRIPTOR +// +// Description: This is a Core Procedure URP structure for +// the BIOS API call USB_API_CCID_DEVICE_REQUEST command (API #2Fh ) +//---------------------------------------------------------------------------- +// +typedef struct _CCID_GETSMARTCLASSDESCRIPTOR{ + OUT UINTN fpResponseBuffer; + IN UINT8 Slot; + OUT UINTN fpDevInfo; +} CCID_GETSMARTCLASSDESCRIPTOR, * FPCCID_GETSMARTCLASSDESCRIPTOR; + + +// +//---------------------------------------------------------------------------- +// Name: CCID_ATR +// +// Description: This is a Core Procedure URP structure for +// the BIOS API call USB_API_CCID_DEVICE_REQUEST command (API #2Fh ) +//---------------------------------------------------------------------------- +// +typedef struct _CCID_ATR{ + IN UINT8 Slot; + IN OUT UINTN ATRData; + OUT UINTN fpDevInfo; +} CCID_ATR, * FPCCID_ATR; + + +// +//---------------------------------------------------------------------------- +// Name: CCID_POWERUP_SLOT +// +// Description: This is a Core Procedure URP structure for +// the BIOS API call USB_API_CCID_DEVICE_REQUEST command (API #2Fh ) +//---------------------------------------------------------------------------- +// +typedef struct _CCID_POWERUP_SLOT{ + IN UINT8 Slot; + OUT UINT8 bStatus; + OUT UINT8 bError; + IN OUT UINTN ATRData; + OUT UINTN fpDevInfo; +} CCID_POWERUP_SLOT, * FPCCID_POWERUP_SLOT; + +// +//---------------------------------------------------------------------------- +// Name: CCID_POWERDOWN_SLOT +// +// Description: This is a Core Procedure URP structure for +// the BIOS API call USB_API_CCID_DEVICE_REQUEST command (API #2Fh ) +//---------------------------------------------------------------------------- +// +typedef struct _CCID_POWERDOWN_SLOT{ + IN UINT8 Slot; + OUT UINT8 bStatus; + OUT UINT8 bError; + OUT UINTN fpDevInfo; +} CCID_POWERDOWN_SLOT, * FPCCID_POWERDOWN_SLOT; + +// +//---------------------------------------------------------------------------- +// Name: CCID_GETSLOT_STATUS +// +// Description: This is a Core Procedure URP structure for +// the BIOS API call USB_API_CCID_DEVICE_REQUEST command (API #2Fh ) +//---------------------------------------------------------------------------- +// +typedef struct _CCID_GETSLOT_STATUS{ + OUT UINT8 bStatus; + OUT UINT8 bError; + OUT UINT8 bClockStatus; + IN UINT8 Slot; + OUT UINTN fpDevInfo; +} CCID_GETSLOT_STATUS, * FPCCID_GETSLOT_STATUS; + +// +//---------------------------------------------------------------------------- +// Name: CCID_XFRBLOCK +// +// Description: This is a Core Procedure URP structure for +// the BIOS API call USB_API_CCID_DEVICE_REQUEST command (API #2Fh ) +//---------------------------------------------------------------------------- +// +typedef struct _CCID_CCID_XFRBLOCK{ + IN UINTN CmdLength; + IN UINTN fpCmdBuffer; + IN UINT8 ISBlock; + OUT UINT8 bStatus; + OUT UINT8 bError; + IN OUT UINTN ResponseLength; + OUT UINTN fpResponseBuffer; + IN UINT8 Slot; + OUT UINTN fpDevInfo; +} CCID_XFRBLOCK, * FPCCID_XFRBLOCK; + +// +//---------------------------------------------------------------------------- +// Name: CCID_GET_PARAMS +// +// Description: This is a Core Procedure URP structure for +// the BIOS API call USB_API_CCID_DEVICE_REQUEST command (API #2Fh ) +//---------------------------------------------------------------------------- +// +typedef struct _CCID_GET_PARAMS{ + OUT UINT8 bStatus; + OUT UINT8 bError; + IN OUT UINTN ResponseLength; + OUT UINTN fpResponseBuffer; + IN UINT8 Slot; + OUT UINTN fpDevInfo; +} CCID_GET_PARAMS, * FPCCID_GET_PARAMS; + +// +//---------------------------------------------------------------------------- +// Name: API_DATA +// +// Description: This is a union data type of all the API related data +// +//---------------------------------------------------------------------------- +// + +typedef union { + CK_PRESENCE CkPresence; + START_HC StartHc; + GET_DEV_INFO GetDevInfo; + CHK_DEV_PRSNC ChkDevPrsnc; + SECURITY_IF SecurityIf; + MASS_GET_DEV_INFO MassGetDevInfo; + MASS_GET_DEV_STATUS MassGetDevSts; + MASS_GET_DEV_GEO MassGetDevGeo; + MASS_RESET MassReset; + MASS_READ MassRead; + MASS_WRITE MassWrite; + MASS_VERIFY MassVerify; + MASS_FORMAT MassFormat; + MASS_REQ_SENSE MassReqSense; + MASS_TEST_UNIT_RDY MassTstUnitRdy; + MASS_START_STOP_UNIT MassStartStop; + MASS_READ_CAPACITY MassReadCap; + MASS_MODE_SENSE MassModeSense; + MASS_INQUIRY MassInquiry; + MASS_CMD_PASS_THRU MassCmdPassThru; + MASS_ASSIGN_DRIVE_NUM MassAssignNum; + MASS_CHK_DEV_READY MassChkDevReady; + MASS_GET_DEV_PARMS MassGetDevParms; + KB_LEDS_DATA KbLedsData; + UINT8 Owner; + HCPROC_PARAM HcProc; + COREPROC_PARAM CoreProc; + UINT8 KbcControlCode; //(EIP29733+) + GET_DEV_ADDR GetDevAddr; + UINT8 DevAddr; + // CCID APIs + CCID_GETSMARTCLASSDESCRIPTOR CCIDSmartClassDescriptor; + CCID_ATR CCIDAtr; + CCID_POWERUP_SLOT CCIDPowerupSlot; + CCID_POWERDOWN_SLOT CCIDPowerdownSlot; + CCID_GETSLOT_STATUS CCIDGetSlotStatus; + CCID_XFRBLOCK CCIDXfrBlock; + CCID_GET_PARAMS CCIDGetParameters; + UINT16 HcBusDevFuncNum; //(EIP74876+) + HC_START_STOP HcStartStop; +} U_API_DATA; + +// +//---------------------------------------------------------------------------- +// Name: URP_STRUC +// +// Description: This structure is the URP structure +// +// Fields: Name Type Description +// ------------------------------------------------------------ +// bFuncNumber UINT8 Function number of the URP +// bSubFunc UINT8 Sub-func number of the URP +// bRetValue UINT8 Return value +// ApiData API_DATA Refer structure definition +//---------------------------------------------------------------------------- +// + +struct _URP_STRUC { + UINT8 bFuncNumber; + UINT8 bSubFunc; + UINT8 bRetValue; + U_API_DATA ApiData; +}; + +#pragma pack(pop) + +typedef struct { + UINT8 NumUsbKbds; + UINT8 NumUsbMice; + UINT8 NumUsbPoint; //(EIP38434+) + UINT8 NumUsbMass; + UINT8 NumUsbHubs; + UINT8 NumUsbCcids; + UINT8 NumUhcis; + UINT8 NumOhcis; + UINT8 NumEhcis; + UINT8 NumXhcis; +} CONNECTED_USB_DEVICES_NUM; + +typedef VOID (EFIAPI *EFI_USB_REPORT_DEVICES ) ( + CONNECTED_USB_DEVICES_NUM *); + +typedef struct _EFI_USB_HOTPLUG_DEVS { + BOOLEAN cdrom; + BOOLEAN floppy; +} EFI_USB_HOTPLUG_DEVS; + +typedef EFI_STATUS (EFIAPI *EFI_USB_GET_HOTPLUG_DEVS ) ( + EFI_USB_HOTPLUG_DEVS *); + +typedef EFI_STATUS (EFIAPI *EFI_USB_GET_RUNTIME_REGION ) ( + EFI_PHYSICAL_ADDRESS *, + EFI_PHYSICAL_ADDRESS *); + +typedef UINT8 (EFIAPI *EFI_USB_GET_NEXT_MASS_DEVICE_NAME ) ( + UINT8*, UINT8, UINT8); + +typedef struct +{ + EFI_BLOCK_IO_PROTOCOL BlockIoProtocol; + EFI_BLOCK_IO_MEDIA *Media; + VOID *DevInfo; + UINT16 LogicalAddress; + EFI_HANDLE Handle; + UINT16 PciBDF; + UINT8 *DevString; + UINT8 StorageType; +} USB_MASS_DEV; + +//(EIP51653+)> +// +//---------------------------------------------------------------------------- +// Name: USB_SKIP_LIST +// +// +// Description: If your roothub port 4 insert a hub.You want to skip hub's port 2. +// Set bRootPort = 4, dRoutePath =2 +// If your roothub port 4 insert a hub1.And hub1 port 2 insert a hub2. +// You want to skip hub2's port 1. +// Set bRootPort = 4, dRoutePath =21 +// Fields: Name Type Description +// ------------------------------------------------------------ +// bSkipType BYTE Skip by which Type +// bSkipAll BYTE If this flag is 1 than skip all ports. +// wBDF WORD Bus Dev Function +// bRootPort BYTE Root port path +// dRoutePath DWORD Hub route path. See description. +// bBaseClass BYTE Device Type +// +//---------------------------------------------------------------------------- +// +#define SKIP_FOR_ALLCONTROLLER 0x1 //(EIP62695) + //(EIP88776+)> +#define SKIP_FLAG_SKIP_PORT 0x0 +#define SKIP_FLAG_KEEP_PORT 0x1 +#define SKIP_FLAG_SKIP_LEVEL 0x2 //Skip usb ports on the same level. +#define SKIP_FLAG_SKIP_MULTI_LEVEL 0x3 //Skip usb ports which include down stream ports. + //<(EIP88776+) +typedef struct _USB_SKIP_LIST{ + UINT8 bSkipType; + UINT8 bFlag; //(EIP88776) + UINT16 wBDF; + UINT8 bRootPort; + UINT32 dRoutePath; + UINT8 bBaseClass; +} USB_SKIP_LIST; +//<(EIP51653+) + +//---------------------------------------------------------------------------- +// USB Mass Storage Related Data Structures and Equates +//---------------------------------------------------------------------------- +#define USB_EMU_NONE 0 +#define USB_EMU_FLOPPY_ONLY 1 +#define USB_EMU_HDD_ONLY 2 +#define USB_EMU_HDD_OR_FDD 3 +#define USB_EMU_FORCED_FDD 4 + +#define BAID_TYPE_HDD 1 +#define BAID_TYPE_RMD_HDD 2 +#define BAID_TYPE_CDROM 3 +#define BAID_TYPE_RMD_FDD 4 +#define BAID_TYPE_FDD 5 + +// Values for Mass Storage Device type +//------------------------------------- +#define USB_MASS_DEV_UNKNOWN 0 +#define USB_MASS_DEV_HDD 1 +#define USB_MASS_DEV_CDROM 2 +#define USB_MASS_DEV_ARMD 3 +#define USB_MASS_DEV_FDD 4 +#define USB_MASS_DEV_MO 5 + + +#define STOP_USB_CONTROLLER 0 //(EIP43475+) +#define START_USB_CONTROLLER 1 //(EIP43475+) + +typedef VOID (*API_FUNC)(URP_STRUC*); +typedef VOID (EFIAPI *EFI_USB_CHANGE_EFI_TO_LEGACY) (UINT8); +//typedef EFI_STATUS (EFIAPI *EFI_USB_BBS_REMOVE_MASSSTORAGE) (); + +typedef EFI_STATUS (EFIAPI *EFI_INSTALL_USB_LEGACY_BOOT_DEVICES)(VOID); +typedef EFI_STATUS (EFIAPI *EFI_USB_INSTALL_LEGACY_DEVICE)(USB_MASS_DEV*); +typedef EFI_STATUS (EFIAPI *EFI_USB_UNINSTALL_LEGACY_DEVICE)(USB_MASS_DEV*); +typedef EFI_STATUS (EFIAPI *EFI_GET_ASSIGN_USB_BOOT_PORT)(UINT8*, UINT8*); +typedef VOID (EFIAPI *EFI_KBC_ACCESS_CONTROL)(UINT8); +typedef EFI_STATUS (EFIAPI *EFI_USB_RT_LEGACY_CONTROL)(VOID *); +typedef VOID (EFIAPI *EFI_USB_STOP_UNSUPPORTED_HC)(); +typedef VOID (EFIAPI *EFI_USB_SHUTDOWN_LEGACY)(); //<(EIP52339+) +typedef VOID (EFIAPI *EFI_USB_COPY_SKIP_TABLE)(USB_SKIP_LIST*, UINT8); //(EIP51653+) +typedef VOID (EFIAPI *EFI_USB_RT_STOP_CONTROLLER)(UINT16); //(EIP74876+) +typedef VOID (EFIAPI *EFI_USB_INVOKE_API)(VOID*); +typedef struct _EFI_USB_PROTOCOL { + UINT32 Signature; //(EIP55275+) + VOID *USBDataPtr; +// VOID *UsbBadDeviceTable; //(EIP60706-) + EFI_USB_REPORT_DEVICES UsbReportDevices; + EFI_USB_GET_NEXT_MASS_DEVICE_NAME UsbGetNextMassDeviceName; + EFI_USB_CHANGE_EFI_TO_LEGACY UsbChangeEfiToLegacy; +// EFI_USB_BBS_REMOVE_MASSSTORAGE UsbBbsRemoveMassStorage; + EFI_USB_GET_RUNTIME_REGION UsbGetRuntimeRegion; + EFI_INSTALL_USB_LEGACY_BOOT_DEVICES InstallUsbLegacyBootDevices; + EFI_USB_INSTALL_LEGACY_DEVICE UsbInstallLegacyDevice; + EFI_USB_UNINSTALL_LEGACY_DEVICE UsbUninstallLegacyDevice; + EFI_GET_ASSIGN_USB_BOOT_PORT UsbGetAssignBootPort; + EFI_KBC_ACCESS_CONTROL UsbRtKbcAccessControl; + EFI_USB_RT_LEGACY_CONTROL UsbLegacyControl; + EFI_USB_STOP_UNSUPPORTED_HC UsbStopUnsupportedHc; + EFI_USB_SHUTDOWN_LEGACY UsbRtShutDownLegacy; //EIP52339+ + EFI_USB_COPY_SKIP_TABLE UsbCopySkipTable; //(EIP51653+) + EFI_USB_RT_STOP_CONTROLLER UsbRtStopController; //(EIP74876+) + EFI_USB_INVOKE_API UsbInvokeApi; +} EFI_USB_PROTOCOL; + +typedef struct { + UINT32 ConstantDataCrc32; + UINT32 Crc32Hash; +} AMI_USB_GLOBAL_DATA_VALIDATION; + +typedef struct { + EFI_USB_STOP_UNSUPPORTED_HC UsbStopUnsupportedHc; + API_FUNC *UsbApiTable; + API_FUNC *UsbMassApiTable; + AMI_USB_GLOBAL_DATA_VALIDATION GlobalDataValidation; +} AMI_USB_SMM_PROTOCOL; + +#endif +#endif // _USB_PROT_H + +//**************************************************************************** +//**************************************************************************** +//** ** +//** (C)Copyright 1985-2016, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Pkwy, Norcross, GA 30093 ** +//** ** +//** Phone (770)-246-8600 ** +//** ** +//**************************************************************************** +//**************************************************************************** -- cgit v1.2.3