mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 00:43:21 +00:00
80c665d2ac
- Remove PDO from pdo list when it is destroyed - Handle IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_STOP_DEVICE, IRP_MN_QUERY_STOP_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE [HIDUSB] - Add driver unload routine [MOUHID] - Wait for completion of pending irp [USBHUB] - Remove pdo from PDO list - Handle IRP_MN_QUERY_DEVICE_RELATIONS - Add stub driver unload routine [USBOHCI] - handle IRP_MN_REMOVE for FDO - remove ASSERT svn path=/branches/usb-bringup-trunk/; revision=55411
203 lines
3.4 KiB
C
203 lines
3.4 KiB
C
#pragma once
|
|
|
|
#define _HIDPI_NO_FUNCTION_MACROS_
|
|
#define NDEBUG
|
|
#include <ntddk.h>
|
|
#include <initguid.h>
|
|
#include <hidport.h>
|
|
#include <hidpddi.h>
|
|
#include <stdio.h>
|
|
#include <wdmguid.h>
|
|
#include <debug.h>
|
|
|
|
typedef struct
|
|
{
|
|
PDRIVER_OBJECT DriverObject;
|
|
ULONG DeviceExtensionSize;
|
|
BOOLEAN DevicesArePolled;
|
|
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
|
|
PDRIVER_ADD_DEVICE AddDevice;
|
|
PDRIVER_UNLOAD DriverUnload;
|
|
KSPIN_LOCK Lock;
|
|
|
|
}HIDCLASS_DRIVER_EXTENSION, *PHIDCLASS_DRIVER_EXTENSION;
|
|
|
|
typedef struct
|
|
{
|
|
//
|
|
// hid device extension
|
|
//
|
|
HID_DEVICE_EXTENSION HidDeviceExtension;
|
|
|
|
//
|
|
// if it is a pdo
|
|
//
|
|
BOOLEAN IsFDO;
|
|
|
|
//
|
|
// driver extension
|
|
//
|
|
PHIDCLASS_DRIVER_EXTENSION DriverExtension;
|
|
|
|
//
|
|
// device description
|
|
//
|
|
HIDP_DEVICE_DESC DeviceDescription;
|
|
|
|
//
|
|
// hid attributes
|
|
//
|
|
HID_DEVICE_ATTRIBUTES Attributes;
|
|
|
|
}HIDCLASS_COMMON_DEVICE_EXTENSION, *PHIDCLASS_COMMON_DEVICE_EXTENSION;
|
|
|
|
typedef struct
|
|
{
|
|
//
|
|
// parts shared by fdo and pdo
|
|
//
|
|
HIDCLASS_COMMON_DEVICE_EXTENSION Common;
|
|
|
|
//
|
|
// device capabilities
|
|
//
|
|
DEVICE_CAPABILITIES Capabilities;
|
|
|
|
//
|
|
// hid descriptor
|
|
//
|
|
HID_DESCRIPTOR HidDescriptor;
|
|
|
|
//
|
|
// report descriptor
|
|
//
|
|
PUCHAR ReportDescriptor;
|
|
|
|
//
|
|
// device relations
|
|
//
|
|
PDEVICE_RELATIONS DeviceRelations;
|
|
|
|
}HIDCLASS_FDO_EXTENSION, *PHIDCLASS_FDO_EXTENSION;
|
|
|
|
typedef struct
|
|
{
|
|
//
|
|
// parts shared by fdo and pdo
|
|
//
|
|
HIDCLASS_COMMON_DEVICE_EXTENSION Common;
|
|
|
|
//
|
|
// device capabilities
|
|
//
|
|
DEVICE_CAPABILITIES Capabilities;
|
|
|
|
//
|
|
// collection index
|
|
//
|
|
ULONG CollectionNumber;
|
|
|
|
//
|
|
// device interface
|
|
//
|
|
UNICODE_STRING DeviceInterface;
|
|
|
|
//
|
|
// FDO device object
|
|
//
|
|
PDEVICE_OBJECT FDODeviceObject;
|
|
|
|
//
|
|
// fdo device extension
|
|
//
|
|
PHIDCLASS_FDO_EXTENSION FDODeviceExtension;
|
|
|
|
}HIDCLASS_PDO_DEVICE_EXTENSION, *PHIDCLASS_PDO_DEVICE_EXTENSION;
|
|
|
|
typedef struct __HIDCLASS_FILEOP_CONTEXT__
|
|
{
|
|
//
|
|
// device extension
|
|
//
|
|
PHIDCLASS_PDO_DEVICE_EXTENSION DeviceExtension;
|
|
|
|
//
|
|
// spin lock
|
|
//
|
|
KSPIN_LOCK Lock;
|
|
|
|
//
|
|
// read irp pending list
|
|
//
|
|
LIST_ENTRY ReadPendingIrpListHead;
|
|
|
|
//
|
|
// completed irp list
|
|
//
|
|
LIST_ENTRY IrpCompletedListHead;
|
|
|
|
}HIDCLASS_FILEOP_CONTEXT, *PHIDCLASS_FILEOP_CONTEXT;
|
|
|
|
typedef struct
|
|
{
|
|
//
|
|
// original request
|
|
//
|
|
PIRP OriginalIrp;
|
|
|
|
//
|
|
// file op
|
|
//
|
|
PHIDCLASS_FILEOP_CONTEXT FileOp;
|
|
|
|
//
|
|
// buffer for reading report
|
|
//
|
|
PVOID InputReportBuffer;
|
|
|
|
//
|
|
// buffer length
|
|
//
|
|
ULONG InputReportBufferLength;
|
|
|
|
//
|
|
// work item
|
|
//
|
|
PIO_WORKITEM CompletionWorkItem;
|
|
|
|
}HIDCLASS_IRP_CONTEXT, *PHIDCLASS_IRP_CONTEXT;
|
|
|
|
/* fdo.c */
|
|
NTSTATUS
|
|
HidClassFDO_PnP(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp);
|
|
|
|
NTSTATUS
|
|
HidClassFDO_DispatchRequestSynchronous(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp);
|
|
|
|
/* pdo.c */
|
|
NTSTATUS
|
|
HidClassPDO_CreatePDO(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
OUT PDEVICE_RELATIONS *OutDeviceRelations);
|
|
|
|
NTSTATUS
|
|
HidClassPDO_PnP(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp);
|
|
|
|
PHIDP_COLLECTION_DESC
|
|
HidClassPDO_GetCollectionDescription(
|
|
PHIDP_DEVICE_DESC DeviceDescription,
|
|
ULONG CollectionNumber);
|
|
|
|
PHIDP_REPORT_IDS
|
|
HidClassPDO_GetReportDescription(
|
|
PHIDP_DEVICE_DESC DeviceDescription,
|
|
ULONG CollectionNumber);
|
|
|
|
/* eof */
|