mirror of https://github.com/acidanthera/audk.git
412 lines
15 KiB
C
412 lines
15 KiB
C
/*++
|
|
|
|
Copyright (c) 2004 - 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:
|
|
|
|
UsbHostController.h
|
|
|
|
Abstract:
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _USB_HOSTCONTROLLER_H_
|
|
#define _USB_HOSTCONTROLLER_H_
|
|
|
|
#include "usb.h"
|
|
#include EFI_PROTOCOL_DEFINITION (UsbIo)
|
|
|
|
#define EFI_USB_HC_PROTOCOL_GUID \
|
|
{ \
|
|
0xf5089266, 0x1aa0, 0x4953, {0x97, 0xd8, 0x56, 0x2f, 0x8a, 0x73, 0xb5, 0x19} \
|
|
}
|
|
|
|
//
|
|
// Forward reference for pure ANSI compatability
|
|
//
|
|
EFI_FORWARD_DECLARATION (EFI_USB_HC_PROTOCOL);
|
|
|
|
typedef enum {
|
|
EfiUsbHcStateHalt,
|
|
EfiUsbHcStateOperational,
|
|
EfiUsbHcStateSuspend,
|
|
EfiUsbHcStateMaximum
|
|
} EFI_USB_HC_STATE;
|
|
|
|
#define EFI_USB_HC_RESET_GLOBAL 0x0001
|
|
#define EFI_USB_HC_RESET_HOST_CONTROLLER 0x0002
|
|
#define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG 0x0004
|
|
#define EFI_USB_HC_RESET_HOST_WITH_DEBUG 0x0008
|
|
|
|
//
|
|
// Protocol definitions
|
|
//
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_RESET) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT16 Attributes
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_GET_STATE) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
OUT EFI_USB_HC_STATE * State
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_SET_STATE) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN EFI_USB_HC_STATE State
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 DeviceAddress,
|
|
IN BOOLEAN IsSlowDevice,
|
|
IN UINT8 MaximumPacketLength,
|
|
IN EFI_USB_DEVICE_REQUEST * Request,
|
|
IN EFI_USB_DATA_DIRECTION TransferDirection,
|
|
IN OUT VOID *Data OPTIONAL,
|
|
IN OUT UINTN *DataLength OPTIONAL,
|
|
IN UINTN TimeOut,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_BULK_TRANSFER) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 MaximumPacketLength,
|
|
IN OUT VOID *Data,
|
|
IN OUT UINTN *DataLength,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN TimeOut,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN BOOLEAN IsSlowDevice,
|
|
IN UINT8 MaxiumPacketLength,
|
|
IN BOOLEAN IsNewTransfer,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN PollingInterval OPTIONAL,
|
|
IN UINTN DataLength OPTIONAL,
|
|
IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction OPTIONAL,
|
|
IN VOID *Context OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN BOOLEAN IsSlowDevice,
|
|
IN UINT8 MaximumPacketLength,
|
|
IN OUT VOID *Data,
|
|
IN OUT UINTN *DataLength,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN TimeOut,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 MaximumPacketLength,
|
|
IN OUT VOID *Data,
|
|
IN UINTN DataLength,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 MaximumPacketLength,
|
|
IN OUT VOID *Data,
|
|
IN UINTN DataLength,
|
|
IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,
|
|
IN VOID *Context OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
OUT UINT8 *PortNumber
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 PortNumber,
|
|
OUT EFI_USB_PORT_STATUS * PortStatus
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 PortNumber,
|
|
IN EFI_USB_PORT_FEATURE PortFeature
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE) (
|
|
IN EFI_USB_HC_PROTOCOL * This,
|
|
IN UINT8 PortNumber,
|
|
IN EFI_USB_PORT_FEATURE PortFeature
|
|
);
|
|
|
|
struct _EFI_USB_HC_PROTOCOL {
|
|
EFI_USB_HC_PROTOCOL_RESET Reset;
|
|
EFI_USB_HC_PROTOCOL_GET_STATE GetState;
|
|
EFI_USB_HC_PROTOCOL_SET_STATE SetState;
|
|
EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER ControlTransfer;
|
|
EFI_USB_HC_PROTOCOL_BULK_TRANSFER BulkTransfer;
|
|
EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER AsyncInterruptTransfer;
|
|
EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER SyncInterruptTransfer;
|
|
EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER IsochronousTransfer;
|
|
EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER AsyncIsochronousTransfer;
|
|
EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER GetRootHubPortNumber;
|
|
EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS GetRootHubPortStatus;
|
|
EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE SetRootHubPortFeature;
|
|
EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE ClearRootHubPortFeature;
|
|
UINT16 MajorRevision;
|
|
UINT16 MinorRevision;
|
|
};
|
|
|
|
extern EFI_GUID gEfiUsbHcProtocolGuid;
|
|
|
|
|
|
#define EFI_USB2_HC_PROTOCOL_GUID \
|
|
{ \
|
|
0x3e745226, 0x9818, 0x45b6, {0xa2, 0xac, 0xd7, 0xcd, 0xe, 0x8b, 0xa2, 0xbc} \
|
|
}
|
|
|
|
//
|
|
// Forward reference for pure ANSI compatability
|
|
//
|
|
EFI_FORWARD_DECLARATION (EFI_USB2_HC_PROTOCOL);
|
|
|
|
#define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG 0x0004
|
|
#define EFI_USB_HC_RESET_HOST_WITH_DEBUG 0x0008
|
|
|
|
typedef struct {
|
|
UINT8 TranslatorHubAddress;
|
|
UINT8 TranslatorPortNumber;
|
|
} EFI_USB2_HC_TRANSACTION_TRANSLATOR;
|
|
|
|
//
|
|
// Protocol definitions
|
|
//
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
OUT UINT8 *MaxSpeed,
|
|
OUT UINT8 *PortNumber,
|
|
OUT UINT8 *Is64BitCapable
|
|
);
|
|
|
|
#define EFI_USB_SPEED_FULL 0x0000
|
|
#define EFI_USB_SPEED_LOW 0x0001
|
|
#define EFI_USB_SPEED_HIGH 0x0002
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_RESET) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT16 Attributes
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
OUT EFI_USB_HC_STATE *State
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN EFI_USB_HC_STATE State
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN EFI_USB_DEVICE_REQUEST *Request,
|
|
IN EFI_USB_DATA_DIRECTION TransferDirection,
|
|
IN OUT VOID *Data OPTIONAL,
|
|
IN OUT UINTN *DataLength OPTIONAL,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
#define EFI_USB_MAX_BULK_BUFFER_NUM 10
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN UINT8 DataBuffersNumber,
|
|
IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
|
|
IN OUT UINTN *DataLength,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaxiumPacketLength,
|
|
IN BOOLEAN IsNewTransfer,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN PollingInterval OPTIONAL,
|
|
IN UINTN DataLength OPTIONAL,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction OPTIONAL,
|
|
IN VOID *Context OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN OUT VOID *Data,
|
|
IN OUT UINTN *DataLength,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
#define EFI_USB_MAX_ISO_BUFFER_NUM 7
|
|
#define EFI_USB_MAX_ISO_BUFFER_NUM1 2
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN UINT8 DataBuffersNumber,
|
|
IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
|
|
IN UINTN DataLength,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN UINT8 DataBuffersNumber,
|
|
IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
|
|
IN UINTN DataLength,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,
|
|
IN VOID *Context OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 PortNumber,
|
|
OUT EFI_USB_PORT_STATUS *PortStatus
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 PortNumber,
|
|
IN EFI_USB_PORT_FEATURE PortFeature
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE) (
|
|
IN EFI_USB2_HC_PROTOCOL *This,
|
|
IN UINT8 PortNumber,
|
|
IN EFI_USB_PORT_FEATURE PortFeature
|
|
);
|
|
|
|
struct _EFI_USB2_HC_PROTOCOL {
|
|
EFI_USB2_HC_PROTOCOL_GET_CAPABILITY GetCapability;
|
|
EFI_USB2_HC_PROTOCOL_RESET Reset;
|
|
EFI_USB2_HC_PROTOCOL_GET_STATE GetState;
|
|
EFI_USB2_HC_PROTOCOL_SET_STATE SetState;
|
|
EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER ControlTransfer;
|
|
EFI_USB2_HC_PROTOCOL_BULK_TRANSFER BulkTransfer;
|
|
EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER AsyncInterruptTransfer;
|
|
EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER SyncInterruptTransfer;
|
|
EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER IsochronousTransfer;
|
|
EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER AsyncIsochronousTransfer;
|
|
EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS GetRootHubPortStatus;
|
|
EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE SetRootHubPortFeature;
|
|
EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE ClearRootHubPortFeature;
|
|
UINT16 MajorRevision;
|
|
UINT16 MinorRevision;
|
|
};
|
|
|
|
extern EFI_GUID gEfiUsb2HcProtocolGuid;
|
|
|
|
#endif
|