[FASTFAT] Implement write IOs defering.
[reactos.git] / drivers / usb / usbport / usbport.h
index 2f37634..7895b97 100644 (file)
 /* Device handle Flags (USBPORT_DEVICE_HANDLE) */
 #define DEVICE_HANDLE_FLAG_ROOTHUB     0x00000002
 #define DEVICE_HANDLE_FLAG_REMOVED     0x00000008
-#define DEVICE_HANDLE_FLAG_INITIALIZED 0x00000010
+#define DEVICE_HANDLE_FLAG_USB2HUB     0x00000010
 
 /* Endpoint Flags (USBPORT_ENDPOINT) */
 #define ENDPOINT_FLAG_DMA_TYPE      0x00000001
@@ -236,6 +236,7 @@ typedef struct _USBPORT_ENDPOINT {
   LIST_ENTRY FlushControllerLink;
   LIST_ENTRY FlushAbortLink;
   LIST_ENTRY TtLink;
+  LIST_ENTRY RebalanceLink;
 } USBPORT_ENDPOINT, *PUSBPORT_ENDPOINT;
 
 typedef struct _USBPORT_ISO_BLOCK *PUSBPORT_ISO_BLOCK;
@@ -401,7 +402,7 @@ typedef struct _USBPORT_DEVICE_EXTENSION {
 #if !defined(_M_X64)
 C_ASSERT(sizeof(USBPORT_DEVICE_EXTENSION) == 0x500);
 #else
-C_ASSERT(sizeof(USBPORT_DEVICE_EXTENSION) == 0x600);
+C_ASSERT(sizeof(USBPORT_DEVICE_EXTENSION) == 0x690);
 #endif
 
 typedef struct _USBPORT_RH_DESCRIPTORS {
@@ -450,6 +451,7 @@ typedef struct _TIMER_WORK_QUEUE_ITEM {
 #define USB2_FRAMES           32
 #define USB2_MICROFRAMES      8
 #define USB2_MAX_MICROFRAMES  (USB2_FRAMES * USB2_MICROFRAMES)
+#define USB2_PREV_MICROFRAME  0xFF
 
 #define USB2_MAX_MICROFRAME_ALLOCATION         7000 // bytes
 #define USB2_CONTROLLER_DELAY                  100
@@ -468,12 +470,23 @@ typedef struct _TIMER_WORK_QUEUE_ITEM {
 #define USB2_HS_ISOCHRONOUS_OUT_OVERHEAD       38
 #define USB2_HS_ISOCHRONOUS_IN_OVERHEAD        18
 
+#define USB2_HS_SS_INTERRUPT_OUT_OVERHEAD      58
+#define USB2_HS_CS_INTERRUPT_OUT_OVERHEAD      36
+#define USB2_HS_SS_INTERRUPT_IN_OVERHEAD       39
+#define USB2_HS_CS_INTERRUPT_IN_OVERHEAD       38
+
+#define USB2_HS_SS_ISOCHRONOUS_OUT_OVERHEAD    58
+#define USB2_HS_SS_ISOCHRONOUS_IN_OVERHEAD     39
+#define USB2_HS_CS_ISOCHRONOUS_IN_OVERHEAD     38
+
+#define USB2_BIT_STUFFING_OVERHEAD  (8 * (7/6)) // 7.1.9 Bit Stuffing
+
 typedef union _USB2_TT_ENDPOINT_PARAMS {
   struct {
     ULONG TransferType           : 4;
     ULONG Direction              : 1;
     USB_DEVICE_SPEED DeviceSpeed : 2;
-    ULONG EndpointMoved          : 1;
+    BOOL EndpointMoved           : 1;
     ULONG Reserved               : 24;
   };
   ULONG AsULONG;
@@ -498,6 +511,7 @@ typedef struct _USB2_TT_ENDPOINT {
   struct _USB2_TT_ENDPOINT * NextTtEndpoint;
   USB2_TT_ENDPOINT_PARAMS TtEndpointParams;
   USB2_TT_ENDPOINT_NUMS Nums;
+  BOOL IsPromoted;
   USHORT MaxPacketSize;
   USHORT PreviosPeriod;
   USHORT Period;
@@ -528,6 +542,8 @@ typedef struct _USB2_TT {
   ULONG TimeCS[USB2_FRAMES][USB2_MICROFRAMES];
 } USB2_TT, *PUSB2_TT;
 
+#define USB2_TT_EXTENSION_FLAG_DELETED  1
+
 typedef struct _USB2_TT_EXTENSION {
   PDEVICE_OBJECT RootHubPdo;
   ULONG Flags;
@@ -537,7 +553,7 @@ typedef struct _USB2_TT_EXTENSION {
   ULONG MinBandwidth;
   USHORT DeviceAddress;
   USHORT TtNumber;
-  LIST_ENTRY TtList;
+  LIST_ENTRY EndpointList;
   LIST_ENTRY Link;
   USB2_TT Tt;
 } USB2_TT_EXTENSION, *PUSB2_TT_EXTENSION;
@@ -549,6 +565,10 @@ typedef struct _USB2_HC_EXTENSION {
   USB2_TT HcTt;
 } USB2_HC_EXTENSION, *PUSB2_HC_EXTENSION;
 
+typedef struct _USB2_REBALANCE {
+  PUSB2_TT_ENDPOINT RebalanceEndpoint[USB2_FRAMES - 2];
+} USB2_REBALANCE, *PUSB2_REBALANCE;
+
 /* usbport.c */
 NTSTATUS
 NTAPI
@@ -1319,4 +1339,14 @@ NTAPI
 USB2_InitController(
   IN PUSB2_HC_EXTENSION HcExtension);
 
+VOID
+NTAPI
+USBPORT_DumpingEndpointProperties(
+  IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties);
+
+VOID
+NTAPI
+USBPORT_DumpingTtEndpoint(
+  IN PUSB2_TT_ENDPOINT TtEndpoint);
+
 #endif /* USBPORT_H__ */