original files of m241
This commit is contained in:
@@ -0,0 +1,313 @@
|
||||
/* usbHcd.h - General definitions for a USB HCD (Host Controller Driver) */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999-2001, 2010 Wind River Systems, Inc.
|
||||
*
|
||||
* The right to copy, distribute, modify, or otherwise make use
|
||||
* of this software may be licensed only pursuant to the terms
|
||||
* of an applicable Wind River license agreement.
|
||||
*/
|
||||
|
||||
/*
|
||||
Modification history
|
||||
--------------------
|
||||
01k,29apr10,pad Moved extern C statement after include statements.
|
||||
01j,13jan10,ghs vxWorks 6.9 LP64 adapting
|
||||
01i,18sep01,wef merge from wrs.tor2_0.usb1_1-f for veloce
|
||||
01h,07may01,wef changed module number to be (module num << 8) | M_usbHostLib
|
||||
01g,02may01,wef changed module number to be M_<module> + M_usbHostLib
|
||||
01f,05dec00,wef moved Module number defs to vwModNum.h - add this
|
||||
to #includes
|
||||
01e,26jan00,rcb Change "bytesPerFrame" field in HRB_PIPE_CREATE to
|
||||
"bandwidth" and redefined as UINT32.
|
||||
01d,29nov99,rcb Remove obsolete function HCD_FNC_BUS_RESET.
|
||||
Increase frame number fields to 32-bits.
|
||||
01c,23nov99,rcb Replace bandwidth alloc/release functions with pipe
|
||||
create/destroy functions...generalizes approach for use
|
||||
with OHCI HCD.
|
||||
01b,07sep99,rcb Add management callback to attach function.
|
||||
01a,03jun99,rcb First.
|
||||
*/
|
||||
|
||||
/*
|
||||
DESCRIPTION
|
||||
|
||||
This file defines the interface to a USB HCD (Host Controller Driver). This
|
||||
interface is generic across HCD implementations.
|
||||
|
||||
NOTE: All HCD functions execute synchronously. However, all HCD functions
|
||||
have been designed to allow for rapid processing. Delayed results, such as the
|
||||
completion of an IRP, are reported through callbacks.
|
||||
|
||||
NOTE: The USB specification states that a host controller will incorporate the
|
||||
"root hub". The caller of the HCD, generally the USBD, communicates with this
|
||||
root hub using the same IRPs that are used to communicate with other USB
|
||||
devices and hubs. The HCD is responsible for recognizing IRPs addressed to
|
||||
the root hub and processing them correctly, often by emulating the USB request
|
||||
behavior of the root hub.
|
||||
*/
|
||||
|
||||
#ifndef __INCusbHcdh
|
||||
#define __INCusbHcdh
|
||||
|
||||
/* includes */
|
||||
|
||||
#include "usb/usbHandleLib.h"
|
||||
#include "usb/usb.h"
|
||||
#include "vwModNum.h" /* USB Module Number Def's */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/* defines */
|
||||
|
||||
/* HRB function codes */
|
||||
|
||||
#define HCD_FNC_ATTACH 0x0000 /* attach/init */
|
||||
#define HCD_FNC_DETACH 0x0001 /* detach/shutdown */
|
||||
|
||||
#define HCD_FNC_SET_BUS_STATE 0x0100 /* set bus suspend/resume state */
|
||||
#define HCD_FNC_SOF_INTERVAL_GET 0x0101 /* retrieve SOF interval */
|
||||
#define HCD_FNC_SOF_INTERVAL_SET 0x0102 /* set SOF interval */
|
||||
|
||||
#define HCD_FNC_CURRENT_FRAME_GET 0x0200 /* get current frame no */
|
||||
#define HCD_FNC_IRP_SUBMIT 0x0201 /* submit an IRP for exection */
|
||||
#define HCD_FNC_IRP_CANCEL 0x0202 /* cancel a pending IRP */
|
||||
|
||||
#define HCD_FNC_PIPE_CREATE 0x0300 /* create pipe & reserve bandwidth */
|
||||
#define HCD_FNC_PIPE_DESTROY 0x0301 /* destroy pipe */
|
||||
#define HCD_FNC_PIPE_MODIFY 0x0302 /* modify pipe parameters */
|
||||
|
||||
/* HRB result codes */
|
||||
|
||||
/*
|
||||
* USB errnos are defined as being part of the USB host Module, as are all
|
||||
* vxWorks module numbers, but the USB Module number is further divided into
|
||||
* sub-modules. Each sub-module has upto 255 values for its own error codes
|
||||
*/
|
||||
|
||||
#define USB_HCD_SUB_MODULE 4
|
||||
|
||||
#define M_usbHcdLib ( (USB_HCD_SUB_MODULE << 8) | M_usbHostLib )
|
||||
|
||||
#define hcdErr(x) (M_usbHcdLib | (x))
|
||||
|
||||
#define S_usbHcdLib_BAD_CLIENT hcdErr(1)
|
||||
#define S_usbHcdLib_BAD_PARAM hcdErr(2)
|
||||
#define S_usbHcdLib_BAD_HANDLE hcdErr(3)
|
||||
#define S_usbHcdLib_OUT_OF_MEMORY hcdErr(4)
|
||||
#define S_usbHcdLib_OUT_OF_RESOURCES hcdErr(5)
|
||||
#define S_usbHcdLib_NOT_IMPLEMENTED hcdErr(6)
|
||||
#define S_usbHcdLib_GENERAL_FAULT hcdErr(7)
|
||||
#define S_usbHcdLib_NOT_INITIALIZED hcdErr(8)
|
||||
#define S_usbHcdLib_INT_HOOK_FAILED hcdErr(9)
|
||||
#define S_usbHcdLib_STRUCT_SIZE_FAULT hcdErr(10)
|
||||
#define S_usbHcdLib_HW_NOT_READY hcdErr(11)
|
||||
#define S_usbHcdLib_NOT_SUPPORTED hcdErr(12)
|
||||
#define S_usbHcdLib_SHUTDOWN hcdErr(13)
|
||||
#define S_usbHcdLib_IRP_CANCELED hcdErr(14)
|
||||
#define S_usbHcdLib_STALLED hcdErr(15)
|
||||
#define S_usbHcdLib_DATA_BFR_FAULT hcdErr(16)
|
||||
#define S_usbHcdLib_BABBLE hcdErr(17)
|
||||
#define S_usbHcdLib_CRC_TIMEOUT hcdErr(18)
|
||||
#define S_usbHcdLib_TIMEOUT hcdErr(19)
|
||||
#define S_usbHcdLib_BITSTUFF_FAULT hcdErr(20)
|
||||
#define S_usbHcdLib_SHORT_PACKET hcdErr(21)
|
||||
#define S_usbHcdLib_CANNOT_CANCEL hcdErr(22)
|
||||
#define S_usbHcdLib_BANDWIDTH_FAULT hcdErr(23)
|
||||
#define S_usbHcdLib_SOF_INTERVAL_FAULT hcdErr(24)
|
||||
#define S_usbHcdLib_DATA_TOGGLE_FAULT hcdErr(25)
|
||||
#define S_usbHcdLib_PID_FAULT hcdErr(26)
|
||||
#define S_usbHcdLib_ISOCH_FAULT hcdErr(27)
|
||||
|
||||
/* management events */
|
||||
|
||||
#define HCD_MNGMT_RESUME 1 /* remote resume */
|
||||
|
||||
/* bus states, bit mask */
|
||||
|
||||
#define HCD_BUS_SUSPEND 0x0001
|
||||
#define HCD_BUS_RESUME 0x0002
|
||||
|
||||
/* typedefs */
|
||||
|
||||
/* HCD_CLIENT_HANDLE */
|
||||
|
||||
typedef GENERIC_HANDLE HCD_CLIENT_HANDLE, *pHCD_CLIENT_HANDLE;
|
||||
|
||||
/* HCD_PIPE_HANDLE */
|
||||
|
||||
typedef GENERIC_HANDLE HCD_PIPE_HANDLE, *pHCD_PIPE_HANDLE;
|
||||
|
||||
/*
|
||||
* HCD_EXEC_FUNC
|
||||
*
|
||||
* HCD_EXEC_FUNC is the primary entry point for an HCD. The caller passes
|
||||
* HRBs (HCD Request Blocks) through this interface for execution by the HCD.
|
||||
*/
|
||||
|
||||
typedef STATUS (*HCD_EXEC_FUNC) (pVOID pHrb);
|
||||
|
||||
/* management notification callback function */
|
||||
|
||||
typedef VOID (*USB_HCD_MNGMT_CALLBACK)
|
||||
(
|
||||
pVOID mngmtCallbackParam, /* caller-defined param */
|
||||
HCD_CLIENT_HANDLE handle, /* handle to host controller */
|
||||
UINT16 busNo, /* bus number */
|
||||
UINT16 mngmtCode /* management code */
|
||||
);
|
||||
|
||||
/*
|
||||
* HRB_HEADER
|
||||
*
|
||||
* All requests to an HCD begin with an HRB (HCD Request Block) header.
|
||||
*/
|
||||
|
||||
typedef struct hrb_header
|
||||
{
|
||||
HCD_CLIENT_HANDLE handle; /* I/O caller's HCD client handle */
|
||||
UINT16 function; /* IN HCD function code */
|
||||
UINT16 hrbLength; /* IN Length of the total HRB */
|
||||
} HRB_HEADER, *pHRB_HEADER;
|
||||
|
||||
/*
|
||||
* HRB_ATTACH
|
||||
*/
|
||||
|
||||
typedef struct hrb_attach
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
pVOID param; /* IN HCD-specific parameter */
|
||||
USB_HCD_MNGMT_CALLBACK mngmtCallback;
|
||||
/* IN USBD's callback for mngmt events */
|
||||
pVOID mngmtCallbackParam; /* IN USBD-defined parameter to callback */
|
||||
UINT16 busCount; /* OUT number of buses managed by HCD */
|
||||
} HRB_ATTACH, *pHRB_ATTACH;
|
||||
|
||||
/*
|
||||
* HRB_DETACH
|
||||
*/
|
||||
|
||||
typedef struct hrb_detach
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
} HRB_DETACH, *pHRB_DETACH;
|
||||
|
||||
/*
|
||||
* HRB_BUS_RESET
|
||||
*/
|
||||
|
||||
typedef struct hrb_bus_reset
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
UINT16 busNo; /* IN bus number to reset */
|
||||
} HRB_BUS_RESET, *pHRB_BUS_RESET;
|
||||
|
||||
/*
|
||||
* HRB_SET_BUS_STATE
|
||||
*/
|
||||
|
||||
typedef struct hrb_set_bus_state
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
UINT16 busNo; /* IN bus number */
|
||||
UINT16 busState; /* IN new bus state, HCD_BUS_xxxx */
|
||||
} HRB_SET_BUS_STATE, *pHRB_SET_BUS_STATE;
|
||||
|
||||
/*
|
||||
* HRB_CURRENT_FRAME_GET
|
||||
*/
|
||||
|
||||
typedef struct hrb_current_frame_get
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
UINT16 busNo; /* IN bus index: 0, 1, ... */
|
||||
UINT32 frameNo; /* OUT current frame number */
|
||||
UINT32 frameWindow; /* OUT frame window size */
|
||||
} HRB_CURRENT_FRAME_GET, *pHRB_CURRENT_FRAME_GET;
|
||||
|
||||
/*
|
||||
* HRB_PIPE_CREATE
|
||||
*/
|
||||
|
||||
typedef struct hrb_pipe_create
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
UINT16 busNo; /* IN bus index: 0, 1, ... */
|
||||
UINT16 busAddress; /* IN bus address of USB device */
|
||||
UINT16 endpoint; /* IN endpoint on device */
|
||||
UINT16 transferType; /* IN transfer type */
|
||||
UINT16 direction; /* IN transfer/pipe direction */
|
||||
UINT16 speed; /* IN transfer speed */
|
||||
UINT16 maxPacketSize; /* IN packet size */
|
||||
UINT32 bandwidth; /* IN bandwidth required by pipe */
|
||||
UINT16 interval; /* IN service interval */
|
||||
UINT32 time; /* OUT calculated transfer time in nanoseconds */
|
||||
HCD_PIPE_HANDLE pipeHandle; /* OUT pipe handle */
|
||||
} HRB_PIPE_CREATE, *pHRB_PIPE_CREATE;
|
||||
|
||||
/*
|
||||
* HRB_PIPE_DESTROY
|
||||
*/
|
||||
|
||||
typedef struct hrb_pipe_destroy
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
HCD_PIPE_HANDLE pipeHandle; /* IN pipe to be destroyed */
|
||||
} HRB_PIPE_DESTROY, *pHRB_PIPE_DESTROY;
|
||||
|
||||
/*
|
||||
* HRB_PIPE_MODIFY
|
||||
*/
|
||||
|
||||
typedef struct hrb_pipe_modify
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
HCD_PIPE_HANDLE pipeHandle; /* IN pipe to modify */
|
||||
UINT16 busAddress; /* IN new bus address, or 0 if unchanged */
|
||||
UINT16 maxPacketSize; /* IN new max packet size, or 0 if unchanged */
|
||||
} HRB_PIPE_MODIFY, *pHRB_PIPE_MODIFY;
|
||||
|
||||
/*
|
||||
* HRB_IRP_SUBMIT
|
||||
*/
|
||||
|
||||
typedef struct hrb_irp_submit
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
HCD_PIPE_HANDLE pipeHandle; /* IN pipe to which IRP is directed */
|
||||
pUSB_IRP pIrp; /* IN ptr to IRP */
|
||||
} HRB_IRP_SUBMIT, *pHRB_IRP_SUBMIT;
|
||||
|
||||
/*
|
||||
* HRB_IRP_CANCEL
|
||||
*/
|
||||
|
||||
typedef struct hrb_irp_cancel
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
pUSB_IRP pIrp; /* IN ptr to IPR to be canceled */
|
||||
} HRB_IRP_CANCEL, *pHRB_IRP_CANCEL;
|
||||
|
||||
/*
|
||||
* HRB_SOF_INTERVAL_GET_SET
|
||||
*/
|
||||
|
||||
typedef struct hrb_sof_interval_get_set
|
||||
{
|
||||
HRB_HEADER header; /* HRB header */
|
||||
UINT16 busNo; /* IN bus index */
|
||||
UINT16 sofInterval; /* I/O SOF interval */
|
||||
} HRB_SOF_INTERVAL_GET_SET, *pHRB_SOF_INTERVAL_GET_SET;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __INCusbHcdh */
|
||||
|
||||
/* End of file. */
|
||||
|
||||
Reference in New Issue
Block a user