Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

468 lines
24 KiB

/***************************************************************************
Copyright (c) 2001 Microsoft Corporation
Module Name:
USBUTIL.H
Abstract:
Public interface for generic USB routines - must be called at PASSIVE_LEVEL
Environment:
Kernel Mode Only
Notes:
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
PURPOSE.
Copyright (c) 2001 Microsoft Corporation. All Rights Reserved.
Revision History:
01/08/2001 : created
Authors:
Tom Green
****************************************************************************/
#ifndef __USBUTIL_H__
#define __USBUTIL_H__
//#include "intread.h"
#define USBWRAP_NOTIFICATION_READ_COMPLETE 0x01
#define USBWRAP_NOTIFICATION_READ_ERROR 0x02
#define USBWRAP_NOTIFICATION_READ_COMPLETE_DIRECT 0x04
#define USBWRAP_NOTIFICATION_BUFFER_CLIENT_FREE 0x10
#define PUMP_STOPPED 0x0
#define PUMP_STARTED 0x01
#ifndef PINGPONG_COUNT
#define PINGPONG_COUNT 3
#endif
#define USBInitializeBulkTransfers USBInitializeInterruptTransfers
#define USBStartBulkTransfers USBStartInterruptTransfers
#define USBStopBulkTransfers USBStopInterruptTransfers
#define USBReleaseBulkTransfers USBReleaseInterruptTransfers
#if DBG
#define DBG_USBUTIL_ERROR 0x0001
#define DBG_USBUTIL_ENTRY_EXIT 0x0002
#define DBG_USBUTIL_FATAL_ERROR 0x0004
#define DBG_USBUTIL_USB_ERROR 0x0008
#define DBG_USBUTIL_DEVICE_ERROR 0x0010
#define DBG_USBUTIL_PNP_ERROR 0x0020
#define DBG_USBUTIL_POWER_ERROR 0x0040
#define DBG_USBUTIL_OTHER_ERROR 0x0080
#define DBG_USBUTIL_TRACE 0x0100
extern ULONG USBUtil_DebugTraceLevel;
typedef
ULONG
(__cdecl *PUSB_WRAP_PRINT)(
PCH Format,
...
);
extern PUSB_WRAP_PRINT USBUtil_DbgPrint;
#endif // DBG
typedef enum _REQUEST_RECIPIENT
{
Device,
Interface,
Endpoint,
Other
} REQUEST_RECIPIENT;
// prototype for callback into client driver for completion of interrupt requests
typedef NTSTATUS (*INTERRUPT_CALLBACK)(IN PVOID Context,
IN PVOID Buffer,
ULONG BufferLength,
ULONG NotificationType,
OUT PBOOLEAN QueueData);
//typedef struct _USB_WRAPPER_PINGPONG *PUSB_WRAPPER_PINGPONG;
//typedef struct _INTERRUPT_READ_WRAPPER INTERRUPT_READ_WRAPPER;
typedef PVOID USB_WRAPPER_HANDLE;
// prototypes
#define USBCallSync(LowerDevObj,Urb,MillisecondsTimeout,RemoveLock) \
USBCallSyncEx(LowerDevObj,Urb,MillisecondsTimeout,RemoveLock, sizeof(IO_REMOVE_LOCK))
/************************************************************************/
/* USBCallSync */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Send URB down USB stack. Synchronous call. */
/* Caller is responsible for URB (allocating and freeing) */
/* */
/* Arguments: */
/* */
/* LowerDevObj - pointer to a device object */
/* Urb - pointer to URB */
/* MillisecondsTimeout - milliseconds to wait for completion */
/* RemoveLock - pointer to remove lock */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
NTSTATUS
USBCallSyncEx(IN PDEVICE_OBJECT LowerDevObj,
IN PURB Urb,
IN LONG MillisecondsTimeout,
IN PIO_REMOVE_LOCK RemoveLock,
IN ULONG RemLockSize);
#define USBVendorRequest(LowerDevObj, \
Recipient, \
Request, \
Value, \
Index, \
Buffer, \
BufferSize, \
Read, \
MillisecondsTimeout, \
RemoveLock) \
USBVendorRequestEx(LowerDevObj, \
Recipient, \
Request, \
Value, \
Index, \
Buffer, \
BufferSize, \
Read, \
MillisecondsTimeout, \
RemoveLock, \
sizeof(IO_REMOVE_LOCK))
/************************************************************************/
/* USBVendorRequest */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Issue USB vendor specific request */
/* */
/* Arguments: */
/* */
/* LowerDevObj - pointer to a device object */
/* Request - request field of vendor specific command */
/* Value - value field of vendor specific command */
/* Index - index field of vendor specific command */
/* Buffer - pointer to data buffer */
/* BufferSize - data buffer length */
/* Read - data direction flag */
/* Timeout - number of milliseconds to wait for completion */
/* RemoveLock - pointer to remove lock */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
NTSTATUS
USBVendorRequestEx(IN PDEVICE_OBJECT LowerDevObj,
IN REQUEST_RECIPIENT Recipient,
IN UCHAR Request,
IN USHORT Value,
IN USHORT Index,
IN OUT PVOID Buffer,
IN OUT PULONG BufferSize,
IN BOOLEAN Read,
IN LONG MillisecondsTimeout,
IN PIO_REMOVE_LOCK RemoveLock,
IN ULONG RemLockSize);
/************************************************************************/
/* USBClassRequest */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Issue USB Class specific request */
/* */
/* Arguments: */
/* */
/* LowerDevObj - pointer to a device object */
/* Request - request field of class specific command */
/* Value - value field of class specific command */
/* Index - index field of class specific command */
/* Buffer - pointer to data buffer */
/* BufferSize - data buffer length */
/* Read - data direction flag */
/* RemoveLock - pointer to remove lock */
/* Timeout - number of milliseconds to wait for completion */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
#define USBClassRequest(LowerDevObj, \
Recipient, \
Request, \
Value, \
Index, \
Buffer, \
BufferSize, \
Read, \
MillisecondsTimeout, \
RemoveLock) \
USBClassRequestEx(LowerDevObj, \
Recipient, \
Request, \
Value, \
Index, \
Buffer, \
BufferSize, \
Read, \
MillisecondsTimeout, \
RemoveLock, \
sizeof(IO_REMOVE_LOCK))
NTSTATUS
USBClassRequestEx(IN PDEVICE_OBJECT LowerDevObj,
IN REQUEST_RECIPIENT Recipient,
IN UCHAR Request,
IN USHORT Value,
IN USHORT Index,
IN OUT PVOID Buffer,
IN OUT PULONG BufferSize,
IN BOOLEAN Read,
IN LONG MillisecondsTimeout,
IN PIO_REMOVE_LOCK RemoveLock,
IN ULONG RemLockSize);
/************************************************************************/
/* USBInitializeInterruptTransfers */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Initialize interrupt read pipe */
/* */
/* Arguments: */
/* */
/* DeviceObject - pointer to the device object */
/* LowerDevObj - pointer to the lower device object */
/* Buffer - pointer to buffer for data from interrupt pipe */
/* BuffSize - size of buffer passed in */
/* InterruptPipe - pipe descriptor */
/* DriverContext - context passed to driver callback routine */
/* DriverCallback - driver routines called on completion */
/* RemoveLock - pointer to remove lock for device */
/* */
/* Return Value: */
/* */
/* USB_WRAPPER_HANDLE */
/* */
/************************************************************************/
#define USBInitializeInterruptTransfers(DeviceObject, \
LowerDevObj, \
MaxTransferSize, \
InterruptPipe, \
DriverContext, \
DriverCallback, \
NotificationTypes, \
RemoveLock) \
USBInitializeInterruptTransfersEx(DeviceObject, \
LowerDevObj, \
MaxTransferSize, \
InterruptPipe, \
DriverContext, \
DriverCallback, \
NotificationTypes, \
PINGPONG_COUNT, \
RemoveLock, \
sizeof(IO_REMOVE_LOCK))
USB_WRAPPER_HANDLE
USBInitializeInterruptTransfersEx(IN PDEVICE_OBJECT DeviceObject,
IN PDEVICE_OBJECT LowerDevObj,
IN ULONG MaxTransferSize,
IN PUSBD_PIPE_INFORMATION InterruptPipe,
IN PVOID DriverContext,
IN INTERRUPT_CALLBACK DriverCallback,
IN ULONG NotificationTypes,
IN ULONG PingPongCount,
IN PIO_REMOVE_LOCK RemoveLock,
IN ULONG RemLockSize);
/************************************************************************/
/* USBStartInterruptTransfers */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Start transfers on interrupt pipe */
/* */
/* Arguments: */
/* */
/* WrapperHandle - pointer to wrapper handle from Init call */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
NTSTATUS
USBStartInterruptTransfers(IN USB_WRAPPER_HANDLE WrapperHandle);
/************************************************************************/
/* USBStopInterruptTransfers */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Stop transfers on interrupt pipe and free resources */
/* */
/* Arguments: */
/* */
/* WrapperHandle - pointer to wrapper handle from Start call */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
NTSTATUS
USBStopInterruptTransfers(IN USB_WRAPPER_HANDLE WrapperHandle);
/************************************************************************/
/* USBStopInterruptTransfers */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Frees all resources allocated in */
/* USBInitializeInterruptTransfers */
/* */
/* Arguments: */
/* */
/* WrapperHandle - pointer to wrapper handle from Init call */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
NTSTATUS
USBReleaseInterruptTransfers(IN USB_WRAPPER_HANDLE WrapperHandle);
/************************************************************************/
/* USBStartSelectiveSuspend */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Start selective suspend support for device */
/* */
/* Arguments: */
/* */
/* LowerDevObj - pointer to device object */
/* */
/* Return Value: */
/* */
/* USB_WRAPPER_HANDLE */
/* */
/************************************************************************/
USB_WRAPPER_HANDLE
USBStartSelectiveSuspend(IN PDEVICE_OBJECT LowerDevObj);
/************************************************************************/
/* USBStopSelectiveSuspend */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Stop selective suspend support for device */
/* */
/* Arguments: */
/* */
/* WrapperHandle - wrapper handle returned by start routine */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
NTSTATUS
USBStopSelectiveSuspend(IN USB_WRAPPER_HANDLE WrapperHandle);
/************************************************************************/
/* USBRequestIdle */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Idle request for device */
/* */
/* Arguments: */
/* */
/* WrapperHandle - wrapper handle returned by start routine */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
NTSTATUS
USBRequestIdle(IN USB_WRAPPER_HANDLE WrapperHandle);
/************************************************************************/
/* USBRequestWake */
/************************************************************************/
/* */
/* Routine Description: */
/* */
/* Wake request for device */
/* */
/* Arguments: */
/* */
/* WrapperHandle - wrapper handle returned by start routine */
/* */
/* Return Value: */
/* */
/* NTSTATUS */
/* */
/************************************************************************/
NTSTATUS
USBRequestWake(IN USB_WRAPPER_HANDLE WrapperHandle);
#endif // __USBUTIL_H__