[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/boot/common/src/loader/drivers/drv_usb3slave.h b/boot/common/src/loader/drivers/drv_usb3slave.h
new file mode 100644
index 0000000..a851b15
--- /dev/null
+++ b/boot/common/src/loader/drivers/drv_usb3slave.h
@@ -0,0 +1,643 @@
+/*******************************************************************************

+* °æÈ¨ËùÓÐ (C)2010, ÉîÛÚÊÐÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾¡£

+*

+* ÎļþÃû³Æ£º drv_usb3slave.h

+* Îļþ±êʶ£º 

+* ÄÚÈÝÕªÒª£º 

+* ÆäËü˵Ã÷£º zx297520 project

+* µ±Ç°°æ±¾£º 1.0

+* ×÷¡¡¡¡Õߣº tangjian

+* Íê³ÉÈÕÆÚ£º 

+*

+*

+*******************************************************************************/

+

+#ifndef __USB3_SLAVE_DRV_H

+#define __USB3_SLAVE_DRV_H

+  

+/* *INDENT-OFF* */

+#ifdef __cplusplus

+extern "C" {

+#endif

+/* *INDENT-ON* */

+

+/*

+**==================================================================

+** 	               		Include files

+**==================================================================

+*/

+#include "usb.h"

+#include "global.h"

+#include "drv_usb3slave_reg.h"

+

+#include "dwc_otg_cil.h"   //ÓÃÓÚ¶¨Ò廨µ÷º¯Êý

+

+/* DRV´íÎóÂë */

+#define SOK                         (0)         /**< ÕýÈ· */

+#define ERR_FAIL                    (0x01)      /**< Ò»°ã´íÎó */

+#define ERR_INUSE                   (0x02)      /**< ÍâÉè×ÊÔ´ÕýÔÚʹÓà */

+#define ERR_XIO                     (0x03)      /**< ¹²Ïí×ÊÔ´¾ºÕù */

+#define ERR_OVFL                    (0x04)      /**< ¿ÉÓÃ×ÊÔ´ºÄ¾¡ */

+#define ERR_INVHANDLE               (0x05)      /**< ´«Èë¾ä±úÎÞЧ */

+#define ERR_INVPARAMS               (0x06)      /**< ²ÎÊýÎÞЧ */

+#define ERR_INVCMD                  (0x07)      /**< ÃüÁîÎÞЧ */

+#define ERR_NOMEM                   (0x08)      /**< ÄÚ´æºÄ¾¡ */

+#define ERR_UNSUPPORTED             (0x09)      /**< ÐÐΪ²»Ö§³Ö */

+#define ERR_INVHWVERSION            (0x10)      /**< Ó²¼þ°æ±¾²»Æ¥Åä */

+

+#define FALSE                        0

+#define TRUE                         1

+

+#define DWC3_DCFG_SPEED_MASK	(7 << 0)

+

+#define DWC3_DCFG		0xc700

+#define DWC3_DCFG_DEVADDR(addr)	((addr) << 3)

+#define DWC3_DCFG_DEVADDR_MASK	DWC3_DCFG_DEVADDR(0x7f)

+#define DWC3_DCTL		0xc704

+#define DWC3_DCTL_CSFTRST	(1 << 30)

+/*0x200-0x23c*/

+#define DWC3_GUSB2PHYCFG(n)	(0xc200 + (n * 0x04))

+/*0x2C0-0x2fc*/

+#define DWC3_GUSB3PIPECTL(n)	(0xc2c0 + (n * 0x04))

+

+/*0x300-0x37C*/

+#define DWC3_GTXFIFOSIZ(n)	(0xc300 + (n * 0x04))

+

+/*0x380-0x3fc*/

+#define DWC3_GRXFIFOSIZ(n)	(0xc380 + (n * 0x04))

+

+#define DWC3_GCTL		0xc110

+#define DWC3_DCTL_RUN_STOP	(1 << 31)

+

+#define DWC3_DEVTEN_USBSUSPENDEN    (1 << 6)

+#define DWC3_DEVTEN_WKUPEVTEN		(1 << 4)

+#define DWC3_DEVTEN_ULSTCNGEN		(1 << 3)

+#define DWC3_DEVTEN_CONNECTDONEEN	(1 << 2)

+#define DWC3_DEVTEN_USBRSTEN		(1 << 1)

+#define DWC3_DEVTEN_DISCONNEVTEN	(1 << 0)

+

+#define DWC3_DEVTEN		0xc708

+#define DWC3_DSTS		0xc70c

+

+#define DWC3_DALEPENA   0xc720

+/** ¶¨ÒåÃèÊö·ûÀàÐÍ */  

+#define USB_DT_DEVICE                           0x01

+#define USB_DT_CONFIG                           0x02

+#define USB_DT_STRING                           0x03

+#define USB_DT_INTERFACE                        0x04

+#define USB_DT_ENDPOINT	                        0x05

+#define USB_DT_DEVICE_QUALIFIER                 0x06

+#define USB_DT_OTHER_SPEED_CONFIG               0x07

+#define USB_DT_INTERFACE_POWER                  0x08

+/** these are from a minor usb 2.0 revision (ECN) */   

+#define USB_DT_OTG                              0x09

+#define USB_DT_DEBUG                            0x0a

+#define USB_DT_INTERFACE_ASSOCIATION            0x0b

+/** these are from the Wireless USB spec */  

+#define USB_DT_SECURITY                         0x0c

+#define USB_DT_KEY                              0x0d

+#define USB_DT_ENCRYPTION_TYPE                  0x0e

+#define USB_DT_BOS                              0x0f

+#define USB_DT_DEVICE_CAPABILITY                0x10

+#define USB_DT_WIRELESS_ENDPOINT_COMP           0x11

+#define USB_DT_WIRE_ADAPTER                     0x21

+#define USB_DT_RPIPE                            0x22

+#define USB_DT_CS_RADIO_CONTROL                 0x23

+/** From the T10 UAS specification */   

+#define USB_DT_PIPE_USAGE                       0x24

+/** From the USB 3.0 spec */   

+#define	USB_DT_SS_ENDPOINT_COMP                 0x30

+/** USB directions */

+#define USB_DIR_OUT                             0       /* to device */

+#define USB_DIR_IN                              0x80    /* to host */

+/** USB types, the second of three bmRequestType fields, ЭÒé9.3.1 */

+#define USB_TYPE_MASK                           (0x03 << 5)

+#define USB_TYPE_STANDARD                       (0x00 << 5)

+#define USB_TYPE_CLASS                          (0x01 << 5)

+#define USB_TYPE_VENDOR                         (0x02 << 5)

+#define USB_TYPE_RESERVED                       (0x03 << 5)

+/** USB recipients, the third of three bmRequestType fields */

+#define USB_RECIP_MASK                          0x1f

+#define USB_RECIP_DEVICE                        0x00

+#define USB_RECIP_INTERFACE                     0x01

+#define USB_RECIP_ENDPOINT                      0x02

+#define USB_RECIP_OTHER                         0x03

+/** From Wireless USB 1.0 */ 

+#define USB_RECIP_PORT                          0x04

+#define USB_RECIP_RPIPE                         0x05

+/*

+* Standard requests, for the bRequest field of a SETUP packet.

+*

+* These are qualified by the bmRequestType field, so that for example

+* TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved

+* by a GET_STATUS request.

+*/

+#define USB_REQ_GET_STATUS                      0x00

+#define USB_REQ_CLEAR_FEATURE                   0x01

+#define USB_REQ_SET_FEATURE                     0x03

+#define USB_REQ_SET_ADDRESS                     0x05

+#define USB_REQ_GET_DESCRIPTOR                  0x06

+#define USB_REQ_SET_DESCRIPTOR                  0x07

+#define USB_REQ_GET_CONFIGURATION               0x08

+#define USB_REQ_SET_CONFIGURATION               0x09

+#define USB_REQ_GET_INTERFACE                   0x0A

+#define USB_REQ_SET_INTERFACE                   0x0B

+#define USB_REQ_SYNCH_FRAME                     0x0C

+#define USB_REQ_GET_MAX_LUN                     0xFE

+/*

+* USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and

+* are read as a bit array returned by USB_REQ_GET_STATUS.  (So there

+* are at most sixteen features of each type.)  Hubs may also support a

+* new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend.

+*/

+#define USB_DEVICE_SELF_POWERED                 0	/**< (read only) */

+#define USB_DEVICE_REMOTE_WAKEUP                1	/**< dev may initiate wakeup */

+#define USB_DEVICE_TEST_MODE                    2	/**< (wired high speed only) */

+#define USB_DEVICE_BATTERY                      2	/**< (wireless) */

+#define USB_DEVICE_B_HNP_ENABLE                 3	/**< (otg) dev may initiate HNP */

+#define USB_DEVICE_WUSB_DEVICE                  3	/**< (wireless)*/

+#define USB_DEVICE_A_HNP_SUPPORT                4	/**< (otg) RH port supports HNP */

+#define USB_DEVICE_A_ALT_HNP_SUPPORT            5	/**< (otg) other RH port does */

+#define USB_DEVICE_DEBUG_MODE                   6	/**< (special devices only) */

+/*

+* New Feature Selectors as added by USB 3.0

+* See USB 3.0 spec Table 9-7

+* Suspend Options, Table 9-7 USB 3.0 spec

+*/

+#define USB_DEVICE_U1_ENABLE                    48	/**< dev may initiate U1 transition */

+#define USB_DEVICE_U2_ENABLE                    49	/**< dev may initiate U2 transition */

+#define USB_DEVICE_LTM_ENABLE                   50	/**< dev may send LTM */

+

+#define USB_INTRF_FUNC_SUSPEND                  0	/**< function suspend */

+#define USB_INTR_FUNC_SUSPEND_OPT_MASK          0xFF00

+#define USB_INTRF_FUNC_SUSPEND_LP               (1 << (8 + 0))

+#define USB_INTRF_FUNC_SUSPEND_RW               (1 << (8 + 1))

+

+#define USB_ENDPOINT_HALT                       0	/**< IN/OUT will STALL */

+

+/** Bit array elements as returned by the USB_REQ_GET_STATUS request */

+#define USB_DEV_STAT_U1_ENABLED                 2	/**< transition into U1 state */

+#define USB_DEV_STAT_U2_ENABLED                 3	/**< transition into U2 state */

+#define USB_DEV_STAT_LTM_ENABLED                4	/**< Latency tolerance messages */

+/**

+* USB function drivers should return USB_GADGET_DELAYED_STATUS if they

+* wish to delay the data/status stages of the control transfer till they

+* are ready. The control transfer will then be kept from completing till

+* all the function drivers that requested for USB_GADGET_DELAYED_STAUS

+* invoke usb_composite_setup_continue().

+*/

+#define USB_GADGET_DELAYED_STATUS               0x7fff	/**< Impossibly large value */

+//#define EP0_PACKET_SIZE                         64 

+//#define	MAX_EPS				(0x8)

+

+/**

+* struct usb_ctrlrequest - SETUP data for a USB device control request

+* Note that the driver for any interface can issue control requests.

+* For most devices, interfaces don't coordinate with each other, so

+* such requests may be made at any time.

+*/

+

+ typedef struct T_USB3Slave_CtrlReq

+{

+    u8 bmRequestType;                         /**< Æ¥Åäsetup°übmRequestTypeÓò */

+    u8 bRequest;                              /**< Æ¥Åäsetup°übRequestÓò  */

+    u16 wValue;                              /**< Æ¥Åäsetup°üwValueÓò */

+    u16 wIndex;                              /**< Æ¥Åäsetup°üwIndexÓò */

+    u16 wLength;                             /**< Æ¥Åäsetup°üwLengthÓò */

+}__attribute__ ((__packed__)) T_USB3Slave_CtrlReq;

+

+/** ¶Ëµã´«ÊäÀàÐ͵Ⱥ궨Òå */

+#define USB_ENDPOINT_NUMBER_MASK                0x0f	/* in bEndpointAddress */

+#define USB_ENDPOINT_DIR_MASK                   0x80

+

+#define USB_ENDPOINT_XFERTYPE_MASK              0x03	/* in bmAttributes */

+#define USB_ENDPOINT_XFER_CONTROL               0

+#define USB_ENDPOINT_XFER_ISOC                  1

+#define USB_ENDPOINT_XFER_BULK                  2

+#define USB_ENDPOINT_XFER_INT                   3

+#define USB_ENDPOINT_MAX_ADJUSTABLE             0x80

+

+/** ×î´ó°ü´óС£¬²ÎÕÕЭÒ飬¾ù¿ÉÉèÖÃΪ1024 */

+#define HS_MAX_PACKET_SIZE                         512  

+#define FS_MAX_PACKET_SIZE                         64

+/** ¿ØÖÆ´«Êä×î´ó°ü´óС */

+/** ¶ËµãÊýÄ¿ */

+#define ENDPOINTS_NUM                      6   

+/** ЭÒé¶ËµãÃèÊö·û */

+

+/** TRB¿ØÖÆÖи÷¸öλ¶ÎµÄºê¶¨Òå*/

+#define TRBCTL_NORMAL                           1

+#define TRBCTL_CONTROL_SETUP                    2

+#define TRBCTL_CONTROL_STATUS2                  3

+#define TRBCTL_CONTROL_STATUS3                  4

+#define TRBCTL_CONTROL_DATA                     5

+#define TRBCTL_ISOCHRONOUS_FIRST                6

+#define TRBCTL_ISOCHRONOUS                      7

+#define TRBCTL_LINK_TRB                         8

+/** struct T_USB3Slave_TRBToHW - transfer request block (hw format) */

+typedef struct T_USB3Slave_TRBToHW

+{

+    u32  udBpl;                              /**< Ö¸ÏòbufferµÄµÍ32λµØÖ· */

+    u32  udBph;                              /**< Ö¸ÏòbufferµÄ¸ß32λµØÖ·  */

+    u32  udSize;                             /**< Êý¾Ý´«ÊäµÄ³¤¶È */

+    u32  udCtrl;                             /**< TRB¿ØÖÆ */

+}__attribute__ ((__packed__)) T_USB3Slave_TRBToHW;

+

+/** struct T_USB3Slave_TRB - transfer request block */ 

+ typedef struct T_USB3Slave_TRB

+{

+    u64    bplh;                              /**< Ö¸ÏòbufferµØÖ· */

+

+     union

+    {

+         struct

+        {

+             u32    BUFSIZ:24;                /**< Êý¾Ý´«ÊäµÄ³¤¶È */

+             u32    PCM1:2;                   /**< Packet Count M1 */

+             u32    Reserved27_26:2;

+             u32    TRBSTS:4;                 /**< TRB״̬ */

+        }bit;

+        u32 udVal;

+    }len_pcm;

+

+     union

+    {

+         struct

+        {

+             u32    HWO:1;                    /**< ָʾӲ¼þÓµÓеÄTRB */

+             u32    LST:1;                    /**< ×îºóÒ»¸öTRB */

+             u32    CHN:1;                    /**< ´ËTRBÓëÏÂÒ»¸öTRBÏà¹ØÁª */

+             u32    CSP:1;                    /**< µ±½ÓÊÕµ½Ò»¸ö¶Ì°ücore½«»á¼ÌÐøµ½ÏÂÒ»¸öBuffer Descriptor */

+             u32    TRBCTL:6;                 /**< TRB ¿ØÖÆ */

+             u32    ISP_IMI:1;                /**< Interrupt on Short Packet/Interrupt on Missed ISOC */

+             u32    IOC:1;                    /**< Èç¹û±»ÉèÖ㬱íʾ´«ÊäÍê³Éºó²úÉúÖÐ¶Ï */

+             u32    Reserved13_12:2;

+             u32    StreamID_SOFNum:16;       /**< Stream ID/SOF Number */

+             u32    Reserved31_30:2;

+        }bit;

+        u32 udVal;

+    }control;

+}__attribute__ ((__packed__)) T_USB3Slave_TRB;

+

+/** EVENT buffer´óС */

+#define EVENT_BUFFERS_SIZE                 256//256  

+

+/**

+* struct T_USB3Slave_EventBuf - Software event buffer representation

+*/

+

+typedef struct

+{

+    u32  EvtBuf[EVENT_BUFFERS_SIZE];         /**< ·ÖÅäµÄEVENT Buffer */

+    u32  udLength;                           /**< ·ÖÅäEVENT Buffer ´óС */

+    u32  udLpos;                             /**< ÓÃÓÚָʾµ±Ç°EVENTµÄÆðʼλÖà */

+}T_USB3Slave_EventBuf;

+

+

+/** EVENTÀàÐÍ  */

+#define EVENT_TYPE_MASK                         0xfe

+#define EVENT_TYPE_DEV	                        0

+#define EVENT_TYPE_CARKIT	                    3

+#define EVENT_TYPE_I2C	                        4

+typedef struct T_USB3Slave_EventType

+{

+    u32	udIs_devspec:1;                     /**< ÓÃÓÚÅжÏÊǶ˵ãÀàÐÍEVENT»¹ÊÇÉ豸ÀàÐÍEVENT */

+    u32	udType:6;                           /**< EVENT ÀàÐÍ */

+    u32	udReserved8_31:25;

+}__attribute__ ((__packed__)) T_USB3Slave_EventType;

+

+/** ¶ËµãÀàÐÍEVENTÀàÐÍ */

+#define DEPEVT_XFERCOMPLETE                     0x01

+#define DEPEVT_XFERINPROGRESS                   0x02

+#define DEPEVT_XFERNOTREADY                     0x03

+#define DEPEVT_RXTXFIFOEVT                      0x04

+#define DEPEVT_STREAMEVT                        0x06

+#define DEPEVT_EPCMDCMPLT                       0x07

+

+#define DEPEVT_STATUS_BUSERR                    (1 << 0)

+#define DEPEVT_STATUS_SHORT                     (1 << 1)

+#define DEPEVT_STATUS_IOC                       (1 << 2)

+#define DEPEVT_STATUS_LST                       (1 << 3)

+/** Stream event only */

+#define DEPEVT_STREAMEVT_FOUND                  1

+#define DEPEVT_STREAMEVT_NOTFOUND               2

+/** Control-only Status */

+#define DEPEVT_STATUS_CONTROL_SETUP	            0

+#define DEPEVT_STATUS_CONTROL_DATA	            1

+#define DEPEVT_STATUS_CONTROL_STATUS            2

+#define DEPEVT_STATUS_STATUS_SETUP             10

+

+/**

+* struct dwc3_event_depvt - Device Endpoint Events

+* @udOne_bit: indicates this is an endpoint event (not used)

+* @udEndpoint_number: number of the endpoint

+* @udEndpoint_event: The event we have:

+*	0x00	- Reserved

+*	0x01	- XferComplete

+*	0x02	- XferInProgress

+*	0x03	- XferNotReady

+*	0x04	- RxTxFifoEvt (IN->Underrun, OUT->Overrun)

+*	0x05	- Reserved

+*	0x06	- StreamEvt

+*	0x07	- EPCmdCmplt

+* @udReserved11_10: Reserved, don't use.

+* @EventStatus: Indicates the status of the event. Refer to databook for more information.

+* @EventParam: Parameters of the current event. Refer to databook for more information.

+*/

+/** ²Î¼ûÊÖ²á7.2.8.1ÃèÊö¶ËµãÀàÐÍEVENT */

+ typedef struct T_USB3Slave_EpEvt

+{

+    u32	udOne_bit:1;                        /**< 1bitÓÃÓÚÅжÏÊǶ˵ãÀàÐÍevent»¹ÊÇÉ豸ÀàÐÍevent */

+    u32	udEndpoint_number:5;                /**< ָʾÎïÀí¶ËµãºÅ */

+    u32	udEndpoint_event:4;                 /**< ָʾ¶ËµãÀàÐÍevent */

+    u32	udReserved11_10:2;

+    u32	EventStatus:4;                      /**< ָʾevent״̬£¬Refer to databook for more information*/

+    u32	EventParam:16;                      /**< µ±Ç°event²ÎÊý. Refer to databook for more information */

+}__attribute__ ((__packed__)) T_USB3Slave_EpEvt;

+

+/**

+* struct T_USB3Slave_DevEvt - Device Events

+* @udOne_bit: indicates this is a non-endpoint event (not used)

+* @udDevice_event: indicates it's a device event. Should read as 0x00

+* @udType: indicates the type of device event.

+*	0	- DisconnEvt

+*	1	- USBRst

+*	2	- ConnectDone

+*	3	- ULStChng

+*	4	- WkUpEvt

+*	5	- Reserved

+*	6	- EOPF

+*	7	- SOF

+*	8	- Reserved

+*	9	- ErrticErr

+*	10	- CmdCmplt

+*	11	- EvntOverflow

+*	12	- VndrDevTstRcved

+* @udReserved15_12: Reserved, not used

+* @udEvtInfo: Information about this event

+* @udReserved31_24: Reserved, not used

+*/

+/** DEVICE EVENT ÀàÐÍ */

+#define DEVICE_EVENT_DISCONNECT                 0

+#define DEVICE_EVENT_RESET	                    1

+#define DEVICE_EVENT_CONNECT_DONE               2

+#define DEVICE_EVENT_LINK_STATUS_CHANGE         3

+#define DEVICE_EVENT_WAKEUP                     4

+#define DEVICE_EVENT_EOPF                       6

+#define DEVICE_EVENT_SOF                        7

+#define DEVICE_EVENT_ERRATIC_ERROR              9

+#define DEVICE_EVENT_CMD_CMPL                   10

+#define DEVICE_EVENT_OVERFLOW                   11

+

+typedef struct T_USB3Slave_DevEvt

+{

+    u32	udOne_bit:1;                        /**< 1bitÓÃÓÚÅжÏÊǶ˵ãÀàÐÍevent»¹ÊÇÉ豸ÀàÐÍevent */

+    u32	udDevice_event:7;                   /**< É豸ÀàÐÍevent */

+    u32	udType:4;                           /**< ָʾ·¢ÉúµÄ¸÷ÖÖevent */

+    u32	udReserved15_12:4;

+    u32	udEvtInfo:8;                        /**< event ÐÅÏ¢±ÈÌØ¡£ÓÃÓÚָʾÊÇ·ñÊÇSSºÍlink state */

+    u32	udReserved31_24:8;

+}__attribute__ ((__packed__)) T_USB3Slave_DevEvt;

+

+/**

+* struct T_USB3Slave_Event_GEvt - Other Core Events

+* @udOne_bit: indicates this is a non-endpoint event (not used)

+* @udDevice_event: indicates it's (0x03) Carkit or (0x04) I2C event.

+* @udPhy_port_number: self-explanatory

+* @udReserved31_12: Reserved, not used.

+*/

+

+ typedef struct T_USB3Slave_Event_GEvt

+{

+    u32	udOne_bit:1;

+    u32	udDevice_event:7;

+    u32	udPhy_port_number:4;

+    u32	udReserved31_12:20;

+}__attribute__ ((__packed__)) T_USB3Slave_Event_GEvt;

+

+/** union T_USB3Slave_Event - representation of Event Buffer contents */

+

+typedef union

+{

+    u32                  udRaw;              /**< ָʾµ±Ç°eventµÄÖµ */

+    T_USB3Slave_EventType   tType;              /**< ָʾevent ÀàÐÍ(00h±íʾdevice specific event) */

+    T_USB3Slave_EpEvt       tEpEvt;             /**< ¶ËµãÀàÐÍevent */

+    T_USB3Slave_DevEvt      tDevEvt;            /**< É豸ÀàÐÍevent */

+    T_USB3Slave_Event_GEvt  tGetEvt;            /**< Other Core Events */

+}T_USB3Slave_Event;

+

+/** ¶¨ÒåEPµÄ±ê¼Çºê */

+#define EP_ENABLED                              (1 << 0)

+#define EP_STALL                                (1 << 1)

+#define EP_WEDGE                                (1 << 2)

+#define EP_BUSY                                 (1 << 4)

+#define EP_PENDING_REQUEST                      (1 << 5)

+/** This last one is specific to EP0 */

+#define EP0_DIR_IN                             ((u32)1 << 31)

+/** EP񈬀 */

+#define EP_FLAG_STALLED                         (1 << 0)

+#define EP_FLAG_WEDGED                          (1 << 1)

+/** EP·½Ïò */

+#define EP_DIRECTION_TX                         true

+#define EP_DIRECTION_RX                         false

+

+/** ¶ËµãµÄ״̬±ä»¯*/

+typedef enum

+{

+    EP_IDLE = 0,                            /**< EP¿ÕÏÐ */

+    EP_HALTED,                              /**< EP halt */

+    EP0_CTRLIN_SETUP,                       /**< EP0¿ØÖƽ¨Á¢IN½×¶Î */

+    EP0_CTRLOUT_SETUP,                      /**< EP0¿ØÖƽ¨Á¢OUT½×¶Î */

+    EP0_CTRLNULL_SETUP,                     /**< EP0¿ØÖƽ¨Á¢Îª¿Õ */

+    EP0_CTRL_INDATA,                        /**< EP0¿ØÖÆINÊý¾Ý½×¶Î */

+    EP0_CTRL_OUTDATA,                       /**< EP0¿ØÖÆOUTÊý¾Ý½×¶Î */

+    EP0_CTRL_INSTATUS,                      /**< EP0¿ØÖÆIN״̬½×¶Î */

+    EP0_CTRL_OUTSTATUS,                     /**< EP0¿ØÖÆOUT״̬½×¶Î */

+    EP_RX,                                  /**< EP½ÓÊÕ״ָ̬ʾ */

+    EP_TX                                   /**< EP·¢ËÍ״ָ̬ʾ */

+}E_USB3Slave_EpState;

+

+/** ָʾEp0ÏÂÒ»¸öEVENTÀàÐÍ */

+typedef enum

+{

+    EP0_UNKNOWN = 0,

+    EP0_COMPLETE,                               /**< EP0״ָ̬ʾΪÍê³É*/

+    EP0_NRDY_SETUP,                             /**< EP0״̬NRDYָʾΪ½¨Á¢½×¶Î*/

+    EP0_NRDY_DATA,                              /**< EP0״̬NRDYָʾΪÊý¾Ý½×¶Î*/

+    EP0_NRDY_STATUS,                            /**< EP0״̬NRDYָʾΪ״̬½×¶Î*/

+} E_USB3Slave_Ep0Next;

+/** ָʾEP0¿ØÖÆ´«ÊäµÄÈý¸ö½×¶Î */

+typedef enum

+{

+    EP0_UNCONNECTED	= 0,

+    EP0_SETUP_PHASE,                            /**< EP0¿ØÖÆ´«ÊäµÄ½¨Á¢½×¶Î */

+    EP0_DATA_PHASE,                             /**< EP0¿ØÖÆ´«ÊäµÄÊý¾Ý½×¶Î */

+    EP0_STATUS_PHASE,                           /**< EP0¿ØÖÆ´«ÊäµÄ״̬½×¶Î */

+}E_USB3Slave_Ep0State;

+/** ³¬¸ßËÙģʽϵÄÁ¬½Ó״̬ */

+

+

+/** ¿ØÖÆ´«ÊäÖÐö¾ÙËù´¦µÄ״̬½×¶Î */

+typedef enum

+{

+    DEFAULT_STATE = 0,                          /**< ȱʡ״̬ */

+    ADDRESS_STATE,                              /**< µØÖ·×´Ì¬ */

+    CONFIGURED_STATE,                           /**< ÅäÖÃ״̬ */

+    SETINTERFACE_STATE,                         /**< ÉèÖýӿÚ״̬*/

+    GETMAXLUN_STATE,                            /**<GET MAX lUN*/

+    BULKIN_CMPL,                                /**< BULK IN´«ÊäÍê³É״̬ */

+    BULKOUT_CMPL,                               /**< BULK OUT´«ÊäÍê³É״̬ */

+    IntrIN_CMPL,                                /**< Interrupt IN´«ÊäÍê³É״̬ */

+    IntrOUT_CMPL,                               /**< Interrupt OUT´«ÊäÍê³É״̬ */

+}E_USB3Slave_ReqState;

+

+/** ¶¨ÒåUSB3.0µÄËÙ¶ÈÀàÐÍ£¬²ÎÕÕ¿ØÖÆÆ÷ÊÖ²áP513, DCFG¼Ä´æÆ÷0:2±ÈÌØ */

+typedef enum

+{

+    USB3_HIGHSPEED  = 0,                        /**< 3'b000 USB2.0 PHY clock is 30 MHz or 60 MHz */ 

+    USB3_FULLSPEED  = 1,                        /**< 3'b001 USB2.0 PHY clock is 30 MHz or 60 MHz */

+    USB3_SUPERSPEED = 4,                        /**< 3'b100 USB3.0 PHY clock is 30 MHz or 60 MH */

+}E_USB3Slave_SpeedMode;

+/** ָʾÁ¬½ÓµÄÉ豸µÄËÙ¶ÈÀàÐÍ */

+typedef enum

+{

+    USB30_SPEED_UNKNOWN = 0,                      /**< enumerating */

+    USB30_SPEED_LOW, USB30_SPEED_FULL,              /**< usb 1.1 */

+    USB30_SPEED_HIGH,                             /**< usb 2.0 */

+    USB30_SPEED_WIRELESS,                         /**< wireless (usb 2.5) */

+    USB30_SPEED_SUPER,                            /**< usb 3.0 */

+}E_USB3Slave_Speed;

+

+/** T_USB3Slave_HWPARAMS - copy of HWPARAMS registers */

+

+typedef struct

+{

+    u32	udHwparams0;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS0¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+    u32	udHwparams1;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS1¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+    u32	udHwparams2;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS2¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+    u32	udHwparams3;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS3¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+    u32	udHwparams4;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS4¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+    u32	udHwparams5;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS5¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+    u32	udHwparams6;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS6¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+    u32	udHwparams7;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS7¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+    u32	udHwparams8;                        /**< ¶ÔÓ¦ÓÚGHWPARAMS8¼Ä´æÆ÷¶ÁÈ¡µÄÖµ */

+}T_USB3Slave_HWPARAMS;

+

+

+/** ÓÃÓڶ˵ãÃüÁîµÄÈý¸ö²ÎÊý */

+ typedef struct T_USB3Slave_EpCmdPara

+{

+    u32	Parameter2;                         /**< ָʾÉ豸ÎïÀí¶ËµãÃüÁî²ÎÊý2 */

+    u32	Parameter1;                         /**< ָʾÉ豸ÎïÀí¶ËµãÃüÁî²ÎÊý1 */

+    u32	Parameter0;                         /**< ָʾÉ豸ÎïÀí¶ËµãÃüÁî²ÎÊý0 */

+}__attribute__ ((__packed__)) T_USB3Slave_EpCmdPara;

+

+/** DEPCFG parameter 1 */ 

+#define DEPCFG_INT_NUM(n)                       ((n) << 0)

+#define DEPCFG_XFER_COMPLETE_EN                 (1   << 8)

+#define DEPCFG_XFER_IN_PROGRESS_EN              (1   << 9)

+#define DEPCFG_XFER_NOT_READY_EN                (1   << 10)

+#define DEPCFG_FIFO_ERROR_EN                    (1   << 11)

+#define DEPCFG_STREAM_EVENT_EN                  (1   << 13)

+#define DEPCFG_BINTERVAL_M1(n)                  ((n) << 16)

+#define DEPCFG_STREAM_CAPABLE                   (1   << 24)

+#define DEPCFG_EP_NUMBER(n)                     ((n) << 25)

+#define DEPCFG_BULK_BASED                       (1   << 30)

+#define DEPCFG_FIFO_BASED                       (1   << 31)

+

+/** DEPCFG parameter 0 */

+#define DEPCFG_EP_TYPE(n)                       ((n) << 1)

+#define DEPCFG_MAX_PACKET_SIZE(n)               ((n) << 3)

+#define DEPCFG_FIFO_NUMBER(n)                   ((n) << 17)

+#define DEPCFG_BURST_SIZE(n)                    ((n) << 22)

+#define DEPCFG_DATA_SEQ_NUM(n)                  ((n) << 26)

+#define DEPCFG_IGN_SEQ_NUM                      (1   << 31)

+

+/** DEPXFERCFG parameter 0 */

+#define DEPXFERCFG_NUM_XFER_RES(n)              ((n) & 0xffff)

+

+/** ¶ËµãÐÅÏ¢½á¹¹Ìå */

+#pragma pack (4) /*Ö¸¶¨°´4×Ö½Ú¶ÔÆë*/

+typedef struct

+{

+

+    u32                  udEpNum;            /**< µ±Ç°epºÅ  */

+    u8                   *pucBuf;            /**< »º³åÇøÖ¸Õë */

+    u32                  udPos;              /**< »º³åÇø¶ÁдָÕë */

+    u32                  udLen;              /**< »º³åÇø×ܳ¤¶È */

+    u32                  udMaxPacket;        /**< ×î´ó°üµÄ´óС */

+    u32                  udMaxStream;        /**< Ö§³ÖµÄ×î´óÁ÷Êý */

+    u32                  udMaxBurst;         /**< ¸Ã¶ËµãÖ§³ÖµÄ×î´óburstÊý */

+    T_USB3Slave_TRBToHW     *ptTRB;           /**< ×¼±¸ÓÃÓÚtrbµÄ»º³åÇø */

+    u32                  udDMAChannel;       /**< ¶ËµãʹÓõÄdmaͨµÀ, ¸ß16Ϊģʽ£¬µÍ16ΪͨµÀºÅ */

+    u8                   ucType;             /**< Ö§³ÖµÄ´«ÊäÀàÐÍ */

+    void                    *pPara;             /**< »Øµ÷º¯ÊýµÄ²ÎÊý */

+    E_USB3Slave_EpState     eEpState;           /**< ¶Ëµã״̬ */

+    u32                  udDirection;        /**< ¶Ëµã´«Êä·½Ïò * @direction: true for TX, false for RX */

+    void                    *DriverData;        /**< Êý¾ÝÓÃÓÚ´«Êä,ºóÐøµ÷ÊÔ¿ÉÄÜ»áÓõ½*/

+    u32                  udInterval;         /**< ¶ËµãµÄInterval */

+    u32                  udBusySlot;         /**< ´¦ÓÚæ״̬TRB¸öÊý */

+    u32                  udFreeSlot;         /**< ´¦ÓÚ¿ÕÏÐ״̬TRB¸öÊý */

+    u32                  *pudAddrData;       /**< ĿǰÖ÷ÒªÊÇBULK´«ÊäÓÃÓÚ½ÓÊպͷ¢ËÍÊý¾ÝµÄµØÖ· */    

+    u8                   ucAddress;          /**< µØÖ· */

+    u32                  udFlags;            /**< ¶Ëµã±ê¼Ç */

+    u32                  udCurrentTrb;       /**< µ±Ç°TRB */

+    u8                   ucResTransIdx;      /**< ´«Êä×ÊÔ´Ë÷Òý */

+    u32                  udStreamCapable;    /**< ÊÇ·ñ¾ßÓÐÁ÷ÄÜÁ¦ */

+    F_USB_CB	             fnUsbCb;	    //¶Ëµã²Ù×÷Íê³ÉºóµÄ»Øµ÷º¯Êý

+

+}T_USB3Slave_Ep;

+#pragma pack () /*È¡Ïû¶ÔÆë*/

+/** struct dwc3 - representation of our controller */

+/** È«¾ÖdeviceÐÅÏ¢½á¹¹Ì壬ÓÃÓÚÈí¼þ */

+#pragma pack (4) /*Ö¸¶¨°´4×Ö½Ú¶ÔÆë*/

+typedef struct

+{

+

+    u32                   udRegs_base;                  /**< ¼Ç¼¼Ä´æÆ÷»ùÖ· */

+    E_USB3Slave_SpeedMode    eSpeedMode;                   /**< µ±Ç°É豸µÄËÙ¶È */

+    E_USB3Slave_Speed        eDeviceSpeedType;             /**< ËÙ¶ÈÀàÐÍ£¬¼æÈÝlinuxÇý¶¯Ëù×÷£¬¾ßÌåʹÓôýÒé */

+    T_USB3Slave_HWPARAMS     tHwParams;                    /**< ±£´æËùÓÐÓ²¼þ²ÎÊý */

+    u32                   udMode;                       /**< ±£´æ¿ØÖÆÆ÷µ±Ç°Ëù´¦Ä£Ê½ */

+    T_USB3Slave_EventBuf     *ptEvtBuffs;                /**< ±£´æevent */ 

+    u32                   udNumEvtBufs;          /**< ¼Ç¼evnet¸öÊý£¬´ÓÓ²¼þ²ÎÊýÖлñµÃ*/

+    T_USB3Slave_Ep           tEps[ENDPOINTS_NUM];          /**< ±£´æ¶ËµãÐÅÏ¢ */

+    u32                   udIsSelfPowered;             /**< ×Ô¹©µçture*/

+    u32                   udThreeStageSetup;          /**< Èý½×¶ÎÉèÖÃ*/

+    u32                   udEp0Bounced;                /**< bounce buffer for ep0 */

+    u32                   udEp0ExpectIn;              /**< true when we expect a DATA IN transfer */

+    u32                   udSetupPacketPending;       /**< true when there's a Setup Packet in FIFO. Workaround */

+    u32                   udDelayedStatus;             /**< ÑÓ³Ù״̬*/

+    u32                   udEventsequence;              /**< eventÐòºÅ */

+    E_USB3Slave_Ep0Next	     eEp0NextEvent;                /**< ָʾ¶ËµãµÄÏÂÒ»¸öEVENT */

+    E_USB3Slave_Ep0State     eEp0State;                    /**< ep0״̬*/

+    E_USB3Slave_ReqState     eDevState;                    /**< É豸״̬ */

+    u32                   udUSBSate;                    /**< ö¾Ù״̬ */

+/*ÒÔÏÂÊý¾Ý³ÉÔ±³¤¶ÈÉèÖòÎÕÕlinux 3.3.6ÖжÔusb3¿ØÖÆÆ÷µÄ³õʼº¯Êý*/

+    T_USB3Slave_CtrlReq	     *tCtrlReq;                     /**< ¿ØÖÆÇëÇó */

+    T_USB3Slave_TRBToHW	     *ptEp0TRB;                    /**< ep0 TRBÉèÖÃ*/

+    u8                    aucSetupBuf[2];              /**< ½¨Á¢buffer  δÓÃĿǰ */

+    u8                    ucSpeed;                      /**< ËÙ¶È */

+    u32                   *pudTxData;                   /**< Ö¸Ïò·¢Ë͵ÄÊý¾Ý´óС */

+}T_USB3Slave_SlaveObj;

+#pragma pack () /*È¡Ïû¶ÔÆë*/

+

+/** ¶¨ÒåSlaveObj ¶ÔÏóµÄÈ«¾Ö±äÁ¿*/

+

+/** DWC3 Features to be used as Driver Data ĿǰûÓÐÓõ½ÔÝʱ·ÅÔÚÕâÀï*/

+/*#define HAS_PERIPHERAL		   BIT(0)

+#define HAS_XHCI			       BIT(1)

+#define HAS_OTG			           BIT(3)*/

+#define DATA_32BIT_MASK            0xFFFFFFFF

+#define ADDRESS_MAX                127

+

+/* *INDENT-OFF* */

+#ifdef __cplusplus

+}

+#endif

+/* *INDENT-ON* */

+  

+#endif  /* __USB3_SLAVE_DRV_H */

+

+

+/** @} */