Sync with trunk head (r48786)
[reactos.git] / drivers / usb / usbhub / usbhub.h
index 0bfb63a..7b8c447 100644 (file)
-#include <debug.h>
-
 #include <ntddk.h>
+#include <hubbusif.h>
+#include <usbbusif.h>
 #include <usbioctl.h>
-
-#include "../miniport/usb_wrapper.h"
-#include "../usbport/hub.h"
+#include <usb.h>
+#include <debug.h>
+//BROKEN: #include <usbprotocoldefs.h>
 
 #define USB_HUB_TAG 'hbsu'
+#define USB_MAXCHILDREN 127
+
+/* Lifted from broken header above */
+#define C_HUB_LOCAL_POWER                    0
+#define C_HUB_OVER_CURRENT                   1
+#define PORT_CONNECTION                      0
+#define PORT_ENABLE                          1
+#define PORT_SUSPEND                         2
+#define PORT_OVER_CURRENT                    3
+#define PORT_RESET                           4
+#define PORT_POWER                           8
+#define PORT_LOW_SPEED                       9
+#define C_PORT_CONNECTION                    16
+#define C_PORT_ENABLE                        17
+#define C_PORT_SUSPEND                       18
+#define C_PORT_OVER_CURRENT                  19
+#define C_PORT_RESET                         20
+#define PORT_TEST                            21
+#define PORT_INDICATOR                       22
+
+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 *ActiveConfig;
+    USB_INTERFACE *ActiveInterface;
+    USB_CONFIGURATION **Configs;
+} USB_DEVICE, *PUSB_DEVICE;
+
+typedef struct _HUB_CHILDDEVICE_EXTENSION
+{
+    BOOLEAN IsFDO;
+    PDEVICE_OBJECT Parent;
+    PWCHAR DeviceId;          // REG_SZ
+    PWCHAR InstanceId;        // REG_SZ
+    PWCHAR HardwareIds;       // REG_MULTI_SZ
+    PWCHAR CompatibleIds;     // REG_MULTI_SZ
+    PWCHAR TextDescription;
+    UNICODE_STRING SymbolicLinkName;
+} HUB_CHILDDEVICE_EXTENSION, *PHUB_CHILDDEVICE_EXTENSION;
 
 typedef struct _HUB_DEVICE_EXTENSION
 {
-       BOOLEAN IsFDO;
-       struct usb_device* dev;
-       PDEVICE_OBJECT LowerDevice;
-
-       PDEVICE_OBJECT Children[USB_MAXCHILDREN];
-
-       /* Fields valid only when IsFDO == FALSE */
-       UNICODE_STRING DeviceId;          // REG_SZ
-       UNICODE_STRING InstanceId;        // REG_SZ
-       UNICODE_STRING HardwareIds;       // REG_MULTI_SZ
-       UNICODE_STRING CompatibleIds;     // REG_MULTI_SZ
-       UNICODE_STRING SymbolicLinkName;
+    BOOLEAN IsFDO;
+    USB_DEVICE* dev;
+    PDEVICE_OBJECT LowerDevice;
+    ULONG ChildCount;
+    PDEVICE_OBJECT Children[USB_MAXCHILDREN];
+
+    PUSB_DEVICE UsbChildren[USB_MAXCHILDREN];
+
+    PUSB_DEVICE RootHubUsbDevice;
+
+    PDEVICE_OBJECT RootHubPdo;
+    PDEVICE_OBJECT RootHubFdo;
+
+    ULONG HubCount;
+
+    USHORT PortStatus[256];
+
+    USB_BUS_INTERFACE_HUB_V5 HubInterface;
+    USB_BUS_INTERFACE_USBDI_V2 UsbDInterface;
+
+    USB_HUB_DESCRIPTOR HubDescriptor;
+    USB_DEVICE_DESCRIPTOR HubDeviceDescriptor;
+
+    USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor;
+    USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor;
+    USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor;
+
+    USB_EXTHUB_INFORMATION_0 UsbExtHubInfo;
+    USB_DEVICE_INFORMATION_0 DeviceInformation;
+
+    WORK_QUEUE_ITEM WorkItem;
+
+    USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+    USBD_PIPE_HANDLE PipeHandle;
+
+    UNICODE_STRING SymbolicLinkName;
 } HUB_DEVICE_EXTENSION, *PHUB_DEVICE_EXTENSION;
 
 /* createclose.c */
 NTSTATUS NTAPI
 UsbhubCreate(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 NTSTATUS NTAPI
 UsbhubClose(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 NTSTATUS NTAPI
 UsbhubCleanup(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 /* fdo.c */
 NTSTATUS NTAPI
 UsbhubPnpFdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 NTSTATUS
 UsbhubDeviceControlFdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 /* misc.c */
 NTSTATUS
 ForwardIrpAndWait(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 NTSTATUS NTAPI
 ForwardIrpAndForget(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 NTSTATUS
 UsbhubDuplicateUnicodeString(
-       OUT PUNICODE_STRING Destination,
-       IN PUNICODE_STRING Source,
-       IN POOL_TYPE PoolType);
+    OUT PUNICODE_STRING Destination,
+    IN PUNICODE_STRING Source,
+    IN POOL_TYPE PoolType);
 
 NTSTATUS
 UsbhubInitMultiSzString(
-       OUT PUNICODE_STRING Destination,
-       ... /* list of PCSZ */);
+    OUT PUNICODE_STRING Destination,
+    .../* list of PCSZ */);
 
 /* pdo.c */
 NTSTATUS NTAPI
 UsbhubPnpPdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 NTSTATUS
 UsbhubInternalDeviceControlPdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);