Synchronize with trunk's revision r57629.
[reactos.git] / drivers / usb / usbhub / usbhub.h
index 0bfb63a..ab49ced 100644 (file)
-#include <debug.h>
+#pragma once
 
+#define NDEBUG
+#include <ntifs.h>
 #include <ntddk.h>
+#include <wdmguid.h>
+#include <hubbusif.h>
+#include <usbbusif.h>
 #include <usbioctl.h>
-
-#include "../miniport/usb_wrapper.h"
-#include "../usbport/hub.h"
+#include <usb.h>
+#include <stdio.h>
+#include <usbdlib.h>
+#include <debug.h>
+//BROKEN: #include <usbprotocoldefs.h>
+#include <pseh/pseh2.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 _PORT_STATUS_CHANGE
+{
+    USHORT Status;
+    USHORT Change;
+} PORT_STATUS_CHANGE, *PPORT_STATUS_CHANGE;
+
+typedef struct _WORK_ITEM_DATA
+{
+    WORK_QUEUE_ITEM WorkItem;
+    PVOID Context;
+} WORK_ITEM_DATA, *PWORK_ITEM_DATA;
+
+typedef struct
+{
+    BOOLEAN IsFDO;
+} COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
+
+typedef struct _HUB_CHILDDEVICE_EXTENSION
+{
+    COMMON_DEVICE_EXTENSION Common;
+    PDEVICE_OBJECT ParentDeviceObject;
+    PUSB_DEVICE_HANDLE UsbDeviceHandle;
+    ULONG PortNumber;
+    UNICODE_STRING usDeviceId;
+    UNICODE_STRING usInstanceId;
+    UNICODE_STRING usHardwareIds;
+    UNICODE_STRING usCompatibleIds;
+    UNICODE_STRING usTextDescription;
+    UNICODE_STRING usLocationInformation;
+    USB_DEVICE_DESCRIPTOR DeviceDesc;
+    PUSB_CONFIGURATION_DESCRIPTOR FullConfigDesc;
+    UNICODE_STRING SymbolicLinkName;
+    USB_BUS_INTERFACE_USBDI_V2 DeviceInterface;
+    USB_DEVICE_INFORMATION_0 DeviceInformation;
+} 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;
+    COMMON_DEVICE_EXTENSION Common;
+    PDEVICE_OBJECT LowerDeviceObject;
+    ULONG ChildCount;
+    PDEVICE_OBJECT ChildDeviceObject[USB_MAXCHILDREN];
+    PDEVICE_OBJECT RootHubPhysicalDeviceObject;
+    PDEVICE_OBJECT RootHubFunctionalDeviceObject;
+
+    ULONG NumberOfHubs;
+    KEVENT ResetComplete;
+
+    PORT_STATUS_CHANGE *PortStatusChange;
+    URB PendingSCEUrb;
+    PIRP PendingSCEIrp;
+
+    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;
+
+    USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+    USBD_PIPE_HANDLE PipeHandle;
+    PVOID RootHubHandle;
+    USB_BUS_INTERFACE_USBDI_V2 DeviceInterface;
+
+    UNICODE_STRING SymbolicLinkName;
+    ULONG InstanceCount;
+
 } HUB_DEVICE_EXTENSION, *PHUB_DEVICE_EXTENSION;
 
-/* createclose.c */
+// createclose.c
 NTSTATUS NTAPI
-UsbhubCreate(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+USBHUB_Create(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 NTSTATUS NTAPI
-UsbhubClose(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+USBHUB_Close(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
 NTSTATUS NTAPI
-UsbhubCleanup(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+USBHUB_Cleanup(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
-/* fdo.c */
-NTSTATUS NTAPI
-UsbhubPnpFdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+// fdo.c
+NTSTATUS
+USBHUB_FdoHandleDeviceControl(
+    PDEVICE_OBJECT DeviceObject,
+    PIRP Irp);
 
 NTSTATUS
-UsbhubDeviceControlFdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+USBHUB_FdoHandlePnp(
+    PDEVICE_OBJECT DeviceObject,
+    PIRP Irp);
 
-/* misc.c */
+// misc.c
 NTSTATUS
 ForwardIrpAndWait(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
 
-NTSTATUS NTAPI
+NTSTATUS
 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);
+SubmitRequestToRootHub(
+    IN PDEVICE_OBJECT RootHubDeviceObject,
+    IN ULONG IoControlCode,
+    OUT PVOID OutParameter1,
+    OUT PVOID OutParameter2);
 
 NTSTATUS
-UsbhubInitMultiSzString(
-       OUT PUNICODE_STRING Destination,
-       ... /* list of PCSZ */);
+FDO_QueryInterface(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN OUT PUSB_BUS_INTERFACE_USBDI_V2 Interface);
 
-/* pdo.c */
-NTSTATUS NTAPI
-UsbhubPnpPdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+// pdo.c
+NTSTATUS
+USBHUB_PdoHandlePnp(
+    PDEVICE_OBJECT DeviceObject,
+    PIRP Irp);
+
+NTSTATUS
+USBHUB_PdoHandleInternalDeviceControl(
+    PDEVICE_OBJECT DeviceObject,
+    PIRP Irp);
+
+VOID
+DumpDeviceDescriptor(
+    PUSB_DEVICE_DESCRIPTOR DeviceDescriptor);
+
+VOID
+DumpConfigurationDescriptor(
+    PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
+
+VOID
+DumpFullConfigurationDescriptor(
+    PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
+
+NTSTATUS
+GetPortStatusAndChange(
+    IN PDEVICE_OBJECT RootHubDeviceObject,
+    IN ULONG PortId,
+    OUT PPORT_STATUS_CHANGE StatusChange);
+
+// hub_fdo.c
 
 NTSTATUS
-UsbhubInternalDeviceControlPdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
+USBHUB_ParentFDOStartDevice(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp);
\ No newline at end of file