ReactOS  0.4.15-dev-3177-gd6a0299
misc.c File Reference
#include "usbccgp.h"
#include <debug.h>
Include dependency graph for misc.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

NTSTATUS NTAPI USBSTOR_SyncForwardIrpCompletionRoutine (PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
 
NTSTATUS NTAPI USBCCGP_SyncForwardIrp (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 
NTSTATUS USBCCGP_SyncUrbRequest (IN PDEVICE_OBJECT DeviceObject, OUT PURB UrbRequest)
 
PVOID AllocateItem (IN POOL_TYPE PoolType, IN ULONG ItemSize)
 
VOID FreeItem (IN PVOID Item)
 
VOID DumpFunctionDescriptor (IN PUSBC_FUNCTION_DESCRIPTOR FunctionDescriptor, IN ULONG FunctionDescriptorCount)
 

Variables

IO_COMPLETION_ROUTINE SyncForwardIrpCompletionRoutine
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 14 of file misc.c.

Function Documentation

◆ AllocateItem()

PVOID AllocateItem ( IN POOL_TYPE  PoolType,
IN ULONG  ItemSize 
)

Definition at line 134 of file misc.c.

137 {
138  /* Allocate item */
140 
141  if (Item)
142  {
143  /* Zero item */
145  }
146 
147  /* Return element */
148  return Item;
149 }
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
static UCHAR ItemSize[4]
Definition: parser.c:16
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
#define USBCCPG_TAG
Definition: usbccgp.h:39
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
Definition: wdfdevice.h:3810
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

◆ DumpFunctionDescriptor()

VOID DumpFunctionDescriptor ( IN PUSBC_FUNCTION_DESCRIPTOR  FunctionDescriptor,
IN ULONG  FunctionDescriptorCount 
)

Definition at line 160 of file misc.c.

163 {
164  ULONG Index, SubIndex;
165 
166 
167  DPRINT("FunctionCount %lu\n", FunctionDescriptorCount);
168  for (Index = 0; Index < FunctionDescriptorCount; Index++)
169  {
170  DPRINT("Function %lu\n", Index);
171  DPRINT("FunctionNumber %lu\n", FunctionDescriptor[Index].FunctionNumber);
172  DPRINT("HardwareId %S\n", FunctionDescriptor[Index].HardwareId.Buffer);
173  DPRINT("CompatibleId %S\n", FunctionDescriptor[Index].CompatibleId.Buffer);
174  DPRINT("FunctionDescription %wZ\n", &FunctionDescriptor[Index].FunctionDescription);
175  DPRINT("NumInterfaces %lu\n", FunctionDescriptor[Index].NumberOfInterfaces);
176 
177  for(SubIndex = 0; SubIndex < FunctionDescriptor[Index].NumberOfInterfaces; SubIndex++)
178  {
179  DPRINT(" Index %lu Interface %p\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]);
180  DPRINT(" Index %lu Interface InterfaceNumber %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bInterfaceNumber);
181  DPRINT(" Index %lu Interface Alternate %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bAlternateSetting );
182  DPRINT(" Index %lu bLength %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bLength);
183  DPRINT(" Index %lu bDescriptorType %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bDescriptorType);
184  DPRINT(" Index %lu bInterfaceNumber %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bInterfaceNumber);
185  DPRINT(" Index %lu bAlternateSetting %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bAlternateSetting);
186  DPRINT(" Index %lu bNumEndpoints %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bNumEndpoints);
187  DPRINT(" Index %lu bInterfaceClass %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bInterfaceClass);
188  DPRINT(" Index %lu bInterfaceSubClass %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bInterfaceSubClass);
189  DPRINT(" Index %lu bInterfaceProtocol %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->bInterfaceProtocol);
190  DPRINT(" Index %lu iInterface %x\n", SubIndex, FunctionDescriptor[Index].InterfaceDescriptorList[SubIndex]->iInterface);
191  }
192  }
193 }
_In_ WDFCOLLECTION _In_ ULONG Index
unsigned int ULONG
Definition: retypes.h:1
#define DPRINT
Definition: sndvol32.h:71

Referenced by FDO_StartDevice().

◆ FreeItem()

VOID FreeItem ( IN PVOID  Item)

Definition at line 152 of file misc.c.

154 {
155  /* Free item */
157 }
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
#define USBCCPG_TAG
Definition: usbccgp.h:39
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099

◆ USBCCGP_SyncForwardIrp()

NTSTATUS NTAPI USBCCGP_SyncForwardIrp ( PDEVICE_OBJECT  DeviceObject,
PIRP  Irp 
)

Definition at line 36 of file misc.c.

39 {
40  KEVENT Event;
42 
43  /* Initialize event */
45 
46  /* Copy irp stack location */
48 
49  /* Set completion routine */
52  &Event,
53  TRUE,
54  TRUE,
55  TRUE);
56 
57  /* Call driver */
59 
60  /* Check if pending */
61  if (Status == STATUS_PENDING)
62  {
63  /* Wait for the request to finish */
65 
66  /* Copy status code */
67  Status = Irp->IoStatus.Status;
68  }
69 
70  /* Done */
71  return Status;
72 }
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
Definition: wait.c:416
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
Definition: irp.cpp:498
FORCEINLINE VOID IoCopyCurrentIrpStackLocationToNext(_Inout_ PIRP Irp)
Definition: iofuncs.h:2868
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
#define FALSE
Definition: types.h:117
_In_ PIRP Irp
Definition: csq.h:116
_In_ PVOID _In_ ULONG Event
Definition: iotypes.h:467
NTSTATUS NTAPI USBSTOR_SyncForwardIrpCompletionRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
Definition: misc.c:22
Status
Definition: gdiplustypes.h:24
#define STATUS_PENDING
Definition: ntstatus.h:82
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
#define NULL
Definition: types.h:112
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1218

Referenced by FDO_HandlePnp(), FDO_HandleResetCyclePort(), FDO_StartDevice(), and USBCCGP_PdoHandleQueryId().

◆ USBCCGP_SyncUrbRequest()

NTSTATUS USBCCGP_SyncUrbRequest ( IN PDEVICE_OBJECT  DeviceObject,
OUT PURB  UrbRequest 
)

Definition at line 75 of file misc.c.

78 {
79  PIRP Irp;
80  PIO_STACK_LOCATION IoStack;
81  KEVENT Event;
83 
84  /* Allocate irp */
85  Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
86  if (!Irp)
87  {
88  /* No memory */
90  }
91 
92  /* Initialize event */
94 
95  /* Get next stack location */
96  IoStack = IoGetNextIrpStackLocation(Irp);
97 
98  /* Initialize stack location */
100  IoStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
101  IoStack->Parameters.Others.Argument1 = (PVOID)UrbRequest;
102  IoStack->Parameters.DeviceIoControl.InputBufferLength = UrbRequest->UrbHeader.Length;
103  Irp->IoStatus.Status = STATUS_SUCCESS;
104 
105  /* Setup completion routine */
108  &Event,
109  TRUE,
110  TRUE,
111  TRUE);
112 
113  /* Call driver */
115 
116  /* Check if request is pending */
117  if (Status == STATUS_PENDING)
118  {
119  /* Wait for completion */
121 
122  /* Update status */
123  Status = Irp->IoStatus.Status;
124  }
125 
126  /* Free irp */
127  IoFreeIrp(Irp);
128 
129  /* Done */
130  return Status;
131 }
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define IOCTL_INTERNAL_USB_SUBMIT_URB
Definition: usbioctl.h:32
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
Definition: wait.c:416
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
Definition: irp.cpp:498
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
#define FALSE
Definition: types.h:117
_In_ PIRP Irp
Definition: csq.h:116
_In_ PVOID _In_ ULONG Event
Definition: iotypes.h:467
NTSTATUS NTAPI USBSTOR_SyncForwardIrpCompletionRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
Definition: misc.c:22
Status
Definition: gdiplustypes.h:24
#define STATUS_PENDING
Definition: ntstatus.h:82
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2695
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
#define NULL
Definition: types.h:112
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1218
VOID NTAPI IoFreeIrp(IN PIRP Irp)
Definition: irp.c:1666
static PVOID
Definition: misc.c:50
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
Definition: irp.c:615
#define STATUS_SUCCESS
Definition: shellext.h:65
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:3128

Referenced by FDO_CloseConfiguration(), USBCCGP_GetDescriptor(), USBCCGP_PDOSelectConfiguration(), USBCCGP_SelectConfiguration(), and USBCCGP_SelectInterface().

◆ USBSTOR_SyncForwardIrpCompletionRoutine()

NTSTATUS NTAPI USBSTOR_SyncForwardIrpCompletionRoutine ( PDEVICE_OBJECT  DeviceObject,
PIRP  Irp,
PVOID  Context 
)

Definition at line 22 of file misc.c.

26 {
27  if (Irp->PendingReturned)
28  {
30  }
32 }
#define STATUS_MORE_PROCESSING_REQUIRED
Definition: shellext.h:68
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
Definition: eventobj.c:159
#define FALSE
Definition: types.h:117
_In_ PIRP Irp
Definition: csq.h:116
#define IO_NO_INCREMENT
Definition: iotypes.h:598

Referenced by USBCCGP_SyncForwardIrp(), USBCCGP_SyncUrbRequest(), USBSTOR_SyncForwardIrp(), and USBSTOR_SyncUrbRequest().

Variable Documentation

◆ SyncForwardIrpCompletionRoutine

IO_COMPLETION_ROUTINE SyncForwardIrpCompletionRoutine

Definition at line 18 of file misc.c.