From c131df4a4c88a90cb37049e02af585d8d1016b27 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 29 Feb 2012 09:15:42 +0000 Subject: [PATCH] [USBOHCI] - Fix regressions introduced by libusb svn path=/trunk/; revision=55913 --- reactos/drivers/usb/usbohci/hardware.cpp | 34 ++++++++++++++++--- reactos/drivers/usb/usbohci/usb_queue.cpp | 17 ++++++++-- reactos/drivers/usb/usbohci/usb_request.cpp | 31 ++++++++--------- reactos/drivers/usb/usbohci/usbohci.h | 11 +++--- reactos/lib/drivers/libusb/hcd_controller.cpp | 1 + reactos/lib/drivers/libusb/hub_controller.cpp | 1 + reactos/lib/drivers/libusb/libusb.cpp | 8 +++++ reactos/lib/drivers/libusb/libusb.h | 20 +++++------ reactos/lib/drivers/libusb/memory_manager.cpp | 1 + reactos/lib/drivers/libusb/usb_device.cpp | 1 + 10 files changed, 87 insertions(+), 38 deletions(-) diff --git a/reactos/drivers/usb/usbohci/hardware.cpp b/reactos/drivers/usb/usbohci/hardware.cpp index 96c78ebb231..b43995a11c2 100644 --- a/reactos/drivers/usb/usbohci/hardware.cpp +++ b/reactos/drivers/usb/usbohci/hardware.cpp @@ -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) { diff --git a/reactos/drivers/usb/usbohci/usb_queue.cpp b/reactos/drivers/usb/usbohci/usb_queue.cpp index 3009975ede5..c6156299f0a 100644 --- a/reactos/drivers/usb/usbohci/usb_queue.cpp +++ b/reactos/drivers/usb/usbohci/usb_queue.cpp @@ -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) { diff --git a/reactos/drivers/usb/usbohci/usb_request.cpp b/reactos/drivers/usb/usbohci/usb_request.cpp index 3f00afbbd47..c69bada2cfd 100644 --- a/reactos/drivers/usb/usbohci/usb_request.cpp +++ b/reactos/drivers/usb/usbohci/usb_request.cpp @@ -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) { diff --git a/reactos/drivers/usb/usbohci/usbohci.h b/reactos/drivers/usb/usbohci/usbohci.h index 4fd78ce4ddc..4a1b1313c77 100644 --- a/reactos/drivers/usb/usbohci/usbohci.h +++ b/reactos/drivers/usb/usbohci/usbohci.h @@ -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 diff --git a/reactos/lib/drivers/libusb/hcd_controller.cpp b/reactos/lib/drivers/libusb/hcd_controller.cpp index 540aecb13e1..299b0faf3e7 100644 --- a/reactos/lib/drivers/libusb/hcd_controller.cpp +++ b/reactos/lib/drivers/libusb/hcd_controller.cpp @@ -747,6 +747,7 @@ CHCDController::SetSymbolicLink( } NTSTATUS +NTAPI CreateHCDController( PHCDCONTROLLER *OutHcdController) { diff --git a/reactos/lib/drivers/libusb/hub_controller.cpp b/reactos/lib/drivers/libusb/hub_controller.cpp index f39723ecc49..c195ae70e3b 100644 --- a/reactos/lib/drivers/libusb/hub_controller.cpp +++ b/reactos/lib/drivers/libusb/hub_controller.cpp @@ -3718,6 +3718,7 @@ CHubController::CreatePDO( NTSTATUS +NTAPI CreateHubController( PHUBCONTROLLER *OutHcdController) { diff --git a/reactos/lib/drivers/libusb/libusb.cpp b/reactos/lib/drivers/libusb/libusb.cpp index 2014b69c586..1e7173b6dff 100644 --- a/reactos/lib/drivers/libusb/libusb.cpp +++ b/reactos/lib/drivers/libusb/libusb.cpp @@ -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; } +} \ No newline at end of file diff --git a/reactos/lib/drivers/libusb/libusb.h b/reactos/lib/drivers/libusb/libusb.h index 620a1066e6b..6633efd7409 100644 --- a/reactos/lib/drivers/libusb/libusb.h +++ b/reactos/lib/drivers/libusb/libusb.h @@ -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 diff --git a/reactos/lib/drivers/libusb/memory_manager.cpp b/reactos/lib/drivers/libusb/memory_manager.cpp index d7007972783..d9418442acb 100644 --- a/reactos/lib/drivers/libusb/memory_manager.cpp +++ b/reactos/lib/drivers/libusb/memory_manager.cpp @@ -335,6 +335,7 @@ CDMAMemoryManager::Release( } NTSTATUS +NTAPI CreateDMAMemoryManager( PDMAMEMORYMANAGER *OutMemoryManager) { diff --git a/reactos/lib/drivers/libusb/usb_device.cpp b/reactos/lib/drivers/libusb/usb_device.cpp index 3b3389651aa..2b03c62537a 100644 --- a/reactos/lib/drivers/libusb/usb_device.cpp +++ b/reactos/lib/drivers/libusb/usb_device.cpp @@ -1183,6 +1183,7 @@ CUSBDevice::AbortPipe( //---------------------------------------------------------------------------------------- NTSTATUS +NTAPI CreateUSBDevice( PUSBDEVICE *OutDevice) { -- 2.17.1