//**************************************************************************** //**************************************************************************** //** ** //** (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/rt/usbdef.h 149 10/16/16 10:15p Wilsonlee $ // // $Revision: 149 $ // // $Date: 10/16/16 10:15p $ // //********************************************************************** // Revision History // ---------------- // $Log: /Alaska/SOURCE/Modules/USB/ALASKA/rt/usbdef.h $ // // 149 10/16/16 10:15p 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 // // 148 7/07/16 1:13a Wilsonlee // [TAG] EIP277810 // [Category] Improvement // [Description] Validate the memory buffer is entirely outside of SMM. // [Files] usbsb.c, amiusb.c, ehci.c, ohci.c, uhci.c, usbCCID.c, // usbdef.h, usbmass.c, xhci.c, amiusbhc.c, efiusbccid.c, efiusbmass.c, // uhcd.c, uhcd.h, usbmisc.c // // 147 3/02/16 9:44p 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 // // 146 11/04/15 9:53p 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 // // 145 9/01/15 10:18p Wilsonlee // [TAG] EIP235482 // [Category] Improvement // [Description] Select this alternate setting for multiple TTs hubs. // [Files] usbhub.c, usb.c, amiusb.h, usbdef.h // // 144 7/24/15 4:43a Wilsonlee // [TAG] EIP226493 // [Category] Improvement // [Description] Block to process periodic list to prevent that we might // send the wrong command sequences to the same device. // [Files] usbmass.c, ehci.c, xhci.h, xhci.c, usbdef.h, uhcd.c // // 143 5/28/15 4:29a Wilsonlee // [TAG] EIP219785 // [Category] Improvement // [Description] Suspend usb devices which are connected to Hubs. // [Files] usb.c, usbdef.h // // 142 5/26/15 11:39p Wilsonlee // [TAG] EIP219658 // [Category] Bug Fix // [Severity] Normal // [Symptom] It is failed at executing ConfigureEndpoint command for // DisplayLink devices. // [RootCause] The value of Average TRB Length should not be 0. // [Solution] Reasonable initial values of Average TRB Length for // Control endpoints Control endpoints would be 8B, Interrupt endpoints // 1KB, and Bulk and Isoch endpoints 3KB. // [Files] xhci.c, usbdef.h // // 141 4/29/15 11:29p Wilsonlee // [TAG] EIP215031 // [Category] Bug Fix // [Severity] Normal // [Symptom] Transcend USB 3.0 HDD is disappeared in the setup menu by // cold boot. // [RootCause] We only can get SerialNumber string descriptor before // setting configuration for this device, otherwise it is failed at // getting this descriptor and inquiry command is also failed. // [Solution] Retry inquiry command. // [Files] usb.c, usbmass.c, efiusbmass.c, usbbus.c, usbdef.h // // 140 4/27/15 2:26a Wilsonlee // [TAG] EIP211855 // [Category] Improvement // [Description] Set the default interface if the device has alternate // setting for the interface. // [Files] usb.c, usbdef.h // // 139 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 // // 138 3/26/15 3:25a Wilsonlee // [TAG] EIP210432 // [Category] Improvement // [Description] Change ReportCount to UINT32. // [Files] usbdef.h // // 137 1/22/15 10:21p Wilsonlee // [TAG] EIP201434 // [Category] Bug Fix // [Severity] Normal // [Symptom] Number of connected devices isn't correct if we plug out // keyboards or mice behind hub in xhci. // [RootCause] The PortConnectChange bit is cleared when we check port // status for interrupt endpoint transaction error. // [Solution] Don't clear change bits if we check port status for // interrupt endpoint transaction error. // [Files] xhci.c, usbhub.c, usbdef.h, usb.c, uhci.c, ohci.c, ehci.c, // amiusbhc.c // // 136 12/24/14 9:34p Wilsonlee // [TAG] EIP194683 // [Category] Improvement // [Description] Add the flag "USB_INCMPT_HID_BOOT_PROTOCOL_ONLY" of usb // bad device table to keep devices use boot protocol. // [Files] usbkbd.c, usbms.c, usbhid.c, usbdef.h // // 135 12/24/14 1:11a Wilsonlee // [TAG] EIP192517 // [Category] Improvement // [Description] USB Driver handles 0x100 NumHeads as a valid value. // [Files] usbmass.c, usbdef.h, UsbInt13.c, UsbInt13.h, UI13.bin, // Bfiusb.equ, Bfiusb.asm // // 134 12/03/14 9:37p Wilsonlee // [TAG] EIP193805 // [Category] Improvement // [Description] Security Enhancement for SMIHandler in USB module. // [Files] amiusb.c, uhcd.c, usbrt.mak, usbdef.h, usbsb.c // // 133 11/24/14 12:50a Wilsonlee // [TAG] EIP185972 // [Category] Improvement // [Description] To acquire more bandwidth, a dynamically transfer queue // allocation mechanism is required. // [Files] ehci.c, usbdef.h // // 132 9/29/14 11:38p Wilsonlee // [TAG] EIP181169 // [Category] Improvement // [Description] Support XHCI 1.1/USB 3.1. // [Files] xhci.c, xhci.h, usb.c, usbbus.c, usbdef.h, UsbHc.h // // 131 9/02/14 3:54a Wilsonlee // [TAG] EIP182567 // [Category] Bug Fix // [Severity] Minor // [Symptom] POST B4h sometimes stays about 30 sec if using special // KB/Ms. // [RootCause] It's timeout in getting config or report descriptor // commands. // [Solution] Set the timeout to 500 ms. // [Files] usb.c, usbhid.c, usbdef.h // // 130 8/20/14 10:04p Wilsonlee // [TAG] EIP180089 // [Category] Bug Fix // [Severity] Minor // [Symptom] After updated to AMI_USB_07, we get EHCI TIMEOUT for // specific mouse. // [RootCause] This device may not respond getting string descriptors // which describing manufacturer, product and the device's serial number. // [Solution] Set the timeout value to 100 ms, the original is 20 secs. // [Files] usbbus.c, usbdef.h // // 129 8/07/14 2:20a Wilsonlee // [TAG] EIP176549 // [Category] Bug Fix // [Severity] Minor // [Symptom] Microstep USB Keyboard issue. // [RootCause] The report descriptor of Microstep USB Keyboard (Sonix // Technology Co chip) has an error, Modifier keys is bitmap data, but it // reports as array data. // [Solution] We need to force variable flag for Modifier keys input // item. // [Files] usbhid.c, usbkbd.c, usbdef.h // // 128 7/06/14 10:22p Wilsonlee // [TAG] EIP176288 // [Category] Improvement // [Description] Change the value of MAX_CONTROL_DATA_SIZE to 0x800. // [Files] usbdef.h // // 127 5/06/14 5:18a Ryanchou // [TAG] EIP166835 // [Category] Bug Fix // [Severity] Normal // [Symptom] Arrow keys cannot work with specific USB keyboard // [RootCause] HID driver cannot parse a input report that includes both // usage minimum/maximum and single usage. // [Solution] Store the usage in the same array to determine the input // data format. // [Files] syskbc.c, sysnokbc.c, usbdef.h, usbhid.c, usbkbd.c, // usbkbd.h, usbms.c, usbpoint, efiusbhid.c, efiusbpoint.c // // 126 4/30/14 6:15a Ryanchou // [TAG] EIP151374 // [Category] Improvement // [Description] Calculates maximum data length to be reported in the // HID device. // [Files] ehci.c, ohci.c, uhci.c, usbCCID.c, usbdef.h, usbhid.c, // usbhub.c, xhci.c // // 125 4/30/14 5:28a Wilsonlee // [TAG] EIP164842 // [Category] Improvement // [Description] Check if the devices have put into to our queue before // we put them. // [Files] UsbInt13.c, amiusb.c, ehci.c, ohci.c, usb.c, usbdef.h, // usbmass.c, xhci.c, amiusbhc.c, efiusbmass.c, uhcd.c, usbbus.c, usbsb.c // // 124 4/07/14 2:08a Wilsonlee // [TAG] EIP156126 // [Category] Bug Fix // [Severity] Important // [Symptom] The power Format of UEFI can not be identified when we // install OS from USB CD-ROM. // [RootCause] The media information is incorrect when we install // BlockIoProtocol for usb CD / DVD devices. // [Solution] Get the media status before we install BlockIoProtocol. // [Files] usbmass.c, usbdef.h, efiusbmass.c // // 123 2/26/14 1:57a Wilsonlee // [TAG] EIP149854 // [Category] Improvement // [Description] Add data length parameter to polling callback function. // [Files] usbkbd.c, uhci.c, usb.c, usbhub.c, usbCCID.c, usbms.c, // usbhid.c, usbpoint.c, usbkbd.h, ehci.c, ohci.c, xhci.c, usbdef.h // // 122 12/15/13 10:15p Wilsonlee // [TAG] EIP136594 // [Category] New Feature // [Description] Support 64 bits LBA of usb mass storages. // [Files] Bfiusb.asm, Bfiusb.equ, UsbInt13.c, UsbInt13.h, amiusb.c, // usbdef.h, usbmass.c, UsbMass.h, efiusbmass.c, UI13.bin // // 121 10/19/13 7:09a Ryanchou // [TAG] EIP138257 // [Category] Improvement // [Description] Correct USB HID device type. // [Files] amiusb.c, usbdef.h, usbhid.c, efiusbhid.c, uhcd.c // // 120 7/26/13 2:42a Ryanchou // [TAG] EIP122142 // [Category] Improvement // [Description] Improve periodic schedule mechanism // [Files] ehci.c, ehci.h, ohci.c, ohci.h, uhci.c, uhci.h, usbdef.h, // amiusbhc.c // // 119 7/23/13 2:12a Wilsonlee // [TAG] EIP127941 // [Category] Improvement // [Description] Replace UI13HDDFunc08 with UI13FDDFunc08 if the media // descriptor is a fixed disk. // [Files] UsbInt13.h, UsbInt13.c, usbmass.c, usbdef.h, Bfiusb.asm, // Bfiusb.equ // // 118 7/22/13 10:32p Wilsonlee // [TAG] EIP125357 // [Category] Improvement // [Description] Check if the port releases to a select host controller. // [Files] uhci.c, usb.c, usbhub.c, ehci.c, ohci.c, xhci.c, usbdef.h // // 117 7/04/13 5:50a Roberthsu // [TAG] EIP127014 // [Category] Bug Fix // [Severity] Normal // [Symptom] Mouse drifting not smooth // [RootCause] Bbecause Efi simple point protocol RelativeMovementX // type is INT32. // [Solution] Transfer data type to INT32. // [Files] usbdef.h,usbhid.c,usbms.c,usbkbd.h // // 116 6/30/13 11:41p Wilsonlee // [TAG] EIP121374 // [Category] Bug Fix // [Severity] Minor // [Symptom] USB flash is not recognized after re-plugged on DOS. // [RootCause] Some devices need to wait for that they are being settle. // [Solution] Delay for 50 ms allowing port to settle when pluged in // devices. // [Files] usbhub.c, usbdef.h // // 115 6/02/13 11:44p Wilsonlee // [TAG] EIP123235 // [Category] Improvement // [Description] Stop the usb host controller at ExitBootService if it // is an extend card or it doesn't support HW SMI. // [Files] xhci.c, ehci.c, uhci.c, ohci.c, amiusb.c, usbdef.h, usbsb.c, // uhcd.c // // 114 4/16/13 6:47a Ryanchou // [TAG] EIP118912 // [Category] Improvement // [Description] Add VIA VT6212 EHCI controller support. // [Files] ehci.c, uhci.c, usbdef.h, uhcd.c // // 113 3/19/13 4:02a Ryanchou // [TAG] EIP118177 // [Category] Improvement // [Description] Dynamically allocate HCStrucTable at runtime. // [Files] usb.sdl, usbport.c, usbsb.c, amiusb.c, ehci.c, ohci.c, // syskbc.c, sysnokbc.c, uhci.c, usb.c, usbCCID.c, usbdef.h, usbhid.c, // usbhub.c, usbmass.c, usbrt.mak, usb.sd, amiusbhc.c, efiusbccid.c, // efiusbhid.c, efiusbmass.c, efiusbms.c, uhcd.c, uhcd.h, uhcd.mak, // usbmisc.c, usbsrc.sdl // // 112 3/18/13 4:51a Ryanchou // [TAG] EIP98377 // [Category] Improvement // [Description] Optimize USB controller timing. // [Files] usb.sdl, usbport.c, ehci.c, elib.c, ohci.c, uhci.c, // usbdef.h, usbhub.c, xhci.c, uhcd.c // // 111 1/23/13 5:21a Ryanchou // [TAG] EIP111280 // [Category] Improvement // [Description] Add USB APIs for external driver. // [Files] amiusb.c, amiusb.h, usbdef.h // // 110 1/22/13 3:10a Wilsonlee // [TAG] EIP112938 // [Category] Improvement // [Description] Create a header file for usb mass storage driver. // [Files] UsbMass.h, usbmass.c, usbdef.h, amiusb.c, efiusbmass.c // // 109 1/22/13 2:39a Wilsonlee // [TAG] EIP110305 // [Category] Improvement // [Description] Set the device address after we send the first // get-device-descriptor command. // [Files] usbmass.c, usb.c, usbdef.h, usbbus.c, efiusbmass.c, uhcd.c, // usbport.c // // 108 1/11/13 4:22a Ryanchou // [TAG] EIP102491 // [Category] Improvement // [Description] Synchronized with Aptio V USB module // [Files] usbport.c, usbsb.c, ehci.c, ehci.h, ohci.c, ohci.h, uhci.h, // usb.c, usbdef.h, usbhid.c, usbhub.c, usbkbd.c, usbkbd.h, usbmass.c. // usbms.c, usbpoint.c, xhci.h, usb.sd, amiusbhc.c, componentname.c, // efiusbkc.c, efiusbmass.c, uhcd.c, uhcd.h, usbbus.c, usbbus.h, usbmisc.c // // 107 12/21/12 5:03a Ryanchou // [TAG] EIP71730 // [Category] New Feature // [Description] Added OHCI handoff support. // [Files] usb.sdl, usbport.c, amiusb.c, usbdef.h, UsbPolicy.h, usb.sd, // usb.uni // // 106 11/10/12 6:43a Ryanchou // [TAG] EIP99431 // [Category] Bug Fix // [Severity] Minor // [Symptom] Cannot use the UsbIo's UsbAsyncInterruptTransfer for // keyboard input // [RootCause] Stopping EFI USB keyboard driver does not stop the // endpoint polling, then application calls UsbAsyncInterruptTransfer, // error will be returned. // [Solution] Stops endpoint polling and release resource when // disconnecting the device driver. And improve the // UsbSyncInterruptTransfer. // [Files] amiusb.c, amiusb.h, ehci.c, ohci.c, uhci.c, usb.c, // usbCCID.c, usbdef.h, usbhub.c, usbkbd.c, usbmass.c, usbms.c, // usbpoint.c, amiusbhc.c, efiusbhid.c, usbbus.c, usbbus.h // // 105 9/04/12 8:04a Wilsonlee // [TAG] EIP99882 // [Category] New Feature // [Description] Add the usb setup item and usbpolicyprotocol to enable // or disable the usb mass storage driver. // [Files] UsbPolicy.h, usb.uni, usb.sd, usbmass.c, usbdef.h, // efiusbmass.c, usbport.c, uhcd.c // // 104 8/29/12 8:41a 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 // // 103 8/13/12 3:26a Roberthsu // [TAG] EIP96010 // [Category] Bug Fix // [Severity] Normal // [Symptom] The KB can not work under bios. // [RootCause] Usage count overflow. // [Solution] Add usage count check. // [Files] usbdef.h,usbhid.c // // 102 5/04/12 6:46a Ryanchou // [TAG] EIP82875 // [Category] Improvement // [Description] Support start/stop individual USB host to avoid // reconnect issues. // [Files] usbport.c, usbsb.c, amiusb.c, amiusb.h, ehci.c, ohci.c, // uhci.c, uhci.h, usb.c, usbdef.h, xhci.c, amiusbhc.c, uhcd.c, uhcd.h, // usbbus.c, usbmisc.c // // 101 5/04/12 5:28a Wilsonlee // [TAG] EIP89307 // [Category] Improvement // [Description] Modify incorrect #pragma pack directive. // [Files] amidef.h, amiusb.c, ehci.h, ohci.c, ohci.h, uhci.h, usb.c, // usbdef.h, xhci.h, efiusbmass.c, uhcd.c, uhcd.h, usbbus.c, usbbus.h, // UsbIo.h // // 100 5/03/12 6:24a Roberthsu // [TAG] EIP84455 // [Category] Improvement // [Description] Implement usb hid device gencric. // [Files] amiusb.c,amiusbhc.c,efiusbhid.c,efiusbkb.c,ehci.c,ohci.c,uhc // d.c,uhci.c,usbdef.h,usbhid.c,usbhub.c,usbkbd.c,usbkbd.h,usbms.c,usbsb.c // ,usbsrc.sdl // // 99 5/03/12 5:10a Ryanchou // [TAG] EIP83361 // [Category] New Feature // [Description] Added "USB 2.0 Controller Mode" setup item. // [Files] ehci.c, usb.sd, usb.sdl, usb.uni, usbdef.h, UsbPolicy.h, // usbport.c // // 98 5/02/12 8:08a Wilsonlee // [TAG] EIP86793 // [Category] New Feature // [Description] Add the SDL token "USB_MASS_EMULATION_FOR_NO_MEDIA" for // determine the USB mass storage device emulation type without media. // [Files] usbmass.c, usbport.c, uhcd.c, usbdef.h, usbsrc.sdl // // 97 5/02/12 2:00a Rajeshms // [TAG] EIP83117 // [Category] Improvement // [Description] Extend the Support to different smart card Readers and // smart Cards. // [Files] usbCCID.c, amiusbrtCCID.h, usbdef.h, efiusbccid.c, // AmiusbCCID.h~ // // 96 4/03/12 5:52a Roberthsu // [TAG] EIP80948 // [Category] Bug Fix // [Severity] Normal // [Symptom] When insert the touch board, it will block the function // of rear USB ports. // [RootCause] Report item not enough. // [Solution] Create buffer use report length. // [Files] usbhid.c,usbdef.h // // 95 1/14/12 6:41a Wilsonlee // [TAG] EIP80382 // [Category] New Feature // [Description] Add the SDL token "USB_MASS_EMULATION_BY_SIZE" for // determine the USB mass storage device emulation type by size only. // [Files] usbmass.c, usbport.c, uhcd.c, usbdef.h, usbsrc.sdl // // 94 11/09/11 3:35a Ryanchou // [TAG] EIP73692 // [Category] Improvement // [Description] Implement the ownership change mechanism for PCH. // [Files] ehci.c, usbdef.h, usbsrc.sdl // // 93 11/08/11 8:24a 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 // // 92 11/08/11 2:00a Ryanchou // [TAG] EIP63188 // [Category] Improvement // [Description] External USB controller support. // [Files] amidef.h, amiusb.c, ehci.c, ohci.c, uhcd.c, uhcd.h, uhci.c, // usbdef.h, usbmisc.c, usbsb.c, xhci.c // // 91 11/05/11 7:37a Wilsonlee // [TAG] EIP64781 // [Category] New Feature // [Description] Added SDL token // SKIP_CARD_READER_CONNECT_BEEP_IF_NO_MEDIA that skip the connect beep if // no media present in USB card reader. // [Files] usbport.c, usbmass.c, usb.c, usbdef.h, uhcd.c, usbsrc.sdl // // 90 10/25/11 3:52a Ryanchou // [TAG] EIP70933 // [Category] Bug Fix // [Severity] Minor // [Symptom] System hangs at checkpoint 0x98 when webcam plugged // [RootCause] The webcam return invalid data in configuration // descriptor. // [Solution] Get the configuration descriptor twice, the first time is // to receive the returned configure descriptor to get the total length // and the second time is to feed the length to the function again. // [Files] usb.c, usbdef.h // // 89 9/27/11 12:08a Roberthsu // [TAG] EIP65344 // [Category] Bug Fix // [Severity] Normal // [Symptom] Razer mouse will hang in post // [RootCause] Razer has report keyboard interface.But not report led // usage. // [Solution] Check if not report led usage page.Do not send led // command. // [Files] syskbc.c,usbhid.c,usbdef.h // // 88 9/19/11 9:28a Lavanyap // [TAG] EIP66198 // [Category] Improvement // [Description] Added Mouse Wheel support in PS2 and USB drivers. // [Files] usbdef.h, usbms.c, efiusbms.c, ps2mouse.h, mouse.c // // 87 8/08/11 7:02a Ryanchou // [TAG] EIP54018 // [Category] New Feature // [Description] Added USB S5 wake up support. // [Files] amiusb.c, ehci.c, ohci.c, uhci.c, usb.c, usb.sdl, usbdef.h, // usbsb.c xhci.c // // 86 8/08/11 5:25a Ryanchou // [TAG] EIP60561 // [Category] New Feature // [Description] Add USB timing policy protocol for timing override. // [Files] ehci.c, guids.c, ohci.c, uhcd.c, uhci.c usb.c, usbdef.h, // usbhub.c, usbmass.c, UsbPolicy.h, usbport.c usbsrc.sdl // // 85 7/19/11 5:22a Ryanchou // [TAG] EIP64498 // [Category] New Feature // [Description] Implement EHCI key repeat function. // [Files] ehci.c, ehci.h, usb.c, usbdef.h // // 84 7/15/11 6:30a 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 // // 83 7/13/11 2:50a Ryanchou // [TAG] EIP60460 // [Category] Improvement // [Description] Adds a flag when device disconnected during data // transfer, BIOS will not issue a transfer to the devicce if this flag is // set. This change is for Fresco USB 3.0 controller. // [Files] usb.c, usbdef.h, xhci.c, xhci.h // // 82 7/12/11 8:16a 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 // // 81 6/22/11 1:46a Ryanchou // [TAG] EIP59738 // [Category] Improvement // [Description] Support Block size other than 512 bytes USB HDD in UEFI // mode. // [Files] efiusbmass.c, uhci.c, usb.c, usbdef.h, usbmass.c // // 80 5/03/11 10:13a Ryanchou // [TAG] EIP54283 // [Category] Improvement // [Description] Follow XHCI spec ver 1.0 section 4.6.8 to recovery // endpoint halt. // [Files] ehci.c, ohci.c, uhci.c, usbdef.h, usbmass.c, xhci.c // // 79 4/06/11 1:34a Ryanchou // [TAG] EIP54782 // [Category] Improvement // [Description] Change polling data size of HID devices to max packet // size of interrupt endpoint. // [Files] ehci.c, ohci.c, uhci.c, usb.c, usbdef.h, xhci.c // // 78 4/06/11 12:50a 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 // // 77 3/29/11 10:55p Ryanchou // [TAG] EIP55401 // [Category] Improvement // [Description] Improve the USB 3.0 device compatibility. // [Files] ehci.c, ehci.h, ohci.c, uhci.c, usb.c, usbdef.h, usbhub.c, // xhci.c // // 76 3/29/11 10:19a Ryanchou // [TAG] EIP53518 // [Category] Improvement // [Description] Added chipset xHCI chip support. // [Files] amiusb.c, amiusb.h, ehci.c, ohci.c, uhcd.c, uhci.c, usb.c, // usb.sdl, usbdef.h, usbport, usbsb.c, xhci.c // // 75 11/11/10 11:38p Ryanchou // [TAG] EIP45578 // [Category] Bug Fix // [Severity] Minor // [Symptom] USB 3.0 device can't be detected. // [RootCause] Address Device Command fails. // [Solution] Reset the device and attempt the Address Device Command // again. // [Files] ehci.c, ohci.c, uhci.c, usb.c, usbdef.h, usbhub.c, xhci.c // // 74 10/22/10 8:59a Ryanchou // EIP46693: Clear xHCI BIOS owned semaphore bit and SMI enable bit in // PreInitXhci. // // 73 10/20/10 10:26a Ryanchou // EIP44702: Added USB 3.0 hub support. // // 72 10/12/10 2:11a Rameshr // [TAG]- EIP 44585 // [Category]-IMPROVEMENT // [Description]- Number of maximum supported USB Mass Storage device // increased from 8 to 16. // [Files]- Uin13.bin, UsbPort.c, UsbInt13.h, Usb.c, Usbdef.h, Uasbmass.c, // Usb.sd, usb.uni, UsbSetup.c, UsbSrc.sdl, UsbPolicy.h // // 71 9/16/10 12:49p Olegi // Added USB_FLAG_EFIMS_DIRECT_ACCESS flag definition. // // 70 9/07/10 4:42a Tonylo // Remove user tags for coding standard. // // 69 7/15/10 4:43a Tonylo // EIP15489 - Add USB HandOff function for shurdown/init USB legacy // through USB API function. // // 68 7/13/10 7:13a Ryanchou // EIP38356: Implement shutdown USB legacy support in ACPI enable call. // // 67 6/22/10 9:10p Olegi // EIP39708: Added new incompatibility type for HIDs that ignore boot // protocol. // // 66 6/17/10 10:34a Olegi // EIP39326: Runtime data moved to runtime memory region. // // 65 5/30/10 10:24p Tonylo // Name tags clean up for coding standard. // // 64 5/11/10 9:33a Olegi // Corrected the mouse data report. EIP37798 // // 63 4/19/10 1:52p Olegi // // 62 3/11/10 9:49a Olegi // // 61 3/11/10 9:21a Olegi // // 60 2/27/10 12:00p Olegi // // 59 2/26/10 4:08p Olegi // // 58 2/08/10 10:05a Olegi // EIP33381: Implement multiple bulk endpoint in UsbIoProtocol. // // 57 1/19/10 12:00p Olegi // // 56 12/23/09 11:59a Olegi // // 55 11/24/09 11:36a Olegi // EIP#29733 - BIOS adds an USB API (Block KBC Access) // // 54 11/13/09 9:14a Olegi // // 53 11/04/09 12:46p Olegi // // 52 11/04/09 11:10a Olegi // Increased KBC character buffer. (EIP29345) // // 51 10/30/09 5:48p Olegi // // 50 10/09/09 5:57p Olegi // // 49 10/02/09 10:50a Olegi // Code cleanup. // // 48 9/15/09 12:21p Olegi // Added KEY_REPEAT_LOGIC functionality. EIP#25841 // // 47 8/26/09 11:44a Olegi // Changes that prevent collision of keyboard activity and mass storage // access. EIP#22808 // // 46 5/22/09 1:49p Olegi // Added the definition of USB_INCMPT_BUILT_IN_HUB. // // 45 5/21/09 5:17p Olegi // Added HDD hotplug support definitions. // // 44 2/20/09 2:32p Olegi // Added USB_SAFE_DISABLE_INTERRUPT, EIP#19525 // // 43 2/18/09 3:45p Olegi // Added a feature that allows to skip mass storage device installation // depending on physical media presence. EIP#19260. // // 42 2/17/09 8:44a Olegi // Modified the value of DESC_TYPE_CLASS_HUB. // // 38 9/05/08 4:11p Olegi // fpCallbackNotifyX were removed from global data area. // // 33 5/16/08 12:03p Olegi // Compliance with AMI coding standard. // // 32 12/17/07 4:04p Olegi // KBC emulation support added. // // 30 9/26/07 9:27a Olegi // Added USB_FORCE_64BIT_ALIGNMENT flag. // // 28 9/06/07 6:08p Olegi // USB_FLAG_DRIVER_CONSISTENT flag added. // // 27 7/09/07 2:12p Olegi // Changed the maximum data size of the BulkTransfer from 1kB to 64kB. // // 19 10/12/06 9:09p Andriyn // Fix: unexpected plug-off lead to endless timeout // // 17 4/14/06 6:42p Olegi // Conversion to be able to use x64 compiler. // // 16 3/20/06 3:38p Olegi // Version 8.5 - x64 compatible. // // 14 3/06/06 6:28p Olegi // Lun devices support modifications: supported using the index in // DEV_INFO table, not through dedicated massLun table. // // 13 3/01/06 3:54p Olegi // Added definition of USB_FLAG_RUNNING_UNDER_OS flag. // // 7 8/04/05 5:59p Andriyn // Legacy over LegacyFree // // 6 6/03/05 6:31p Andriyn // Device path added to HC_STRUC for the need of Aptio framework // // 5 5/20/05 12:10p Andriyn // HC driver to support both protocols // // 4 5/20/05 11:05a Andriyn // reconcile Aptio changes with Alaska // // 3 5/17/05 7:51p Andriyn // USB BUS pre-release // // 2 5/10/05 4:13p Andriyn // USBBUS implementation // // 1 3/15/05 9:23a Olegi // Initial VSS check-in. // //********************************************************************** // //---------------------------------------------------------------------------- // // Name: UsbDef.h // // Description: AMI USB driver definitions // //---------------------------------------------------------------------------- // // AVOID including multiple instance of this file #ifndef __USB_H #define __USB_H typedef struct _EFI_PCI_IO_PROTOCOL EFI_PCI_IO_PROTOCOL; #include "efi.h" #include "Protocol\UsbHC.h" #include #include "token.h" #include "uhci.h" #include "ohci.h" #include "ehci.h" #include "xhci.h" #include #include #include #include "AmiusbrtCCID.h" // // USB Module version number // #define USB_MAJOR_VER USB_DRIVER_MAJOR_VER #define USB_MINOR_VER USB_DRIVER_MINOR_VER #define USB_BUG_RELEASE_VER USB_DRIVER_BUILD_VER #define USB_ACTIVE 0xFC #define USB_LEGACY_ENABLE 0x01 #define USB_6064_ENABLE 0x02 #define MAX_DEVICE_TYPES 0x07 // 7 different types of devices #define MAX_HC_TYPES 0x04 // 4 different types of host controllers #define MAX_MASS_DEVICES 0x06 #define MAX_CCID_DEVICES 0x06 #define BIOS_DEV_TYPE_HID 0x01 //#define BIOS_DEV_TYPE_KEYBOARD 0x01 //#define BIOS_DEV_TYPE_MOUSE 0x02 #define BIOS_DEV_TYPE_HUB 0x03 #define BIOS_DEV_TYPE_STORAGE 0x04 #define BIOS_DEV_TYPE_SECURITY 0x05 #define BIOS_DEV_TYPE_USBBUS 0x06 // Generic USB device driver #define BIOS_DEV_TYPE_USBBUS_SHADOW 0x07 // Dummy device type for temp usage #define BIOS_DEV_TYPE_CCID 0x08 // CCID device type #define HID_DEV_TYPE_KEYBOARD BIT0 #define HID_DEV_TYPE_MOUSE BIT1 #define HID_DEV_TYPE_POINT BIT2 #define MAX_DEVICES (USB_DEV_HID_COUNT+USB_DEV_MASS_COUNT+USB_DEV_HUB_COUNT+USB_DEV_CCID_COUNT+USB_DEV_UNSUPPORTED) // USB HC type #define USB_HC_UHCI 0x10 #define USB_HC_OHCI 0x20 #define USB_HC_EHCI 0x30 #define USB_HC_XHCI 0x40 #define GET_HCD_INDEX(bHCType) (((bHCType) - USB_HC_UHCI) >> 4) #define USB_INDEX_UHCI (GET_HCD_INDEX(USB_HC_UHCI)) #define USB_INDEX_OHCI (GET_HCD_INDEX(USB_HC_OHCI)) #define USB_INDEX_EHCI (GET_HCD_INDEX(USB_HC_EHCI)) #define USB_INDEX_XHCI (GET_HCD_INDEX(USB_HC_XHCI)) #define USB_MEM_BLK_SIZE 32 // 32 bytes #define USB_MEM_BLK_SIZE_SHIFT 5 // log2 (USB_MEM_BLK_SIZE) #define USB_FORCE_64BIT_ALIGNMENT 1 #if USB_FORCE_64BIT_ALIGNMENT #define USB_MEM_ALLOCATION_UNIT_SIZE 64 #else #define USB_MEM_ALLOCATION_UNIT_SIZE 32 #endif // The following macro returns number of memory blocks needed for the structure provided #define GET_MEM_BLK_COUNT_STRUC(Struc) ((sizeof(Struc)+(sizeof(MEM_BLK)-1))/sizeof(MEM_BLK)) // The following macro returns number of memory blocks needed for the size of data provided #define GET_MEM_BLK_COUNT(Size) (((Size) + (sizeof(MEM_BLK)-1))/sizeof(MEM_BLK)) #define MAX_SPLIT_PERIODIC_NUMBER 0x07 //#define TEMP_BUFFER_SIZE 0x80 // Size of temp buffer //#define CONTROL_DATA_SIZE 0x100 #define MAX_CONTROL_DATA_SIZE 0x800 #define MAX_TEMP_BUFFER_SIZE 0x80 // Size of temp buffer #define MAX_CONSUME_BUFFER_SIZE 0x1000 //(EIP59738+) // USB state flag equates #define USB_FLAG_ENABLE_BEEP_MESSAGE 0x0001 // BIT 0 #define USB_FLAG_RUNNING_UNDER_EFI 0x0002 // BIT 1 #define USB_FLAG_DISABLE_LEGACY_SUPPORT 0x0004 // BIT 2 #define USB_FLAG_6064EMULATION_ON 0x0008 // BIT 3 #define USB_FLAG_RUNNING_UNDER_OS 0x0010 // BIT 4 #define USB_FLAG_DRIVER_CONSISTENT 0x0020 // BIT 5 //AMI Tracker 27603 #define USB_FLAG_DRIVER_STARTED 0x0080 // BIT 7 #define USB_FLAG_6064EMULATION_IRQ_SUPPORT 0x0100 // BIT 8 #define USB_HOTPLUG_FDD_ENABLED 0x0200 // BIT 9 #define USB_HOTPLUG_HDD_ENABLED 0x0400 // BIT 10 #define USB_HOTPLUG_CDROM_ENABLED 0x0800 // BIT 11 #define USB_FLAG_MASS_NATIVE_EMULATION 0x1000 // BIT 12 #define USB_FLAG_MASS_MEDIA_CHECK 0x2000 // BIT 13 #define USB_FLAG_MASS_SKIP_FDD_MEDIA_CHECK 0x4000 // BIT 14 #define USB_FLAG_EFIMS_DIRECT_ACCESS 0x8000 // BIT15 #define USB_FLAG_SKIP_CARD_READER_CONNECT_BEEP 0x10000 //BIT16 //(EIP64781+) #define USB_FLAG_MASS_SIZE_EMULATION 0x20000 //BIT17 //(EIP80382+) #define USB_FLAG_MASS_EMULATION_FOR_NO_MEDIA 0x40000 //BIT18 //(EIP86793+) // PCI related equates // Invalid PCI register address bits #define PCI_REG_MAX_ADDRESS 0xFF00 #define PCI_REG_ADDRESS_BYTE PCI_REG_MAX_ADDRESS + 0x000 #define PCI_REG_ADDRESS_WORD PCI_REG_MAX_ADDRESS + 0x001 #define PCI_REG_ADDRESS_DWORD PCI_REG_MAX_ADDRESS + 0x003 // For systems with config mechanism 1 #define CFG_SPACE_INDEX_REG 0xCF8 #define CFG_SPACE_DATA_REG 0xCFC // Standard PCI configuration register offsets and relevant values //------------------------------------------------------------------------------ #define PCI_REG_VENDID 0x00 //PCI vendor ID register #define PCI_REG_DEVID 0x02 //PCI device ID register #define PCI_REG_COMMAND 0x04 //PCI command register //---------------------------------------------------------------------------- // USB API equates //---------------------------------------------------------------------------- #define USB_NEW_API_START_FUNC 0x20 #define USB_API_CHECK_PRESENCE 0x00 #define USB_API_START 0x20 #define USB_API_STOP 0x21 #define USB_API_DISABLE_INTERRUPTS 0x22 #define USB_API_ENABLE_INTERRUPTS 0x23 #define USB_API_MOVE_DATA_AREA 0x24 #define USB_API_GET_DEVICE_INFO 0x25 #define USB_API_CHECK_DEVICE_PRESENCE 0x26 #define USB_API_MASS_DEVICE_REQUEST 0x27 #define USB_API_POWER_MANAGEMENT 0x28 #define USB_API_PREPARE_FOR_OS 0x29 #define USB_API_SECURITY_INTERFACE 0x2A #define USB_API_LIGHTEN_KEYBOARD_LEDS 0x2B #define USB_API_CHANGE_OWNER 0x2C #define USB_API_HC_PROC 0x2D #define USB_API_CORE_PROC 0x2E #define USB_API_KBC_ACCESS_CONTROL 0x30 //(EIP29733+) #define USB_API_LEGACY_CONTROL 0x31 // #define USB_API_GET_DEV_ADDR 0x32 #define USB_API_EXT_DRIVER_REQUEST 0x33 #define USB_API_CCID_DEVICE_REQUEST 0x34 #define USB_API_USB_STOP_CONTROLLER 0x35 //(EIP74876+) #define USB_API_HC_START_STOP 0x36 #define USB_MASSAPI_GET_DEVICE_INFO 0x000 #define USB_MASSAPI_GET_DEVICE_GEOMETRY 0x001 #define USB_MASSAPI_RESET_DEVICE 0x002 #define USB_MASSAPI_READ_DEVICE 0x003 #define USB_MASSAPI_WRITE_DEVICE 0x004 #define USB_MASSAPI_VERIFY_DEVICE 0x005 #define USB_MASSAPI_FORMAT_DEVICE 0x006 #define USB_MASSAPI_CMD_PASS_THRU 0x007 #define USB_MASSAPI_ASSIGN_DRIVE_NUMBER 0x008 #define USB_MASSAPI_CHECK_DEVICE 0x009 #define USB_MASSAPI_GET_MEDIA_STATUS 0x00A #define USB_MASSAPI_GET_DEV_PARMS 0x00B #define USB_MASS_MEDIA_PRESENT BIT0 #define USB_MASS_MEDIA_CHANGED BIT1 #define USB_MASS_GET_MEDIA_FORMAT BIT2 //(EIP13457+) #define USB_MASS_MEDIA_REMOVEABLE BIT3 #define USB_SECURITY_API_READ_DEVICE 0x000 #define USB_SECURITY_API_WRITE_DEVICE 0x001 #define USB_PM_SUSPEND 0x010 #define USB_PM_RESUME 0x020 // Error returned from API handler #define USB_SUCCESS 0x000 #define USB_PARAMETER_ERROR 0x010 #define USB_NOT_SUPPORTED 0x020 #define USBAPI_INVALID_FUNCTION 0x0F0 #define USB_ERROR 0x0FF // // Bit definitions for a generic pointer // #define TERMINATE 0x00000001 #define QUEUE_HEAD 0x00000002 #define VERTICAL_FLAG 0x00000004 #define LINK_POINTER 0xFFFFFFF0 // Mass storage data sync equates #define USB_BULK_IN_DATA_SYNC BIT0 #define USB_BULK_IN_DATA_SYNC_SHIFT 0 #define USB_BULK_OUT_DATA_SYNC BIT1 #define USB_BULK_OUT_DATA_SYNC_SHIFT 1 #define USB_INT_DATA_SYNC BIT2 #define USB_INT_DATA_SYNC_SHIFT 2 // Highest possible device address #define MAX_DEVICE_ADDR MAX_DEVICES // Addr that is guaranted not to be used #define DUMMY_DEVICE_ADDR (MAX_DEVICE_ADDR + 1) #define DEFAULT_PACKET_LENGTH 8 // Max size of packet data // USB BIOS related error codes #define USB_ERROR_CODE_START 0x8100 #define ERRUSB_HC_NOT_FOUND (USB_ERROR_CODE_START + 1) #define ERRUSB_DEVICE_INIT (USB_ERROR_CODE_START + 2) #define ERRUSB_DEVICE_DISABLED (USB_ERROR_CODE_START + 3) #define ERRUSB_OHCI_EMUL_NOT_SUPPORTED (USB_ERROR_CODE_START + 4) #define ERRUSB_EHCI_64BIT_DATA_STRUC (USB_ERROR_CODE_START + 5) // USB internal error codes #define USB_ERR_DEV_INIT_MEM_ALLOC 0x01 #define USB_ERR_DEV_INIT_GET_DESC_8 0x02 #define USB_ERR_DEV_INIT_SET_ADDR 0x03 #define USB_ERR_DEV_INIT_GET_DESC_100 0x04 #define USB_ERR_DEV_INIT_GET_DESC_200 0x05 #define USB_ERR_NO_DRIVER 0x20 #define USB_ERR_NO_HCSTRUC 0x21 #define USB_ERR_STARTHC_NO_MEMORY 0x22 #define USB_ERR_KBCONNECT_FAILED 0x23 #define USB_ERR_HC_RESET_FAILED 0x24 #define USB_ERR_PORT_RESET_FAILED 0x25 #define USB_ERR_CONTROL_XFER_TIMEOUT 0x80 //---------------------------------------------------------------------------- // Descriptor Type Values //--------------------------------------------------------------------------- #define DESC_TYPE_DEVICE 1 // Device Descriptor (Type 1) #define DESC_TYPE_CONFIG 2 // Configuration Descriptor (Type 2) #define DESC_TYPE_STRING 3 // String Descriptor (Type 3) #define DESC_TYPE_INTERFACE 4 // Interface Descriptor (Type 4) #define DESC_TYPE_ENDPOINT 5 // Endpoint Descriptor (Type 5) //(EIP38434+)> #define DESC_TYPE_REPORT 0x22 // Report Descriptor (Type 22h) #define DESC_TYPE_HID 0x21 // HID Descriptor (Type 21h) //<(EIP38434+) #define DESC_TYPE_HUB 0x29 // Hub Descriptor (Type 29h) #define DESC_TYPE_SS_HUB 0x2A #define DESC_TYPE_SS_EP_COMP 48 //SuperSpeed Endpoint Companion Decsriptor #define DESC_TYPE_CLASS_HUB 0x2900 // Hub Class Descriptor (Type 0) //---------------------------------------------------------------------------- // Usb device requests timeout //--------------------------------------------------------------------------- #ifndef USB_GET_CONFIG_DESC_TIMEOUT_MS #define USB_GET_CONFIG_DESC_TIMEOUT_MS 500 #endif #ifndef USB_GET_STRING_DESC_TIMEOUT_MS #define USB_GET_STRING_DESC_TIMEOUT_MS 100 #endif #ifndef USB_GET_SERIAL_NUMBER_DESC_TIMEOUT_MS #define USB_GET_SERIAL_NUMBER_DESC_TIMEOUT_MS 3000 #endif #ifndef USB_GET_REPORT_DESC_TIMEOUT_MS #define USB_GET_REPORT_DESC_TIMEOUT_MS 500 #endif #ifndef USB_SUSPEND_HUB_PORT_TIMEOUT_MS #define USB_SUSPEND_HUB_PORT_TIMEOUT_MS 200 #endif //---------------------------------------------------------------------------- // USB protocol related routines //---------------------------------------------------------------------------- #define MAX_USB_ERROR_RETRY 01 // USB Version structure typedef struct { UINT8 bMajor; UINT8 bMinor; UINT8 bBugRel; } USB_VERSION; typedef struct { UINT8 aBuf[32]; } MEM_BLK; #define MEM_BLK_COUNT (MEM_PAGE_COUNT * (4096 / USB_MEM_BLK_SIZE)) #define MEM_BLK_STS_COUNT (MEM_BLK_COUNT / 32) typedef struct { UINT16 wPCIDev; UINT16 wHCType; } HC_PCI_INFO; #pragma pack(push, 1) typedef struct { UINT8 bDescLength; UINT8 bDescType; UINT16 wTotalLength; UINT8 bNumInterfaces; UINT8 bConfigValue; UINT8 bConfigString; UINT8 bConfigFlags; UINT8 bConfigPower; } CNFG_DESC; typedef struct { UINT8 bDescLength; UINT8 bDescType; UINT8 bInterfaceNum; UINT8 bAltSettingNum; UINT8 bNumEndpoints; UINT8 bBaseClass; UINT8 bSubClass; UINT8 bProtocol; UINT8 bInterfaceString; }INTRF_DESC; typedef struct { UINT8 DescLength; UINT8 DescType; UINT8 MaxBurst; UINT8 Attributes; UINT16 BytesPerInterval; } SS_ENDP_COMP_DESC; typedef struct { UINT8 bDescLength; UINT8 bDescType; UINT8 bEndpointAddr; UINT8 bEndpointFlags; UINT16 wMaxPacketSize; UINT8 bPollInterval; } ENDP_DESC; //(EIP38434+)> typedef struct { UINT8 bDescLength; UINT8 bDescType; UINT16 bcdHID; UINT8 bCountryCode; UINT8 bNumEndpoints; UINT8 bDescriptorType; UINT16 bDescriptorLength; } HID_DESC; #pragma pack(pop) //---------------------------------------------------------------------------- // Report descriptor struct define //---------------------------------------------------------------------------- #define HID_REPORT_FIELD_FLAG_CONSTANT BIT0 //0:DATA 1:CONSTANT #define HID_REPORT_FIELD_FLAG_VARIABLE BIT1 //0:ARRAY 1:VARIABLE #define HID_REPORT_FIELD_FLAG_RELATIVE BIT2 //0:ABSOLUTE 1:RELATIVE #define HID_REPORT_FIELD_FLAG_INPUT BIT4 //0:OUTPUT 1:INPUT #define HID_BTYPE_KEYBOARD 0x1 #define HID_BTYPE_MOUSE 0x2 #define HID_BTYPE_POINT 0X3 #define HID_REPORT_FLAG_REPORT_PROTOCOL BIT0 //If use report protocol #define HID_REPORT_FLAG_REPORT_ID BIT1 //1:REPORT_ID EXIST #define HID_REPORT_FLAG_TOUCH_BUTTON_FLAG BIT2 #define HID_REPORT_FLAG_LED_FLAG BIT3 //1:LED //EIP65344 #define HID_REPORT_FLAG_RELATIVE_DATA BIT4 #define HID_REPORT_FLAG_ABSOLUTE_DATA BIT5 //---------------------------------------------------------------------------- // Report descriptor's hid_item //---------------------------------------------------------------------------- typedef struct { UINT8 bSize; UINT8 bType; UINT8 bTag; union { UINT8 u8; UINT16 u16; UINT32 u32; } data; } HID_ITEM; //---------------------------------------------------------------------------- // HID Report define start //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // HID report item format //---------------------------------------------------------------------------- #define HID_ITEM_FORMAT_SHORT 0 #define HID_ITEM_FORMAT_LONG 1 //---------------------------------------------------------------------------- // HID report descriptor item type (prefix bit 2,3) //---------------------------------------------------------------------------- #define HID_ITEM_TYPE_MAIN 0 #define HID_ITEM_TYPE_GLOBAL 1 #define HID_ITEM_TYPE_LOCAL 2 #define HID_ITEM_TYPE_RESERVED 3 //---------------------------------------------------------------------------- // HID report descriptor main item tags //---------------------------------------------------------------------------- #define HID_MAIN_ITEM_TAG_INPUT 8 #define HID_MAIN_ITEM_TAG_OUTPUT 9 #define HID_MAIN_ITEM_TAG_FEATURE 0xb #define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 0xa #define HID_MAIN_ITEM_TAG_END_COLLECTION 0xc //---------------------------------------------------------------------------- // HID report descriptor main item contents //---------------------------------------------------------------------------- #define HID_MAIN_ITEM_CONSTANT 0x001 #define HID_MAIN_ITEM_VARIABLE 0x002 #define HID_MAIN_ITEM_RELATIVE 0x004 #define HID_MAIN_ITEM_WRAP 0x008 #define HID_MAIN_ITEM_NONLINEAR 0x010 #define HID_MAIN_ITEM_NO_PREFERRED 0x020 #define HID_MAIN_ITEM_NULL_STATE 0x040 #define HID_MAIN_ITEM_VOLATILE 0x080 #define HID_MAIN_ITEM_BUFFERED_BYTE 0x100 //---------------------------------------------------------------------------- // HID report descriptor collection item types //---------------------------------------------------------------------------- #define HID_COLLECTION_PHYSICAL 0 #define HID_COLLECTION_APPLICATION 1 #define HID_COLLECTION_LOGICAL 2 //---------------------------------------------------------------------------- // HID report descriptor global item tags //---------------------------------------------------------------------------- #define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0 #define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1 #define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2 #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3 #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4 #define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5 #define HID_GLOBAL_ITEM_TAG_UNIT 6 #define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7 #define HID_GLOBAL_ITEM_TAG_REPORT_ID 8 #define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9 #define HID_GLOBAL_ITEM_TAG_PUSH 0x0a #define HID_GLOBAL_ITEM_TAG_POP 0x0b //---------------------------------------------------------------------------- // HID report descriptor local item tags //---------------------------------------------------------------------------- #define HID_LOCAL_ITEM_TAG_USAGE 0 #define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1 #define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5 #define HID_LOCAL_ITEM_TAG_STRING_INDEX 7 #define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8 #define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9 #define HID_LOCAL_ITEM_TAG_DELIMITER 0x0a //---------------------------------------------------------------------------- // HID usage pages //---------------------------------------------------------------------------- #define HID_UP_GENDESK 0x01 #define HID_UP_KEYBOARD 0x07 #define HID_UP_BUTTON 0x08 #define HID_UP_KEYBOARD_LEFT_CTRL 0xE0 #define HID_UP_KEYBOARD_LEFT_SHIFT 0xE1 #define HID_UP_KEYBOARD_LEFT_ALT 0xE2 #define HID_UP_KEYBOARD_LEFT _GUI 0xE3 #define HID_UP_KEYBOARD_RIGHT_CTRL 0xE4 #define HID_UP_KEYBOARD_RIGHT_SHIFT 0xE5 #define HID_UP_KEYBOARD_RIGHT_ALT 0xE6 #define HID_UP_KEYBOARD_RIGHT_GUI 0xE7 //---------------------------------------------------------------------------- // HID Report define end //---------------------------------------------------------------------------- //<(EIP38434+) //---------------------------------------------------------------------------- // Bit definitions for EndpointDescriptor.EndpointAddr //---------------------------------------------------------------------------- #define EP_DESC_ADDR_EP_NUM 0x0F //Bit 3-0: Endpoint number #define EP_DESC_ADDR_DIR_BIT 0x80 //Bit 7: Direction of endpoint, 1/0 = In/Out //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // Bit definitions for EndpointDescriptor.EndpointFlags //---------------------------------------------------------------------------- #define EP_DESC_FLAG_TYPE_BITS 0x03 //Bit 1-0: Indicate type of transfer on endpoint #define EP_DESC_FLAG_TYPE_CONT 0x00 //Bit 1-0: 00 = Endpoint does control transfers #define EP_DESC_FLAG_TYPE_ISOC 0x01 //Bit 1-0: 01 = Endpoint does isochronous transfers #define EP_DESC_FLAG_TYPE_BULK 0x02 //Bit 1-0: 10 = Endpoint does bulk transfers #define EP_DESC_FLAG_TYPE_INT 0x03 //Bit 1-0: 11 = Endpoint does interrupt transfers //---------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Values for InterfaceDescriptor.BaseClass //--------------------------------------------------------------------------- #define BASE_CLASS_HID 0x03 #define BASE_CLASS_MASS_STORAGE 0x08 #define BASE_CLASS_HUB 0x09 //---------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Values for InterfaceDescriptor.SubClass //--------------------------------------------------------------------------- #define SUB_CLASS_BOOT_DEVICE 0x01 // Boot device sub-class #define SUB_CLASS_HUB 0x00 //Hub Device Sub Class? // Mass storage related sub-class equates #define SUB_CLASS_RBC 0x01 // RBC T10 project,1240-D, e.g. Flash #define SUB_CLASS_SFF8020I 0x02 // SFF8020I, e.g. ATAPI CD-ROM #define SUB_CLASS_QIC157 0x03 // QIC-157, e.g. ATAPI Tape device #define SUB_CLASS_UFI 0x04 // UFI, e.g. Floppy #define SUB_CLASS_SFF8070I 0x05 // SFF8070I, e.g. ATAPI Floppy #define SUB_CLASS_SCSI 0x06 // SCSI transparent command set // Vendor specific mass storage related sub-class equates #define SUB_CLASS_PL2307 0x80 // Prolific 2307 ,USB to IDE #define SUB_CLASS_SL11R 0x81 // ScanLogic SL11R-IDE #define SUB_CLASS_THUMB_DRV 0x82 // ThumbDrive #define SUB_CLASS_DFUSB01 0x83 // DataFab ATA Bridge #define SUB_CLASS_DOK 0x84 // Disk On Key #define SUB_CLASS_VENDOR_SPECIFIC 0xFF // Vendor Specific //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Values for InterfaceDescriptor.Protocol //--------------------------------------------------------------------------- #define PROTOCOL_KEYBOARD 0x01 // Keyboard device protocol #define PROTOCOL_MOUSE 0x02 // Mouse device protocol? #define PROTOCOL_HUB_SINGLE_TT 0x00 // Hub single TT protocol #define PROTOCOL_HUB_MULTIPLE_TTS 0x02 // Hub multiple TTs protocol // Mass storage related protocol equates #define PROTOCOL_CBI 0x00 // Mass Storage Control/Bulk/Interrupt // with command completion interrupt #define PROTOCOL_CBI_NO_INT 0x01 // MASS STORAGE Control/Bulk/Interrupt // with NO command completion interrupt #define PROTOCOL_BOT 0x50 // Mass Storage Bulk-Only Transport #define PROTOCOL_VENDOR 0xFF // Vendor specific mass protocol //--------------------------------------------------------------------------- #pragma pack(push, 1) typedef struct { UINT16 wRequestType; UINT16 wValue; UINT16 wIndex; UINT16 wDataLength; } DEV_REQ; #pragma pack(pop) // //---------------------------------------------------------------------------- // Name: HCD_HEADER // // Description: USB Host Controller Driver function list structure. // // Fields: Name Type Description // ------------------------------------------------------------ // bFlag UINT8 Driver Header Status // pfnHCDStart UINT8 Driver Start // pfnHCDStop UINT8 Driver Stop // pfnHCDEnumeratePorts UINT8 Enumerate Root Ports // pfnHCDDisableInterrupts UINT8 Disable Interrupts // pfnHCDEnableInterrupts UINT8 Enable Interrupts // pfnHCDProcessInterrupt UINT8 Process Interrupt // pfnHCDGetRootHubStatus UINT8 Get Root Hub Ports Status // pfnHCDDisableRootHub UINT8 Disable Root Hub // pfnHCDEnableRootHub UINT8 Enable Root Hub // pfnHCDControlTransfer UINT16 Perform Control Transfer // pfnHCDBulkTransfer UINT32 Perform Bulk Transfer // pfnHCDInterruptTransfer UINT8 Perform Interrupt Transfer // pfnHCDDeactivatePolling UINT8 Deactivate Polling // pfnHCDActivatePolling UINT8 Activate Polling // pfnHCDDisableKeyRepeat UINT8 Disable Key Repead // pfnHCDEnableKeyRepeat UINT8 Enable Key Repeat //---------------------------------------------------------------------------- // //!!!! //!!!! If you change this structure, please, check UN_HCD_HEADER also. //!!!! typedef struct { UINT8 bFlag; UINT8 (*pfnHCDStart) (HC_STRUC*); UINT8 (*pfnHCDStop) (HC_STRUC*); UINT8 (*pfnHCDEnumeratePorts) (HC_STRUC*); UINT8 (*pfnHCDDisableInterrupts) (HC_STRUC*); UINT8 (*pfnHCDEnableInterrupts) (HC_STRUC*); UINT8 (*pfnHCDProcessInterrupt) (HC_STRUC*); UINT8 (*pfnHCDGetRootHubStatus) (HC_STRUC*,UINT8, BOOLEAN); UINT8 (*pfnHCDDisableRootHub) (HC_STRUC*,UINT8); UINT8 (*pfnHCDEnableRootHub) (HC_STRUC*,UINT8); UINT16 (*pfnHCDControlTransfer) (HC_STRUC*,DEV_INFO*,UINT16,UINT16,UINT16,UINT8*,UINT16); UINT32 (*pfnHCDBulkTransfer) (HC_STRUC*,DEV_INFO*,UINT8,UINT8*,UINT32); UINT16 (*pfnHCDInterruptTransfer) (HC_STRUC*, DEV_INFO*, UINT8, UINT16, UINT8*, UINT16); UINT8 (*pfnHCDDeactivatePolling) (HC_STRUC*,DEV_INFO*); UINT8 (*pfnHCDActivatePolling) (HC_STRUC*,DEV_INFO*); UINT8 (*pfnHCDDisableKeyRepeat) (HC_STRUC*); UINT8 (*pfnHCDEnableKeyRepeat) (HC_STRUC*); UINT8 (*pfnHCDEnableEndpoints) (HC_STRUC*,DEV_INFO*,UINT8*); UINT8 (*pfnHCDInitDeviceData) (HC_STRUC*,DEV_INFO*,UINT8,UINT8**); UINT8 (*pfnHCDDeinitDeviceData) (HC_STRUC*,DEV_INFO*); UINT8 (*pfnHCDResetRootHub) (HC_STRUC*,UINT8); UINT8 (*pfnHCDClearEndpointState) (HC_STRUC*,DEV_INFO*,UINT8); //(EIP54283+) UINT8 (*pfnHCDGlobalSuspend) (HC_STRUC*); //(EIP54018+) } HCD_HEADER; typedef union { HCD_HEADER hcd_header; struct { UINT8 bFlag; VOID* proc[(sizeof(HCD_HEADER)-1)/sizeof(VOID*)]; } asArray; } UN_HCD_HEADER; // Equates related to host controller state #define HC_STATE_RUNNING BIT0 #define HC_STATE_SUSPEND BIT1 #define HC_STATE_USED BIT2 #define HC_STATE_INITIALIZED BIT3 #define HC_STATE_EXTERNAL BIT4 #define HC_STATE_OWNERSHIP_CHANGE_IN_PROGRESS BIT5 #define HC_STATE_CONTROLLER_WITH_RMH BIT6 #pragma pack(push, 1) typedef struct { UINT8 bDescLength; UINT8 bDescType; UINT8 bNumPorts; // Number of downstream ports on hub UINT16 wHubFlags; // See HUB_FLAG_xxx bit definitions below UINT8 bPowerOnDelay; // Time to delay after turning on power to port (in 2ms units) UINT8 bHubControlAmps; // Milliamps of current needed by hub controller UINT8 bHubHdrDecLat; UINT16 wHubDelay; UINT16 DeviceRemovable; // Variable size array of bits (one for each port) } HUB_DESC; #pragma pack(pop) #define DEV_INFO_VALID_STRUC BIT0 // Structure validity #define DEV_INFO_DEV_PRESENT BIT1 // Device presence status #define DEV_INFO_MASS_DEV_REGD BIT2 // Mass device registered(have // drive number assigned) #define DEV_INFO_MULTI_IF BIT3 // Indicates that the device // is a part of multiple // interface device #define DEV_INFO_HOTPLUG BIT4 // Indicates that this device // is a hotplugged device #define DEV_INFO_DEV_DUMMY BIT5 #define DEV_INFO_DEV_BUS BIT6 // Device info is locked by the bus #define DEV_INFO_DEV_DISCONNECTING BIT7 //(EIP60460+) #define DEV_INFO_IN_QUEUE BIT8 #define DEV_INFO_ALT_SETTING_IF BIT9 // Indicates that the device // has alternate setting for the // interface #define DEV_INFO_VALIDPRESENT (DEV_INFO_VALID_STRUC | DEV_INFO_DEV_PRESENT) // Call back routine type definition typedef UINT8 (*CALLBACK_FUNC) (HC_STRUC*, DEV_INFO*, UINT8*, UINT8*, UINT16); #define MAX_CALLBACK_FUNCTION 50 #define MAX_USB_ERRORS_NUM 0x30 // 48 errors max // //---------------------------------------------------------------------------- // Name: MASS_HOTPLUG // // Description: This is a Mass URP (Mass USB Request Packet) structure for // the BIOS API call USBMass_HotPlugDeviceSupport // (API #27h, SubFunc 09h) // // Fields: Name Type Description // ------------------------------------------------------------ // bDevAddr BYTE USB device address of the device // bNumUSBFDD BYTE Number of USB FDD's installed // bNumUSBCDROM BYTE Number of USB CDROM's installed // bDeviceFlag BYTE Flag indicating what hot plug devices to be added // //---------------------------------------------------------------------------- // typedef struct _MASS_HOTPLUG { UINT8 bDevAddr; // USB Device Address UINT8 bNumUSBFDD; // Number of USB FDD's installed UINT8 bNumUSBCDROM; // Number of USB CDROM's installed UINT8 bDeviceFlag; // Flag indicating what hot plug devices to be added } MASS_HOTPLUG; #define USB_HOTPLUG_ENABLE_FDD BIT0 #define USB_HOTPLUG_ENABLE_CDROM BIT1 #define USB_HOTPLUG_HDD_ADDRESS 0x7D #define USB_HOTPLUG_FDD_ADDRESS 0x7E #define USB_HOTPLUG_CDROM_ADDRESS 0x7F // //---------------------------------------------------------------------------- // Name: MASS_XACT_STRUC // // Description: This structure holds the information needed for the mass // transaction (for CBI or BULK) // // Fields: Name Type Description // ------------------------------------------------------------ // pCmdBuffer UINT16 Pointer to the mass transaction command buffer // bCmdSize UINT8 Size of the command buffer // bXferDir UINT8 Transfer direction (BIT7) // fpBuffer UINT32 Far pointer of the data buffer (IN/OUT) // dwLength UINT32 Length of the data buffer // wPreSkip UINT16 Number of bytes to skip before getting actual data // wPostSkip UINT16 Number of bytes to skip after getting actual data // wMiscFlag UINT16 Flag for special cases refer USBM_XACT_FLAG_XXX //---------------------------------------------------------------------------- // typedef struct { UINT8 *fpCmdBuffer; UINT8 bCmdSize; UINT8 bXferDir; UINT8 *fpBuffer; UINT32 dLength; UINT16 wPreSkip; UINT16 wPostSkip; UINT16 wMiscFlag; } MASS_XACT_STRUC; #define USBM_XACT_FLAG_32BIT_DATA_BUFFER BIT0 typedef struct _QUEUE_T{ VOID* volatile* data; int maxsize; volatile int head; volatile int tail; } QUEUE_T; //(EIP38434+)> typedef struct _ABS_MOUSE{ UINT8 ReportID; UINT8 ButtonStauts; UINT16 Xcoordinate; UINT16 Ycoordinate; UINT16 Pressure; UINT16 Max_X; UINT16 Max_Y; } ABS_MOUSE; //<(EIP38434+) typedef struct MOUSE_DATA{ UINT8 ButtonStatus; INT32 MouseX; INT32 MouseY; INT32 MouseZ; } MOUSE_DATA; #define MAX_NOTIFICATIONS_COUNT 100 // //---------------------------------------------------------------------------- // Name: USB_GLOBAL_DATA // // Description: USB Global Data Area structure // //---------------------------------------------------------------------------- // typedef struct { USB_VERSION stUSBVersion; UINT32 dUSBStateFlag; UINT16 aErrorLogBuffer[MAX_USB_ERRORS_NUM]; UINT8 bErrorLogIndex; HCD_HEADER aHCDriverTable[MAX_HC_TYPES]; // For 4 type of HC DEV_DRIVER aDevDriverTable[MAX_DEVICE_TYPES]; // For 5 types of devices DEV_DRIVER aDelayedDrivers[MAX_DEVICE_TYPES]; // For 5 types of devices DEV_INFO aDevInfoTable[MAX_DEVICES]; HC_STRUC **HcTable; UINT8 HcTableCount; UINT8 NumOfHc; DEV_INFO FddHotplugDev; DEV_INFO HddHotplugDev; DEV_INFO CdromHotplugDev; UINT8 bCallBackFunctionIndex; CALLBACK_FUNC aCallBackFunctionTable[MAX_CALLBACK_FUNCTION]; UINT64 DeviceAddressMap; UINT8 bEnumFlag; UINT32 MemPages; UINT8 *fpMemBlockStart; UINT32 MemBlkStsBytes; UINT32 *aMemBlkSts; //Hub related fields UINT32 dHubPortStatus; //UINT16 wHubPortStatus; //KBD related fields // Buffer to store keyboard shift key status bytes. This is correlated with // scan code buffer to generate proper scan code sequence UINT8 aKBCShiftKeyStatusBufferStart[16]; UINT8 aKBCDeviceIDBufferStart[16]; // Buffer to store keyboard device ID // Buffer to store keyboard shift key status bytes. This is correlated with // scan code buffer to generate proper scan code sequence UINT8 aKBCScanCodeBufferStart[16]; UINT8 aKBCUsbDataBufferStart[32]; UINT8 *aKBCUsbDataBufferHead; // Keyboard character buffer head and tail pointers UINT8 *aKBCUsbDataBufferTail; UINT8 aKBCCharacterBufferStart[128]; //(EIP29345) UINT8 bCurrentUSBKeyCode; UINT8 bUSBKBShiftKeyStatus; UINT8 bNonUSBKBShiftKeyStatus; UINT8 bUSBKBC_ExtStatusFlag; UINT8 bUSBDeviceList; UINT8 bSet2ScanCode; // Temporary storage for the scan code set 2 scan code UINT8 bLastUSBKeyCode; // Last USB key code processed UINT8 bBreakCodeDeviceID; // Device IDs for the keyboards generating break code UINT8 bCurrentDeviceID; // Current USB keyboard device ID UINT16 wUSBKBC_StatusFlag; UINT16 wRepeatCounter; // Typematic repeat counter UINT16 wRepeatRate; // Typematic repeat rate UINT8 *fpKBCCharacterBufferHead; // Keyboard character buffer head and tail pointers UINT8 *fpKBCCharacterBufferTail; UINT8 *fpKBCScanCodeBufferPtr; // Keyboard scan code buffer pointer UINT8 bUSBKBC_MassStorage; UINT8 bKbdDataReady; UINT8 aKBInputBuffer[16]; // Keyboard expanded input buffer pointer (null-terminated) UINT8 bCCB; VOID *EfiKeyboardBuffer; UINT8 RepeatKey; HC_STRUC *fpKeyRepeatHCStruc; DEV_INFO *fpKeyRepeatDevInfo; DEV_INFO *aUSBKBDeviceTable[USB_DEV_HID_COUNT]; // Added by mouse driver MOUSE_DATA MouseData; UINT8 aMouseInputBuffer[15]; ABS_MOUSE AbsMouseData[10]; //(EIP38434+) // Mouse input buffer head and tail pointers UINT8 *fpMouseInputBufferHeadPtr; UINT8 *fpMouseInputBufferTailPtr; UINT8 bMouseStatusFlag; // Bit 7 : Mouse enabled bit (1/0) // Bit 6 : Mouse data ready (1/0) // BIT 5 : Mouse data from USB (1/0) // BIT 4 : 4-byte mouse data (1/0) // Bit 3-0 : Reserved UINT8 *fpUSBTempBuffer; UINT8 *fpUSBMassConsumeBuffer; UINT32 wInterruptStatus; URP_STRUC *fpURP; // Request Packet pointer // BOTCommandTag used to maintain BOT command block number UINT32 dBOTCommandTag; //UINT16 wMassTempData; UINT8 bUSBStorageDeviceDelayCount; UINT16 wBulkDataXferDelay; // Flag that allows mass storage device to handle special conditions. The // bit pattern is defined by the USBMASS_MISC_FLAG_XXX equates in USB.EQU UINT16 wMassStorageMiscFlag; UINT8 bGeometryCommandStatus; UINT8 bModeSenseSectors; UINT8 bModeSenseHeads; UINT16 wModeSenseCylinders; UINT16 wModeSenseBlockSize; UINT32 dModeSenseMaxLBA; UINT8 bReadCapSectors; UINT8 bReadCapHeads; UINT16 wReadCapCylinders; UINT16 wReadCapBlockSize; UINT32 dReadCapMaxLBA; UINT8 bDiskMediaType; UINT16 wTimeOutValue; UINT8 bLastCommandStatus; UINT32 dLastCommandStatusExtended; // Added by EHCI driver //UINT8 aControlSetupData[8]; // EHCI_QH *fpQHAsyncXfer; UINT8 bIgnoreConnectStsChng; UINT8 ProcessingPeriodicList; UINT8 bHandOverInProgress; HC_STRUC *RootHubHcStruc; // Tokens representation for the module binary UINT8 kbc_support; UINT8 fdd_hotplug_support; UINT8 hdd_hotplug_support; UINT8 cdrom_hotplug_support; UINT8 UsbMassResetDelay; // 0/1/2/3 for 10/20/30/40 seconds UINT8 PowerGoodDeviceDelay; // 0/1/5/6/../10 seconds UINT8 UsbXhciSupport; // 0/1 for Disabled/Enabled UINT8 UsbXhciHandoff; // 0/1 for Disabled/Enabled UINT8 UsbEhciHandoff; // 0/1 for Disabled/Enabled UINT8 UsbOhciHandoff; // 0/1 for Disabled/Enabled UINT8 UsbEmul6064; // 0/1 for Disabled/Enabled UINT8 NumberOfFDDs; UINT8 NumberOfHDDs; UINT8 NumberOfCDROMs; UINT8 USBMassEmulationOptionTable[16]; QUEUE_T QueueCnnctDisc; QUEUE_T ICCQueueCnnctDisc; //QueueCnnctDisc will work of USB devices. Smart Card reader will work in that queue. But Smart Card(ICC) isn't a USB device. So create a new queue to handle it. DEV_INFO *QueueData1[MAX_NOTIFICATIONS_COUNT]; UINT8 *gUsbSkipListTable; //(EIP51653+) UINT8 UsbHiSpeedSupport; USB_TIMING_POLICY UsbTimingPolicy; USB_SUPPORT_SETUP UsbSetupData; //(EIP99882+) } USB_GLOBAL_DATA; // Note: If additional space is needed in USB data segment, // MAX_BULK_DATA_SIZE can be changed to 200h without significant // decrease in mass storage data transfer performance // .. moved to SDL //#define MAX_BULK_DATA_SIZE 0x0400 // Maximum amount of data to transfer #define USB_HC_CLASS_CODE 0x0C03 #define MAX_NUM_HC_MODULES 0x03 // Equates to disable/enable USB port interrupt generation and // 060/064h trapping #define USB_DISABLE_INTERRUPT 0x000 #define USB_SAFE_DISABLE_INTERRUPT 0x001 #define USB_ENABLE_INTERRUPT 0x00F #define TRAP_REQUEST_CLEAR 0x000 #define TRAP_REQUEST_DISABLE 0x0FF //--------------------------------------------------------------------------- // Equates for Generic USB specific registers in the PCI config space //--------------------------------------------------------------------------- #define USB_REG_COMMAND 0x004 #define USB_MEM_BASE_ADDRESS 0x010 // Offset 10-13h #define USB_IO_BASE_ADDRESS 0x020 #define USB_IRQ_LEVEL 0x03C #define USB_RELEASE_NUM 0x060 #define USB_HC_CLASS_CODE 0x0C03 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Equates common to all host controllers //--------------------------------------------------------------------------- #define USB_PORT_STAT_DEV_CONNECTED BIT0 #define USB_PORT_STAT_DEV_LOWSPEED BIT1 #define USB_PORT_STAT_DEV_FULLSPEED BIT2 #define USB_PORT_STAT_DEV_HISPEED 0//(BIT1 + BIT2) #define USB_PORT_STAT_DEV_SUPERSPEED BIT3 #define USB_PORT_STAT_DEV_SPEED_MASK (BIT1 + BIT2 + BIT3 + BIT7) #define USB_PORT_STAT_DEV_SPEED_MASK_SHIFT 0x1 #define USB_PORT_STAT_DEV_CONNECT_CHANGED BIT4 #define USB_PORT_STAT_DEV_ENABLED BIT5 #define USB_PORT_STAT_DEV_OWNER BIT6 #define USB_PORT_STAT_DEV_SUPERSPEED_PLUS BIT7 #define USB_DEV_SPEED_LOW (USB_PORT_STAT_DEV_LOWSPEED >> USB_PORT_STAT_DEV_SPEED_MASK_SHIFT) #define USB_DEV_SPEED_FULL (USB_PORT_STAT_DEV_FULLSPEED >> USB_PORT_STAT_DEV_SPEED_MASK_SHIFT) #define USB_DEV_SPEED_HIGH (USB_PORT_STAT_DEV_HISPEED >> USB_PORT_STAT_DEV_SPEED_MASK_SHIFT) #define USB_DEV_SPEED_SUPER (USB_PORT_STAT_DEV_SUPERSPEED >> USB_PORT_STAT_DEV_SPEED_MASK_SHIFT) #define USB_DEV_SPEED_SUPER_PLUS (USB_PORT_STAT_DEV_SUPERSPEED_PLUS >> USB_PORT_STAT_DEV_SPEED_MASK_SHIFT) //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Equates related to USB equipment list //--------------------------------------------------------------------------- //(EIP84455+)> #define USB_TYPE_KEYBOARD BIT0 #define USB_TYPE_MOUSE BIT1 #define USB_TYPE_POINT BIT2 #define USB_TYPE_HUB BIT3 #define USB_TYPE_MASS_STORAGE BIT4 //<(EIP84455+) // Bulk transfer error status (bLastCommandStatus) #define USB_BULK_STALLED BIT0 #define USB_BULK_TIMEDOUT BIT1 #define USB_CONTROL_STALLED BIT2 #define USB_TRNSFR_ERRBIT_SHIFT 0 #define USB_TRNSFR_BITSTUFF BIT0 #define USB_TRNSFR_CRCERROR BIT1 #define USB_TRNSFR_NAK BIT2 #define USB_TRNSFR_BABBLE BIT3 #define USB_TRSFR_BUFFER_ERROR BIT4 #define USB_TRSFR_STALLED BIT5 #define USB_TRNSF_ERRORS_MASK (USB_TRNSFR_ERRBIT_SHIFT | \ USB_TRNSFR_BITSTUFF | USB_TRNSFR_CRCERROR |\ USB_TRNSFR_NAK|USB_TRNSFR_BABBLE|USB_TRSFR_BUFFER_ERROR ) #define USB_TRNSFR_TIMEOUT BIT6 //---------------------------------------------------------------------------- // Equates regarding USB device info structure search parameter //---------------------------------------------------------------------------- #define USB_SRCH_DEV_ADDR 0x10 // #define USB_SRCH_DEV_TYPE 0x20 // Next device of a given type #define USB_SRCH_DEV_NUM 0x30 // Number of devices of certain type #define USB_SRCH_DEVBASECLASS_NUM 0x31 // Number of devices of certain base class #define USB_SRCH_HC_STRUC 0x40 // Next device of a given HC #define USB_SRCH_DEV_INDX 0x80 // Device of a given index /* // USB Initialization Flags - passed in when USB is initialized //---------------------------------------------------------------------------- #define INIT_FLAG_MANUAL 0x07 //Bit 2-0: 000 = Auto enum // 001 = KB on port 1 // ... ... // 111 = KB on port 7 #define INIT_FLAG_ENUM_DISABLE 0x08 // 3: If set, do not enum the USB #define INIT_FLAG_BEEP_DISABLE 0x10 // 4: If set, do not beep on new devices #define INIT_FLAG_USB_STOP_EHCI_IN_OHCI_HANDOVER 0x20 */ //---------------------------------------------------------------------------- // Bit definitions for DeviceRequest.RequestType //---------------------------------------------------------------------------- // Bit 7: Data direction #define USB_REQ_TYPE_OUTPUT 0x00 // 0 = Host sending data to device #define USB_REQ_TYPE_INPUT 0x80 // 1 = Device sending data to host // Bit 6-5: Type #define USB_REQ_TYPE_STANDARD 0x00 // 00 = Standard USB request #define USB_REQ_TYPE_CLASS 0x20 // 01 = Class specific #define USB_REQ_TYPE_VENDOR 0x40 // 10 = Vendor specific // Bit 4-0: Recipient #define USB_REQ_TYPE_DEVICE 0x00 // 00000 = Device #define USB_REQ_TYPE_INTERFACE 0x01 // 00001 = Interface #define USB_REQ_TYPE_ENDPOINT 0x02 // 00010 = Endpoint #define USB_REQ_TYPE_OTHER 0x03 // 00011 = Other //---------------------------------------------------------------------------- // Values for DeviceRequest.RequestType and DeviceRequest.RequestCode fields // combined as a word value. //--------------------------------------------------------------------------- #define USB_RQ_SET_ADDRESS ((0x05 << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE) #define USB_RQ_GET_DESCRIPTOR ((0x06 << 8) | USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE) #define USB_RQ_GET_CONFIGURATION ((0x08 << 8) | USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE) #define USB_RQ_SET_CONFIGURATION ((0x09 << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE) #define USB_RQ_SET_INTERFACE ((0x0B << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE) #define USB_RQ_SET_FEATURE ((0x03 << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE) #define USB_FSEL_DEV_REMOTE_WAKEUP 01 #define USB_RQ_GET_CLASS_DESCRIPTOR ((0x06 << 8) | USB_REQ_TYPE_INPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_DEVICE) #define HID_RQ_GET_DESCRIPTOR ((0x06 << 8) | USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE) //(EIP38434+) #define HID_RQ_SET_PROTOCOL ((0x0B << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE) #define HID_RQ_SET_REPORT ((0x09 << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE) #define HID_RQ_SET_IDLE ((0x0A << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE) #define HUB_RQ_GET_PORT_STATUS ((0x00 << 8) | USB_REQ_TYPE_INPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_OTHER) #define HUB_RQ_SET_PORT_FEATURE ((0x03 << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_OTHER) #define HUB_RQ_CLEAR_PORT_FEATURE ((0x01 << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_OTHER) #define HUB_RQ_SET_HUB_DEPTH ((0x0C << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_DEVICE) //---------------------------------------------------------------------------- // Bit definitions for HubDescriptor.HubFlags //---------------------------------------------------------------------------- #define HUB_FLAG_PWR_MODE_BITS 0x03 //Bit 1-0: Power switching mode used by hub #define HUB_FLAG_PWR_MODE_GANG 0x00 // =00: All ports power on/off together #define HUB_FLAG_PWR_MODE_INDIV 0x01 // =01: Ports power on/off individually #define HUB_FLAG_PWR_MODE_FIXED 0x02 // =1x: Ports power is always on #define HUB_FLAG_COMPOUND_DEV 0x04 //Bit 2: If set, hub is part of a compound device #define HUB_FLAG_OVR_CUR_BITS 0x18 //Bit 4-3: Over-current protection mode used by hub #define HUB_FLAG_OVR_CUR_GLOBAL 0x00 // =00: Hub reports only global over-current status #define HUB_FLAG_OVR_CUR_INDIV 0x08 // =01: Hub reports individual over-current status #define HUB_FLAG_OVR_CUR_NONE 0x10 // =1x: Hub has no over-current protection //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // Hub Class Feature Selectors //---------------------------------------------------------------------------- #define HUB_FEATURE_C_HUB_LOCAL_POWER 0 #define HUB_FEATURE_C_HUB_OVER_CURRENT 1 #define HUB_FEATURE_PORT_CONNECTION 0 #define HUB_FEATURE_PORT_ENABLE 1 //Hub port enable feature #define HUB_FEATURE_PORT_SUSPEND 2 #define HUB_FEATURE_PORT_OVER_CURRENT 3 #define HUB_FEATURE_PORT_RESET 4 //Hub port reset feature #define HUB_FEATURE_PORT_LINK_STATE 5 #define HUB_FEATURE_PORT_POWER 8 //Hub port power feature #define HUB_FEATURE_PORT_LOW_SPEED 9 //Hub port low speed feature #define HUB_FEATURE_C_PORT_CONNECTION 16 //Hub port connect change feature #define HUB_FEATURE_C_PORT_ENABLE 17 //Hub port enable change feature #define HUB_FEATURE_C_PORT_SUSPEND 18 #define HUB_FEATURE_C_PORT_OVER_CURRENT 19 #define HUB_FEATURE_C_PORT_RESET 20 //Hub port reset change feature #define HUB_FEATURE_PORT_U1_TIMEOUT 23 #define HUB_FEATURE_PORT_U2_TIMEOUT 24 #define HUB_FEATURE_C_PORT_LINK_STATE 25 #define HUB_FEATURE_C_PORT_CONFIG_ERROR 26 #define HUB_FEATURE_PORT_REMOTE_WAKE_MASK 27 #define HUB_FEATURE_BH_PORT_RESET 28 #define HUB_FEATURE_C_BH_PORT_RESET 29 #define HUB_FEATURE_FORCE_LINKPM_ACCEPT 30 typedef enum { HubLocalPower = 0, HubOverCurrent, PortConnection = 0, PortEnable, PortSuspend, PortOverCurrent, PortReset, PortLinkState, PortPower = 8, PortLowSpeed, PortConnectChange = 16, PortEnableChange, PortSuspendChange, PortOverCurrentChange, PortResetChange, PortTest, PortIndicator, PortU1Timeout, PortU2Timeout, PortLinkStateChange, PortConfigErrorChange, PortRemoteWakeMask, BhPortReset, BhPortResetChange, ForceLinkPmAccept } HUB_FEATURE; //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // Hub Port Status Bit Definitions //---------------------------------------------------------------------------- #define HUB_PORT_STATUS_PORT_CONNECTION BIT0 //Bit 0: Set if device present #define HUB_PORT_STATUS_PORT_ENABLED BIT1 //Bit 1: Set if port is enabled #define HUB_PORT_STATUS_PORT_SUSPEND BIT2 //Bit 2: Set if device on port is suspended #define HUB_PORT_STATUS_PORT_OVER_CURRENT BIT3 //Bit 3: Set if port has been powered down due to over-current #define HUB_PORT_STATUS_PORT_RESET BIT4 //Bit 4: Set if reset sigaling is active #define HUB_PORT_STATUS_PORT_POWER BIT8 //Bit 8: Set if port is enabled #define HUB_PORT_STATUS_PORT_LOW_SPEED BIT9 //Bit 9: Set if a low speed device is attached #define HUB_PORT_STATUS_PORT_HIGH_SPEED BIT10 //Bit 10: Set if a high speed device is attached #define HUB_PORT_STATUS_PORT_TEST BIT11 #define HUB_PORT_STATUS_PORT_INDICATOR BIT12 #define HUB_PORT_STATUS_C_PORT_CONNECTION (BIT0 << 16) //Bit 0: Set if device has been attached/removed #define HUB_PORT_STATUS_C_PORT_ENABLE (BIT1 << 16) //Bit 1: Set if port has been enabled/disabled by hardware in hub #define HUB_PORT_STATUS_C_PORT_SUSPEND (BIT2 << 16) //Bit 2: Set if device has entered/left suspend state #define HUB_PORT_STATUS_C_PORT_OVER_CURRENT (BIT3 << 16) //Bit 3: Set if over current indicator has changed #define HUB_PORT_STATUS_C_PORT_RESET (BIT4 << 16) //Bit 4: Set when port reset sequence is complete #define USB3_HUB_PORT_STATUS_PORT_CONNECTION BIT0 #define USB3_HUB_PORT_STATUS_PORT_ENABLED BIT1 #define USB3_HUB_PORT_STATUS_PORT_OVER_CURRENT BIT3 #define USB3_HUB_PORT_STATUS_PORT_RESET BIT4 #define USB3_HUB_PORT_STATUS_PORT_LINK_STATE (BIT5 | BIT6 | BIT7 | BIT8) #define USB3_HUB_PORT_STATUS_PORT_POWER BIT9 #define USB3_HUB_PORT_STATUS_PORT_SPEED (BIT10 | BIT11 | BIT12) #define USB3_HUB_PORT_STATUS_C_PORT_CONNECTION (BIT0 << 16) #define USB3_HUB_PORT_STATUS_C_PORT_OVER_CURRENT (BIT3 << 16) #define USB3_HUB_PORT_STATUS_C_PORT_RESET (BIT4 << 16) #define USB3_HUB_PORT_STATUS_C_BH_PORT_RESET (BIT5 << 16) #define USB3_HUB_PORT_STATUS_C_PORT_LINK_STATE (BIT6 << 16) #define USB3_HUB_PORT_STATUS_C_PORT_CONFIG_ERROR (BIT7 << 16) #define USB3_HUB_PORT_LINK_U0 0x00 #define USB3_HUB_PORT_LINK_U1 0x01 #define USB3_HUB_PORT_LINK_U2 0x02 #define USB3_HUB_PORT_LINK_U3 0x03 #define USB3_HUB_PORT_LINK_DISABLED 0x04 #define USB3_HUB_PORT_LINK_RXDETECT 0x05 #define USB3_HUB_PORT_LINK_INACTIVE 0x06 #define USB3_HUB_PORT_LINK_POLLING 0x07 #define USB3_HUB_PORT_LINK_RECOVERY 0x08 #define USB3_HUB_PORT_LINK_HOT_RESET 0x09 #define USB3_HUB_PORT_LINK_COMPLIANCE_MODE 0x0A #define USB3_HUB_PORT_LINK_LOOPBACK 0x0B #pragma pack(push, 1) typedef struct { struct { UINT16 Connected :1; UINT16 Enabled :1; UINT16 Suspend :1; UINT16 OverCurrent :1; UINT16 Reset :1; UINT16 Reserved :3; UINT16 Power :1; UINT16 LowSpeed :1; UINT16 HighSpeed :1; UINT16 TestMode :1; UINT16 Indicator :1; UINT16 Reserved1 :3; } PortStatus; struct { UINT16 ConnectChange :1; UINT16 EnableChange :1; UINT16 SuspendChange :1; UINT16 OverCurrentChange :1; UINT16 ResetChange :1; UINT16 Reserved :11; } PortChange; } HUB_PORT_STATUS; typedef struct { struct { UINT16 Connected :1; UINT16 Enabled :1; UINT16 Reserved :1; UINT16 OverCurrent :1; UINT16 Reset :1; UINT16 LinkState :4; UINT16 Power :1; UINT16 Speed :3; UINT16 Reserved1 :3; } PortStatus; struct { UINT16 ConnectChange :1; UINT16 Reserved :2; UINT16 OverCurrentChange :1; UINT16 ResetChange :1; UINT16 BhResetChange :1; UINT16 LinkStateChange :1; UINT16 ConfigErrorChange :1; UINT16 Reserved1 :8; } PortChange; } USB3_HUB_PORT_STATUS; #pragma pack(pop) #define ENDPOINT_CLEAR_PORT_FEATURE (0x01 << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_ENDPOINT #define ADSC_OUT_REQUEST_TYPE (0x00 << 8) | USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE #define ADSC_IN_REQUEST_TYPE (0x00 << 8) | USB_REQ_TYPE_INPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE #define ENDPOINT_HALT 00 // Standard PCI configuration register offsets and relevant values //------------------------------------------------------------------------------ #define PCI_REG_VENDID 0x00 //PCI vendor ID register #define PCI_REG_DEVID 0x02 //PCI device ID register #define PCI_REG_COMMAND 0x04 //PCI command register #define CMD_DEV_DISABLE 0x00 //Disables device when written to cmd reg #define CMD_IO_SPACE 0x01 //IO space enable bit #define CMD_MEM_SPACE 0x02 //Memory space enable bit #define CMD_BUS_MASTER 0x4 //Bus master enable bit #define CMD_SPECIAL_CYCLE 0x08 //Special cycle enable bit #define CMD_MEM_INVALIDATE 0x10 //Memory write & invalidate enable bit #define CMD_PAL_SNOOP 0x20 //VGA palette snoop enable bit #define CMD_PARITY 0x40 //Parity error enable bit #define CMD_WAIT_CYCLE 0x80 //Wait cycle control bit #define CMD_SERR 0x100 //SERR# enable bit #define CMD_FAST_BTOB 0x200 //Fast back-to-back enable bit #define PCI_REG_STATUS 0x06 //PCI status register #define STAT_RESET_ALL 0x0FFFF //Resets all status bits #define PCI_REG_REVID 0x08 //PCI revision ID register #define PCI_REG_IF_TYPE 0x09 //PCI interface type register #define PCI_REG_SUB_TYPE 0x0A //PCI sub type register #define PCI_REG_BASE_TYPE 0x0B //PCI base type register #define PCI_REG_LINE_SIZE 0x0C //PCI cache line size register #define PCI_REG_LATENCY 0x0D //PCI latency timer register #define PCI_REG_LATENCY 0x0D //PCI latency timer register #define PCI_REG_HEADER_TYPE 0x0E //PCI header type register #define MULTI_FUNC_BIT 0x80 //If set, device is multi function #define PCI_CFG_HEADER_STD 0x00 //Standard PCI config space #define PCI_CFG_HEADER_PPB 0x01 //PCI-PCI bridge config space #define PCI_REG_BIST 0x0F //PCI built in self test register #define PCI_REG_FIRST_BASE_ADD 0x10 //PCI first base address register #define PCI_REG_LAST_BASE_ADD 0x24 //PCI last base address register #define PCI_BASE_ADD_PORT_BIT 0x01 //If set, base add reg is for I/O port #define PCI_BASE_ADD_MEMTYPE 0x06 //Bits in lower word that are mem type #define PCI_BASE_ADD_MT_32 0x00 //Memory must be located at 32 bit add #define PCI_BASE_ADD_MT_20 0x02 //Memory must be located at 20 bit add #define PCI_BASE_ADD_MT_64 0x04 //Memory must be located at 64 bit add #define PCI_BASE_ADD_PREFETCH 0x08 //If set, memory is prefetchable #define PCI_BASE_ADD_MEMMASK 0x0FFF0 //Bits in lower word that are memory mask #define PCI_BASE_ADD_PORTMASK 0x0FFFC //Bits in lower word that are port mask #define PCI_REG_ROM_BASE_ADD 0x30 //PCI expansion ROM base address register #define PCI_BASE_ADD_ROMMASK 0x0FC00 //Bits in lower word that are ROM mask #define PCI_REG_INT_LINE 0x3C //PCI interrupt line register #define PCI_REG_INT_PIN 0x3D //PCI interrupt pin register #define PCI_REG_MAX_GNT 0x3E //PCI max grant register #define PCI_REG_MAX_LAT 0x3F //PCI max latency register #define INTR_CNTRLR_MASTER_PORT 0x020 #define INTR_CNTRLR_SLAVE_PORT 0x0A0 #define READ_IN_SERVICE_REGISTER 0x00B // //---------------------------------------------------------------------------- // Name: USB_BADDEV_STRUC // // Description: This structure is used to define a non-compliant USB device // // Fields: Name Type Description // ------------------------------------------------------------ // wVID WORD Vendor ID of the device // wDID WORD Device ID of the device // bBaseClass BYTE Base class of the device // bSubClass BYTE Sub class of the device // bProtocol BYTE Protocol used by the device // wFlags INCMPT_FLAGS Incompatibility flags // //---------------------------------------------------------------------------- // typedef struct { UINT16 wVID; UINT16 wDID; UINT8 bBaseClass; UINT8 bSubClass; UINT8 bProtocol; UINT16 wFlags; } USB_BADDEV_STRUC; // //---------------------------------------------------------------------------- // Name: INCMPT_FLAGS (Incompatibility attributes) // // Type: Equates // // Description: This equates are used to describe the incompatible USB mass // storage devices. The bits defined are: // BIT Description // ============================================================= // 0 1, indicates this device does not support mode sense command // 1 1, indicates that this is a single LUN device (even though it is reporting as multiple LUN) // 2 1, indicates that this device should be disabled // 3 1, indicates this device does not support test unit ready command // 4 1, indicates this device responds with wrong BOT status value // 5 1, indicates that this device does not support start unit command // 6 1, indicates that this device does not support read format capacity command // 7 1, indicates that this hispeed device has to be in full speed always // 8 1, indicates that this hispeed device has to be in hispeed always // // Notes: The device is identified by the vendor id and device id // associated with the flags above // // Referrals: USB_BADDEV_STRUC // //---------------------------------------------------------------------------- // #define USB_INCMPT_MODE_SENSE_NOT_SUPPORTED BIT0 #define USB_INCMPT_SINGLE_LUN_DEVICE BIT1 #define USB_INCMPT_DISABLE_DEVICE BIT2 #define USB_INCMPT_TEST_UNIT_READY_FAILED BIT3 #define USB_INCMPT_BOT_STATUS_FAILED BIT4 #define USB_INCMPT_START_UNIT_NOT_SUPPORTED BIT5 #define USB_INCMPT_FORMAT_CAPACITY_NOT_SUPPORTED BIT6 #define USB_INCMPT_KEEP_FULLSPEED BIT7 #define USB_INCMPT_KEEP_HISPEED BIT8 #define USB_INCMPT_SET_BOOT_PROTOCOL_NOT_SUPPORTED BIT9 #define USB_INCMPT_GETMAXLUN_NOT_SUPPORTED BIT10 #define USB_INCMPT_RMH_DEVICE BIT11 #define USB_INCMPT_HID_DATA_OVERFLOW BIT12 #define USB_INCMPT_BOOT_PROTOCOL_IGNORED BIT13 #define USB_INCMPT_REPORT_PROTOCOL_ONLY BIT14 //(EIP38434+) #define USB_INCMPT_HID_BOOT_PROTOCOL_ONLY BIT15 // //---------------------------------------------------------------------------- // Name: HcDxeRecord // // Description: state information for USB_HC_PROTOCOL implementation // //---------------------------------------------------------------------------- // typedef struct _HC_DXE_RECORD { EFI_USB_HC_PROTOCOL hcprotocol; EFI_USB2_HC_PROTOCOL hcprotocol2; HC_STRUC *hc_data; EFI_PCI_IO_PROTOCOL *pciIo; DLIST AsyncTransfers; } HC_DXE_RECORD; typedef struct { QUEUE_T QCompleted; UINTN DataLength; //size of each transfer EFI_ASYNC_USB_TRANSFER_CALLBACK CallbackFunction; VOID* Context; EFI_EVENT Event; DLINK Link; UINT8 Lock; UINT8 EndpointAddress; UINT8 Data[1]; } USBHC_INTERRUPT_DEVNINFO_T; int VALID_DEVINFO(DEV_INFO* pDevInfo); VOID USB_AbortConnectDev(DEV_INFO* ); EFI_STATUS UsbHcStrucValidation(HC_STRUC*); EFI_STATUS UsbDevInfoValidation(DEV_INFO*); #endif // __USB_H //**************************************************************************** //**************************************************************************** //** ** //** (C)Copyright 1985-2016, American Megatrends, Inc. ** //** ** //** All Rights Reserved. ** //** ** //** 5555 Oakbrook Pkwy, Norcross, GA 30093 ** //** ** //** Phone (770)-246-8600 ** //** ** //**************************************************************************** //****************************************************************************