#define USBPORT_ENDPOINT_HALT 1
#define USBPORT_ENDPOINT_CONTROL 4
+/* Interrupt Endpoint Poll Interval */
+#define ENDPOINT_INTERRUPT_1ms 1
+#define ENDPOINT_INTERRUPT_2ms 2
+#define ENDPOINT_INTERRUPT_4ms 4
+#define ENDPOINT_INTERRUPT_8ms 8
+#define ENDPOINT_INTERRUPT_16ms 16
+#define ENDPOINT_INTERRUPT_32ms 32
+
+#define INTERRUPT_ENDPOINTs (ENDPOINT_INTERRUPT_32ms + \
+ ENDPOINT_INTERRUPT_16ms + \
+ ENDPOINT_INTERRUPT_8ms + \
+ ENDPOINT_INTERRUPT_4ms + \
+ ENDPOINT_INTERRUPT_2ms + \
+ ENDPOINT_INTERRUPT_1ms)
+
/* Types of resources. For USBPORT_RESOURCES::ResourcesTypes */
#define USBPORT_RESOURCES_PORT 1
#define USBPORT_RESOURCES_INTERRUPT 2
UCHAR Reserved3;
} USBPORT_RESOURCES, *PUSBPORT_RESOURCES;
-C_ASSERT(sizeof(USBPORT_RESOURCES) == 52);
+C_ASSERT(sizeof(USBPORT_RESOURCES) == 24 + 7 * sizeof(PVOID));
typedef ULONG MPSTATUS; // Miniport status
typedef ULONG RHSTATUS; // Roothub status
#define RH_STATUS_NO_CHANGES 1
#define RH_STATUS_UNSUCCESSFUL 2
-typedef USB_20_PORT_CHANGE USB_PORT_STATUS_CHANGE;
-
-typedef union _USBHUB_PORT_STATUS {
-struct {
- USB_PORT_STATUS UsbPortStatus;
- USB_PORT_STATUS_CHANGE UsbPortStatusChange;
- };
- ULONG AsULONG;
-} USBHUB_PORT_STATUS, *PUSBHUB_PORT_STATUS;
-
/* Additional USB Class Codes from USB.org */
-#define USBC_DEVICE_CLASS_AUDIO_VIDEO 0x10
-#define USBC_DEVICE_CLASS_BILLBOARD 0x11
#define USBC_DEVICE_CLASS_TYPE_C_BRIDGE 0x12
/* Miniport functions */
(NTAPI *PHCI_RH_GET_PORT_STATUS)(
PVOID,
USHORT,
- PUSBHUB_PORT_STATUS);
+ PUSB_PORT_STATUS_AND_CHANGE);
typedef MPSTATUS
(NTAPI *PHCI_RH_GET_HUB_STATUS)(
PVOID,
ULONG);
+#define USBPORT_INVALIDATE_CONTROLLER_RESET 1
+#define USBPORT_INVALIDATE_CONTROLLER_SURPRISE_REMOVE 2
+#define USBPORT_INVALIDATE_CONTROLLER_SOFT_INTERRUPT 3
+
typedef ULONG
(NTAPI *PUSBPORT_INVALIDATE_CONTROLLER)(
PVOID,
#define USB_MINIPORT_FLAGS_NO_DMA 0x0100
#define USB_MINIPORT_FLAGS_WAKE_SUPPORT 0x0200
+#define TOTAL_USB11_BUS_BANDWIDTH 12000
+#define TOTAL_USB20_BUS_BANDWIDTH 400000
+
typedef struct _USBPORT_REGISTRATION_PACKET {
ULONG MiniPortVersion;
ULONG MiniPortFlags;
ULONG Reserved5;
} USBPORT_REGISTRATION_PACKET, *PUSBPORT_REGISTRATION_PACKET;
+#define USB10_MINIPORT_INTERFACE_VERSION 100
+#define USB20_MINIPORT_INTERFACE_VERSION 200
+
typedef struct _USBPORT_MINIPORT_INTERFACE {
PDRIVER_OBJECT DriverObject;
LIST_ENTRY DriverLink;
USBPORT_REGISTRATION_PACKET Packet;
} USBPORT_MINIPORT_INTERFACE, *PUSBPORT_MINIPORT_INTERFACE;
-C_ASSERT(sizeof(USBPORT_MINIPORT_INTERFACE) == 336);
+C_ASSERT(sizeof(USBPORT_MINIPORT_INTERFACE) == 32 + 76 * sizeof(PVOID));
+#define USBPORT_TRANSFER_DIRECTION_OUT 1 // From host to device
typedef struct _USBPORT_ENDPOINT_PROPERTIES {
USHORT DeviceAddress;
USHORT EndpointAddress;
ULONG Reserved6;
} USBPORT_ENDPOINT_PROPERTIES, *PUSBPORT_ENDPOINT_PROPERTIES;
-C_ASSERT(sizeof(USBPORT_ENDPOINT_PROPERTIES) == 64);
+C_ASSERT(sizeof(USBPORT_ENDPOINT_PROPERTIES) == 48 + 4 * sizeof(PVOID));
typedef struct _USBPORT_SCATTER_GATHER_ELEMENT {
PHYSICAL_ADDRESS SgPhysicalAddress;
USBPORT_SCATTER_GATHER_ELEMENT SgElement[1];
} USBPORT_SCATTER_GATHER_LIST, *PUSBPORT_SCATTER_GATHER_LIST;
-C_ASSERT(sizeof(USBPORT_SCATTER_GATHER_LIST) == 40);
+C_ASSERT(sizeof(USBPORT_SCATTER_GATHER_LIST) == 24 + 4 * sizeof(PVOID));
typedef struct _USBPORT_TRANSFER_PARAMETERS {
ULONG TransferFlags;