ReactOS 0.4.17-dev-1037-g720d112
ucxusbdevice.h File Reference
#include "ucxglobals.h"
#include "ucxfuncenum.h"
#include "ucxobjects.h"
Include dependency graph for ucxusbdevice.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _USBDEVICE_MGMT_HEADER
 
struct  _ADDRESS0_OWNERSHIP_ACQUIRE
 
struct  _USBDEVICE_ENABLE_FAILURE_FLAGS
 
struct  _USBDEVICE_ENABLE
 
struct  _USBDEVICE_RESET
 
struct  _USBDEVICE_PURGEIO
 
struct  _USBDEVICE_ABORTIO
 
struct  _USBDEVICE_STARTIO
 
struct  _USBDEVICE_TREE_PURGEIO
 
struct  _USBDEVICE_ADDRESS
 
struct  _USBDEVICE_UPDATE_FLAGS
 
struct  _USBDEVICE_UPDATE_FAILURE_FLAGS
 
struct  _USBDEVICE_UPDATE_20_HARDWARE_LPM_PARAMETERS
 
struct  _USBDEVICE_UPDATE
 
struct  _USBDEVICE_HUB_INFO
 
struct  _USBDEVICE_DISABLE
 
struct  _USB_DEVICE_PORT_PATH
 
struct  _UCXUSBDEVICE_INFO
 
struct  _UCX_USBDEVICE_CHARACTERISTIC_PATH_DELAY
 
struct  _UCX_USBDEVICE_CHARACTERISTIC
 
struct  _UCX_USBDEVICE_EVENT_CALLBACKS
 

Macros

#define UCX_MGMT_HEADER_MEMBER   USBDEVICE_MGMT_HEADER
 
#define UCX_ANONYMOUS_FLAGS
 
#define MAX_USB_DEVICE_DEPTH   6
 

Typedefs

typedef struct _USBDEVICE_MGMT_HEADER USBDEVICE_MGMT_HEADER
 
typedef struct _USBDEVICE_MGMT_HEADER * PUSBDEVICE_MGMT_HEADER
 
typedef struct _ADDRESS0_OWNERSHIP_ACQUIRE ADDRESS0_OWNERSHIP_ACQUIRE
 
typedef struct _ADDRESS0_OWNERSHIP_ACQUIRE * PADDRESS0_OWNERSHIP_ACQUIRE
 
typedef struct _USBDEVICE_ENABLE_FAILURE_FLAGS USBDEVICE_ENABLE_FAILURE_FLAGS
 
typedef struct _USBDEVICE_ENABLE USBDEVICE_ENABLE
 
typedef struct _USBDEVICE_ENABLE * PUSBDEVICE_ENABLE
 
typedef struct _USBDEVICE_RESET USBDEVICE_RESET
 
typedef struct _USBDEVICE_RESET * PUSBDEVICE_RESET
 
typedef struct _USBDEVICE_PURGEIO USBDEVICE_PURGEIO
 
typedef struct _USBDEVICE_PURGEIO * PUSBDEVICE_PURGEIO
 
typedef struct _USBDEVICE_ABORTIO USBDEVICE_ABORTIO
 
typedef struct _USBDEVICE_ABORTIO * PUSBDEVICE_ABORTIO
 
typedef struct _USBDEVICE_STARTIO USBDEVICE_STARTIO
 
typedef struct _USBDEVICE_STARTIO * PUSBDEVICE_STARTIO
 
typedef struct _USBDEVICE_TREE_PURGEIO USBDEVICE_TREE_PURGEIO
 
typedef struct _USBDEVICE_TREE_PURGEIO * PUSBDEVICE_TREE_PURGEIO
 
typedef struct _USBDEVICE_ADDRESS USBDEVICE_ADDRESS
 
typedef struct _USBDEVICE_ADDRESS * PUSBDEVICE_ADDRESS
 
typedef struct _USBDEVICE_UPDATE_FLAGS USBDEVICE_UPDATE_FLAGS
 
typedef struct _USBDEVICE_UPDATE_FAILURE_FLAGS USBDEVICE_UPDATE_FAILURE_FLAGS
 
typedef struct _USBDEVICE_UPDATE_20_HARDWARE_LPM_PARAMETERS USBDEVICE_UPDATE_20_HARDWARE_LPM_PARAMETERS
 
typedef struct _USBDEVICE_UPDATE USBDEVICE_UPDATE
 
typedef struct _USBDEVICE_UPDATE * PUSBDEVICE_UPDATE
 
typedef struct _USBDEVICE_HUB_INFO USBDEVICE_HUB_INFO
 
typedef struct _USBDEVICE_HUB_INFO * PUSBDEVICE_HUB_INFO
 
typedef enum _UCX_USBDEVICE_RECOVERY_ACTION UCX_USBDEVICE_RECOVERY_ACTION
 
typedef struct _USBDEVICE_DISABLE USBDEVICE_DISABLE
 
typedef struct _USBDEVICE_DISABLE * PUSBDEVICE_DISABLE
 
typedef struct _USB_DEVICE_PORT_PATH USB_DEVICE_PORT_PATH
 
typedef struct _USB_DEVICE_PORT_PATH * PUSB_DEVICE_PORT_PATH
 
typedef struct _UCXUSBDEVICE_INFO UCXUSBDEVICE_INFO
 
typedef struct _UCXUSBDEVICE_INFO * PUCXUSBDEVICE_INFO
 
typedef enum _UCX_USBDEVICE_CHARACTERISTIC_TYPE UCX_USBDEVICE_CHARACTERISTIC_TYPE
 
typedef struct _UCX_USBDEVICE_CHARACTERISTIC_PATH_DELAY UCX_USBDEVICE_CHARACTERISTIC_PATH_DELAY
 
typedef struct _UCX_USBDEVICE_CHARACTERISTIC_PATH_DELAY * PUCX_USBDEVICE_CHARACTERISTIC_PATH_DELAY
 
typedef struct _UCX_USBDEVICE_CHARACTERISTIC UCX_USBDEVICE_CHARACTERISTIC
 
typedef struct _UCX_USBDEVICE_CHARACTERISTIC * PUCX_USBDEVICE_CHARACTERISTIC
 
typedef _In_ WDFREQUEST Request
 
typedef EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE * PFN_UCX_USBDEVICE_ENDPOINTS_CONFIGURE
 
typedef EVT_UCX_USBDEVICE_ENABLE * PFN_UCX_USBDEVICE_ENABLE
 
typedef EVT_UCX_USBDEVICE_DISABLE * PFN_UCX_USBDEVICE_DISABLE
 
typedef EVT_UCX_USBDEVICE_RESET * PFN_UCX_USBDEVICE_RESET
 
typedef EVT_UCX_USBDEVICE_ADDRESS * PFN_UCX_USBDEVICE_ADDRESS
 
typedef EVT_UCX_USBDEVICE_UPDATE * PFN_UCX_USBDEVICE_UPDATE
 
typedef EVT_UCX_USBDEVICE_HUB_INFO * PFN_UCX_USBDEVICE_HUB_INFO
 
typedef _In_ UCXUSBDEVICE UcxUsbDevice
 
typedef _In_ UCXUSBDEVICE _In_ ULONG MaxPacketSize
 
typedef _In_ UCXUSBDEVICE _In_ ULONG _In_ PUCXENDPOINT_INIT UcxEndpointInit
 
typedef EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD * PFN_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD
 
typedef _In_ UCXUSBDEVICE _In_reads_bytes_(UsbEndpointDescriptorBufferLength) PUSB_ENDPOINT_DESCRIPTOR UsbEndpointDescriptor
 
typedef _In_ UCXUSBDEVICE _In_ ULONG UsbEndpointDescriptorBufferLength
 
typedef _In_ UCXUSBDEVICE _In_ ULONG _In_opt_ PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR SuperSpeedEndpointCompanionDescriptor
 
typedef EVT_UCX_USBDEVICE_ENDPOINT_ADD * PFN_UCX_USBDEVICE_ENDPOINT_ADD
 
typedef EVT_UCX_USBDEVICE_SUSPEND * PFN_UCX_USBDEVICE_SUSPEND
 
typedef EVT_UCX_USBDEVICE_RESUME * PFN_UCX_USBDEVICE_RESUME
 
typedef _In_ UCXUSBDEVICE _Inout_ PUCX_USBDEVICE_CHARACTERISTIC UcxUsbDeviceCharacteristic
 
typedef EVT_UCX_USBDEVICE_GET_CHARACTERISTIC * PFN_UCX_USBDEVICE_GET_CHARACTERISTIC
 
typedef struct _UCX_USBDEVICE_EVENT_CALLBACKS UCX_USBDEVICE_EVENT_CALLBACKS
 
typedef struct _UCX_USBDEVICE_EVENT_CALLBACKS * PUCX_USBDEVICE_EVENT_CALLBACKS
 
typedef PFN_UCX_USBDEVICE_ENDPOINTS_CONFIGURE PEVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE
 
typedef PFN_UCX_USBDEVICE_ENABLE PEVT_UCX_USBDEVICE_ENABLE
 
typedef PFN_UCX_USBDEVICE_DISABLE PEVT_UCX_USBDEVICE_DISABLE
 
typedef PFN_UCX_USBDEVICE_RESET PEVT_UCX_USBDEVICE_RESET
 
typedef PFN_UCX_USBDEVICE_ADDRESS PEVT_UCX_USBDEVICE_ADDRESS
 
typedef PFN_UCX_USBDEVICE_UPDATE PEVT_UCX_USBDEVICE_UPDATE
 
typedef PFN_UCX_USBDEVICE_HUB_INFO PEVT_UCX_USBDEVICE_HUB_INFO
 
typedef PFN_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD PEVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD
 
typedef PFN_UCX_USBDEVICE_ENDPOINT_ADD PEVT_UCX_USBDEVICE_ENDPOINT_ADD
 
typedef PFN_UCX_USBDEVICE_GET_CHARACTERISTIC PEVT_UCX_USBDEVICE_GET_CHARACTERISTIC
 
typedef _Must_inspect_result_ _IRQL_requires_(PASSIVE_LEVEL) NTSTATUS(NTAPI *PFN_UCXUSBDEVICECREATE) (_In_ PUCX_DRIVER_GLOBALS DriverGlobals
 
typedef _Must_inspect_result_ _In_ UCXCONTROLLER Controller
 
typedef _Must_inspect_result_ _In_ UCXCONTROLLER _Inout_ PUCXUSBDEVICE_INIT * UsbDeviceInit
 
typedef _Must_inspect_result_ _In_ UCXCONTROLLER _Inout_ PUCXUSBDEVICE_INIT _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
 
typedef _Must_inspect_result_ _In_ UCXCONTROLLER _Inout_ PUCXUSBDEVICE_INIT _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXUSBDEVICE * UsbDevice
 
typedef VOID(NTAPI * PFN_UCXUSBDEVICEINITSETEVENTCALLBACKS) (_In_ PUCX_DRIVER_GLOBALS DriverGlobals, _Inout_ PUCXUSBDEVICE_INIT UsbDeviceInit, _In_ PUCX_USBDEVICE_EVENT_CALLBACKS EventCallbacks)
 
typedef _In_ UCXUSBDEVICE _In_ ULONG Interface
 

Enumerations

enum  _UCX_USBDEVICE_RECOVERY_ACTION { UcxUsbDeviceRecoverActionNone = 0 , UcxUsbDeviceRecoverActionFunctionLevelDeviceReset = 1 , UcxUsbDeviceRecoverActionPlatformLevelDeviceReset = 2 }
 
enum  _UCX_USBDEVICE_CHARACTERISTIC_TYPE { UCX_USBDEVICE_CHARACTERISTIC_TYPE_PATH_DELAY = 1 }
 

Functions

 C_ASSERT (sizeof(USBDEVICE_UPDATE_FLAGS)==8)
 
 C_ASSERT (FIELD_OFFSET(USBDEVICE_UPDATE, DeviceDescriptor)==0x14)
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_ENABLE) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_ENABLE(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_DISABLE) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_DISABLE(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_RESET) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_RESET(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_ADDRESS) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_ADDRESS(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_UPDATE) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_UPDATE(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_HUB_INFO) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_HUB_INFO(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD) _IRQL_requires_same_ _IRQL_requires_(PASSIVE_LEVEL) NTSTATUS NTAPI EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_ENDPOINT_ADD) _IRQL_requires_same_ _IRQL_requires_(PASSIVE_LEVEL) NTSTATUS NTAPI EVT_UCX_USBDEVICE_ENDPOINT_ADD(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_SUSPEND) _IRQL_requires_same_ _IRQL_requires_(PASSIVE_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_SUSPEND(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_RESUME) _IRQL_requires_same_ _IRQL_requires_(PASSIVE_LEVEL) VOID NTAPI EVT_UCX_USBDEVICE_RESUME(_In_ UCXCONTROLLER UcxController
 
typedef _Function_class_ (EVT_UCX_USBDEVICE_GET_CHARACTERISTIC) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) NTSTATUS NTAPI EVT_UCX_USBDEVICE_GET_CHARACTERISTIC(_In_ UCXCONTROLLER UcxController
 
FORCEINLINE VOID NTAPI UCX_USBDEVICE_EVENT_CALLBACKS_INIT (_Out_ PUCX_USBDEVICE_EVENT_CALLBACKS Callbacks, _In_ PFN_UCX_USBDEVICE_ENDPOINTS_CONFIGURE EvtUsbDeviceEndpointsConfigure, _In_ PFN_UCX_USBDEVICE_ENABLE EvtUsbDeviceEnable, _In_ PFN_UCX_USBDEVICE_DISABLE EvtUsbDeviceDisable, _In_ PFN_UCX_USBDEVICE_RESET EvtUsbDeviceReset, _In_ PFN_UCX_USBDEVICE_ADDRESS EvtUsbDeviceAddress, _In_ PFN_UCX_USBDEVICE_UPDATE EvtUsbDeviceUpdate, _In_ PFN_UCX_USBDEVICE_HUB_INFO EvtUsbDeviceHubInfo, _In_ PFN_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD EvtUsbDeviceDefaultEndpointAdd, _In_ PFN_UCX_USBDEVICE_ENDPOINT_ADD EvtUsbDeviceEndpointAdd)
 
typedef _IRQL_requires_max_ (DISPATCH_LEVEL) VOID(NTAPI *PFN_UCXUSBDEVICEREMOTEWAKENOTIFICATION)(_In_ PUCX_DRIVER_GLOBALS DriverGlobals
 
return Create (UcxDriverGlobals, Controller, UsbDeviceInit, Attributes, UsbDevice)
 
FORCEINLINE VOID NTAPI UcxUsbDeviceInitSetEventCallbacks (_Inout_ PUCXUSBDEVICE_INIT UsbDeviceInit, _In_ PUCX_USBDEVICE_EVENT_CALLBACKS EventCallbacks)
 
 Notify (UcxDriverGlobals, UsbDevice, Interface)
 

Variables

 Create = UCX_BOUND_FUNCTION(PFN_UCXUSBDEVICECREATE, UcxUsbDeviceCreateTableIndex)
 
 Notify
 

Macro Definition Documentation

◆ MAX_USB_DEVICE_DEPTH

#define MAX_USB_DEVICE_DEPTH   6

Definition at line 163 of file ucxusbdevice.h.

◆ UCX_ANONYMOUS_FLAGS

#define UCX_ANONYMOUS_FLAGS

Definition at line 22 of file ucxusbdevice.h.

◆ UCX_MGMT_HEADER_MEMBER

#define UCX_MGMT_HEADER_MEMBER   USBDEVICE_MGMT_HEADER

Definition at line 21 of file ucxusbdevice.h.

Typedef Documentation

◆ _In_reads_bytes_

typedef _In_ UCXUSBDEVICE _In_reads_bytes_(UsbEndpointDescriptorBufferLength) PUSB_ENDPOINT_DESCRIPTOR UsbEndpointDescriptor

Definition at line 301 of file ucxusbdevice.h.

◆ _IRQL_requires_

typedef _Must_inspect_result_ _IRQL_requires_(PASSIVE_LEVEL) NTSTATUS(NTAPI *PFN_UCXUSBDEVICECREATE)(_In_ PUCX_DRIVER_GLOBALS DriverGlobals

Definition at line 406 of file ucxusbdevice.h.

◆ ADDRESS0_OWNERSHIP_ACQUIRE

◆ Attributes

◆ Controller

typedef _Must_inspect_result_ _In_ UCXCONTROLLER Controller

Definition at line 410 of file ucxusbdevice.h.

◆ Interface

_In_ WDFUSBINTERFACE Interface
Initial value:
{
PFN_UCXUSBDEVICEREMOTEWAKENOTIFICATION Notify
Notify
Definition: ucxusbdevice.h:471

Definition at line 428 of file ucxusbdevice.h.

◆ MaxPacketSize

typedef _In_ UCXUSBDEVICE _In_ ULONG MaxPacketSize

Definition at line 288 of file ucxusbdevice.h.

◆ PADDRESS0_OWNERSHIP_ACQUIRE

◆ PEVT_UCX_USBDEVICE_ADDRESS

◆ PEVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD

◆ PEVT_UCX_USBDEVICE_DISABLE

◆ PEVT_UCX_USBDEVICE_ENABLE

◆ PEVT_UCX_USBDEVICE_ENDPOINT_ADD

◆ PEVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE

◆ PEVT_UCX_USBDEVICE_GET_CHARACTERISTIC

◆ PEVT_UCX_USBDEVICE_HUB_INFO

◆ PEVT_UCX_USBDEVICE_RESET

◆ PEVT_UCX_USBDEVICE_UPDATE

◆ PFN_UCX_USBDEVICE_ADDRESS

typedef EVT_UCX_USBDEVICE_ADDRESS* PFN_UCX_USBDEVICE_ADDRESS

Definition at line 255 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD

typedef EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD* PFN_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD

Definition at line 290 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_DISABLE

typedef EVT_UCX_USBDEVICE_DISABLE* PFN_UCX_USBDEVICE_DISABLE

Definition at line 233 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_ENABLE

typedef EVT_UCX_USBDEVICE_ENABLE* PFN_UCX_USBDEVICE_ENABLE

Definition at line 222 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_ENDPOINT_ADD

typedef EVT_UCX_USBDEVICE_ENDPOINT_ADD* PFN_UCX_USBDEVICE_ENDPOINT_ADD

Definition at line 305 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_ENDPOINTS_CONFIGURE

typedef EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE* PFN_UCX_USBDEVICE_ENDPOINTS_CONFIGURE

Definition at line 211 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_GET_CHARACTERISTIC

typedef EVT_UCX_USBDEVICE_GET_CHARACTERISTIC* PFN_UCX_USBDEVICE_GET_CHARACTERISTIC

Definition at line 341 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_HUB_INFO

typedef EVT_UCX_USBDEVICE_HUB_INFO* PFN_UCX_USBDEVICE_HUB_INFO

Definition at line 277 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_RESET

typedef EVT_UCX_USBDEVICE_RESET* PFN_UCX_USBDEVICE_RESET

Definition at line 244 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_RESUME

typedef EVT_UCX_USBDEVICE_RESUME* PFN_UCX_USBDEVICE_RESUME

Definition at line 329 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_SUSPEND

typedef EVT_UCX_USBDEVICE_SUSPEND* PFN_UCX_USBDEVICE_SUSPEND

Definition at line 318 of file ucxusbdevice.h.

◆ PFN_UCX_USBDEVICE_UPDATE

typedef EVT_UCX_USBDEVICE_UPDATE* PFN_UCX_USBDEVICE_UPDATE

Definition at line 266 of file ucxusbdevice.h.

◆ PFN_UCXUSBDEVICEINITSETEVENTCALLBACKS

typedef VOID(NTAPI * PFN_UCXUSBDEVICEINITSETEVENTCALLBACKS) (_In_ PUCX_DRIVER_GLOBALS DriverGlobals, _Inout_ PUCXUSBDEVICE_INIT UsbDeviceInit, _In_ PUCX_USBDEVICE_EVENT_CALLBACKS EventCallbacks)

Definition at line 416 of file ucxusbdevice.h.

◆ PUCX_USBDEVICE_CHARACTERISTIC

◆ PUCX_USBDEVICE_CHARACTERISTIC_PATH_DELAY

◆ PUCX_USBDEVICE_EVENT_CALLBACKS

◆ PUCXUSBDEVICE_INFO

◆ PUSB_DEVICE_PORT_PATH

◆ PUSBDEVICE_ABORTIO

◆ PUSBDEVICE_ADDRESS

◆ PUSBDEVICE_DISABLE

◆ PUSBDEVICE_ENABLE

◆ PUSBDEVICE_HUB_INFO

◆ PUSBDEVICE_MGMT_HEADER

◆ PUSBDEVICE_PURGEIO

◆ PUSBDEVICE_RESET

◆ PUSBDEVICE_STARTIO

◆ PUSBDEVICE_TREE_PURGEIO

◆ PUSBDEVICE_UPDATE

◆ Request

typedef _In_ WDFREQUEST Request

Definition at line 210 of file ucxusbdevice.h.

◆ SuperSpeedEndpointCompanionDescriptor

◆ UCX_USBDEVICE_CHARACTERISTIC

◆ UCX_USBDEVICE_CHARACTERISTIC_PATH_DELAY

◆ UCX_USBDEVICE_CHARACTERISTIC_TYPE

◆ UCX_USBDEVICE_EVENT_CALLBACKS

◆ UCX_USBDEVICE_RECOVERY_ACTION

◆ UcxEndpointInit

◆ UcxUsbDevice

typedef _In_ UCXUSBDEVICE UcxUsbDevice

Definition at line 287 of file ucxusbdevice.h.

◆ UCXUSBDEVICE_INFO

◆ UcxUsbDeviceCharacteristic

Definition at line 340 of file ucxusbdevice.h.

◆ USB_DEVICE_PORT_PATH

◆ UsbDevice

Initial value:
{
PFN_UCXUSBDEVICECREATE Create
Create
Definition: ucxusbdevice.h:443

Definition at line 413 of file ucxusbdevice.h.

◆ USBDEVICE_ABORTIO

◆ USBDEVICE_ADDRESS

◆ USBDEVICE_DISABLE

◆ USBDEVICE_ENABLE

◆ USBDEVICE_ENABLE_FAILURE_FLAGS

◆ USBDEVICE_HUB_INFO

◆ USBDEVICE_MGMT_HEADER

◆ USBDEVICE_PURGEIO

◆ USBDEVICE_RESET

◆ USBDEVICE_STARTIO

◆ USBDEVICE_TREE_PURGEIO

◆ USBDEVICE_UPDATE

◆ USBDEVICE_UPDATE_20_HARDWARE_LPM_PARAMETERS

◆ USBDEVICE_UPDATE_FAILURE_FLAGS

◆ USBDEVICE_UPDATE_FLAGS

◆ UsbDeviceInit

◆ UsbEndpointDescriptorBufferLength

Definition at line 302 of file ucxusbdevice.h.

Enumeration Type Documentation

◆ _UCX_USBDEVICE_CHARACTERISTIC_TYPE

Enumerator
UCX_USBDEVICE_CHARACTERISTIC_TYPE_PATH_DELAY 

Definition at line 181 of file ucxusbdevice.h.

182{
@ UCX_USBDEVICE_CHARACTERISTIC_TYPE_PATH_DELAY
Definition: ucxusbdevice.h:183
enum _UCX_USBDEVICE_CHARACTERISTIC_TYPE UCX_USBDEVICE_CHARACTERISTIC_TYPE

◆ _UCX_USBDEVICE_RECOVERY_ACTION

Enumerator
UcxUsbDeviceRecoverActionNone 
UcxUsbDeviceRecoverActionFunctionLevelDeviceReset 
UcxUsbDeviceRecoverActionPlatformLevelDeviceReset 

Definition at line 148 of file ucxusbdevice.h.

149{
enum _UCX_USBDEVICE_RECOVERY_ACTION UCX_USBDEVICE_RECOVERY_ACTION
@ UcxUsbDeviceRecoverActionFunctionLevelDeviceReset
Definition: ucxusbdevice.h:151
@ UcxUsbDeviceRecoverActionNone
Definition: ucxusbdevice.h:150
@ UcxUsbDeviceRecoverActionPlatformLevelDeviceReset
Definition: ucxusbdevice.h:152

Function Documentation

◆ _Function_class_() [1/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_ADDRESS  )

◆ _Function_class_() [2/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD  )

◆ _Function_class_() [3/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_DISABLE  )

◆ _Function_class_() [4/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_ENABLE  )

◆ _Function_class_() [5/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_ENDPOINT_ADD  )

◆ _Function_class_() [6/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE  )

◆ _Function_class_() [7/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_GET_CHARACTERISTIC  )

◆ _Function_class_() [8/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_HUB_INFO  )

◆ _Function_class_() [9/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_RESET  )

◆ _Function_class_() [10/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_RESUME  )

◆ _Function_class_() [11/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_SUSPEND  )

◆ _Function_class_() [12/12]

typedef _Function_class_ ( EVT_UCX_USBDEVICE_UPDATE  )

◆ _IRQL_requires_max_()

typedef _IRQL_requires_max_ ( DISPATCH_LEVEL  )

Priority 1 to 3, forwarded to the HCD's EvtEndpointSetCharacteristic.

Definition at line 77 of file common.c.

3587{
3589 BOOLEAN requestSent = FALSE;
3590
3591 BOOLEAN shouldRetry = TRUE;
3592 PCDB cdb = (PCDB)DeviceExtension->PowerContext.Srb.Cdb;
3593 ULONG timeoutValue = DeviceExtension->TimeOutValue;
3594 ULONG retryCount = 1;
3595
3596 // reset some fields.
3597 DeviceExtension->PowerContext.RetryIntervalIn100ns = 0;
3598 status = PowerContextReuseRequest(DeviceExtension);
3599 RequestClearSendTime(DeviceExtension->PowerContext.PowerRequest);
3600
3601 if (!NT_SUCCESS(status))
3602 {
3603 return status;
3604 }
3605
3606 // set proper timeout value and max retry count.
3607 switch(DeviceExtension->PowerContext.PowerChangeState.PowerDown)
3608 {
3612 break;
3613
3615 // Case of issuing SYNC CACHE command. Do not use power irp timeout remaining time in this case
3616 // as we want to give best try on SYNC CACHE command.
3617 retryCount = MAXIMUM_RETRIES;
3618 timeoutValue = DeviceExtension->TimeOutValue;
3619 break;
3620
3622 {
3623 // Case of issuing STOP UNIT command
3624 // As "Imme" bit is set to '1', this command should be completed in short time.
3625 // This command is at low importance, failure of this command has very small impact.
3626 ULONG secondsRemaining = 0;
3627
3628#if (WINVER >= 0x0601)
3629 // this API is introduced in Windows7
3630 PoQueryWatchdogTime(DeviceExtension->LowerPdo, &secondsRemaining);
3631#endif
3632
3633 if (secondsRemaining == 0)
3634 {
3635 // not able to retrieve remaining time from PoQueryWatchdogTime API, use default values.
3636 retryCount = MAXIMUM_RETRIES;
3637 timeoutValue = SCSI_CDROM_TIMEOUT;
3638 }
3639 else
3640 {
3641 // plan to leave about 30 seconds to lower level drivers if possible.
3642 if (secondsRemaining >= 32)
3643 {
3644 retryCount = (secondsRemaining - 30)/SCSI_CDROM_TIMEOUT + 1;
3645 timeoutValue = SCSI_CDROM_TIMEOUT;
3646
3647 if (retryCount > MAXIMUM_RETRIES)
3648 {
3649 retryCount = MAXIMUM_RETRIES;
3650 }
3651
3652 if (retryCount == 1)
3653 {
3654 timeoutValue = secondsRemaining - 30;
3655 }
3656 }
3657 else
3658 {
3659 // issue the command with minimal timeout value and do not retry on it.
3660 retryCount = 1;
3661 timeoutValue = 2;
3662 }
3663 }
3664 }
3665 break;
3666 default:
3667 NT_ASSERT( FALSE );
3669 return status;
3670 }
3671
3672 DeviceExtension->PowerContext.RetryCount = retryCount;
3673
3674 // issue command.
3675 while (shouldRetry)
3676 {
3677
3678 // set SRB fields.
3679 DeviceExtension->PowerContext.Srb.SrbFlags = SRB_FLAGS_NO_DATA_TRANSFER |
3684
3685 DeviceExtension->PowerContext.Srb.Function = SRB_FUNCTION_EXECUTE_SCSI;
3686 DeviceExtension->PowerContext.Srb.TimeOutValue = timeoutValue;
3687
3688 if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceInitial)
3689 {
3690 DeviceExtension->PowerContext.Srb.Function = SRB_FUNCTION_LOCK_QUEUE;
3691 }
3692 else if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceLocked)
3693 {
3694 DeviceExtension->PowerContext.Srb.Function = SRB_FUNCTION_QUIESCE_DEVICE;
3695 }
3696 else if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceQuiesced)
3697 {
3698 // Case of issuing SYNC CACHE command.
3699 DeviceExtension->PowerContext.Srb.CdbLength = 10;
3700 cdb->SYNCHRONIZE_CACHE10.OperationCode = SCSIOP_SYNCHRONIZE_CACHE;
3701 }
3702 else if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceFlushed)
3703 {
3704 // Case of issuing STOP UNIT command.
3705 DeviceExtension->PowerContext.Srb.CdbLength = 6;
3706 cdb->START_STOP.OperationCode = SCSIOP_START_STOP_UNIT;
3707 cdb->START_STOP.Start = 0;
3708 cdb->START_STOP.Immediate = 1;
3709 }
3710 else if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceStopped)
3711 {
3712 DeviceExtension->PowerContext.Srb.Function = SRB_FUNCTION_UNLOCK_QUEUE;
3713 }
3714
3715 // Set up completion routine and context if requested
3717 {
3718 WdfRequestSetCompletionRoutine(DeviceExtension->PowerContext.PowerRequest,
3720 Context);
3721 }
3722
3723 status = RequestSend(DeviceExtension,
3724 DeviceExtension->PowerContext.PowerRequest,
3725 DeviceExtension->IoTarget,
3727 &requestSent);
3728
3729 if (requestSent)
3730 {
3731 if ((CompletionRoutine == NULL) &&
3732 (SRB_STATUS(DeviceExtension->PowerContext.Srb.SrbStatus) != SRB_STATUS_SUCCESS))
3733 {
3734 TracePrint((TRACE_LEVEL_ERROR,
3735 TRACE_FLAG_POWER,
3736 "%p\tError occured when issuing %s command to device. Srb %p, Status %x\n",
3737 DeviceExtension->PowerContext.PowerRequest,
3738 (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceQuiesced) ? "SYNC CACHE" : "STOP UNIT",
3739 &DeviceExtension->PowerContext.Srb,
3740 DeviceExtension->PowerContext.Srb.SrbStatus));
3741
3742 NT_ASSERT(!(TEST_FLAG(DeviceExtension->PowerContext.Srb.SrbStatus, SRB_STATUS_QUEUE_FROZEN)));
3743
3744 shouldRetry = RequestSenseInfoInterpret(DeviceExtension,
3745 DeviceExtension->PowerContext.PowerRequest,
3746 &(DeviceExtension->PowerContext.Srb),
3747 retryCount - DeviceExtension->PowerContext.RetryCount,
3748 &status,
3749 &(DeviceExtension->PowerContext.RetryIntervalIn100ns));
3750
3751 if (shouldRetry && (DeviceExtension->PowerContext.RetryCount-- == 0))
3752 {
3753 shouldRetry = FALSE;
3754 }
3755 }
3756 else
3757 {
3758 // succeeded, do not need to retry.
3759 shouldRetry = FALSE;
3760 }
3761
3762 }
3763 else
3764 {
3765 // request failed to be sent
3766 shouldRetry = FALSE;
3767 }
3768
3769 if (shouldRetry)
3770 {
3772 t.QuadPart = -DeviceExtension->PowerContext.RetryIntervalIn100ns;
3774
3775 status = PowerContextReuseRequest(DeviceExtension);
3776 if (!NT_SUCCESS(status))
3777 {
3778 shouldRetry = FALSE;
3779 }
3780 }
3781 }
3782
3783 if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceQuiesced)
3784 {
3785 // record SYNC CACHE command completion time stamp.
3786 KeQueryTickCount(&DeviceExtension->PowerContext.Step1CompleteTime);
3787 }
3788
3789 return status;
3790}
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
#define MAXIMUM_RETRIES
Definition: cdrom.h:124
#define SCSI_CDROM_TIMEOUT
Definition: cdrom.h:680
BOOLEAN RequestSenseInfoInterpret(_In_ PCDROM_DEVICE_EXTENSION DeviceExtension, _In_ WDFREQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb, _In_ ULONG RetriedCount, _Out_ NTSTATUS *Status, _Out_opt_ _Deref_out_range_(0, MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS) LONGLONG *RetryIntervalIn100ns)
Definition: sense.c:2467
#define TEST_FLAG(Flags, Bit)
Definition: cdrom.h:1495
@ PowerDownDeviceStopped
Definition: cdrom.h:412
@ PowerDownDeviceQuiesced
Definition: cdrom.h:410
@ PowerDownDeviceInitial
Definition: cdrom.h:408
@ PowerDownDeviceLocked
Definition: cdrom.h:409
@ PowerDownDeviceFlushed
Definition: cdrom.h:411
union _CDB * PCDB
#define SCSIOP_START_STOP_UNIT
Definition: cdrw_hw.h:897
#define SCSIOP_SYNCHRONIZE_CACHE
Definition: cdrw_hw.h:918
#define STATUS_NOT_IMPLEMENTED
Definition: d3dkmdt.h:42
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
NTSTATUS RequestSend(_In_ PCDROM_DEVICE_EXTENSION DeviceExtension, _In_ WDFREQUEST Request, _In_ WDFIOTARGET IoTarget, _In_ ULONG Flags, _Out_opt_ PBOOLEAN RequestSent)
Definition: common.c:3793
VOID RequestClearSendTime(_In_ WDFREQUEST Request)
Definition: common.c:111
#define SRB_FUNCTION_EXECUTE_SCSI
Definition: srb.h:315
#define SRB_FLAGS_NO_DATA_TRANSFER
Definition: srb.h:402
#define SRB_FUNCTION_LOCK_QUEUE
Definition: srb.h:332
#define SRB_FUNCTION_UNLOCK_QUEUE
Definition: srb.h:333
#define SRB_FLAGS_BYPASS_LOCKED_QUEUE
Definition: srb.h:410
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
Definition: srb.h:397
#define SRB_STATUS(Status)
Definition: srb.h:389
#define SRB_STATUS_QUEUE_FROZEN
Definition: srb.h:386
#define SRB_FLAGS_NO_QUEUE_FREEZE
Definition: srb.h:404
#define SRB_STATUS_SUCCESS
Definition: srb.h:341
#define KeDelayExecutionThread(mode, foo, t)
Definition: env_spec_w32.h:484
GLdouble GLdouble t
Definition: gl.h:2047
#define KernelMode
Definition: asm.h:38
#define SRB_FLAGS_D3_PROCESSING
Definition: srb.h:165
#define SRB_FUNCTION_QUIESCE_DEVICE
Definition: srb.h:99
#define KeQueryTickCount(CurrentCount)
Definition: ke.h:43
_In_ PVOID Context
Definition: storport.h:2269
#define TRACE_LEVEL_ERROR
Definition: storswtr.h:27
Definition: ps.c:97
uint32_t ULONG
Definition: typedefs.h:59
Definition: cdrw_hw.h:28
struct _CDB::_START_STOP START_STOP
struct _CDB::_SYNCHRONIZE_CACHE10 SYNCHRONIZE_CACHE10
@ WDF_REQUEST_SEND_OPTION_SYNCHRONOUS
Definition: wdfrequest.h:109
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine
Definition: wdfrequest.h:895
#define NT_ASSERT
Definition: rtlfuncs.h:3334

◆ C_ASSERT() [1/2]

◆ C_ASSERT() [2/2]

C_ASSERT ( sizeof(USBDEVICE_UPDATE_FLAGS)  = =8)

◆ Create()

◆ Notify()

Notify ( UcxDriverGlobals  ,
UsbDevice  ,
Interface   
)

◆ UCX_USBDEVICE_EVENT_CALLBACKS_INIT()

FORCEINLINE VOID NTAPI UCX_USBDEVICE_EVENT_CALLBACKS_INIT ( _Out_ PUCX_USBDEVICE_EVENT_CALLBACKS  Callbacks,
_In_ PFN_UCX_USBDEVICE_ENDPOINTS_CONFIGURE  EvtUsbDeviceEndpointsConfigure,
_In_ PFN_UCX_USBDEVICE_ENABLE  EvtUsbDeviceEnable,
_In_ PFN_UCX_USBDEVICE_DISABLE  EvtUsbDeviceDisable,
_In_ PFN_UCX_USBDEVICE_RESET  EvtUsbDeviceReset,
_In_ PFN_UCX_USBDEVICE_ADDRESS  EvtUsbDeviceAddress,
_In_ PFN_UCX_USBDEVICE_UPDATE  EvtUsbDeviceUpdate,
_In_ PFN_UCX_USBDEVICE_HUB_INFO  EvtUsbDeviceHubInfo,
_In_ PFN_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD  EvtUsbDeviceDefaultEndpointAdd,
_In_ PFN_UCX_USBDEVICE_ENDPOINT_ADD  EvtUsbDeviceEndpointAdd 
)

Fills in the required callbacks only; the optional hooks are set afterwards.

Definition at line 364 of file ucxusbdevice.h.

375{
377 Callbacks->Size = sizeof(*Callbacks);
378
379 Callbacks->EvtUsbDeviceEnable = EvtUsbDeviceEnable;
380 Callbacks->EvtUsbDeviceDisable = EvtUsbDeviceDisable;
381 Callbacks->EvtUsbDeviceReset = EvtUsbDeviceReset;
382 Callbacks->EvtUsbDeviceAddress = EvtUsbDeviceAddress;
383 Callbacks->EvtUsbDeviceUpdate = EvtUsbDeviceUpdate;
384 Callbacks->EvtUsbDeviceHubInfo = EvtUsbDeviceHubInfo;
385 Callbacks->EvtUsbDeviceEndpointsConfigure = EvtUsbDeviceEndpointsConfigure;
386 Callbacks->EvtUsbDeviceDefaultEndpointAdd = EvtUsbDeviceDefaultEndpointAdd;
387 Callbacks->EvtUsbDeviceEndpointAdd = EvtUsbDeviceEndpointAdd;
388}
const struct winhelp_callbacks Callbacks
Definition: callback.c:161
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

Referenced by XhciEvtControllerUsbDeviceAdd().

◆ UcxUsbDeviceInitSetEventCallbacks()

FORCEINLINE VOID NTAPI UcxUsbDeviceInitSetEventCallbacks ( _Inout_ PUCXUSBDEVICE_INIT  UsbDeviceInit,
_In_ PUCX_USBDEVICE_EVENT_CALLBACKS  EventCallbacks 
)

Definition at line 450 of file ucxusbdevice.h.

453{
455
458 SetCallbacks(UcxDriverGlobals, UsbDeviceInit, EventCallbacks);
459}
_In_ PUCXUSBDEVICE_INFO _In_ PUCXUSBDEVICE_INIT UsbDeviceInit
@ UcxUsbDeviceInitSetEventCallbacksTableIndex
Definition: ucxfuncenum.h:21
#define UCX_BOUND_FUNCTION(PfnType, Slot)
Definition: ucxfuncenum.h:40
PUCX_DRIVER_GLOBALS UcxDriverGlobals
Definition: ucxstub.c:32
VOID(NTAPI * PFN_UCXUSBDEVICEINITSETEVENTCALLBACKS)(_In_ PUCX_DRIVER_GLOBALS DriverGlobals, _Inout_ PUCXUSBDEVICE_INIT UsbDeviceInit, _In_ PUCX_USBDEVICE_EVENT_CALLBACKS EventCallbacks)
Definition: ucxusbdevice.h:417

Referenced by XhciEvtControllerUsbDeviceAdd().

Variable Documentation

◆ Create

Create = UCX_BOUND_FUNCTION(PFN_UCXUSBDEVICECREATE, UcxUsbDeviceCreateTableIndex)

Definition at line 443 of file ucxusbdevice.h.

◆ Notify

Notify
Initial value:
= UCX_BOUND_FUNCTION(PFN_UCXUSBDEVICEREMOTEWAKENOTIFICATION,
@ UcxUsbDeviceRemoteWakeNotificationTableIndex
Definition: ucxfuncenum.h:22

Definition at line 471 of file ucxusbdevice.h.