319 lines
6.2 KiB
C
319 lines
6.2 KiB
C
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dbcusb.h
|
|
|
|
Abstract:
|
|
|
|
|
|
|
|
Environment:
|
|
|
|
Kernel & user mode
|
|
|
|
Revision History:
|
|
|
|
5-4-98 : created
|
|
|
|
--*/
|
|
|
|
#include "dbc100.h"
|
|
#include "usbdi.h"
|
|
#include "usb100.h"
|
|
#include "usbdlib.h"
|
|
|
|
// registry Keys
|
|
#define DEBUG_LEVEL_KEY L"debuglevel"
|
|
#define DEBUG_WIN9X_KEY L"debugWin9x"
|
|
|
|
|
|
#define DBCUSB_EXT_SIG 0x42535544 //"DUSB"
|
|
|
|
typedef struct _DEVICE_EXTENSION {
|
|
ULONG Sig;
|
|
// Device object we call when submitting requests
|
|
PDEVICE_OBJECT TopOfStackDeviceObject;
|
|
// Our Pdo
|
|
PDEVICE_OBJECT PhysicalDeviceObject;
|
|
// OurFdo
|
|
PDEVICE_OBJECT FdoDeviceObject;
|
|
|
|
DEVICE_POWER_STATE CurrentDevicePowerState;
|
|
|
|
PIRP PowerIrp;
|
|
PIRP ChangeRequestIrp;
|
|
PIRP InterruptIrp;
|
|
|
|
PIRP WakeIrp;
|
|
KEVENT StopEvent;
|
|
ULONG PendingIoCount;
|
|
|
|
BOOLEAN AcceptingRequests;
|
|
BOOLEAN EnabledForWakeup;
|
|
UCHAR Flags;
|
|
UCHAR InterruptDataBufferLength;
|
|
|
|
//4 bytes, enough for 32 bays
|
|
UCHAR InterruptDataBuffer[4];
|
|
|
|
KSPIN_LOCK ChangeRequestSpin;
|
|
|
|
USBD_PIPE_HANDLE InterruptPipeHandle;
|
|
USBD_CONFIGURATION_HANDLE ConfigurationHandle;
|
|
USB_DEVICE_DESCRIPTOR DeviceDescriptor;
|
|
DEVICE_CAPABILITIES DeviceCapabilities;
|
|
DBC_SUBSYSTEM_DESCRIPTOR DbcSubsystemDescriptor;
|
|
DBC_BAY_DESCRIPTOR BayDescriptor[32];
|
|
|
|
struct _URB_BULK_OR_INTERRUPT_TRANSFER InterruptUrb;
|
|
|
|
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
|
|
|
|
#define DBCUSB_FLAG_INTERUPT_XFER_PENDING 0x01
|
|
#define DBCUSB_FLAG_STOPPED 0x02
|
|
#define DBCUSB_FLAG_STARTED 0x04
|
|
|
|
/*
|
|
Debug Macros
|
|
*/
|
|
#if DBG
|
|
|
|
VOID
|
|
DBCUSB_Assert(
|
|
IN PVOID FailedAssertion,
|
|
IN PVOID FileName,
|
|
IN ULONG LineNumber,
|
|
IN PCHAR Message
|
|
);
|
|
|
|
#define DBCUSB_ASSERT(exp) \
|
|
if (!(exp)) { \
|
|
DBCUSB_Assert( #exp, __FILE__, __LINE__, NULL );\
|
|
}
|
|
|
|
#define DBCUSB_ASSERT_EXT(de) DBCUSB_ASSERT((de)->Sig == DBCUSB_EXT_SIG)
|
|
|
|
|
|
ULONG
|
|
_cdecl
|
|
DBCUSB_KdPrintX(
|
|
ULONG l,
|
|
PCH Format,
|
|
...
|
|
);
|
|
|
|
#define DBCUSB_KdPrint(_x_) DBCUSB_KdPrintX _x_
|
|
#define TEST_TRAP() { DbgPrint( "DBCUSB: Code coverage trap %s line: %d\n", __FILE__, __LINE__);\
|
|
TRAP();}
|
|
|
|
#ifdef NTKERN
|
|
#define TRAP() _asm {int 3}
|
|
#else
|
|
#define TRAP() DbgBreakPoint()
|
|
#endif
|
|
|
|
#else
|
|
|
|
#define DBCUSB_ASSERT(exp)
|
|
#define DBCUSB_KdPrint(_x_)
|
|
#define DBCUSB_ASSERT_EXT(de)
|
|
|
|
#define TRAP()
|
|
#define TEST_TRAP()
|
|
|
|
#endif
|
|
|
|
#ifdef MAXDEBUG
|
|
#define MD_TEST_TRAP() { DbgPrint( "DBCUSB: MAXDEBUG test trap %s line: %d\n", __FILE__, __LINE__);\
|
|
TRAP();}
|
|
#else
|
|
#define MD_TEST_TRAP()
|
|
#endif
|
|
|
|
VOID
|
|
DBCUSB_Unload(
|
|
IN PDRIVER_OBJECT DriverObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_StartDevice(
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_StopDevice(
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_RemoveDevice(
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_AddDevice(
|
|
IN PDRIVER_OBJECT DriverObject,
|
|
IN PDEVICE_OBJECT PhysicalDeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_CreateDeviceObject(
|
|
IN PDRIVER_OBJECT DriverObject,
|
|
IN PDEVICE_OBJECT *DeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_ProcessIOCTL(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
VOID
|
|
DBCUSB_IncrementIoCount(
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
);
|
|
|
|
LONG
|
|
DBCUSB_DecrementIoCount(
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_Power(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_Pnp(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_Power(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_WaitWakeIrpCompletion(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN UCHAR MinorFunction,
|
|
IN POWER_STATE DeviceState,
|
|
IN PVOID Context,
|
|
IN PIO_STATUS_BLOCK IoStatus
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_QueryCapabilities(
|
|
IN PDEVICE_OBJECT PdoDeviceObject,
|
|
IN PDEVICE_CAPABILITIES DeviceCapabilities
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_SystemControl(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_Ioctl(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_ReadWriteDBCRegister(
|
|
PDEVICE_OBJECT DeviceObject,
|
|
ULONG RegisterOffset,
|
|
PVOID RegisterData,
|
|
USHORT RegisterDataLength,
|
|
BOOLEAN ReadRegister
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_ProcessDrb(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_SetFeature(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN USHORT BayNumber,
|
|
IN USHORT FeatureSelector
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_DeferIrpCompletion(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp,
|
|
IN PVOID Context
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_ConfigureDevice(
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_SubmitInterruptTransfer(
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_SyncUsbCall(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PURB Urb
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_Transact(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PUCHAR DataBuffer,
|
|
IN ULONG DataBufferLength,
|
|
IN BOOLEAN DataOutput,
|
|
IN USHORT Function,
|
|
IN UCHAR RequestType,
|
|
IN UCHAR Request,
|
|
IN USHORT Feature,
|
|
IN USHORT Port,
|
|
OUT PULONG BytesTransferred
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_GetBayStatus(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN USHORT BayNumber,
|
|
IN PBAY_STATUS BayStatus
|
|
);
|
|
|
|
VOID
|
|
DBCUSB_CompleteChangeRequest(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PUCHAR ChangeData,
|
|
IN ULONG ChangeDataLength,
|
|
IN NTSTATUS NtStatus
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_ClearFeature(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN USHORT BayNumber,
|
|
IN USHORT FeatureSelector
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_GetPortStatus(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PULONG PortStatus
|
|
);
|
|
|
|
NTSTATUS
|
|
DBCUSB_GetClassGlobalDebugRegistryParameters(
|
|
);
|