📄 usbohci.h
字号:
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 + -