X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=drivers%2Fusb%2Fusbhub%2Fusbhub.h;h=ab49ced14871daad1149327601acf0b91aa6be28;hp=0bfb63ad14f90c000d7ffc00372d24619422db13;hb=43c7fc0c8d67f5c3bb0ceb5bc877192b5e7fcdc3;hpb=52e83d06d9f0704ab36da15d7dbdb1bc410a303f;ds=sidebyside diff --git a/drivers/usb/usbhub/usbhub.h b/drivers/usb/usbhub/usbhub.h index 0bfb63ad14f..ab49ced1487 100644 --- a/drivers/usb/usbhub/usbhub.h +++ b/drivers/usb/usbhub/usbhub.h @@ -1,85 +1,196 @@ -#include +#pragma once +#define NDEBUG +#include #include +#include +#include +#include #include - -#include "../miniport/usb_wrapper.h" -#include "../usbport/hub.h" +#include +#include +#include +#include +//BROKEN: #include +#include #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