mirror of https://github.com/tongzx/nt5src
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.
129 lines
3.4 KiB
129 lines
3.4 KiB
/*++
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
USBDRIVR.H
|
|
|
|
Abstract:
|
|
|
|
This file defines kernel mode ioctls available to USB
|
|
drivers.
|
|
|
|
The IOCTLS are sent to the PDO enumerated for USB devices by
|
|
the USB 'enumerator' -- the usb hub driver.
|
|
|
|
Environment:
|
|
|
|
Kernel mode
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef __USBDRIVR_H__
|
|
#define __USBDRIVR_H__
|
|
|
|
|
|
#include "usbiodef.h"
|
|
#include "usb.h"
|
|
#include "usbdlib.h"
|
|
#include "usbbusif.h"
|
|
|
|
|
|
/*
|
|
Define the standard USB 'URB' IOCTL
|
|
|
|
IOCTL_INTERNAL_USB_SUBMIT_URB
|
|
|
|
This IOCTL is used by client drivers to submit URB (USB Request Blocks)
|
|
|
|
Parameters.Others.Argument1 = pointer to URB
|
|
|
|
*/
|
|
|
|
#define IOCTL_INTERNAL_USB_SUBMIT_URB CTL_CODE(FILE_DEVICE_USB, \
|
|
USB_SUBMIT_URB, \
|
|
METHOD_NEITHER, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
/* IOCTL_INTERNAL_USB_RESET_PORT
|
|
|
|
This IOCTL is used by kernel mode drivers to reset their
|
|
upstream port.
|
|
|
|
After a successful reset the device is re-configured to the
|
|
same configuration it was in before the reset. All pipe
|
|
handles, configuration handles and interface handles remain
|
|
valid.
|
|
|
|
*/
|
|
|
|
#define IOCTL_INTERNAL_USB_RESET_PORT CTL_CODE(FILE_DEVICE_USB, \
|
|
USB_RESET_PORT, \
|
|
METHOD_NEITHER, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
/* IOCTL_INTERNAL_USB_CYCLE_PORT
|
|
|
|
This IOCTL will simulate a plug/unplug on the drivers upstream
|
|
port. The device will be removed and re-added by PnP.
|
|
*/
|
|
|
|
#define IOCTL_INTERNAL_USB_CYCLE_PORT CTL_CODE(FILE_DEVICE_USB, \
|
|
USB_CYCLE_PORT, \
|
|
METHOD_NEITHER, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
|
|
/* IOCTL_INTERNAL_USB_GET_PORT_STATUS
|
|
|
|
This IOCTL returns the current status of the devices upstream
|
|
port.
|
|
|
|
Parameters.Others.Argument1 =
|
|
pointer to port status register (ULONG)
|
|
|
|
status bits are:
|
|
|
|
USBD_PORT_ENABLED
|
|
USBD_PORT_CONNECTED
|
|
|
|
*/
|
|
|
|
#define USBD_PORT_ENABLED 0x00000001
|
|
#define USBD_PORT_CONNECTED 0x00000002
|
|
|
|
|
|
#define IOCTL_INTERNAL_USB_GET_PORT_STATUS CTL_CODE(FILE_DEVICE_USB, \
|
|
USB_GET_PORT_STATUS, \
|
|
METHOD_NEITHER, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
/* IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION
|
|
|
|
This ioctl registers a device to receive notification when a specific
|
|
timeout has expired and it should now be suspended in order to conserve
|
|
power. If all devices on a hub are suspended, then the actual hub
|
|
can be suspended.
|
|
|
|
*/
|
|
|
|
typedef
|
|
VOID
|
|
(*USB_IDLE_CALLBACK)(
|
|
PVOID Context
|
|
);
|
|
|
|
typedef struct _USB_IDLE_CALLBACK_INFO {
|
|
USB_IDLE_CALLBACK IdleCallback;
|
|
PVOID IdleContext;
|
|
} USB_IDLE_CALLBACK_INFO, *PUSB_IDLE_CALLBACK_INFO;
|
|
|
|
#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION CTL_CODE(FILE_DEVICE_USB, \
|
|
USB_IDLE_NOTIFICATION, \
|
|
METHOD_NEITHER, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
#endif // __USBDRIVR_H__
|