mirror of
https://github.com/reactos/reactos.git
synced 2024-10-07 01:44:21 +00:00
[usb/usbehci]
- Fix flags settings for PortStatus and PortChange so that the correct flags are set when hub driver sets/requests them. - Use FastMutex to protect access to async queue and frame list. - For USB CONFIG DESC, Check the output buffer size before attempting to write all configuration descriptors. - Fix a bug that caused bmRequestType to be incorret value when requesting configuration and string descriptors. - Modify some debugging to make it easier to see debug messages from usbhub driver. svn path=/trunk/; revision=48704
This commit is contained in:
parent
38a87f0176
commit
639f26f1b5
|
@ -19,6 +19,13 @@ EhciDefferedRoutine(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVO
|
|||
ULONG CStatus;
|
||||
|
||||
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION) DeferredContext;
|
||||
|
||||
if (!FdoDeviceExtension->Pdo)
|
||||
{
|
||||
DPRINT1("PDO not set yet!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
PdoDeviceExtension = (PPDO_DEVICE_EXTENSION) FdoDeviceExtension->Pdo->DeviceExtension;
|
||||
|
||||
CStatus = (ULONG) SystemArgument2;
|
||||
|
@ -80,7 +87,8 @@ EhciDefferedRoutine(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVO
|
|||
tmp = READ_REGISTER_ULONG((PULONG)((Base + EHCI_PORTSC) + (4 * i)));
|
||||
|
||||
PdoDeviceExtension->ChildDeviceCount++;
|
||||
PdoDeviceExtension->Ports[i].PortStatus |= USB_PORT_STATUS_HIGH_SPEED | USB_PORT_STATUS_CONNECT;
|
||||
PdoDeviceExtension->Ports[i].PortStatus &= ~0x8000;
|
||||
PdoDeviceExtension->Ports[i].PortStatus |= USB_PORT_STATUS_CONNECT;
|
||||
PdoDeviceExtension->Ports[i].PortChange |= USB_PORT_STATUS_CONNECT;
|
||||
|
||||
PdoDeviceExtension->HaltQueue = FALSE;
|
||||
|
@ -194,7 +202,7 @@ StartEhci(PDEVICE_OBJECT DeviceObject)
|
|||
LONG tmp2;
|
||||
ULONG base;
|
||||
|
||||
DPRINT1("Starting Ehci controller\n");
|
||||
DPRINT("Starting Ehci controller\n");
|
||||
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||
base = (ULONG)FdoDeviceExtension->ResourceMemory;
|
||||
|
||||
|
@ -408,6 +416,8 @@ StartDevice(PDEVICE_OBJECT DeviceObject, PCM_PARTIAL_RESOURCE_LIST raw, PCM_PART
|
|||
/* Zeroize it */
|
||||
RtlZeroMemory(FdoDeviceExtension->PeriodicFramList, sizeof(ULONG) * 1024);
|
||||
|
||||
ExInitializeFastMutex(&FdoDeviceExtension->FrameListMutex);
|
||||
|
||||
/* Allocate Common Buffer for Async List Head Queue */
|
||||
FdoDeviceExtension->AsyncListQueueHeadPtr =
|
||||
FdoDeviceExtension->pDmaAdapter->DmaOperations->AllocateCommonBuffer(FdoDeviceExtension->pDmaAdapter,
|
||||
|
@ -427,6 +437,8 @@ StartDevice(PDEVICE_OBJECT DeviceObject, PCM_PARTIAL_RESOURCE_LIST raw, PCM_PART
|
|||
/* FIXME: Same as FIXME above */
|
||||
20800);
|
||||
|
||||
ExInitializeFastMutex(&FdoDeviceExtension->AsyncListMutex);
|
||||
|
||||
Status = IoGetDeviceProperty(FdoDeviceExtension->LowerDevice,
|
||||
DevicePropertyAddress,
|
||||
sizeof(ULONG),
|
||||
|
@ -540,6 +552,8 @@ FdoQueryBusRelations(
|
|||
|
||||
DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||
|
||||
DPRINT1("Ehci: QueryBusRelations\n");
|
||||
|
||||
/* Create the PDO with the next available number */
|
||||
while (TRUE)
|
||||
{
|
||||
|
@ -623,7 +637,7 @@ FdoDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
|||
{
|
||||
case IRP_MN_START_DEVICE:
|
||||
{
|
||||
DPRINT1("START_DEVICE\n");
|
||||
DPRINT1("Ehci: START_DEVICE\n");
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
Status = ForwardAndWait(DeviceObject, Irp);
|
||||
|
||||
|
@ -634,20 +648,20 @@ FdoDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
|||
}
|
||||
case IRP_MN_QUERY_DEVICE_RELATIONS:
|
||||
{
|
||||
DPRINT1("IRP_MN_QUERY_DEVICE_RELATIONS\n");
|
||||
DPRINT1("Ehci: IRP_MN_QUERY_DEVICE_RELATIONS\n");
|
||||
switch(Stack->Parameters.QueryDeviceRelations.Type)
|
||||
{
|
||||
case BusRelations:
|
||||
{
|
||||
PDEVICE_RELATIONS DeviceRelations = NULL;
|
||||
DPRINT("BusRelations\n");
|
||||
DPRINT1("Ehci: BusRelations\n");
|
||||
Status = FdoQueryBusRelations(DeviceObject, &DeviceRelations);
|
||||
Information = (ULONG_PTR)DeviceRelations;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
DPRINT("Unknown query device relations type\n");
|
||||
DPRINT1("Ehci: Unknown query device relations type\n");
|
||||
Status = STATUS_NOT_IMPLEMENTED;
|
||||
break;
|
||||
}
|
||||
|
@ -656,16 +670,17 @@ FdoDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
|||
}
|
||||
case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
|
||||
{
|
||||
DPRINT("IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
|
||||
DPRINT1("Ehci: IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
|
||||
return ForwardIrpAndForget(DeviceObject, Irp);
|
||||
break;
|
||||
}
|
||||
case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
|
||||
{
|
||||
DPRINT("IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n");
|
||||
DPRINT1("Ehci: IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n");
|
||||
}
|
||||
case IRP_MN_QUERY_INTERFACE:
|
||||
{
|
||||
DPRINT1("Ehci: IRP_MN_QUERY_INTERFACE\n");
|
||||
Status = STATUS_SUCCESS;
|
||||
Information = 0;
|
||||
Status = ForwardIrpAndForget(DeviceObject, Irp);
|
||||
|
@ -674,7 +689,7 @@ FdoDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
|||
}
|
||||
default:
|
||||
{
|
||||
DPRINT1("IRP_MJ_PNP / Unhandled minor function 0x%lx\n", Stack->MinorFunction);
|
||||
DPRINT1("Ehci: IRP_MJ_PNP / Unhandled minor function 0x%lx\n", Stack->MinorFunction);
|
||||
return ForwardIrpAndForget(DeviceObject, Irp);
|
||||
}
|
||||
}
|
||||
|
@ -701,7 +716,7 @@ AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT Pdo)
|
|||
|
||||
PFDO_DEVICE_EXTENSION FdoDeviceExtension;
|
||||
|
||||
DPRINT("Ehci AddDevice\n");
|
||||
DPRINT1("Ehci: AddDevice\n");
|
||||
|
||||
/* Create the FDO with next available number */
|
||||
while (TRUE)
|
||||
|
@ -818,14 +833,14 @@ AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT Pdo)
|
|||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("Unable to register device interface!\n");
|
||||
ASSERT(FALSE);
|
||||
return Status;
|
||||
}
|
||||
else
|
||||
{
|
||||
Status = IoSetDeviceInterfaceState(&InterfaceSymLinkName, TRUE);
|
||||
DPRINT1("SetInterfaceState %x\n", Status);
|
||||
if (!NT_SUCCESS(Status))
|
||||
ASSERT(FALSE);
|
||||
return Status;
|
||||
}
|
||||
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||
|
||||
|
@ -836,6 +851,7 @@ NTSTATUS NTAPI
|
|||
FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||
{
|
||||
PFDO_DEVICE_EXTENSION FdoDeviceExtension;
|
||||
PPDO_DEVICE_EXTENSION PdoDeviceExtension;
|
||||
PIO_STACK_LOCATION Stack = NULL;
|
||||
NTSTATUS Status = STATUS_UNSUCCESSFUL;
|
||||
ULONG_PTR Information = 0;
|
||||
|
@ -843,6 +859,7 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
URB *Urb;
|
||||
|
||||
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
PdoDeviceExtension = (PPDO_DEVICE_EXTENSION) FdoDeviceExtension->Pdo->DeviceExtension;
|
||||
|
||||
ASSERT(FdoDeviceExtension->Common.IsFdo == TRUE);
|
||||
|
||||
|
@ -851,25 +868,31 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
ASSERT(Stack->Parameters.DeviceIoControl.IoControlCode == IOCTL_INTERNAL_USB_SUBMIT_URB);
|
||||
|
||||
Urb = (PURB) Stack->Parameters.Others.Argument1;
|
||||
DPRINT("Header Length %d\n", Urb->UrbHeader.Length);
|
||||
DPRINT("Header Function %d\n", Urb->UrbHeader.Function);
|
||||
DPRINT1("Header Length %d\n", Urb->UrbHeader.Length);
|
||||
DPRINT1("Header Function %d\n", Urb->UrbHeader.Function);
|
||||
|
||||
UsbDevice = Urb->UrbHeader.UsbdDeviceHandle;
|
||||
UsbDevice = DeviceHandleToUsbDevice(PdoDeviceExtension, Urb->UrbHeader.UsbdDeviceHandle);
|
||||
|
||||
if (!UsbDevice)
|
||||
{
|
||||
DPRINT1("Invalid DeviceHandle or device not connected\n");
|
||||
return STATUS_DEVICE_NOT_CONNECTED;
|
||||
}
|
||||
switch (Urb->UrbHeader.Function)
|
||||
{
|
||||
case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
|
||||
{
|
||||
DPRINT1("URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\n");
|
||||
DPRINT1("Ehci: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\n");
|
||||
break;
|
||||
}
|
||||
case URB_FUNCTION_GET_STATUS_FROM_DEVICE:
|
||||
{
|
||||
DPRINT1("URB_FUNCTION_GET_STATUS_FROM_DEVICE\n");
|
||||
DPRINT1("Ehci: URB_FUNCTION_GET_STATUS_FROM_DEVICE\n");
|
||||
break;
|
||||
}
|
||||
case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE:
|
||||
{
|
||||
DPRINT1("Ehci: URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE\n");
|
||||
switch(Urb->UrbControlDescriptorRequest.DescriptorType)
|
||||
{
|
||||
case USB_DEVICE_DESCRIPTOR_TYPE:
|
||||
|
@ -880,30 +903,63 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
}
|
||||
case USB_CONFIGURATION_DESCRIPTOR_TYPE:
|
||||
DPRINT1("USB CONFIG DESC\n");
|
||||
//break;
|
||||
case USB_STRING_DESCRIPTOR_TYPE:
|
||||
DPRINT1("Usb String Descriptor\n");
|
||||
{
|
||||
USB_DEFAULT_PIPE_SETUP_PACKET CtrlSetup;
|
||||
PUSB_STRING_DESCRIPTOR UsbString;
|
||||
BOOLEAN ResultOk;
|
||||
|
||||
CtrlSetup.bmRequestType._BM.Recipient = BMREQUEST_TO_DEVICE;
|
||||
CtrlSetup.bmRequestType._BM.Type = BMREQUEST_STANDARD;
|
||||
CtrlSetup.bmRequestType._BM.Reserved = 0;
|
||||
CtrlSetup.bmRequestType._BM.Dir = BMREQUEST_DEVICE_TO_HOST;
|
||||
CtrlSetup.bRequest = USB_REQUEST_GET_DESCRIPTOR;
|
||||
CtrlSetup.wValue.LowByte = Urb->UrbControlDescriptorRequest.Index;
|
||||
CtrlSetup.wValue.HiByte = Urb->UrbControlDescriptorRequest.DescriptorType;
|
||||
|
||||
if (Urb->UrbControlDescriptorRequest.DescriptorType == USB_STRING_DESCRIPTOR_TYPE)
|
||||
{
|
||||
if ((Urb->UrbControlDescriptorRequest.Index != UsbDevice->DeviceDescriptor.iManufacturer) &&
|
||||
(UsbDevice->DeviceDescriptor.iManufacturer) &&
|
||||
(UsbDevice->DeviceDescriptor.iSerialNumber))
|
||||
{
|
||||
DPRINT1("Invalid Index\n");
|
||||
Urb->UrbHeader.Status = USBD_STATUS_INVALID_PARAMETER;
|
||||
Status = STATUS_SUCCESS;
|
||||
Information = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
CtrlSetup.wIndex.W = Urb->UrbControlDescriptorRequest.LanguageId;
|
||||
RtlZeroMemory(Urb->UrbControlDescriptorRequest.TransferBuffer, Urb->UrbControlDescriptorRequest.TransferBufferLength-1);
|
||||
}
|
||||
else
|
||||
CtrlSetup.wIndex.W = 0;
|
||||
|
||||
CtrlSetup.wLength = Urb->UrbControlDescriptorRequest.TransferBufferLength;
|
||||
|
||||
ResultOk = ExecuteControlRequest(FdoDeviceExtension, &CtrlSetup, UsbDevice->Address, UsbDevice->Port,
|
||||
Urb->UrbControlDescriptorRequest.TransferBuffer, Urb->UrbControlDescriptorRequest.TransferBufferLength);
|
||||
|
||||
if (Urb->UrbControlDescriptorRequest.DescriptorType == USB_STRING_DESCRIPTOR_TYPE)
|
||||
{
|
||||
UsbString = Urb->UrbControlDescriptorRequest.TransferBuffer;
|
||||
DPRINT1("Index %x\n", Urb->UrbControlDescriptorRequest.Index);
|
||||
DPRINT1("BufferLength %x\n", Urb->UrbControlDescriptorRequest.TransferBufferLength);
|
||||
DPRINT1("Length %x\n", UsbString->bLength);
|
||||
if (Urb->UrbControlDescriptorRequest.Index == 0)
|
||||
{
|
||||
DPRINT1("%x\n", (ULONG)Urb->UrbControlDescriptorRequest.TransferBuffer);
|
||||
}
|
||||
else
|
||||
DPRINT1("String %S\n", &UsbString->bString);
|
||||
}
|
||||
UsbString = Urb->UrbControlDescriptorRequest.TransferBuffer;
|
||||
Urb->UrbHeader.Status = USBD_STATUS_SUCCESS;
|
||||
Status = STATUS_SUCCESS;
|
||||
|
||||
Information = UsbString->bLength;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -915,12 +971,13 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
}
|
||||
case URB_FUNCTION_SELECT_CONFIGURATION:
|
||||
{
|
||||
DPRINT1("Selecting Configuration\n");
|
||||
DPRINT1("Ehci: URB_FUNCTION_SELECT_CONFIGURATION\n");
|
||||
DPRINT1("Urb->UrbSelectConfiguration.ConfigurationHandle %x\n",Urb->UrbSelectConfiguration.ConfigurationHandle);
|
||||
break;
|
||||
}
|
||||
case URB_FUNCTION_CLASS_DEVICE:
|
||||
{
|
||||
DPRINT1("Ehci: URB_FUNCTION_CLASS_DEVICE %x\n",Urb->UrbControlVendorClassRequest.Request);
|
||||
switch (Urb->UrbControlVendorClassRequest.Request)
|
||||
{
|
||||
case USB_REQUEST_GET_DESCRIPTOR:
|
||||
|
@ -999,6 +1056,7 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
}
|
||||
case URB_FUNCTION_CLASS_OTHER:
|
||||
{
|
||||
DPRINT1("Ehci: URB_FUNCTION_CLASS_OTHER\n");
|
||||
switch (Urb->UrbControlVendorClassRequest.Request)
|
||||
{
|
||||
case USB_REQUEST_GET_STATUS:
|
||||
|
@ -1099,7 +1157,7 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
}
|
||||
default:
|
||||
{
|
||||
DPRINT1("Unhandled URB %x\n", Urb->UrbHeader.Function);
|
||||
DPRINT1("Ehci: Unhandled URB %x\n", Urb->UrbHeader.Function);
|
||||
//Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ QueueURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp)
|
|||
|
||||
if (Irp->Cancel && IoSetCancelRoutine(Irp, NULL))
|
||||
{
|
||||
DPRINT1("Cancelled!!!!???\n");
|
||||
KeReleaseSpinLock(&DeviceExtension->IrpQueueLock, OldIrql);
|
||||
Irp->IoStatus.Status = STATUS_CANCELLED;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
|
@ -175,15 +176,18 @@ CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension)
|
|||
LONG i, j;
|
||||
|
||||
DPRINT1("USB CONFIG DESC\n");
|
||||
|
||||
if (Urb->UrbControlDescriptorRequest.TransferBufferLength >= UsbDevice->ActiveConfig->ConfigurationDescriptor.wTotalLength)
|
||||
{
|
||||
Urb->UrbControlDescriptorRequest.TransferBufferLength = UsbDevice->ActiveConfig->ConfigurationDescriptor.wTotalLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT1("Buffer to small!!!\n");
|
||||
//ASSERT(FALSE);
|
||||
DPRINT1("TransferBufferLenth %x is too small!!!\n", Urb->UrbControlDescriptorRequest.TransferBufferLength);
|
||||
if (Urb->UrbControlDescriptorRequest.TransferBufferLength < sizeof(USB_CONFIGURATION_DESCRIPTOR))
|
||||
{
|
||||
DPRINT1("Bail!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT(Urb->UrbControlDescriptorRequest.TransferBuffer);
|
||||
|
@ -191,6 +195,14 @@ CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension)
|
|||
|
||||
/* Copy the Configuration Descriptor */
|
||||
RtlCopyMemory(BufPtr, &UsbDevice->ActiveConfig->ConfigurationDescriptor, sizeof(USB_CONFIGURATION_DESCRIPTOR));
|
||||
|
||||
/* If there is no room for all the configs then bail */
|
||||
if (!(Urb->UrbControlDescriptorRequest.TransferBufferLength > sizeof(USB_CONFIGURATION_DESCRIPTOR)))
|
||||
{
|
||||
DPRINT1("Bail!\n");
|
||||
break;
|
||||
}
|
||||
|
||||
BufPtr += sizeof(USB_CONFIGURATION_DESCRIPTOR);
|
||||
for (i = 0; i < UsbDevice->ActiveConfig->ConfigurationDescriptor.bNumInterfaces; i++)
|
||||
{
|
||||
|
@ -348,6 +360,8 @@ CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension)
|
|||
{
|
||||
|
||||
PUSB_HUB_DESCRIPTOR UsbHubDescr = Urb->UrbControlVendorClassRequest.TransferBuffer;
|
||||
|
||||
DPRINT1("Length %x\n", Urb->UrbControlVendorClassRequest.TransferBufferLength);
|
||||
ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0);
|
||||
/* FIXME: Handle more than root hub? */
|
||||
if(Urb->UrbControlVendorClassRequest.TransferBufferLength >= sizeof(USB_HUB_DESCRIPTOR))
|
||||
|
@ -383,7 +397,6 @@ CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension)
|
|||
case USB_REQUEST_GET_STATUS:
|
||||
{
|
||||
DPRINT1("DEVICE: USB_REQUEST_GET_STATUS for port %d\n", Urb->UrbControlVendorClassRequest.Index);
|
||||
|
||||
if (Urb->UrbControlVendorClassRequest.Index == 1)
|
||||
{
|
||||
ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0);
|
||||
|
@ -401,12 +414,17 @@ CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension)
|
|||
}
|
||||
case URB_FUNCTION_CLASS_OTHER:
|
||||
{
|
||||
|
||||
/* FIXME: Each one of these needs to make sure that the index value is a valid for a port (1-8) and return STATUS_UNSUCCESSFUL is not */
|
||||
|
||||
switch (Urb->UrbControlVendorClassRequest.Request)
|
||||
{
|
||||
case USB_REQUEST_GET_STATUS:
|
||||
{
|
||||
DPRINT1("OTHER: USB_REQUEST_GET_STATUS for port %d\n", Urb->UrbControlVendorClassRequest.Index);
|
||||
ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0);
|
||||
DPRINT1("PortStatus %x\n", DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortStatus);
|
||||
DPRINT1("PortChange %x\n", DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange);
|
||||
((PUSHORT)Urb->UrbControlVendorClassRequest.TransferBuffer)[0] = DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortStatus;
|
||||
((PUSHORT)Urb->UrbControlVendorClassRequest.TransferBuffer)[1] = DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange;
|
||||
break;
|
||||
|
@ -443,7 +461,12 @@ CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension)
|
|||
}
|
||||
case PORT_ENABLE:
|
||||
{
|
||||
DPRINT1("Unhandled Set Feature\n");
|
||||
DPRINT1("PORT_ENABLE not implemented\n");
|
||||
break;
|
||||
}
|
||||
case PORT_POWER:
|
||||
{
|
||||
DPRINT1("PORT_POWER not implemented\n");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -128,8 +128,12 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
URB *Urb;
|
||||
|
||||
Urb = (PURB) Stack->Parameters.Others.Argument1;
|
||||
DPRINT("Header Length %d\n", Urb->UrbHeader.Length);
|
||||
DPRINT("Header Function %d\n", Urb->UrbHeader.Function);
|
||||
|
||||
if ((Urb->UrbHeader.Function == URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER) &&
|
||||
(Urb->UrbHeader.UsbdDeviceHandle == PdoDeviceExtension->UsbDevices[0]))
|
||||
{
|
||||
PdoDeviceExtension->HaltQueue = TRUE;
|
||||
}
|
||||
/* Queue all request for now, kernel thread will complete them */
|
||||
QueueURBRequest(PdoDeviceExtension, Irp);
|
||||
Information = 0;
|
||||
|
@ -166,11 +170,11 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
}
|
||||
case IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE:
|
||||
{
|
||||
DPRINT1("IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE %x\n", IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE);
|
||||
DPRINT("Ehci: IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE %x\n", Stack->Parameters.Others.Argument2);
|
||||
if (Stack->Parameters.Others.Argument1)
|
||||
{
|
||||
/* Return the root hubs devicehandle */
|
||||
DPRINT1("Returning RootHub Handle %x\n", PdoDeviceExtension->UsbDevices[0]);
|
||||
DPRINT("Returning RootHub Handle %x\n", PdoDeviceExtension->UsbDevices[0]);
|
||||
*(PVOID *)Stack->Parameters.Others.Argument1 = (PVOID)PdoDeviceExtension->UsbDevices[0];
|
||||
Status = STATUS_SUCCESS;
|
||||
}
|
||||
|
@ -182,13 +186,13 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
}
|
||||
case IOCTL_INTERNAL_USB_GET_HUB_COUNT:
|
||||
{
|
||||
DPRINT1("IOCTL_INTERNAL_USB_GET_HUB_COUNT %x\n", IOCTL_INTERNAL_USB_GET_HUB_COUNT);
|
||||
DPRINT("Ehci: IOCTL_INTERNAL_USB_GET_HUB_COUNT %x\n", IOCTL_INTERNAL_USB_GET_HUB_COUNT);
|
||||
ASSERT(Stack->Parameters.Others.Argument1 != NULL);
|
||||
if (Stack->Parameters.Others.Argument1)
|
||||
{
|
||||
/* FIXME: Determine the number of hubs between the usb device and root hub */
|
||||
DPRINT1("RootHubCount %x\n", *(PULONG)Stack->Parameters.Others.Argument1);
|
||||
*(PULONG)Stack->Parameters.Others.Argument1 = 0;
|
||||
*(PULONG)Stack->Parameters.Others.Argument1 = 1;
|
||||
}
|
||||
Status = STATUS_SUCCESS;
|
||||
break;
|
||||
|
@ -215,8 +219,7 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
}
|
||||
case IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO:
|
||||
{
|
||||
DPRINT1("IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO\n");
|
||||
|
||||
DPRINT("Ehci: IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO Arg1 %x, Arg2 %x\n", Stack->Parameters.Others.Argument1, Stack->Parameters.Others.Argument2);
|
||||
if (Stack->Parameters.Others.Argument1)
|
||||
*(PVOID *)Stack->Parameters.Others.Argument1 = FdoDeviceExtension->Pdo;
|
||||
if (Stack->Parameters.Others.Argument2)
|
||||
|
@ -229,7 +232,7 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
case IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION:
|
||||
{
|
||||
PUSB_IDLE_CALLBACK_INFO CallBackInfo;
|
||||
DPRINT1("IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION\n");
|
||||
DPRINT1("Ehci: IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION\n");
|
||||
/* FIXME: Set Callback for safe power down */
|
||||
CallBackInfo = Stack->Parameters.DeviceIoControl.Type3InputBuffer;
|
||||
DPRINT1("IdleCallback %x\n", CallBackInfo->IdleCallback);
|
||||
|
@ -368,6 +371,7 @@ PdoDispatchPnp(
|
|||
UNICODE_STRING InterfaceSymLinkName;
|
||||
LONG i;
|
||||
|
||||
DPRINT1("Ehci: PDO StartDevice\n");
|
||||
PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
|
||||
|
||||
|
@ -376,8 +380,11 @@ PdoDispatchPnp(
|
|||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
PdoDeviceExtension->Ports[i].PortStatus = USB_PORT_STATUS_ENABLE;
|
||||
PdoDeviceExtension->Ports[i].PortStatus = USB_PORT_STATUS_HIGH_SPEED | 0x8000;
|
||||
PdoDeviceExtension->Ports[i].PortChange = 0;
|
||||
|
||||
if (!FdoDeviceExtension->ECHICaps.HCSParams.PortPowerControl)
|
||||
PdoDeviceExtension->Ports[i].PortStatus |= USB_PORT_STATUS_POWER;
|
||||
}
|
||||
|
||||
RtlCopyMemory(&RootHubDevice->DeviceDescriptor,
|
||||
|
@ -441,13 +448,13 @@ PdoDispatchPnp(
|
|||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("Failed to register interface\n");
|
||||
ASSERT(FALSE);
|
||||
return Status;
|
||||
}
|
||||
else
|
||||
{
|
||||
Status = IoSetDeviceInterfaceState(&InterfaceSymLinkName, TRUE);
|
||||
if (!NT_SUCCESS(Status))
|
||||
ASSERT(FALSE);
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = STATUS_SUCCESS;
|
||||
|
@ -455,6 +462,7 @@ PdoDispatchPnp(
|
|||
}
|
||||
case IRP_MN_QUERY_DEVICE_RELATIONS:
|
||||
{
|
||||
DPRINT1("Ehci: PDO QueryDeviceRelations\n");
|
||||
switch (Stack->Parameters.QueryDeviceRelations.Type)
|
||||
{
|
||||
case TargetDeviceRelation:
|
||||
|
@ -499,6 +507,7 @@ PdoDispatchPnp(
|
|||
}
|
||||
case IRP_MN_QUERY_CAPABILITIES:
|
||||
{
|
||||
DPRINT("Ehci: PDO Query Capabilities\n");
|
||||
PDEVICE_CAPABILITIES DeviceCapabilities;
|
||||
ULONG i;
|
||||
|
||||
|
@ -538,6 +547,7 @@ PdoDispatchPnp(
|
|||
|
||||
case IRP_MN_QUERY_ID:
|
||||
{
|
||||
DPRINT("Ehci: PDO Query ID\n");
|
||||
Status = PdoQueryId(DeviceObject, Irp, &Information);
|
||||
break;
|
||||
}
|
||||
|
@ -549,6 +559,8 @@ PdoDispatchPnp(
|
|||
PPDO_DEVICE_EXTENSION PdoDeviceExtension;
|
||||
PFDO_DEVICE_EXTENSION FdoDeviceExtension;
|
||||
|
||||
DPRINT("Ehci: PDO Query Interface\n");
|
||||
|
||||
PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
|
||||
|
||||
|
@ -558,10 +570,6 @@ PdoDispatchPnp(
|
|||
DPRINT1("Failed to create string from GUID!\n");
|
||||
}
|
||||
|
||||
DPRINT("Interface GUID requested %wZ\n", &GuidString);
|
||||
DPRINT("QueryInterface.Size %x\n", Stack->Parameters.QueryInterface.Size);
|
||||
DPRINT("QueryInterface.Version %x\n", Stack->Parameters.QueryInterface.Version);
|
||||
|
||||
/* Assume success */
|
||||
Status = STATUS_SUCCESS;
|
||||
Information = 0;
|
||||
|
|
|
@ -125,6 +125,8 @@ ExecuteControlRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PUSB_DEFAULT_PIPE_S
|
|||
|
||||
DPRINT1("ExecuteControlRequest: Buffer %x, Length %x\n", Buffer, BufferLength);
|
||||
|
||||
ExAcquireFastMutex(&DeviceExtension->AsyncListMutex);
|
||||
|
||||
Base = (ULONG) DeviceExtension->ResourceMemory;
|
||||
|
||||
/* Set up the QUEUE HEAD in memory */
|
||||
|
@ -142,6 +144,7 @@ ExecuteControlRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PUSB_DEFAULT_PIPE_S
|
|||
QueueHead->EndPointCapabilities2.PortNumber = Port;
|
||||
QueueHead->EndPointCapabilities1.DeviceAddress = Address;
|
||||
|
||||
|
||||
CtrlSetup->bmRequestType._BM.Recipient = SetupPacket->bmRequestType._BM.Recipient;
|
||||
CtrlSetup->bmRequestType._BM.Type = SetupPacket->bmRequestType._BM.Type;
|
||||
CtrlSetup->bmRequestType._BM.Dir = SetupPacket->bmRequestType._BM.Dir;
|
||||
|
@ -208,5 +211,8 @@ ExecuteControlRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PUSB_DEFAULT_PIPE_S
|
|||
DPRINT1("Unable to copy data to buffer\n");
|
||||
}
|
||||
|
||||
|
||||
ExReleaseFastMutex(&DeviceExtension->AsyncListMutex);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -390,6 +390,9 @@ typedef struct _FDO_DEVICE_EXTENSION
|
|||
PHYSICAL_ADDRESS PeriodicFramListPhysAddr;
|
||||
PHYSICAL_ADDRESS AsyncListQueueHeadPtrPhysAddr;
|
||||
|
||||
FAST_MUTEX AsyncListMutex;
|
||||
FAST_MUTEX FrameListMutex;
|
||||
|
||||
BOOLEAN AsyncComplete;
|
||||
|
||||
PULONG ResourceBase;
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
PVOID InternalCreateUsbDevice(UCHAR DeviceNumber, ULONG Port, PUSB_DEVICE Parent, BOOLEAN Hub)
|
||||
{
|
||||
PUSB_DEVICE UsbDevicePointer = NULL;
|
||||
|
||||
UsbDevicePointer = ExAllocatePoolWithTag(NonPagedPool, sizeof(USB_DEVICE), USB_POOL_TAG);
|
||||
|
||||
if (!UsbDevicePointer)
|
||||
|
@ -42,14 +43,14 @@ VOID
|
|||
USB_BUSIFFN
|
||||
InterfaceReference(PVOID BusContext)
|
||||
{
|
||||
DPRINT1("InterfaceReference called\n");
|
||||
DPRINT1("Ehci: InterfaceReference called\n");
|
||||
}
|
||||
|
||||
VOID
|
||||
USB_BUSIFFN
|
||||
InterfaceDereference(PVOID BusContext)
|
||||
{
|
||||
DPRINT1("InterfaceDereference called\n");
|
||||
DPRINT1("Ehci: InterfaceDereference called\n");
|
||||
}
|
||||
|
||||
/* Bus Interface Hub V5 Functions */
|
||||
|
@ -65,7 +66,7 @@ CreateUsbDevice(PVOID BusContext,
|
|||
PUSB_DEVICE UsbDevice;
|
||||
LONG i = 0;
|
||||
PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension;
|
||||
DPRINT("CreateUsbDevice: HubDeviceHandle %x, PortStatus %x, PortNumber %x\n", HubDeviceHandle, PortStatus, PortNumber);
|
||||
DPRINT1("Ehci: CreateUsbDevice: HubDeviceHandle %x, PortStatus %x, PortNumber %x\n", HubDeviceHandle, PortStatus, PortNumber);
|
||||
|
||||
if (PdoDeviceExtension->UsbDevices[0] != HubDeviceHandle)
|
||||
{
|
||||
|
@ -116,7 +117,7 @@ InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle)
|
|||
PUCHAR Ptr;
|
||||
LONG i, j, k;
|
||||
|
||||
DPRINT1("InitializeUsbDevice called, device %x\n", DeviceHandle);
|
||||
DPRINT1("Ehci: InitializeUsbDevice called, device %x\n", DeviceHandle);
|
||||
PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension;
|
||||
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
|
||||
|
||||
|
@ -141,6 +142,7 @@ InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle)
|
|||
/* Set the device address */
|
||||
CtrlSetup.bmRequestType._BM.Recipient = BMREQUEST_TO_DEVICE;
|
||||
CtrlSetup.bmRequestType._BM.Type = BMREQUEST_STANDARD;
|
||||
CtrlSetup.bmRequestType._BM.Reserved = 0;
|
||||
CtrlSetup.bmRequestType._BM.Dir = BMREQUEST_HOST_TO_DEVICE;
|
||||
CtrlSetup.bRequest = USB_REQUEST_SET_ADDRESS;
|
||||
CtrlSetup.wValue.W = UsbDevice->Address;
|
||||
|
@ -209,6 +211,7 @@ InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle)
|
|||
sizeof(USB_CONFIGURATION) + sizeof(PVOID) * ConfigDesc->bNumInterfaces,
|
||||
USB_POOL_TAG);
|
||||
UsbDevice->Configs[i]->Device = UsbDevice;
|
||||
|
||||
RtlCopyMemory(&UsbDevice->Configs[0]->ConfigurationDescriptor,
|
||||
ConfigDesc, sizeof(USB_CONFIGURATION_DESCRIPTOR));
|
||||
Ptr += ConfigDesc->bLength;
|
||||
|
@ -252,7 +255,7 @@ GetUsbDescriptors(PVOID BusContext,
|
|||
PULONG ConfigDescriptorBufferLength)
|
||||
{
|
||||
PUSB_DEVICE UsbDevice;
|
||||
DPRINT1("GetUsbDescriptor %x, %x, %x, %x\n", DeviceDescriptorBuffer, *DeviceDescriptorBufferLength, ConfigDescriptorBuffer, *ConfigDescriptorBufferLength);
|
||||
DPRINT1("Ehci: GetUsbDescriptor %x, %x, %x, %x\n", DeviceDescriptorBuffer, *DeviceDescriptorBufferLength, ConfigDescriptorBuffer, *ConfigDescriptorBufferLength);
|
||||
|
||||
UsbDevice = DeviceHandleToUsbDevice(BusContext, DeviceHandle);
|
||||
|
||||
|
@ -267,6 +270,7 @@ GetUsbDescriptors(PVOID BusContext,
|
|||
RtlCopyMemory(DeviceDescriptorBuffer, &UsbDevice->DeviceDescriptor, sizeof(USB_DEVICE_DESCRIPTOR));
|
||||
*DeviceDescriptorBufferLength = sizeof(USB_DEVICE_DESCRIPTOR);
|
||||
}
|
||||
|
||||
if ((ConfigDescriptorBuffer) && (ConfigDescriptorBufferLength))
|
||||
{
|
||||
RtlCopyMemory(ConfigDescriptorBuffer, &UsbDevice->ActiveConfig->ConfigurationDescriptor, sizeof(USB_CONFIGURATION_DESCRIPTOR));
|
||||
|
@ -340,7 +344,7 @@ NTSTATUS
|
|||
USB_BUSIFFN
|
||||
RestoreUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE OldDeviceHandle, PUSB_DEVICE_HANDLE NewDeviceHandle)
|
||||
{
|
||||
DPRINT1("RestoreUsbDevice called\n");
|
||||
DPRINT1("Ehci: RestoreUsbDevice called\n");
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
@ -348,7 +352,7 @@ NTSTATUS
|
|||
USB_BUSIFFN
|
||||
GetPortHackFlags(PVOID BusContext, PULONG Flags)
|
||||
{
|
||||
DPRINT1("GetPortHackFlags called\n");
|
||||
DPRINT1("Ehci: GetPortHackFlags called\n");
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
@ -365,7 +369,7 @@ QueryDeviceInformation(PVOID BusContext,
|
|||
ULONG SizeNeeded;
|
||||
LONG i;
|
||||
|
||||
DPRINT1("QueryDeviceInformation (%x, %x, %x, %d, %x\n", BusContext, DeviceHandle, DeviceInformationBuffer, DeviceInformationBufferLength, LengthReturned);
|
||||
DPRINT1("Ehci: QueryDeviceInformation (%x, %x, %x, %d, %x\n", BusContext, DeviceHandle, DeviceInformationBuffer, DeviceInformationBufferLength, LengthReturned);
|
||||
|
||||
UsbDevice = DeviceHandleToUsbDevice(BusContext, DeviceHandle);
|
||||
|
||||
|
@ -418,7 +422,7 @@ GetControllerInformation(PVOID BusContext,
|
|||
{
|
||||
PUSB_CONTROLLER_INFORMATION_0 ControllerInfo;
|
||||
|
||||
DPRINT1("GetControllerInformation called\n");
|
||||
DPRINT1("Ehci: GetControllerInformation called\n");
|
||||
|
||||
ControllerInfo = ControllerInformationBuffer;
|
||||
|
||||
|
@ -447,7 +451,7 @@ NTSTATUS
|
|||
USB_BUSIFFN
|
||||
ControllerSelectiveSuspend(PVOID BusContext, BOOLEAN Enable)
|
||||
{
|
||||
DPRINT1("ControllerSelectiveSuspend called\n");
|
||||
DPRINT1("Ehci: ControllerSelectiveSuspend called\n");
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
@ -464,13 +468,16 @@ GetExtendedHubInformation(PVOID BusContext,
|
|||
PPDO_DEVICE_EXTENSION PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension;
|
||||
PFDO_DEVICE_EXTENSION FdoDeviceExntension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
|
||||
LONG i;
|
||||
DPRINT1("GetExtendedHubInformation\n");
|
||||
DPRINT1("Ehci: GetExtendedHubInformation BusContext %x, PDO %x\n", BusContext, HubPhysicalDeviceObject);
|
||||
/* Set the default return value */
|
||||
*LengthReturned = 0;
|
||||
/* Caller must have set InformationLevel to 0 */
|
||||
|
||||
DPRINT1("InformationLevel %x\n", UsbExtHubInfo->InformationLevel);
|
||||
|
||||
/* Caller is suppose to have set InformationLevel to 0. However usbehci from MS seems to ignore this */
|
||||
if (UsbExtHubInfo->InformationLevel != 0)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
DPRINT1("InformationLevel should really be set to 0. Ignoring\n");
|
||||
}
|
||||
|
||||
UsbExtHubInfo->NumberOfPorts = 8;
|
||||
|
@ -496,7 +503,7 @@ GetRootHubSymbolicName(PVOID BusContext,
|
|||
ULONG HubSymNameBufferLength,
|
||||
PULONG HubSymNameActualLength)
|
||||
{
|
||||
DPRINT1("GetRootHubSymbolicName called\n");
|
||||
DPRINT1("Ehci: GetRootHubSymbolicName called\n");
|
||||
|
||||
if (HubSymNameBufferLength < 16)
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
|
@ -512,7 +519,7 @@ GetDeviceBusContext(PVOID HubBusContext, PVOID DeviceHandle)
|
|||
{
|
||||
PUSB_DEVICE UsbDevice;
|
||||
|
||||
DPRINT1("GetDeviceBusContext called\n");
|
||||
DPRINT1("Ehci: GetDeviceBusContext called\n");
|
||||
UsbDevice = DeviceHandleToUsbDevice(HubBusContext, DeviceHandle);
|
||||
|
||||
if (!UsbDevice)
|
||||
|
@ -528,7 +535,7 @@ NTSTATUS
|
|||
USB_BUSIFFN
|
||||
Initialize20Hub(PVOID BusContext, PUSB_DEVICE_HANDLE HubDeviceHandle, ULONG TtCount)
|
||||
{
|
||||
DPRINT1("Initialize20Hub called, HubDeviceHandle: %x\n", HubDeviceHandle);
|
||||
DPRINT1("Ehci: Initialize20Hub called, HubDeviceHandle: %x\n", HubDeviceHandle);
|
||||
|
||||
/* FIXME: */
|
||||
/* Create the Irp Queue for SCE */
|
||||
|
@ -541,7 +548,7 @@ USB_BUSIFFN
|
|||
RootHubInitNotification(PVOID BusContext, PVOID CallbackContext, PRH_INIT_CALLBACK CallbackRoutine)
|
||||
{
|
||||
PPDO_DEVICE_EXTENSION PdoDeviceExtension;
|
||||
DPRINT1("RootHubInitNotification %x, %x, %x\n", BusContext, CallbackContext, CallbackRoutine);
|
||||
DPRINT1("Ehci: RootHubInitNotification %x, %x, %x\n", BusContext, CallbackContext, CallbackRoutine);
|
||||
|
||||
PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension;
|
||||
PdoDeviceExtension->CallbackContext = CallbackContext;
|
||||
|
@ -579,7 +586,7 @@ VOID
|
|||
USB_BUSIFFN
|
||||
SetDeviceHandleData(PVOID BusContext, PVOID DeviceHandle, PDEVICE_OBJECT UsbDevicePdo)
|
||||
{
|
||||
DPRINT1("SetDeviceHandleData called\n");
|
||||
DPRINT1("Ehci: SetDeviceHandleData called\n");
|
||||
}
|
||||
|
||||
|
||||
|
@ -589,7 +596,7 @@ VOID
|
|||
USB_BUSIFFN
|
||||
GetUSBDIVersion(PVOID BusContext, PUSBD_VERSION_INFORMATION VersionInformation, PULONG HcdCapabilites)
|
||||
{
|
||||
DPRINT1("GetUSBDIVersion called\n");
|
||||
DPRINT1("Ehci: GetUSBDIVersion called\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -597,7 +604,7 @@ NTSTATUS
|
|||
USB_BUSIFFN
|
||||
QueryBusTime(PVOID BusContext, PULONG CurrentFrame)
|
||||
{
|
||||
DPRINT1("QueryBusTime called\n");
|
||||
DPRINT1("Ehci: QueryBusTime called\n");
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
@ -605,7 +612,7 @@ NTSTATUS
|
|||
USB_BUSIFFN
|
||||
SubmitIsoOutUrb(PVOID BusContext, PURB Urb)
|
||||
{
|
||||
DPRINT1("SubmitIsoOutUrb called\n");
|
||||
DPRINT1("Ehci: SubmitIsoOutUrb called\n");
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
@ -617,7 +624,7 @@ QueryBusInformation(PVOID BusContext,
|
|||
PULONG BusInformationBufferLength,
|
||||
PULONG BusInformationActualLength)
|
||||
{
|
||||
DPRINT1("QueryBusInformation called\n");
|
||||
DPRINT1("Ehci: QueryBusInformation called\n");
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
@ -625,7 +632,7 @@ BOOLEAN
|
|||
USB_BUSIFFN
|
||||
IsDeviceHighSpeed(PVOID BusContext)
|
||||
{
|
||||
DPRINT1("IsDeviceHighSpeed called\n");
|
||||
DPRINT1("Ehci: IsDeviceHighSpeed called\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -633,6 +640,6 @@ NTSTATUS
|
|||
USB_BUSIFFN
|
||||
EnumLogEntry(PVOID BusContext, ULONG DriverTag, ULONG EnumTag, ULONG P1, ULONG P2)
|
||||
{
|
||||
DPRINT1("EnumLogEntry called\n");
|
||||
DPRINT1("Ehci: EnumLogEntry called\n");
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue