Author: mjmartin
Date: Wed Feb 10 13:21:23 2010
New Revision: 45552
URL:
http://svn.reactos.org/svn/reactos?rev=45552&view=rev
Log:
[usb/usbehci]
- Define Device and Configuration Descriptors for RootHub20.
- Queue all USB_SUBMIT_URBs and create a separate thread to handle them.
- For PNP START_DEVICE, Create the internal RootHub usb device and register usb hub device
interface.
- Fill in direct call interface for USB_BUS_INTERFACE_USBDI_V2 and
USB_BUS_INTERFACE_HUB_V5.
- Implement Direct Call Interface function GetExtendedHubInformation.
- Remove duplicate structures that are already defined in USB Headers. Some
reorganization.
Added:
trunk/reactos/drivers/usb/usbehci/usbiffn.c (with props)
trunk/reactos/drivers/usb/usbehci/usbiffn.h (with props)
Modified:
trunk/reactos/drivers/usb/usbehci/pdo.c
trunk/reactos/drivers/usb/usbehci/usbehci.h
trunk/reactos/drivers/usb/usbehci/usbehci.rbuild
Modified: trunk/reactos/drivers/usb/usbehci/pdo.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/pdo.c?…
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/pdo.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/pdo.c [iso-8859-1] Wed Feb 10 13:21:23 2010
@@ -7,14 +7,107 @@
* Michael Martin
*/
-/* INCLUDES *******************************************************************/
#define INITGUID
+#define NDEBUG
+
#include "usbehci.h"
#include <wdmguid.h>
+#include "usbiffn.h"
#include <stdio.h>
-
-#define NDEBUG
#include <debug.h>
+
+/* Lifted from Linux with slight changes */
+const UCHAR ROOTHUB2_DEVICE_DESCRIPTOR [] =
+{
+ 0x12, /* bLength; */
+ USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType; Device */
+ 0x00, 0x20, /* bcdUSB; v1.1 */
+ USB_DEVICE_CLASS_HUB, /* bDeviceClass; HUB_CLASSCODE */
+ 0x01, /* bDeviceSubClass; */
+ 0x00, /* bDeviceProtocol; [ low/full speeds only ] */
+ 0x08, /* bMaxPacketSize0; 8 Bytes */
+ /* Fill Vendor and Product in when init root hub */
+ 0x00, 0x00, /* idVendor; */
+ 0x00, 0x00, /* idProduct; */
+ 0x00, 0x00, /* bcdDevice */
+ 0x00, /* iManufacturer; */
+ 0x00, /* iProduct; */
+ 0x00, /* iSerialNumber; */
+ 0x01 /* bNumConfigurations; */
+
+};
+
+const UCHAR ROOTHUB2_CONFIGURATION_DESCRIPTOR [] =
+{
+ /* one configuration */
+ 0x09, /* bLength; */
+ 0x02, /* bDescriptorType; Configuration */
+ 0x19, 0x00, /* wTotalLength; */
+ 0x01, /* bNumInterfaces; (1) */
+ 0x23, /* bConfigurationValue; */
+ 0x00, /* iConfiguration; */
+ 0x40, /* bmAttributes;
+ Bit 7: must be set,
+ 6: Self-powered,
+ 5: Remote wakeup,
+ 4..0: reserved */
+ 0x00, /* MaxPower; */
+
+ /* one interface */
+ 0x09, /* bLength: Interface; */
+ 0x04, /* bDescriptorType; Interface */
+ 0x00, /* bInterfaceNumber; */
+ 0x00, /* bAlternateSetting; */
+ 0x01, /* bNumEndpoints; */
+ 0x09, /* bInterfaceClass; HUB_CLASSCODE */
+ 0x01, /* bInterfaceSubClass; */
+ 0x00, /* bInterfaceProtocol: */
+ 0x00, /* iInterface; */
+
+ /* one endpoint (status change endpoint) */
+ 0x07, /* bLength; */
+ 0x05, /* bDescriptorType; Endpoint */
+ 0x81, /* bEndpointAddress; IN Endpoint 1 */
+ 0x03, /* bmAttributes; Interrupt */
+ 0x08, 0x00, /* wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
+ 0xFF /* bInterval; (255ms -- usb 2.0 spec) */
+};
+
+/* FIXME: Do something better */
+VOID NTAPI
+UrbWorkerThread(PVOID Context)
+{
+ PPDO_DEVICE_EXTENSION PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)Context;
+
+ while (PdoDeviceExtension->HaltUrbHandling == FALSE)
+ {
+ CompletePendingURBRequest(PdoDeviceExtension);
+ }
+ DPRINT1("Thread terminated\n");
+}
+
+/* FIXME: Do something better */
+PVOID InternalCreateUsbDevice(UCHAR DeviceNumber, ULONG Port, PUSB_DEVICE Parent, BOOLEAN
Hub)
+{
+ PUSB_DEVICE UsbDevicePointer = NULL;
+ UsbDevicePointer = ExAllocatePool(NonPagedPool, sizeof(USB_DEVICE));
+ if (!UsbDevicePointer)
+ {
+ DPRINT1("Out of memory\n");
+ return NULL;
+ }
+
+ if ((Hub) && (!Parent))
+ {
+ DPRINT1("This is the root hub\n");
+ }
+
+ UsbDevicePointer->Address = DeviceNumber;
+ UsbDevicePointer->Port = Port;
+ UsbDevicePointer->ParentDevice = Parent;
+
+ return UsbDevicePointer;
+}
NTSTATUS NTAPI
PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
@@ -24,125 +117,94 @@
PIO_STACK_LOCATION Stack = NULL;
NTSTATUS Status = STATUS_UNSUCCESSFUL;
ULONG_PTR Information = 0;
- DPRINT("PdoDispatchInternalDeviceControl\n");
PdoDeviceExtension = (PPDO_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)
PdoDeviceExtension->ControllerFdo->DeviceExtension;
ASSERT(PdoDeviceExtension->Common.IsFdo == FALSE);
+
Stack = IoGetCurrentIrpStackLocation(Irp);
- DPRINT("IoControlCode %x\n",
Stack->Parameters.DeviceIoControl.IoControlCode);
+
switch(Stack->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_INTERNAL_USB_SUBMIT_URB:
{
URB *Urb;
- DPRINT1("IOCTL_INTERNAL_USB_SUBMIT_URB\n");
- DPRINT("Stack->Parameters.DeviceIoControl.InputBufferLength
%d\n",
- Stack->Parameters.DeviceIoControl.InputBufferLength);
- DPRINT("Stack->Parameters.Others.Argument1 %x\n",
Stack->Parameters.Others.Argument1);
-
Urb = (PURB) Stack->Parameters.Others.Argument1;
- DPRINT("Header Size %d\n", Urb->UrbHeader.Length);
- DPRINT("Header Type %d\n", Urb->UrbHeader.Function);
- DPRINT("Index %x\n", Urb->UrbControlDescriptorRequest.Index);
-
- /* Check the type */
- switch(Urb->UrbHeader.Function)
- {
- case URB_FUNCTION_SELECT_CONFIGURATION:
- {
- DPRINT1("URB_FUNCTION_SELECT_CONFIGURATION\n");
- break;
- }
- case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE:
- {
- URB *Urb;
- DPRINT1("URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE\n");
- Urb = (PURB) Stack->Parameters.Others.Argument1;
- Urb->UrbHeader.Status = 0;
-
- DPRINT1("Irp->CancelRoutine
%x\n",Irp->CancelRoutine);
- QueueRequest(FdoDeviceExtension, Irp);
-
- Information = 0;
-
- IoMarkIrpPending(Irp);
- Status = STATUS_PENDING;
-
- break;
- }
- /* FIXME: Handle all other Functions */
- default:
- DPRINT1("Not handled yet!\n");
- }
+ DPRINT("Header Length %d\n", Urb->UrbHeader.Length);
+ DPRINT("Header Function %d\n", Urb->UrbHeader.Function);
+
+ /* Queue all request for now, kernel thread will complete them */
+ QueueURBRequest(PdoDeviceExtension, Irp);
+ Information = 0;
+ IoMarkIrpPending(Irp);
+ Status = STATUS_PENDING;
break;
}
case IOCTL_INTERNAL_USB_CYCLE_PORT:
{
- DPRINT("IOCTL_INTERNAL_USB_CYCLE_PORT\n");
+ DPRINT1("IOCTL_INTERNAL_USB_CYCLE_PORT\n");
break;
}
case IOCTL_INTERNAL_USB_ENABLE_PORT:
{
- DPRINT("IOCTL_INTERNAL_USB_ENABLE_PORT\n");
+ DPRINT1("IOCTL_INTERNAL_USB_ENABLE_PORT\n");
break;
}
case IOCTL_INTERNAL_USB_GET_BUS_INFO:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_BUS_INFO\n");
+ DPRINT1("IOCTL_INTERNAL_USB_GET_BUS_INFO\n");
break;
}
case IOCTL_INTERNAL_USB_GET_BUSGUID_INFO:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_BUSGUID_INFO\n");
+ DPRINT1("IOCTL_INTERNAL_USB_GET_BUSGUID_INFO\n");
break;
}
case IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME\n");
+ DPRINT1("IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME\n");
break;
}
case IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE\n");
+ DPRINT1("IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE\n");
break;
}
case IOCTL_INTERNAL_USB_GET_HUB_COUNT:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_HUB_COUNT\n");
+ DPRINT1("IOCTL_INTERNAL_USB_GET_HUB_COUNT\n");
break;
}
case IOCTL_INTERNAL_USB_GET_HUB_NAME:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_HUB_NAME\n");
+ DPRINT1("IOCTL_INTERNAL_USB_GET_HUB_NAME\n");
break;
}
case IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO\n");
+ DPRINT1("IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO\n");
break;
}
case IOCTL_INTERNAL_USB_GET_PORT_STATUS:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_PORT_STATUS\n");
+ DPRINT1("IOCTL_INTERNAL_USB_GET_PORT_STATUS\n");
break;
}
case IOCTL_INTERNAL_USB_RESET_PORT:
{
- DPRINT("IOCTL_INTERNAL_USB_RESET_PORT\n");
+ DPRINT1("IOCTL_INTERNAL_USB_RESET_PORT\n");
break;
}
case IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO:
{
- DPRINT("IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO\n");
- /* This is document as Argument1 = PDO and Argument2 = FDO.
- Its actually reversed, the FDO goes in Argument1 and PDO goes in Argument2
*/
+ DPRINT1("IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO\n");
+
if (Stack->Parameters.Others.Argument1)
- Stack->Parameters.Others.Argument1 =
FdoDeviceExtension->DeviceObject;
+ *(PVOID *)Stack->Parameters.Others.Argument1 =
FdoDeviceExtension->Pdo;
if (Stack->Parameters.Others.Argument2)
- Stack->Parameters.Others.Argument2 = FdoDeviceExtension->Pdo;
+ *(PVOID *)Stack->Parameters.Others.Argument2 =
IoGetAttachedDevice(FdoDeviceExtension->DeviceObject);
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = STATUS_SUCCESS;
@@ -151,7 +213,7 @@
}
case IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION:
{
- DPRINT("IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION\n");
+ DPRINT1("IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION\n");
break;
}
default:
@@ -162,6 +224,7 @@
}
Irp->IoStatus.Information = Information;
+
if (Status != STATUS_PENDING)
IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -171,8 +234,6 @@
NTSTATUS
PdoQueryId(PDEVICE_OBJECT DeviceObject, PIRP Irp, ULONG_PTR* Information)
{
- PPDO_DEVICE_EXTENSION PdoDeviceExtension;
- PFDO_DEVICE_EXTENSION FdoDeviceExtension;
WCHAR Buffer[256];
ULONG Index = 0;
ULONG IdType;
@@ -181,25 +242,18 @@
NTSTATUS Status;
IdType = IoGetCurrentIrpStackLocation(Irp)->Parameters.QueryId.IdType;
- PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
- FdoDeviceExtension =
(PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
-
- /* FIXME: Read values from registry */
switch (IdType)
{
case BusQueryDeviceID:
{
- DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryDeviceID\n");
RtlInitUnicodeString(&SourceString, L"USB\\ROOT_HUB20");
break;
}
case BusQueryHardwareIDs:
{
- DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs\n");
-
Index += swprintf(&Buffer[Index],
L"USB\\ROOT_HUB20&VID8086&PID265C&REV0000") + 1;
- Index += swprintf(&Buffer[Index],
L"USB\\ROOT_HUB20&VID8086&PID265") + 1;
+ Index += swprintf(&Buffer[Index],
L"USB\\ROOT_HUB20&VID8086&PID265C") + 1;
Index += swprintf(&Buffer[Index], L"USB\\ROOT_HUB20") + 1;
Buffer[Index] = UNICODE_NULL;
@@ -209,24 +263,12 @@
}
case BusQueryCompatibleIDs:
{
- DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryCompatibleIDs\n");
- /* We have none */
+ /* We have none */
return STATUS_SUCCESS;
- break;
}
case BusQueryInstanceID:
{
- DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryInstanceID\n");
-
- /*
- Do we need to implement this?
- At one point I hade DeviceCapabilities->UniqueID set to TRUE.
- And caused usbhub to fail attaching
- to the PDO. Setting UniqueID to FALSE, it works
- */
-
return STATUS_SUCCESS;
- break;
}
default:
{
@@ -247,18 +289,15 @@
NTSTATUS
PdoQueryDeviceRelations(PDEVICE_OBJECT DeviceObject, PDEVICE_RELATIONS*
pDeviceRelations)
{
- PFDO_DEVICE_EXTENSION DeviceExtension;
PDEVICE_RELATIONS DeviceRelations;
-
- DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
DeviceRelations = (PDEVICE_RELATIONS)ExAllocatePool(PagedPool,
sizeof(DEVICE_RELATIONS));
if (!DeviceRelations)
return STATUS_INSUFFICIENT_RESOURCES;
- ObReferenceObject(DeviceObject);
DeviceRelations->Count = 1;
DeviceRelations->Objects[0] = DeviceObject;
+ ObReferenceObject(DeviceObject);
*pDeviceRelations = DeviceRelations;
return STATUS_SUCCESS;
@@ -271,8 +310,8 @@
{
ULONG MinorFunction;
PIO_STACK_LOCATION Stack;
- ULONG_PTR Information = 0;
- NTSTATUS Status;
+ ULONG_PTR Information = Irp->IoStatus.Information;
+ NTSTATUS Status = Irp->IoStatus.Status;
Stack = IoGetCurrentIrpStackLocation(Irp);
MinorFunction = Stack->MinorFunction;
@@ -284,17 +323,70 @@
case IRP_MN_CANCEL_REMOVE_DEVICE:
case IRP_MN_STOP_DEVICE:
case IRP_MN_QUERY_STOP_DEVICE:
+ case IRP_MN_CANCEL_STOP_DEVICE:
case IRP_MN_QUERY_DEVICE_TEXT:
case IRP_MN_SURPRISE_REMOVAL:
- {
- Information = Irp->IoStatus.Information;
+ case IRP_MN_QUERY_RESOURCES:
+ case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
+ case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
+ {
Status = STATUS_SUCCESS;
break;
}
case IRP_MN_START_DEVICE:
{
- DPRINT("IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
+ PUSB_DEVICE RootHubDevice;
+ PPDO_DEVICE_EXTENSION PdoDeviceExtension;
+ PFDO_DEVICE_EXTENSION FdoDeviceExtension;
+ UNICODE_STRING InterfaceSymLinkName;
+
+ PdoDeviceExtension =
(PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+ FdoDeviceExtension =
(PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
+
+ /* Create the root hub */
+ RootHubDevice = InternalCreateUsbDevice(0, 0, NULL, TRUE);
+
+ RootHubDevice->Address = 1;
+ RootHubDevice->Port = 0;
+
+ RtlCopyMemory(&RootHubDevice->DeviceDescriptor,
+ ROOTHUB2_DEVICE_DESCRIPTOR,
+ sizeof(ROOTHUB2_DEVICE_DESCRIPTOR));
+
+ RootHubDevice->DeviceDescriptor.idVendor =
FdoDeviceExtension->VendorId;
+ RootHubDevice->DeviceDescriptor.idProduct =
FdoDeviceExtension->DeviceId;
+
+ RtlCopyMemory(&RootHubDevice->ConfigurationDescriptor,
+ ROOTHUB2_CONFIGURATION_DESCRIPTOR,
+ sizeof(ROOTHUB2_CONFIGURATION_DESCRIPTOR));
+
+ PdoDeviceExtension->UsbDevices[0] = RootHubDevice;
+
+ /* Create a thread to handle the URB's */
+ Status = PsCreateSystemThread(&PdoDeviceExtension->ThreadHandle,
+ THREAD_ALL_ACCESS,
+ NULL,
+ NULL,
+ NULL,
+ UrbWorkerThread,
+ (PVOID)PdoDeviceExtension);
+
+ if (!NT_SUCCESS(Status))
+ DPRINT1("Failed Thread Creation with Status: %x\n", Status);
+
+ Status = IoRegisterDeviceInterface(DeviceObject,
&GUID_DEVINTERFACE_USB_HUB, NULL, &InterfaceSymLinkName);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Failed to register interface\n");
+ }
+ else
+ {
+ Status = IoSetDeviceInterfaceState(&InterfaceSymLinkName, TRUE);
+ DPRINT1("Set interface state %x\n", Status);
+ }
+
+
Status = STATUS_SUCCESS;
break;
}
@@ -305,16 +397,17 @@
case TargetDeviceRelation:
{
PDEVICE_RELATIONS DeviceRelations = NULL;
- DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS /
TargetDeviceRelation\n");
Status = PdoQueryDeviceRelations(DeviceObject,
&DeviceRelations);
Information = (ULONG_PTR)DeviceRelations;
break;
}
+ case BusRelations:
+ case RemovalRelations:
+ case EjectionRelations:
default:
{
DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unhandled
type 0x%lx\n",
Stack->Parameters.QueryDeviceRelations.Type);
- //ASSERT(FALSE);
Status = STATUS_NOT_SUPPORTED;
break;
}
@@ -325,17 +418,20 @@
{
PDEVICE_CAPABILITIES DeviceCapabilities;
ULONG i;
- DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_CAPABILITIES\n");
+
DeviceCapabilities =
(PDEVICE_CAPABILITIES)Stack->Parameters.DeviceCapabilities.Capabilities;
- /* FIXME: capabilities can change with connected device */
+
DeviceCapabilities->LockSupported = FALSE;
DeviceCapabilities->EjectSupported = FALSE;
DeviceCapabilities->Removable = FALSE;
DeviceCapabilities->DockDevice = FALSE;
- DeviceCapabilities->UniqueID = FALSE;//TRUE;
+ DeviceCapabilities->UniqueID = FALSE;
DeviceCapabilities->SilentInstall = FALSE;
- DeviceCapabilities->RawDeviceOK = TRUE;
+ DeviceCapabilities->RawDeviceOK = FALSE;
DeviceCapabilities->SurpriseRemovalOK = FALSE;
+ DeviceCapabilities->Address = 0;
+ DeviceCapabilities->UINumber = 0;
+ DeviceCapabilities->DeviceD2 = 1;
/* FIXME */
DeviceCapabilities->HardwareDisabled = FALSE;
@@ -343,47 +439,101 @@
DeviceCapabilities->DeviceState[0] = PowerDeviceD0;
for (i = 0; i < PowerSystemMaximum; i++)
DeviceCapabilities->DeviceState[i] = PowerDeviceD3;
- //DeviceCapabilities->DeviceWake = PowerDeviceUndefined;
+ DeviceCapabilities->DeviceWake = 0;
DeviceCapabilities->D1Latency = 0;
DeviceCapabilities->D2Latency = 0;
DeviceCapabilities->D3Latency = 0;
+ Information = 0;
Status = STATUS_SUCCESS;
break;
}
- case IRP_MN_QUERY_RESOURCES:
- {
- Information = Irp->IoStatus.Information;
- Status = Irp->IoStatus.Status;
- break;
- }
- case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
- {
- DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n");
- Information = Irp->IoStatus.Information;
- Status = Irp->IoStatus.Status;
- break;
- }
/*case IRP_MN_QUERY_DEVICE_TEXT:
{
Status = STATUS_NOT_SUPPORTED;
break;
}*/
- case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
- {
- DPRINT("IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
- Information = Irp->IoStatus.Information;
- Status = Irp->IoStatus.Status;
- break;
- }
+
case IRP_MN_QUERY_ID:
{
Status = PdoQueryId(DeviceObject, Irp, &Information);
break;
}
+ case IRP_MN_QUERY_INTERFACE:
+ {
+ UNICODE_STRING GuidString;
+ PUSB_BUS_INTERFACE_HUB_V5 InterfaceHub;
+ PUSB_BUS_INTERFACE_USBDI_V2 InterfaceDI;
+ PPDO_DEVICE_EXTENSION PdoDeviceExtension;
+ PFDO_DEVICE_EXTENSION FdoDeviceExtension;
+
+ PdoDeviceExtension =
(PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+ FdoDeviceExtension =
(PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
+
+ Status = RtlStringFromGUID(Stack->Parameters.QueryInterface.InterfaceType,
&GuidString);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Failed to create string from GUID!\n");
+ }
+ DPRINT1("Interface GUID requested %wZ\n", &GuidString);
+ DPRINT1("QueryInterface.Size %x\n",
Stack->Parameters.QueryInterface.Size);
+ DPRINT1("QueryInterface.Version %x\n",
Stack->Parameters.QueryInterface.Version);
+
+ Status = STATUS_SUCCESS;
+ Information = 0;
+
+ /* FIXME: Check the actual Guid */
+ if (Stack->Parameters.QueryInterface.Size ==
sizeof(USB_BUS_INTERFACE_USBDI_V2) && (Stack->Parameters.QueryInterface.Version
== 2))
+ {
+ InterfaceDI = (PUSB_BUS_INTERFACE_USBDI_V2)
Stack->Parameters.QueryInterface.Interface;
+ InterfaceDI->Size = sizeof(USB_BUS_INTERFACE_USBDI_V2);
+ InterfaceDI->Version = 2;
+ InterfaceDI->BusContext = PdoDeviceExtension->DeviceObject;
+ InterfaceDI->InterfaceReference =
(PINTERFACE_REFERENCE)InterfaceReference;
+ InterfaceDI->InterfaceDereference =
(PINTERFACE_DEREFERENCE)InterfaceDereference;
+ InterfaceDI->GetUSBDIVersion = GetUSBDIVersion;
+ InterfaceDI->QueryBusTime = QueryBusTime;
+ InterfaceDI->SubmitIsoOutUrb = SubmitIsoOutUrb;
+ InterfaceDI->QueryBusInformation = QueryBusInformation;
+ InterfaceDI->IsDeviceHighSpeed = IsDeviceHighSpeed;
+ InterfaceDI->EnumLogEntry = EnumLogEntry;
+ }
+ /* FIXME: Check the actual Guid */
+ else if (Stack->Parameters.QueryInterface.Size ==
sizeof(USB_BUS_INTERFACE_HUB_V5) &&
+ (Stack->Parameters.QueryInterface.Version == 5))
+ {
+ InterfaceHub =
(PUSB_BUS_INTERFACE_HUB_V5)Stack->Parameters.QueryInterface.Interface;
+ InterfaceHub->Version = 5;
+ InterfaceHub->Size = sizeof(USB_BUS_INTERFACE_HUB_V5);
+ InterfaceHub->BusContext = PdoDeviceExtension->DeviceObject;
+ InterfaceHub->InterfaceReference =
(PINTERFACE_REFERENCE)InterfaceReference;
+ InterfaceHub->InterfaceDereference =
(PINTERFACE_DEREFERENCE)InterfaceDereference;
+ InterfaceHub->CreateUsbDevice = CreateUsbDevice;
+ InterfaceHub->InitializeUsbDevice = InitializeUsbDevice;
+ InterfaceHub->GetUsbDescriptors = GetUsbDescriptors;
+ InterfaceHub->RemoveUsbDevice = RemoveUsbDevice;
+ InterfaceHub->RestoreUsbDevice = RestoreUsbDevice;
+ InterfaceHub->GetPortHackFlags = GetPortHackFlags;
+ InterfaceHub->QueryDeviceInformation = QueryDeviceInformation;
+ InterfaceHub->GetControllerInformation = GetControllerInformation;
+ InterfaceHub->ControllerSelectiveSuspend =
ControllerSelectiveSuspend;
+ InterfaceHub->GetExtendedHubInformation = GetExtendedHubInformation;
+ InterfaceHub->GetRootHubSymbolicName = GetRootHubSymbolicName;
+ InterfaceHub->GetDeviceBusContext = GetDeviceBusContext;
+ InterfaceHub->Initialize20Hub = Initialize20Hub;
+ InterfaceHub->RootHubInitNotification = RootHubInitNotification;
+ InterfaceHub->FlushTransfers = FlushTransfers;
+ InterfaceHub->SetDeviceHandleData = SetDeviceHandleData;
+ }
+ else
+ {
+ DPRINT1("Not Supported\n");
+ Status = STATUS_NOT_SUPPORTED;
+ }
+ break;
+ }
case IRP_MN_QUERY_BUS_INFORMATION:
{
PPNP_BUS_INFORMATION BusInfo;
- DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_BUS_INFORMATION\n");
BusInfo = (PPNP_BUS_INFORMATION)ExAllocatePool(PagedPool,
sizeof(PNP_BUS_INFORMATION));
if (!BusInfo)
@@ -407,9 +557,6 @@
{
/* We are the PDO. So ignore */
DPRINT1("IRP_MJ_PNP / Unknown minor function 0x%lx\n",
MinorFunction);
-
- Information = Irp->IoStatus.Information;
- Status = Irp->IoStatus.Status;
break;
}
}
Modified: trunk/reactos/drivers/usb/usbehci/usbehci.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/usbehc…
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/usbehci.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/usbehci.h [iso-8859-1] Wed Feb 10 13:21:23 2010
@@ -176,30 +176,23 @@
USHORT wLength;
} EHCI_SETUP_FORMAT, *PEHCI_SETUP_FORMAT;
-typedef struct _STANDARD_DEVICE_DESC
-{
- UCHAR bLength;
- UCHAR bDescriptorType;
- USHORT bcdUSB;
- UCHAR bDeviceClass;
- UCHAR bDeviceSubClass;
- UCHAR bDeviceProtocal;
- UCHAR bMaxPacketSize;
- USHORT idVendor;
- USHORT idProduct;
- USHORT bcdDevice;
- UCHAR iManufacturer;
- UCHAR iProduct;
- UCHAR iSerialNumber;
- UCHAR bNumConfigurations;
-} STANDARD_DEVICE_DESC, *PSTANDARD_DEVICE_DESC;
-
typedef struct _STRING_DESCRIPTOR
{
UCHAR bLength; /* Size of this descriptor in bytes */
UCHAR bDescriptorType; /* STRING Descriptor Type */
UCHAR bString[0]; /* UNICODE encoded string */
} STRING_DESCRIPTOR, *PSTRING_DESCRIPTOR;
+
+typedef struct _USB_DEVICE
+{
+ UCHAR Address;
+ ULONG Port;
+ PVOID ParentDevice;
+ USB_DEVICE_DESCRIPTOR DeviceDescriptor;
+ USB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+ USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
+ USB_ENDPOINT_DESCRIPTOR EndPointDescriptor;
+} USB_DEVICE, *PUSB_DEVICE;
/* USBCMD register 32 bits */
typedef struct _EHCI_USBCMD_CONTENT
@@ -292,7 +285,6 @@
UCHAR PortRoute [8];
} EHCI_CAPS, *PEHCI_CAPS;
-
typedef struct _COMMON_DEVICE_EXTENSION
{
BOOLEAN IsFdo;
@@ -309,9 +301,7 @@
PDEVICE_OBJECT Pdo;
ULONG DeviceState;
- /* USB Specs says a max of 127 devices */
- ULONG ChildDeviceCount;
-
+ PVOID RootHubDeviceHandle;
PDMA_ADAPTER pDmaAdapter;
ULONG Vector;
@@ -323,10 +313,6 @@
KDPC DpcObject;
KAFFINITY Affinity;
- LIST_ENTRY IrpQueue;
- KSPIN_LOCK IrpQueueLock;
- PIRP CurrentIrp;
-
ULONG MapRegisters;
ULONG BusNumber;
@@ -354,7 +340,6 @@
PULONG ResourceBase;
ULONG Size;
-
} FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
typedef struct _PDO_DEVICE_EXTENSION
@@ -362,15 +347,25 @@
COMMON_DEVICE_EXTENSION Common;
PDEVICE_OBJECT DeviceObject;
PDEVICE_OBJECT ControllerFdo;
-
+ PUSB_DEVICE UsbDevices[127];
+ LIST_ENTRY IrpQueue;
+ KSPIN_LOCK IrpQueueLock;
+ PIRP CurrentIrp;
+ HANDLE ThreadHandle;
+ ULONG ChildDeviceCount;
+ BOOLEAN HaltUrbHandling;
} PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
-
typedef struct _WORKITEM_DATA
{
PIO_WORKITEM IoWorkItem;
PFDO_DEVICE_EXTENSION FdoDeviceExtension;
+ PDEVICE_OBJECT PortDeviceObject;
} WORKITEM_DATA, *PWORKITEM_DATA;
+
+
+VOID NTAPI
+UrbWorkerThread(PVOID Context);
NTSTATUS NTAPI
GetBusInterface(PDEVICE_OBJECT pcifido, PBUS_INTERFACE_STANDARD busInterface);
@@ -406,27 +401,18 @@
PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
BOOLEAN
-GetDeviceDescriptor (PFDO_DEVICE_EXTENSION DeviceExtension, UCHAR Index);
+GetDeviceDescriptor(PFDO_DEVICE_EXTENSION DeviceExtension, UCHAR Index,
PUSB_DEVICE_DESCRIPTOR OutBuffer, BOOLEAN Hub);
BOOLEAN
GetDeviceStringDescriptor(PFDO_DEVICE_EXTENSION DeviceExtension, UCHAR Index);
VOID
-CompletePendingRequest(PFDO_DEVICE_EXTENSION DeviceExtension);
+QueueURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp);
VOID
-QueueRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp);
+CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension);
VOID
-QueueRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp);
-
-VOID
-CompletePendingRequest(PFDO_DEVICE_EXTENSION DeviceExtension);
-
-VOID
-DeviceArrivalWorkItem(PDEVICE_OBJECT DeviceObject, PVOID Context);
-
-VOID
-RequestCancel (PDEVICE_OBJECT DeviceObject, PIRP Irp);
+URBRequestCancel (PDEVICE_OBJECT DeviceObject, PIRP Irp);
#endif
Modified: trunk/reactos/drivers/usb/usbehci/usbehci.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/usbehc…
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/usbehci.rbuild [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/usbehci.rbuild [iso-8859-1] Wed Feb 10 13:21:23
2010
@@ -9,5 +9,6 @@
<file>common.c</file>
<file>misc.c</file>
<file>irp.c</file>
+ <file>usbiffn.c</file>
<file>urbreq.c</file>
</module>
Added: trunk/reactos/drivers/usb/usbehci/usbiffn.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/usbiff…
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/usbiffn.c (added)
+++ trunk/reactos/drivers/usb/usbehci/usbiffn.c [iso-8859-1] Wed Feb 10 13:21:23 2010
@@ -1,0 +1,260 @@
+/*
+ * PROJECT: ReactOS Universal Serial Bus Bulk Enhanced Host Controller Interface
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: drivers/usb/usbehci/usbiffn.c
+ * PURPOSE: Direct Call Interface Functions.
+ * PROGRAMMERS:
+ * Michael Martin
+ */
+
+/* usbbusif.h and hubbusif.h need to be imported */
+#include "usbehci.h"
+#include "usbiffn.h"
+#define NDEBUG
+#include <debug.h>
+
+VOID
+USB_BUSIFFN
+InterfaceReference(PVOID BusContext)
+{
+ DPRINT1("InterfaceReference called\n");
+}
+
+VOID
+USB_BUSIFFN
+InterfaceDereference(PVOID BusContext)
+{
+ DPRINT1("InterfaceDereference called\n");
+}
+
+/* Bus Interface Hub V5 Functions */
+
+NTSTATUS
+USB_BUSIFFN
+CreateUsbDevice(PVOID BusContext,
+ PUSB_DEVICE_HANDLE *NewDevice,
+ PUSB_DEVICE_HANDLE HubDeviceHandle,
+ USHORT PortStatus, USHORT PortNumber)
+{
+ DPRINT1("CreateUsbDevice called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle)
+{
+ DPRINT1("InitializeUsbDevice called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+GetUsbDescriptors(PVOID BusContext,
+ PUSB_DEVICE_HANDLE DeviceHandle,
+ PUCHAR DeviceDescriptorBuffer,
+ PULONG DeviceDescriptorBufferLength,
+ PUCHAR ConfigurationBuffer,
+ PULONG ConfigDescriptorBufferLength)
+{
+ DPRINT1("GetUsbDescriptor called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+RemoveUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle, ULONG Flags)
+{
+ DPRINT1("RemoveUsbDevice called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+RestoreUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE OldDeviceHandle, PUSB_DEVICE_HANDLE
NewDeviceHandle)
+{
+ DPRINT1("RestoreUsbDevice called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+GetPortHackFlags(PVOID BusContext, PULONG Flags)
+{
+ DPRINT1("GetPortHackFlags called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+QueryDeviceInformation(PVOID BusContext,
+ PUSB_DEVICE_HANDLE DeviceHandle,
+ PVOID DeviceInformationBuffer,
+ ULONG DeviceInformationBufferLength,
+ PULONG LengthReturned)
+{
+ DPRINT1("QueryDeviceInformation called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+GetControllerInformation(PVOID BusContext,
+ PVOID ControllerInformationBuffer,
+ ULONG ControllerInformationBufferLength,
+ PULONG LengthReturned)
+{
+ DPRINT1("GetControllerInformation called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+ControllerSelectiveSuspend(PVOID BusContext, BOOLEAN Enable)
+{
+ DPRINT1("ControllerSelectiveSuspend called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+GetExtendedHubInformation(PVOID BusContext,
+ PDEVICE_OBJECT HubPhysicalDeviceObject,
+ PVOID HubInformationBuffer,
+ ULONG HubInformationBufferLength,
+ PULONG LengthReturned)
+{
+
+ PUSB_EXTHUB_INFORMATION_0 UsbExtHubInfo = HubInformationBuffer;
+ PPDO_DEVICE_EXTENSION PdoDeviceExtension =
(PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension;
+ PFDO_DEVICE_EXTENSION FdoDeviceExntension =
(PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
+ LONG i;
+
+ /* Set the default return value */
+ *LengthReturned = 0;
+ /* Caller must have set InformationLevel to 0 */
+ if (UsbExtHubInfo->InformationLevel != 0)
+ {
+ return STATUS_NOT_SUPPORTED;
+ }
+
+ UsbExtHubInfo->NumberOfPorts = 8;
+
+ for (i=0; i < UsbExtHubInfo->NumberOfPorts; i++)
+ {
+ UsbExtHubInfo->Port[i].PhysicalPortNumber = i + 1;
+ UsbExtHubInfo->Port[i].PortLabelNumber =
FdoDeviceExntension->ECHICaps.HCSParams.PortCount;
+ UsbExtHubInfo->Port[i].VidOverride = 0;
+ UsbExtHubInfo->Port[i].PidOverride = 0;
+ UsbExtHubInfo->Port[i].PortAttributes = USB_PORTATTR_SHARED_USB2;
+ }
+
+ *LengthReturned = FIELD_OFFSET(USB_EXTHUB_INFORMATION_0, Port[8]);
+
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+GetRootHubSymbolicName(PVOID BusContext,
+ PVOID HubSymNameBuffer,
+ ULONG HubSymNameBufferLength,
+ PULONG HubSymNameActualLength)
+{
+ DPRINT1("GetRootHubSymbolicName called\n");
+ return STATUS_SUCCESS;
+}
+
+PVOID
+USB_BUSIFFN
+GetDeviceBusContext(PVOID HubBusContext, PVOID DeviceHandle)
+{
+ DPRINT1("GetDeviceBusContext called\n");
+ return NULL;
+}
+
+NTSTATUS
+USB_BUSIFFN
+Initialize20Hub(PVOID BusContext, PUSB_DEVICE_HANDLE HubDeviceHandle, ULONG TtCount)
+{
+ DPRINT1("Initialize20Hub called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+RootHubInitNotification(PVOID BusContext, PVOID CallbackContext, PRH_INIT_CALLBACK
CallbackRoutine)
+{
+ DPRINT1("RootHubInitNotification\n");
+ return STATUS_SUCCESS;
+}
+
+VOID
+USB_BUSIFFN
+FlushTransfers(PVOID BusContext, PVOID DeviceHandle)
+{
+ DPRINT1("FlushTransfers\n");
+}
+
+VOID
+USB_BUSIFFN
+SetDeviceHandleData(PVOID BusContext, PVOID DeviceHandle, PDEVICE_OBJECT UsbDevicePdo)
+{
+ DPRINT1("SetDeviceHandleData called\n");
+}
+
+
+/* USB_BUS_INTERFACE_USBDI_V2 Functions */
+
+NTSTATUS
+USB_BUSIFFN
+GetUSBDIVersion(PVOID BusContext, PUSBD_VERSION_INFORMATION VersionInformation, PULONG
HcdCapabilites)
+{
+ DPRINT1("GetUSBDIVersion called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+QueryBusTime(PVOID BusContext, PULONG CurrentFrame)
+{
+ DPRINT1("QueryBusTime called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+SubmitIsoOutUrb(PVOID BusContext, PURB Urb)
+{
+ DPRINT1("SubmitIsoOutUrb called\n");
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USB_BUSIFFN
+QueryBusInformation(PVOID BusContext,
+ ULONG Level,
+ PVOID BusInformationBuffer,
+ PULONG BusInformationBufferLength,
+ PULONG BusInformationActualLength)
+{
+ DPRINT1("QueryBusInformation called\n");
+ return STATUS_SUCCESS;
+}
+
+BOOLEAN
+USB_BUSIFFN
+IsDeviceHighSpeed(PVOID BusCOntext)
+{
+ DPRINT1("IsDeviceHighSpeed called\n");
+ return TRUE;
+}
+
+NTSTATUS
+USB_BUSIFFN
+EnumLogEntry(PVOID BusContext, ULONG DriverTag, ULONG EnumTag, ULONG P1, ULONG P2)
+{
+ DPRINT1("EnumLogEntry called\n");
+ return STATUS_SUCCESS;
+}
+
Propchange: trunk/reactos/drivers/usb/usbehci/usbiffn.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/drivers/usb/usbehci/usbiffn.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/usbiff…
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/usbiffn.h (added)
+++ trunk/reactos/drivers/usb/usbehci/usbiffn.h [iso-8859-1] Wed Feb 10 13:21:23 2010
@@ -1,0 +1,200 @@
+#ifndef __USBIFFN_H__
+#define __USBIFFN_H__
+
+#define USB_BUSIFFN __stdcall
+#include <ntifs.h>
+#include <ntddk.h>
+#include <usb.h>
+
+/* usbbusif.h and hubbusif.h need to be imported */
+typedef PVOID PUSB_DEVICE_HANDLE;
+
+typedef
+VOID
+USB_BUSIFFN
+RH_INIT_CALLBACK (PVOID CallBackContext);
+
+typedef RH_INIT_CALLBACK *PRH_INIT_CALLBACK;
+
+typedef struct _USB_EXTPORT_INFORMATION_0
+{
+ ULONG PhysicalPortNumber;
+ ULONG PortLabelNumber;
+ USHORT VidOverride;
+ USHORT PidOverride;
+ ULONG PortAttributes;
+} USB_EXTPORT_INFORMATION_0, *PUSB_EXTPORT_INFORMATION;
+
+typedef struct _USB_EXTHUB_INFORMATION_0
+{
+ ULONG InformationLevel;
+ ULONG NumberOfPorts;
+ USB_EXTPORT_INFORMATION_0 Port[255];
+} USB_EXTHUB_INFORMATION_0, *PUSB_EXTHUB_INFORMATION_0;
+
+typedef struct _USB_BUS_INTERFACE_USBDI_V2
+{
+ USHORT Size;
+ USHORT Version;
+ PVOID BusContext;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+
+ PVOID GetUSBDIVersion;
+ PVOID QueryBusTime;
+ PVOID SubmitIsoOutUrb;
+ PVOID QueryBusInformation;
+ PVOID IsDeviceHighSpeed;
+ PVOID EnumLogEntry;
+} USB_BUS_INTERFACE_USBDI_V2, *PUSB_BUS_INTERFACE_USBDI_V2;
+
+typedef struct _USB_BUS_INTERFACE_HUB_V5
+{
+ USHORT Size;
+ USHORT Version;
+ PVOID BusContext;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+
+ PVOID CreateUsbDevice;
+ PVOID InitializeUsbDevice;
+ PVOID GetUsbDescriptors;
+ PVOID RemoveUsbDevice;
+ PVOID RestoreUsbDevice;
+ PVOID GetPortHackFlags;
+ PVOID QueryDeviceInformation;
+ PVOID GetControllerInformation;
+ PVOID ControllerSelectiveSuspend;
+ PVOID GetExtendedHubInformation;
+ PVOID GetRootHubSymbolicName;
+ PVOID GetDeviceBusContext;
+ PVOID Initialize20Hub;
+ PVOID RootHubInitNotification;
+ PVOID FlushTransfers;
+ PVOID SetDeviceHandleData;
+} USB_BUS_INTERFACE_HUB_V5, *PUSB_BUS_INTERFACE_HUB_V5;
+
+VOID
+USB_BUSIFFN
+InterfaceReference(PVOID BusContext);
+
+VOID
+USB_BUSIFFN
+InterfaceDereference(PVOID BusContext);
+
+NTSTATUS
+USB_BUSIFFN
+CreateUsbDevice(PVOID BusContext,
+ PUSB_DEVICE_HANDLE *NewDevice,
+ PUSB_DEVICE_HANDLE HubDeviceHandle,
+ USHORT PortStatus, USHORT PortNumber);
+
+NTSTATUS
+USB_BUSIFFN
+InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle);
+
+NTSTATUS
+USB_BUSIFFN
+GetUsbDescriptors(PVOID BusContext,
+ PUSB_DEVICE_HANDLE DeviceHandle,
+ PUCHAR DeviceDescriptorBuffer,
+ PULONG DeviceDescriptorBufferLength,
+ PUCHAR ConfigurationBuffer,
+ PULONG ConfigDescriptorBufferLength);
+
+NTSTATUS
+USB_BUSIFFN
+RemoveUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle, ULONG Flags);
+
+NTSTATUS
+USB_BUSIFFN
+RestoreUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE OldDeviceHandle, PUSB_DEVICE_HANDLE
NewDeviceHandle);
+
+NTSTATUS
+USB_BUSIFFN
+GetPortHackFlags(PVOID BusContext, PULONG Flags);
+
+NTSTATUS
+USB_BUSIFFN
+QueryDeviceInformation(PVOID BusContext,
+ PUSB_DEVICE_HANDLE DeviceHandle,
+ PVOID DeviceInformationBuffer,
+ ULONG DeviceInformationBufferLength,
+ PULONG LengthReturned);
+
+NTSTATUS
+USB_BUSIFFN
+GetControllerInformation(PVOID BusContext,
+ PVOID ControllerInformationBuffer,
+ ULONG ControllerInformationBufferLength,
+ PULONG LengthReturned);
+
+NTSTATUS
+USB_BUSIFFN
+ControllerSelectiveSuspend(PVOID BusContext, BOOLEAN Enable);
+
+NTSTATUS
+USB_BUSIFFN
+GetExtendedHubInformation(PVOID BusContext,
+ PDEVICE_OBJECT HubPhysicalDeviceObject,
+ PVOID HubInformationBuffer,
+ ULONG HubInformationBufferLength,
+ PULONG LengthReturned);
+
+NTSTATUS
+USB_BUSIFFN
+GetRootHubSymbolicName(PVOID BusContext,
+ PVOID HubSymNameBuffer,
+ ULONG HubSymNameBufferLength,
+ PULONG HubSymNameActualLength);
+
+PVOID
+USB_BUSIFFN
+GetDeviceBusContext(PVOID HubBusContext, PVOID DeviceHandle);
+
+NTSTATUS
+USB_BUSIFFN
+Initialize20Hub(PVOID BusContext, PUSB_DEVICE_HANDLE HubDeviceHandle, ULONG TtCount);
+
+NTSTATUS
+USB_BUSIFFN
+RootHubInitNotification(PVOID BusContext, PVOID CallbackContext, PRH_INIT_CALLBACK
CallbackRoutine);
+
+VOID
+USB_BUSIFFN
+FlushTransfers(PVOID BusContext, PVOID DeviceHandle);
+
+VOID
+USB_BUSIFFN
+SetDeviceHandleData(PVOID BusContext, PVOID DeviceHandle, PDEVICE_OBJECT UsbDevicePdo);
+
+NTSTATUS
+USB_BUSIFFN
+GetUSBDIVersion(PVOID BusContext, PUSBD_VERSION_INFORMATION VersionInformation, PULONG
HcdCapabilites);
+
+NTSTATUS
+USB_BUSIFFN
+QueryBusTime(PVOID BusContext, PULONG CurrentFrame);
+
+NTSTATUS
+USB_BUSIFFN
+SubmitIsoOutUrb(PVOID BusContext, PURB Urb);
+
+NTSTATUS
+USB_BUSIFFN
+QueryBusInformation(PVOID BusContext,
+ ULONG Level,
+ PVOID BusInformationBuffer,
+ PULONG BusInformationBufferLength,
+ PULONG BusInformationActualLength);
+
+BOOLEAN
+USB_BUSIFFN
+IsDeviceHighSpeed(PVOID BusCOntext);
+
+NTSTATUS
+USB_BUSIFFN
+EnumLogEntry(PVOID BusContext, ULONG DriverTag, ULONG EnumTag, ULONG P1, ULONG P2);
+
+#endif
+
Propchange: trunk/reactos/drivers/usb/usbehci/usbiffn.h
------------------------------------------------------------------------------
svn:eol-style = native