- Sync with trunk up to r46941.
[reactos.git] / drivers / usb / usbehci / usbehci.h
index 13bfabb..56f03b5 100644 (file)
@@ -5,10 +5,12 @@
 #include <stdio.h>
 #define        NDEBUG
 #include <debug.h>
-#include "usbiffn.h"
+#include <hubbusif.h>
 #include <usbioctl.h>
 #include <usb.h>
 
+#define USB_POOL_TAG (ULONG)'UsbR'
+
 #define        DEVICEINTIALIZED                0x01
 #define        DEVICESTARTED                   0x02
 #define        DEVICEBUSY                      0x04
@@ -196,21 +198,46 @@ typedef struct _EHCI_SETUP_FORMAT
 
 typedef struct _STRING_DESCRIPTOR
 {
-  UCHAR bLength;               /* Size of this descriptor in bytes */
+  UCHAR bLength;            /* Size of this descriptor in bytes */
   UCHAR bDescriptorType;       /* STRING Descriptor Type */
-  UCHAR bString[0];            /* UNICODE encoded string */
+  UCHAR bString[0];         /* UNICODE encoded string */
 } STRING_DESCRIPTOR, *PSTRING_DESCRIPTOR;
 
+typedef struct _USB_ENDPOINT
+{
+    ULONG Flags;
+    LIST_ENTRY  UrbList;
+    struct _USB_INTERFACE *Interface;
+    USB_ENDPOINT_DESCRIPTOR EndPointDescriptor;
+} USB_ENDPOINT, *PUSB_ENDPOINT;
+
+typedef struct _USB_INTERFACE
+{
+    struct _USB_CONFIGURATION *Config;
+    USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
+    USB_ENDPOINT *EndPoints[];
+} USB_INTERFACE, *PUSB_INTERFACE;
+
+typedef struct _USB_CONFIGURATION
+{
+    struct _USB_DEVICE *Device;
+    USB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+    USB_INTERFACE *Interfaces[];
+} USB_CONFIGURATION, *PUSB_CONFIGURATION;
+
 typedef struct _USB_DEVICE
 {
     UCHAR Address;
     ULONG Port;
     PVOID ParentDevice;
     BOOLEAN IsHub;
+    USB_DEVICE_SPEED DeviceSpeed;
+    USB_DEVICE_TYPE DeviceType;
     USB_DEVICE_DESCRIPTOR DeviceDescriptor;
-    USB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
-    USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
-    USB_ENDPOINT_DESCRIPTOR EndPointDescriptor;
+    USB_CONFIGURATION *ActiveConfig;
+    USB_INTERFACE *ActiveInterface;
+    USB_CONFIGURATION **Configs;
+
 } USB_DEVICE, *PUSB_DEVICE;
 
 /* USBCMD register 32 bits */
@@ -380,11 +407,16 @@ typedef struct _PDO_DEVICE_EXTENSION
     PIRP CurrentIrp;
     HANDLE ThreadHandle;
     ULONG ChildDeviceCount;
-    BOOLEAN HaltUrbHandling;
+    BOOLEAN HaltQueue;
     PVOID CallbackContext;
-    PRH_INIT_CALLBACK CallbackRoutine;
+    RH_INIT_CALLBACK *CallbackRoutine;
+    USB_IDLE_CALLBACK IdleCallback;
+    PVOID IdleContext;
     ULONG NumberOfPorts;
     EHCIPORTS Ports[32];
+    KTIMER Timer;
+    KEVENT QueueDrainedEvent;
+    FAST_MUTEX ListLock;
 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
 
 typedef struct _WORKITEM_DATA
@@ -432,10 +464,7 @@ NTSTATUS NTAPI
 PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 
 BOOLEAN
-GetDeviceDescriptor(PFDO_DEVICE_EXTENSION DeviceExtension, UCHAR Index, PUSB_DEVICE_DESCRIPTOR OutBuffer, BOOLEAN Hub);
-
-BOOLEAN
-GetDeviceStringDescriptor(PFDO_DEVICE_EXTENSION DeviceExtension, UCHAR Index);
+ExecuteControlRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PUSB_DEFAULT_PIPE_SETUP_PACKET SetupPacket, UCHAR Address, ULONG Port, PVOID Buffer, ULONG BufferLength);
 
 VOID
 QueueURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp);