[USBOHCI]

- Fix regressions introduced by libusb

svn path=/trunk/; revision=55913
This commit is contained in:
Johannes Anderwald 2012-02-29 09:15:42 +00:00
parent bf426aafef
commit c131df4a4c
10 changed files with 87 additions and 38 deletions

View file

@ -32,7 +32,7 @@ VOID
NTAPI
StatusChangeWorkItemRoutine(PVOID Context);
class CUSBHardwareDevice : public IUSBHardwareDevice
class CUSBHardwareDevice : public IOHCIHardwareDevice
{
public:
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
@ -125,6 +125,7 @@ CUSBHardwareDevice::QueryInterface(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::Initialize(
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT FunctionalDeviceObject,
@ -135,6 +136,7 @@ CUSBHardwareDevice::Initialize(
PCI_COMMON_CONFIG PciConfig;
NTSTATUS Status;
ULONG BytesRead;
PUSBQUEUE Queue;
DPRINT("CUSBHardwareDevice::Initialize\n");
@ -151,13 +153,19 @@ CUSBHardwareDevice::Initialize(
//
// Create the UsbQueue class that will handle the Asynchronous and Periodic Schedules
//
Status = CreateUSBQueue((PUSBQUEUE*)&m_UsbQueue);
Status = CreateUSBQueue(&Queue);
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to create UsbQueue!\n");
return Status;
}
// get ohci queue
m_UsbQueue = POHCIQUEUE(Queue);
// sanity check
ASSERT(m_UsbQueue);
//
// store device objects
//
@ -205,6 +213,7 @@ CUSBHardwareDevice::Initialize(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::PnpStart(
PCM_RESOURCE_LIST RawResources,
PCM_RESOURCE_LIST TranslatedResources)
@ -351,7 +360,7 @@ CUSBHardwareDevice::PnpStart(
//
// Initialize the UsbQueue now that we have an AdapterObject.
//
Status = m_UsbQueue->Initialize(PUSBHARDWAREDEVICE(this), m_Adapter, m_MemoryManager, NULL);
Status = m_UsbQueue->Initialize(this, m_Adapter, m_MemoryManager, NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to Initialize the UsbQueue\n");
@ -383,6 +392,7 @@ CUSBHardwareDevice::PnpStart(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::PnpStop(void)
{
UNIMPLEMENTED
@ -390,6 +400,7 @@ CUSBHardwareDevice::PnpStop(void)
}
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::GetDeviceDetails(
OUT OPTIONAL PUSHORT VendorId,
OUT OPTIONAL PUSHORT DeviceId,
@ -431,7 +442,9 @@ CUSBHardwareDevice::GetDeviceDetails(
return STATUS_SUCCESS;
}
NTSTATUS CUSBHardwareDevice::GetDMA(
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::GetDMA(
OUT struct IDMAMemoryManager **OutDMAMemoryManager)
{
if (!m_MemoryManager)
@ -441,6 +454,7 @@ NTSTATUS CUSBHardwareDevice::GetDMA(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::GetUSBQueue(
OUT struct IUSBQueue **OutUsbQueue)
{
@ -636,6 +650,7 @@ CUSBHardwareDevice::AllocateEndpointDescriptor(
}
VOID
STDMETHODCALLTYPE
CUSBHardwareDevice::GetBulkHeadEndpointDescriptor(
struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor)
{
@ -643,6 +658,7 @@ CUSBHardwareDevice::GetBulkHeadEndpointDescriptor(
}
VOID
STDMETHODCALLTYPE
CUSBHardwareDevice::GetInterruptEndpointDescriptors(
struct _OHCI_ENDPOINT_DESCRIPTOR *** OutDescriptor)
{
@ -650,6 +666,7 @@ CUSBHardwareDevice::GetInterruptEndpointDescriptors(
}
VOID
STDMETHODCALLTYPE
CUSBHardwareDevice::GetIsochronousHeadEndpointDescriptor(
struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor)
{
@ -657,6 +674,7 @@ CUSBHardwareDevice::GetIsochronousHeadEndpointDescriptor(
}
VOID
STDMETHODCALLTYPE
CUSBHardwareDevice::HeadEndpointDescriptorModified(
ULONG Type)
{
@ -677,6 +695,7 @@ CUSBHardwareDevice::HeadEndpointDescriptorModified(
}
VOID
STDMETHODCALLTYPE
CUSBHardwareDevice::GetControlHeadEndpointDescriptor(
struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor)
{
@ -1009,6 +1028,7 @@ CUSBHardwareDevice::StopController(void)
}
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::ResetPort(
IN ULONG PortIndex)
{
@ -1018,6 +1038,7 @@ CUSBHardwareDevice::ResetPort(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::GetPortStatus(
ULONG PortId,
OUT USHORT *PortStatus,
@ -1080,6 +1101,7 @@ CUSBHardwareDevice::GetPortStatus(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::ClearPortStatus(
ULONG PortId,
ULONG Status)
@ -1154,6 +1176,7 @@ CUSBHardwareDevice::ClearPortStatus(
NTSTATUS
STDMETHODCALLTYPE
CUSBHardwareDevice::SetPortFeature(
ULONG PortId,
ULONG Feature)
@ -1244,6 +1267,7 @@ CUSBHardwareDevice::SetPortFeature(
VOID
STDMETHODCALLTYPE
CUSBHardwareDevice::SetStatusChangeEndpointCallBack(
PVOID CallBack,
PVOID Context)
@ -1253,6 +1277,7 @@ CUSBHardwareDevice::SetStatusChangeEndpointCallBack(
}
VOID
STDMETHODCALLTYPE
CUSBHardwareDevice::GetCurrentFrameNumber(
PULONG FrameNumber)
{
@ -1548,6 +1573,7 @@ StatusChangeWorkItemRoutine(
}
NTSTATUS
NTAPI
CreateUSBHardware(
PUSBHARDWAREDEVICE *OutHardware)
{

View file

@ -11,7 +11,7 @@
#include "usbohci.h"
#include "hardware.h"
class CUSBQueue : public IUSBQueue
class CUSBQueue : public IOHCIQueue
{
public:
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
@ -86,17 +86,25 @@ CUSBQueue::QueryInterface(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBQueue::Initialize(
IN PUSBHARDWAREDEVICE Hardware,
IN PDMA_ADAPTER AdapterObject,
IN PDMAMEMORYMANAGER MemManager,
IN OPTIONAL PKSPIN_LOCK Lock)
{
if (!Hardware)
{
// WTF
DPRINT1("[USBOHCI] Failed to initialize queue\n");
return STATUS_UNSUCCESSFUL;
}
//
// store hardware
//
m_Hardware = POHCIHARDWAREDEVICE(Hardware);
ASSERT(m_Hardware);
//
// get bulk endpoint descriptor
@ -288,6 +296,7 @@ CUSBQueue::AddEndpointDescriptor(
NTSTATUS
STDMETHODCALLTYPE
CUSBQueue::AddUSBRequest(
IUSBRequest * Req)
{
@ -337,6 +346,7 @@ CUSBQueue::AddUSBRequest(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBQueue::CreateUSBRequest(
IUSBRequest **OutRequest)
{
@ -696,6 +706,7 @@ CUSBQueue::PrintEndpointList(
}
VOID
STDMETHODCALLTYPE
CUSBQueue::TransferDescriptorCompletionCallback(
ULONG TransferDescriptorLogicalAddress)
{
@ -860,6 +871,7 @@ CUSBQueue::FindInterruptEndpointDescriptor(
}
NTSTATUS
STDMETHODCALLTYPE
CUSBQueue::AbortDevicePipe(
IN UCHAR DeviceAddress,
IN PUSB_ENDPOINT_DESCRIPTOR EndpointDescriptor)
@ -973,6 +985,7 @@ CUSBQueue::AbortDevicePipe(
NTSTATUS
NTAPI
CreateUSBQueue(
PUSBQUEUE *OutUsbQueue)
{

View file

@ -13,7 +13,7 @@
#include "usbohci.h"
#include "hardware.h"
class CUSBRequest : public IUSBRequest
class CUSBRequest : public IOHCIRequest
{
public:
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
@ -157,6 +157,7 @@ CUSBRequest::QueryInterface(
//----------------------------------------------------------------------------------------
NTSTATUS
STDMETHODCALLTYPE
CUSBRequest::InitializeWithSetupPacket(
IN PDMAMEMORYMANAGER DmaManager,
IN PUSB_DEFAULT_PIPE_SETUP_PACKET SetupPacket,
@ -212,6 +213,7 @@ CUSBRequest::InitializeWithSetupPacket(
}
//----------------------------------------------------------------------------------------
NTSTATUS
STDMETHODCALLTYPE
CUSBRequest::InitializeWithIrp(
IN PDMAMEMORYMANAGER DmaManager,
IN struct IUSBDevice* Device,
@ -422,6 +424,7 @@ CUSBRequest::InitializeWithIrp(
//----------------------------------------------------------------------------------------
BOOLEAN
STDMETHODCALLTYPE
CUSBRequest::IsRequestComplete()
{
//
@ -443,6 +446,7 @@ CUSBRequest::IsRequestComplete()
}
//----------------------------------------------------------------------------------------
ULONG
STDMETHODCALLTYPE
CUSBRequest::GetTransferType()
{
//
@ -483,6 +487,7 @@ CUSBRequest::GetMaxPacketSize()
}
UCHAR
STDMETHODCALLTYPE
CUSBRequest::GetInterval()
{
ASSERT(m_EndpointDescriptor);
@ -568,6 +573,7 @@ CUSBRequest::InternalGetPidDirection()
//----------------------------------------------------------------------------------------
UCHAR
STDMETHODCALLTYPE
CUSBRequest::GetDeviceAddress()
{
PIO_STACK_LOCATION IoStack;
@ -1560,12 +1566,14 @@ CUSBRequest::BuildControlTransferDescriptor(
//----------------------------------------------------------------------------------------
NTSTATUS
STDMETHODCALLTYPE
CUSBRequest::GetEndpointDescriptor(
struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor)
{
ULONG TransferType;
NTSTATUS Status;
//
// get transfer type
//
@ -1592,6 +1600,8 @@ CUSBRequest::GetEndpointDescriptor(
break;
}
if (NT_SUCCESS(Status))
{
//
@ -1613,6 +1623,7 @@ CUSBRequest::GetEndpointDescriptor(
//----------------------------------------------------------------------------------------
VOID
STDMETHODCALLTYPE
CUSBRequest::GetResultStatus(
OUT OPTIONAL NTSTATUS * NtStatusCode,
OUT OPTIONAL PULONG UrbStatusCode)
@ -1646,6 +1657,7 @@ CUSBRequest::GetResultStatus(
}
VOID
STDMETHODCALLTYPE
CUSBRequest::FreeEndpointDescriptor(
struct _OHCI_ENDPOINT_DESCRIPTOR * OutDescriptor)
{
@ -1878,12 +1890,10 @@ CUSBRequest::CheckError(
TransferDescriptor = (POHCI_GENERAL_TD)TransferDescriptor->NextLogicalDescriptor;
}
}
}
VOID
STDMETHODCALLTYPE
CUSBRequest::CompletionCallback()
{
PIO_STACK_LOCATION IoStack;
@ -1943,20 +1953,9 @@ CUSBRequest::CompletionCallback()
}
}
#if 0
//-----------------------------------------------------------------------------------------
BOOLEAN
CUSBRequest::IsQueueHeadComplete(
struct _QUEUE_HEAD * QueueHead)
{
UNIMPLEMENTED
return TRUE;
}
#endif
//-----------------------------------------------------------------------------------------
NTSTATUS
NTAPI
InternalCreateUSBRequest(
PUSBREQUEST *OutRequest)
{

View file

@ -59,20 +59,23 @@ extern
(VOID)((!(exp)) ? \
RtlAssert((PVOID) #exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
extern "C"
{
//
// hardware.cpp
//
NTSTATUS CreateUSBHardware(PUSBHARDWAREDEVICE *OutHardware);
NTSTATUS NTAPI CreateUSBHardware(PUSBHARDWAREDEVICE *OutHardware);
//
// usb_queue.cpp
//
NTSTATUS CreateUSBQueue(PUSBQUEUE *OutUsbQueue);
NTSTATUS NTAPI CreateUSBQueue(PUSBQUEUE *OutUsbQueue);
//
// usb_request.cpp
//
NTSTATUS InternalCreateUSBRequest(PUSBREQUEST *OutRequest);
NTSTATUS NTAPI InternalCreateUSBRequest(PUSBREQUEST *OutRequest);
}
#endif

View file

@ -747,6 +747,7 @@ CHCDController::SetSymbolicLink(
}
NTSTATUS
NTAPI
CreateHCDController(
PHCDCONTROLLER *OutHcdController)
{

View file

@ -3718,6 +3718,7 @@ CHubController::CreatePDO(
NTSTATUS
NTAPI
CreateHubController(
PHUBCONTROLLER *OutHcdController)
{

View file

@ -16,6 +16,9 @@
//
DRIVER_ADD_DEVICE USBLIB_AddDevice;
extern
"C"
{
NTSTATUS
NTAPI
USBLIB_AddDevice(
@ -54,7 +57,11 @@ USBLIB_AddDevice(
return Status;
}
}
extern
"C"
{
NTSTATUS
NTAPI
USBLIB_Dispatch(
@ -121,3 +128,4 @@ USBLIB_Dispatch(
return Status;
}
}

View file

@ -66,35 +66,31 @@ typedef struct
RtlAssert((PVOID) #exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
// hcd_controller.cpp
NTSTATUS CreateHCDController(PHCDCONTROLLER *HcdController);
extern "C"
{
NTSTATUS NTAPI CreateHCDController(PHCDCONTROLLER *HcdController);
// hardware.cpp
NTSTATUS CreateUSBHardware(PUSBHARDWAREDEVICE *OutHardware);
NTSTATUS NTAPI CreateUSBHardware(PUSBHARDWAREDEVICE *OutHardware);
// misc.cpp
NTSTATUS NTAPI SyncForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
NTSTATUS NTAPI GetBusInterface(PDEVICE_OBJECT DeviceObject, PBUS_INTERFACE_STANDARD busInterface);
// root_hub_controller.cpp
NTSTATUS CreateHubController(PHUBCONTROLLER * OutHubController);
NTSTATUS NTAPI CreateHubController(PHUBCONTROLLER * OutHubController);
// memory_manager.cpp
NTSTATUS CreateDMAMemoryManager(PDMAMEMORYMANAGER *OutMemoryManager);
NTSTATUS NTAPI CreateDMAMemoryManager(PDMAMEMORYMANAGER *OutMemoryManager);
// usb_device.cpp
NTSTATUS CreateUSBDevice(PUSBDEVICE *OutDevice);
// usb_queue.cpp
NTSTATUS CreateUSBQueue(PUSBQUEUE *OutUsbQueue);
// usb_request.cpp
NTSTATUS InternalCreateUSBRequest(PUSBREQUEST *OutRequest);
NTSTATUS NTAPI CreateUSBDevice(PUSBDEVICE *OutDevice);
// libusb.cpp
NTSTATUS NTAPI USBLIB_AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject);
NTSTATUS NTAPI USBLIB_Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp);
}
#endif

View file

@ -335,6 +335,7 @@ CDMAMemoryManager::Release(
}
NTSTATUS
NTAPI
CreateDMAMemoryManager(
PDMAMEMORYMANAGER *OutMemoryManager)
{

View file

@ -1183,6 +1183,7 @@ CUSBDevice::AbortPipe(
//----------------------------------------------------------------------------------------
NTSTATUS
NTAPI
CreateUSBDevice(
PUSBDEVICE *OutDevice)
{