2006-04-22 00:54:32 +02:00
|
|
|
/*++
|
|
|
|
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
|
|
|
|
|
|
|
|
|
2006-05-23 01:24:23 +02:00
|
|
|
#include <IndustryStandard/Usb.h>
|
|
|
|
#include "hub.h"
|
|
|
|
#include "usbutil.h"
|
2006-04-22 00:54:32 +02:00
|
|
|
|
|
|
|
//#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
|