git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@238 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			262 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*++
 | |
| Copyright (c) 2006, Intel Corporation                                                         
 | |
| All rights reserved. This program and the accompanying materials                          
 | |
| are licensed and made available under the terms and conditions of the BSD License         
 | |
| which accompanies this distribution.  The full text of the license may be found at        
 | |
| http://opensource.org/licenses/bsd-license.php                                            
 | |
|                                                                                           
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
 | |
| 
 | |
|   Module Name:
 | |
| 
 | |
|     usbbus.h
 | |
| 
 | |
|   Abstract:
 | |
| 
 | |
|     Header file for USB bus driver Interface
 | |
| 
 | |
|   Revision History
 | |
| 
 | |
| 
 | |
| 
 | |
| --*/
 | |
| 
 | |
| #ifndef _EFI_USB_BUS_H
 | |
| #define _EFI_USB_BUS_H
 | |
| 
 | |
| 
 | |
| #include <IndustryStandard/Usb.h>
 | |
| #include "hub.h"
 | |
| #include "usbutil.h"
 | |
| 
 | |
| //#ifdef EFI_DEBUG
 | |
| extern UINTN  gUSBDebugLevel;
 | |
| extern UINTN  gUSBErrorLevel;
 | |
| //#endif
 | |
| 
 | |
| #define MICROSECOND 10000
 | |
| #define ONESECOND   (1000 * MICROSECOND)
 | |
| #define BUSPOLLING_PERIOD ONESECOND
 | |
| //
 | |
| // We define some maximun value here
 | |
| //
 | |
| #define USB_MAXCONFIG               8
 | |
| #define USB_MAXALTSETTING           4
 | |
| #define USB_MAXINTERFACES           32
 | |
| #define USB_MAXENDPOINTS            16
 | |
| #define USB_MAXSTRINGS              16
 | |
| #define USB_MAXLANID                16
 | |
| #define USB_MAXCHILDREN             8
 | |
| #define USB_MAXCONTROLLERS          4
 | |
| 
 | |
| #define USB_IO_CONTROLLER_SIGNATURE EFI_SIGNATURE_32 ('u', 's', 'b', 'd')
 | |
| 
 | |
| typedef struct {
 | |
|   LIST_ENTRY      Link;
 | |
|   UINT16          StringIndex;
 | |
|   CHAR16          *String;
 | |
| } STR_LIST_ENTRY;
 | |
| 
 | |
| typedef struct {
 | |
|   LIST_ENTRY                  Link;
 | |
|   UINT16                      Toggle;
 | |
|   EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
 | |
| } ENDPOINT_DESC_LIST_ENTRY;
 | |
| 
 | |
| typedef struct {
 | |
|   LIST_ENTRY                    Link;
 | |
|   EFI_USB_INTERFACE_DESCRIPTOR  InterfaceDescriptor;
 | |
|   LIST_ENTRY                    EndpointDescListHead;
 | |
| } INTERFACE_DESC_LIST_ENTRY;
 | |
| 
 | |
| typedef struct {
 | |
|   LIST_ENTRY                Link;
 | |
|   EFI_USB_CONFIG_DESCRIPTOR CongfigDescriptor;
 | |
|   LIST_ENTRY                InterfaceDescListHead;
 | |
|   UINTN                     ActiveInterface;
 | |
| } CONFIG_DESC_LIST_ENTRY;
 | |
| 
 | |
| //
 | |
| // Forward declaring
 | |
| //
 | |
| struct usb_io_device;
 | |
| 
 | |
| //
 | |
| // This is used to form the USB Controller Handle
 | |
| //
 | |
| typedef struct usb_io_controller_device {
 | |
|   UINTN                           Signature;
 | |
|   EFI_HANDLE                      Handle;
 | |
|   EFI_USB_IO_PROTOCOL             UsbIo;
 | |
|   EFI_DEVICE_PATH_PROTOCOL        *DevicePath;
 | |
|   EFI_HANDLE                      HostController;
 | |
|   UINT8                           CurrentConfigValue;
 | |
|   UINT8                           InterfaceNumber;
 | |
|   struct usb_io_device            *UsbDevice;
 | |
| 
 | |
|   BOOLEAN                         IsUsbHub;
 | |
|   BOOLEAN                         IsManagedByDriver;
 | |
| 
 | |
|   //
 | |
|   // Fields specified for USB Hub
 | |
|   //
 | |
|   EFI_EVENT                       HubNotify;
 | |
|   UINT8                           HubEndpointAddress;
 | |
|   UINT8                           StatusChangePort;
 | |
|   UINT8                           DownstreamPorts;
 | |
| 
 | |
|   UINT8                           ParentPort;
 | |
|   struct usb_io_controller_device *Parent;
 | |
|   struct usb_io_device            *Children[USB_MAXCHILDREN];
 | |
| } USB_IO_CONTROLLER_DEVICE;
 | |
| 
 | |
| #define USB_IO_CONTROLLER_DEVICE_FROM_USB_IO_THIS(a) \
 | |
|     CR(a, USB_IO_CONTROLLER_DEVICE, UsbIo, USB_IO_CONTROLLER_SIGNATURE)
 | |
| 
 | |
| //
 | |
| // This is used to keep the topology of USB bus
 | |
| //
 | |
| struct _usb_bus_controller_device;
 | |
| 
 | |
| typedef struct usb_io_device {
 | |
|   UINT8                             DeviceAddress;
 | |
|   BOOLEAN                           IsConfigured;
 | |
|   BOOLEAN                           IsSlowDevice;
 | |
|   EFI_USB_DEVICE_DESCRIPTOR         DeviceDescriptor;
 | |
|   LIST_ENTRY                        ConfigDescListHead;
 | |
|   CONFIG_DESC_LIST_ENTRY            *ActiveConfig;
 | |
|   UINT16                            LangID[USB_MAXLANID];
 | |
| 
 | |
|   struct _usb_bus_controller_device *BusController;
 | |
| 
 | |
|   //
 | |
|   // Track the controller handle
 | |
|   //
 | |
|   UINT8                             NumOfControllers;
 | |
|   USB_IO_CONTROLLER_DEVICE          *UsbController[USB_MAXCONTROLLERS];
 | |
| 
 | |
| } USB_IO_DEVICE;
 | |
| 
 | |
| //
 | |
| // Usb Bus Controller device strcuture
 | |
| //
 | |
| #define EFI_USB_BUS_PROTOCOL_GUID \
 | |
|  { 0x2B2F68CC, 0x0CD2, 0x44cf, { 0x8E, 0x8B, 0xBB, 0xA2, 0x0B, 0x1B, 0x5B, 0x75  } }
 | |
| 
 | |
| typedef struct _EFI_USB_BUS_PROTOCOL {
 | |
|   UINT64  Reserved;
 | |
| } EFI_USB_BUS_PROTOCOL;
 | |
| 
 | |
| #define USB_BUS_DEVICE_SIGNATURE  EFI_SIGNATURE_32 ('u', 'b', 'u', 's')
 | |
| 
 | |
| typedef struct _usb_bus_controller_device {
 | |
|   UINTN                     Signature;
 | |
| 
 | |
|   EFI_USB_BUS_PROTOCOL      BusIdentify;
 | |
|   EFI_USB_HC_PROTOCOL       *UsbHCInterface;
 | |
|   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
 | |
|   UINT8                     AddressPool[16];
 | |
|   USB_IO_DEVICE             *Root;
 | |
| } USB_BUS_CONTROLLER_DEVICE;
 | |
| 
 | |
| #define USB_BUS_CONTROLLER_DEVICE_FROM_THIS(a) \
 | |
|     CR(a, USB_BUS_CONTROLLER_DEVICE, BusIdentify, USB_BUS_DEVICE_SIGNATURE)
 | |
| 
 | |
| 
 | |
| //
 | |
| // Global Variables
 | |
| //
 | |
| extern EFI_DRIVER_BINDING_PROTOCOL  gUsbBusDriverBinding;
 | |
| extern EFI_COMPONENT_NAME_PROTOCOL  gUsbBusComponentName;
 | |
| extern EFI_GUID                     gUSBBusDriverGuid;
 | |
| 
 | |
| //
 | |
| // Usb Device Configuration functions
 | |
| //
 | |
| BOOLEAN
 | |
| IsHub (
 | |
|   IN USB_IO_CONTROLLER_DEVICE     *Dev
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbGetStringtable (
 | |
|   IN  USB_IO_DEVICE     *UsbIoDevice
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbGetAllConfigurations (
 | |
|   IN  USB_IO_DEVICE     *UsbIoDevice
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbSetConfiguration (
 | |
|   IN  USB_IO_DEVICE     *Dev,
 | |
|   IN  UINTN             ConfigurationValue
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbSetDefaultConfiguration (
 | |
|   IN  USB_IO_DEVICE     *Dev
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Device Deconfiguration functions
 | |
| //
 | |
| VOID
 | |
| UsbDestroyAllConfiguration (
 | |
|   IN USB_IO_DEVICE     *UsbIoDevice
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| DoHubConfig (
 | |
|   IN USB_IO_CONTROLLER_DEVICE     *HubIoDevice
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| GetDeviceEndPointMaxPacketLength (
 | |
|   IN EFI_USB_IO_PROTOCOL    *UsbIo,
 | |
|   IN  UINT8                 EndpointAddr,
 | |
|   OUT UINT8                 *MaxPacketLength
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| GetDataToggleBit (
 | |
|   IN EFI_USB_IO_PROTOCOL    *UsbIo,
 | |
|   IN  UINT8                 EndpointAddr,
 | |
|   OUT UINT8                 *DataToggle
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| SetDataToggleBit (
 | |
|   IN EFI_USB_IO_PROTOCOL    *UsbIo,
 | |
|   IN UINT8                  EndpointAddr,
 | |
|   IN UINT8                  DataToggle
 | |
|   );
 | |
| 
 | |
| INTERFACE_DESC_LIST_ENTRY *
 | |
| FindInterfaceListEntry (
 | |
|   IN EFI_USB_IO_PROTOCOL    *This
 | |
|   );
 | |
| 
 | |
| ENDPOINT_DESC_LIST_ENTRY *
 | |
| FindEndPointListEntry (
 | |
|   IN EFI_USB_IO_PROTOCOL    *This,
 | |
|   IN UINT8                  EndPointAddress
 | |
|   );
 | |
| 
 | |
| 
 | |
| EFI_STATUS
 | |
| IsDeviceDisconnected (
 | |
|   IN USB_IO_CONTROLLER_DEVICE    *UsbIoController,
 | |
|   IN OUT BOOLEAN                 *Disconnected
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbDeviceDeConfiguration (
 | |
|   IN USB_IO_DEVICE     *UsbIoDevice
 | |
|   );
 | |
| 
 | |
| 
 | |
| #endif
 |