⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbohci.h

📁 SAMSUNG 5009的源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
    ULONG   Control;                                        /* Control Bits */
    ULONG   CBP;                                            /* Current Buffer Pointer */
    ULONG   NextTD;                                         /* Next TD */
    ULONG   BE;                                             /* Buffer End */
} HC_TRANSFER_DESCRIPTOR, *PHC_TRANSFER_DESCRIPTOR;

#define HC_TD_ALIGN                     16                  /* TD must be aligned to a 16-byte boundary */

#define HC_TD_R                         0x00040000L         /* Buffer Rounding */
#define HC_TD_DP_MASK                   0x00180000L         /* Direction / PID */
#define   HC_TD_DP_SETUP                0x00000000L         /* SETUP */
#define   HC_TD_DP_OUT                  0x00080000L         /* OUT */
#define   HC_TD_DP_IN                   0x00100000L         /* IN */
#define HC_TD_DI_MASK                   0x00E00000L         /* Delay Interrupt */
#define HC_TD_DI_SHIFT                  21
#define HC_TD_T_MASK                    0x03000000L         /* Data Toggle */
#define   HC_TD_T_TOGGLE                0x00000000L         /* Toggle from ED's Toggle Carry */
#define   HC_TD_T_DATA0                 0x02000000L         /* Data 0 */
#define   HC_TD_T_DATA1                 0x03000000L         /* Data 1 */
#define HC_TD_EC_MASK                   0x0C000000L         /* Error Count */
#define HC_TD_EC_SHIFT                  26
#define HC_TD_CC_MASK                   0xF0000000L         /* Condition Code */
#define HC_TD_CC_SHIFT                  28

/* HC Isochronous Transfer Descriptor */

typedef struct _HC_ISO_TRANSFER_DESCRIPTOR {
    ULONG   Control;                                        /* Control Bits */
    ULONG   BP0;                                            /* Buffer Page 0 */
    ULONG   NextTD;                                         /* Next TD */
    ULONG   BE;                                             /* Buffer End */
    USHORT  PSW0;                                           /* Packet Status Word 0 */
    USHORT  PSW1;                                           /* Packet Status Word 1 */
    USHORT  PSW2;                                           /* Packet Status Word 2 */
    USHORT  PSW3;                                           /* Packet Status Word 3 */
    USHORT  PSW4;                                           /* Packet Status Word 4 */
    USHORT  PSW5;                                           /* Packet Status Word 5 */
    USHORT  PSW6;                                           /* Packet Status Word 6 */
    USHORT  PSW7;                                           /* Packet Status Word 7 */
} HC_ISO_TRANSFER_DESCRIPTOR, *PHC_ISO_TRANSFER_DESCRIPTOR;

#define HC_ITD_ALIGN                    32                  /* ITD must be aligned to a 32-byte boundary */

#define HC_ISO_TD_SF_MASK               0x0000FFFFL         /* Starting Frame */
#define HC_ISO_TD_DI_MASK               0x00E00000L         /* Delay Interrupt  */
#define HC_ISO_TD_DI_SHIFT              21
#define HC_ISO_TD_FC_MASK               0x07000000L         /* Frame Count */
#define HC_ISO_TD_FC_SHIFT              24
#define HC_ISO_TD_CC_MASK               0xF0000000L         /* Condition Code */
#define HC_ISO_TD_CC_SHIFT              28

#define HC_ISO_TD_PSW_SIZE_MASK         0x03FF              /* Size of Packet */
#define HC_ISO_TD_PSW_CC_MASK           0xF000              /* Condition Code */
#define HC_ISO_TD_PSW_CC_SHIFT          12

/* Transfer Completion Codes */

#define HC_TD_CC_NOERROR                0x00000000L
#define HC_TD_CC_CRC                    0x10000000L
#define HC_TD_CC_BITSTUFFING            0x20000000L
#define HC_TD_CC_DATATOGGLEMISMATCH     0x30000000L
#define HC_TD_CC_STALL                  0x40000000L
#define HC_TD_CC_DEVNOTRESPONDING       0x50000000L
#define HC_TD_CC_PIDCHECKFAILURE        0x60000000L
#define HC_TD_CC_UNEXPECTEDPID          0x70000000L
#define HC_TD_CC_DATAOVERRUN            0x80000000L
#define HC_TD_CC_DATAUNDERRUN           0x90000000L
#define HC_TD_CC_BUFFEROVERRUN          0xC0000000L
#define HC_TD_CC_BUFFERUNDERRUN         0xD0000000L
#define HC_TD_CC_NOTACCESSED            0xF0000000L

#define HC_TD_MAX_BUFFER_SIZE           8192

/* Host Controller Communications Area Format */

typedef struct _HCCA_BLOCK {
    ULONG   InterruptTable[32];                             /* Pointer to the Interrupt ED */
    ULONG   FrameNumber;                                    /* Current Frame Number */
    ULONG   DoneHead;                                       /* Done Head */
#define HC_HCCA_DH_UNMASKED             0x01                /* Unmasked IST was set */
    UCHAR   bReserved[120];                                 /* Reserved */
} HCCA_BLOCK, *PHCCA_BLOCK;

#define HC_HCCA_ALIGN                   256                 /* HCCA must be aligned to a 256-byte boundary */

/* Interrupt List Scheduling List. */
#define ED_INTERRUPT_1ms                0
#define ED_INTERRUPT_2ms                1
#define ED_INTERRUPT_4ms                3
#define ED_INTERRUPT_8ms                7
#define ED_INTERRUPT_16ms               15
#define ED_INTERRUPT_32ms               31

/* Number of descriptors */
#define NUM_HCD_EDS                     8
#define NUM_HCD_TDS                     (2 + 8)
#define NUM_HCD_ITDS                    4

/* TD flags */
#define HCD_TD_SHORT_TRANSFER_OK        0x00000001          /* a short transfer is not an error condition */
#define HCD_TD_START_ISO_TRANSFER_ASAP  0x00000002          /* submit the iso transfer on the next frame */

/* HCD Endpoint Descriptor */

typedef struct _HCD_ENDPOINT_DESCRIPTOR {
    LIST_ENTRY                  Link;
    PUSB_ENDPOINT_DESCRIPTOR    UsbED;
    ULONG                       StartFrame;
    UCHAR                       Toggle;
    UCHAR                       Reserved[15];
    HC_ENDPOINT_DESCRIPTOR      HcED;
} HCD_ENDPOINT_DESCRIPTOR, *PHCD_ENDPOINT_DESCRIPTOR;

#define HCD_ED_FROM_LIST(_Entry)        ((PHCD_ENDPOINT_DESCRIPTOR)(_Entry))
#define HCD_ED_FROM_HC_ED(_HcED)        ((PHCD_ENDPOINT_DESCRIPTOR)(((PUCHAR)(_HcED)) - (PUCHAR)offsetof(HCD_ENDPOINT_DESCRIPTOR, HcED)))

/* HCD Transfer Descriptor */

typedef struct _HCD_TRANSFER_DESCRIPTOR {
    LIST_ENTRY                  Link;
    PHCD_ENDPOINT_DESCRIPTOR    HcdED;
    ULONG                       BS;
    UINT                        Length;
    UCHAR                       Flags;
    UCHAR                       Done;
#if     (SIZE_OF_INT == 2)
    UCHAR                       Reserved[12];
#else
    UCHAR                       Reserved[10];
#endif
    HC_TRANSFER_DESCRIPTOR      HcTD;
} HCD_TRANSFER_DESCRIPTOR, *PHCD_TRANSFER_DESCRIPTOR;

#define HCD_TD_FROM_LIST(_Entry)        ((PHCD_TRANSFER_DESCRIPTOR)(_Entry))
#define HCD_TD_FROM_HC_TD(_HcTD)        ((PHCD_TRANSFER_DESCRIPTOR)(((PUCHAR)(_HcTD)) - (PUCHAR)offsetof(HCD_TRANSFER_DESCRIPTOR, HcTD)))

/* HCD Isochronous Transfer Descriptor */

typedef struct _HCD_ISO_TRANSFER_DESCRIPTOR {
    LIST_ENTRY                  Link;
    PHCD_ENDPOINT_DESCRIPTOR    HcdED;
    ULONG                       BS;
    UINT                        Length;
    UCHAR                       Flags;
    UCHAR                       Done;
#if     (SIZE_OF_INT == 2)
    UCHAR                       Reserved[12];
#else
    UCHAR                       Reserved[10];
#endif
    HC_ISO_TRANSFER_DESCRIPTOR  HcITD;
} HCD_ISO_TRANSFER_DESCRIPTOR, *PHCD_ISO_TRANSFER_DESCRIPTOR;

#define HCD_ITD_FROM_LIST(_Entry)       ((PHCD_ISO_TRANSFER_DESCRIPTOR)(_Entry))
#define HCD_ITD_FROM_HC_ITD(_HcITD)     ((PHCD_ISO_TRANSFER_DESCRIPTOR)(((PUCHAR)(_HcITD)) - (PUCHAR)offsetof(HCD_ISO_TRANSFER_DESCRIPTOR, HcITD)))

/* HCD Device Data */

typedef struct _HCD_DEVICE_DATA {
    PHCCA_BLOCK                 HCCA;
    LIST_ENTRY                  FreeED;
    LIST_ENTRY                  FreeTD;
    LIST_ENTRY                  FreeITD;
    LIST_ENTRY                  PendingURB;
    PHCD_ENDPOINT_DESCRIPTOR    InterruptEDs[ED_INTERRUPT_32ms];
} HCD_DEVICE_DATA, *PHCD_DEVICE_DATA;


/* Function Prototypes */

#if defined(__STDC__) || defined(__cplusplus)

IMPORT int ohciInit(VOID);
IMPORT VOID ohciReset(VOID);
IMPORT VOID ohciInt(VOID);
IMPORT VOID ohciPolling(VOID);
IMPORT PVOID ohciOpenPipe(UCHAR address, UCHAR low, PUSB_ENDPOINT_DESCRIPTOR UsbED);
IMPORT VOID ohciClosePipe(PVOID hpipe);
IMPORT VOID ohciResetPipe(PVOID hpipe);
IMPORT VOID ohciSubmitUrb(PURB purb);

#else  /* defined(__STDC__) || defined(__cplusplus) */

IMPORT int ohciInit();
IMPORT VOID ohciReset();
IMPORT VOID ohciInt();
IMPORT VOID ohciPolling();
IMPORT PVOID ohciOpenPipe();
IMPORT VOID ohciClosePipe();
IMPORT VOID ohciResetPipe();
IMPORT VOID ohciSubmitUrb();

#endif  /* defined(__STDC__) || defined(__cplusplus) */


#ifdef __cplusplus
}
#endif


#endif  /* __INCusbohcih */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -