/*++ Copyright (c) 1993 Microsoft Corporation :ts=4 Module Name: roothub.h Abstract: This file contains the interface functions for the root hub code. Environment: Kernel & user mode Revision History: 2-13-96 : created --*/ #define RH_RESET_TIMELENGTH 10 /* Default to 10 ms. */ #define RH_NUMBER_OF_PORTS 2 #define RH_SUCCESS 0 #define RH_NAK 1 #define RH_STALL 2 #define RH_PORT_SC_BASE 0x0010 typedef LONG RHSTATUS; #include #define RECIPIENT_DEVICE 0 #define RECIPIENT_INTRFACE 1 #define RECIPIENT_ENDPOINT 2 #define RECIPIENT_PORT 3 typedef struct _RH_SETUP { struct _bmRequestType { UCHAR Recipient:5; UCHAR Type:2; UCHAR Dir:1; } bmRequestType; UCHAR bRequest; union _wValue { struct { UCHAR lowPart; UCHAR hiPart; }; USHORT W; } wValue; USHORT wIndex; USHORT wLength; } RH_SETUP, *PRH_SETUP; typedef struct _RH_PORT_STATUS { // // Status bits // unsigned Connected:1; unsigned Enabled:1; unsigned Suspended:1; unsigned OverCurrent:1; unsigned Reset:1; unsigned Reserved0:3; unsigned PowerOn:1; unsigned LowSpeed:1; unsigned Reserved1:6; // // Change bits // unsigned ConnectChange:1; unsigned EnableChange:1; unsigned SuspendChange:1; unsigned OverCurrentChange:1; unsigned ResetChange:1; unsigned Reserved2:11; } RH_PORT_STATUS, *PRH_PORT_STATUS; #include #define UHCD_FAKE_CONNECT_CHANGE 0x00000001 #define UHCD_FAKE_DISCONNECT 0x00000002 typedef struct _ROOTHUB_PORT { PDEVICE_OBJECT DeviceObject; // HCD DeviceObject USHORT Address; // offset of the port BOOLEAN ResetChange; BOOLEAN SuspendChange; } ROOTHUB_PORT, *PROOTHUB_PORT; typedef struct _ROOTHUB { ULONG Sig; PDEVICE_OBJECT DeviceObject; // HCD DeviceObject UCHAR NumberOfPorts; UCHAR ConfigurationValue; // current configuration value, // zero is unconfigured BOOLEAN DoSelectiveSuspend; UCHAR Pad[1]; ULONG *DisabledPort; ROOTHUB_PORT Port[0]; // port structs } ROOTHUB, *PROOTHUB; VOID RootHubTimerHandler( IN PVOID TimerContext ); PROOTHUB RootHub_Initialize( IN PDEVICE_OBJECT DeviceObject, IN ULONG NumberOfPorts, IN BOOLEAN DoSelectiveSuspend ); RHSTATUS RootHub_Endpoint0( IN PROOTHUB RootHub, IN PRH_SETUP SetupPacket, IN PUCHAR DeviceAddress, IN PUCHAR Buffer, IN OUT PULONG BufferLength ); RHSTATUS RootHub_Endpoint1( IN PROOTHUB RootHub, IN PUCHAR Buffer, IN OUT PULONG BufferLength ); RHSTATUS RootHub_StandardCommand( IN PROOTHUB RootHub, IN PRH_SETUP SetupPacket, IN OUT PUCHAR DeviceAddress, IN OUT PUCHAR Buffer, IN OUT PULONG BufferLength ); RHSTATUS RootHub_ClassCommand( IN PROOTHUB RootHub, IN PRH_SETUP SetupPacket, IN OUT PUCHAR Buffer, IN OUT PULONG BufferLength ); BOOLEAN RootHub_PortsIdle( IN PROOTHUB RootHub ); // // Services provided by HCD // typedef VOID (*PROOTHUB_TIMER_ROUTINE) ( IN PVOID TimerContext ); // // UHCD_RootHub_Timer // // Inputs: // HcdPtr - pointer passed to Root hub // during initialization // WaitTime - time to wait in ms until // calling callback. // RootHubTimerRoutine - VOID fn(PVOID TimerContext) // context is ptr returned from // RootHub_Initialize routine. // TimerContext - pointer to be passed to the callback routine // // Returns: // None // VOID UHCD_RootHub_Timer( IN PVOID HcdPtr, IN LONG WaitTime, IN PROOTHUB_TIMER_ROUTINE RootHubTimerRoutine, IN PVOID TimerContext ); USHORT UHCD_RootHub_ReadPort( IN PROOTHUB_PORT HubPort ); VOID UHCD_RootHub_WritePort( IN PROOTHUB_PORT HubPort, IN USHORT DataVal );