2011-04-14 11:35:16 +00:00
|
|
|
/*
|
|
|
|
* PROJECT: ReactOS Universal Serial Bus Bulk Enhanced Host Controller Interface
|
|
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
|
|
* FILE: drivers/usb/usbehci_new/hcd_controller.cpp
|
|
|
|
* PURPOSE: USB EHCI device driver.
|
|
|
|
* PROGRAMMERS:
|
|
|
|
* Michael Martin (michael.martin@reactos.org)
|
|
|
|
* Johannes Anderwald (johannes.anderwald@reactos.org)
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "usbehci.h"
|
|
|
|
|
2011-04-14 11:58:07 +00:00
|
|
|
class CUSBHardwareDevice : public IUSBHardwareDevice
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
|
|
|
|
|
|
|
|
STDMETHODIMP_(ULONG) AddRef()
|
|
|
|
{
|
|
|
|
InterlockedIncrement(&m_Ref);
|
|
|
|
return m_Ref;
|
|
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG) Release()
|
|
|
|
{
|
|
|
|
InterlockedDecrement(&m_Ref);
|
|
|
|
|
|
|
|
if (!m_Ref)
|
|
|
|
{
|
|
|
|
delete this;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return m_Ref;
|
|
|
|
}
|
|
|
|
// com
|
|
|
|
NTSTATUS Initialize(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT FunctionalDeviceObject, PDEVICE_OBJECT PhysicalDeviceObject, PDEVICE_OBJECT LowerDeviceObject);
|
|
|
|
NTSTATUS PnpStart(PCM_RESOURCE_LIST RawResources, PCM_RESOURCE_LIST TranslatedResources);
|
|
|
|
NTSTATUS PnpStop(void);
|
|
|
|
NTSTATUS HandlePower(PIRP Irp);
|
|
|
|
NTSTATUS GetDeviceDetails(PULONG VendorId, PULONG DeviceId, PULONG NumberOfPorts, PULONG Speed);
|
|
|
|
NTSTATUS GetDmaMemoryManager(OUT struct IDMAMemoryManager **OutMemoryManager);
|
|
|
|
NTSTATUS GetUSBQueue(OUT struct IUSBQueue **OutUsbQueue);
|
|
|
|
NTSTATUS ResetController();
|
|
|
|
NTSTATUS ResetPort(ULONG PortIndex);
|
|
|
|
KIRQL AcquireDeviceLock(void);
|
|
|
|
VOID ReleaseDeviceLock(KIRQL OldLevel);
|
|
|
|
|
|
|
|
// constructor / destructor
|
|
|
|
CUSBHardwareDevice(IUnknown *OuterUnknown){}
|
|
|
|
virtual ~CUSBHardwareDevice(){}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
LONG m_Ref;
|
|
|
|
KSPIN_LOCK m_Lock;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
//=================================================================================================
|
|
|
|
// COM
|
|
|
|
//
|
|
|
|
NTSTATUS
|
|
|
|
STDMETHODCALLTYPE
|
|
|
|
CUSBHardwareDevice::QueryInterface(
|
|
|
|
IN REFIID refiid,
|
|
|
|
OUT PVOID* Output)
|
|
|
|
{
|
|
|
|
UNICODE_STRING GuidString;
|
|
|
|
|
|
|
|
if (IsEqualGUIDAligned(refiid, IID_IUnknown))
|
|
|
|
{
|
|
|
|
*Output = PVOID(PUNKNOWN(this));
|
|
|
|
PUNKNOWN(*Output)->AddRef();
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::Initialize(
|
|
|
|
PDRIVER_OBJECT DriverObject,
|
|
|
|
PDEVICE_OBJECT FunctionalDeviceObject,
|
|
|
|
PDEVICE_OBJECT PhysicalDeviceObject,
|
|
|
|
PDEVICE_OBJECT LowerDeviceObject)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::PnpStart(
|
|
|
|
PCM_RESOURCE_LIST RawResources,
|
|
|
|
PCM_RESOURCE_LIST TranslatedResources)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::PnpStop(void)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::HandlePower(
|
|
|
|
PIRP Irp)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::GetDeviceDetails(
|
|
|
|
OUT OPTIONAL PULONG VendorId,
|
|
|
|
OUT OPTIONAL PULONG DeviceId,
|
|
|
|
OUT OPTIONAL PULONG NumberOfPorts,
|
|
|
|
OUT OPTIONAL PULONG Speed)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::GetDmaMemoryManager(
|
|
|
|
OUT struct IDMAMemoryManager **OutMemoryManager)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::GetUSBQueue(
|
|
|
|
OUT struct IUSBQueue **OutUsbQueue)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::ResetController(void)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
CUSBHardwareDevice::ResetPort(
|
|
|
|
IN ULONG PortIndex)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
KIRQL
|
|
|
|
CUSBHardwareDevice::AcquireDeviceLock(void)
|
|
|
|
{
|
|
|
|
KIRQL OldLevel = 0;
|
|
|
|
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return OldLevel;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOLEAN
|
|
|
|
NTAPI
|
|
|
|
InterruptServiceRoutine(
|
|
|
|
IN PKINTERRUPT Interrupt,
|
|
|
|
IN PVOID ServiceContext)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
|
|
CUSBHardwareDevice::ReleaseDeviceLock(
|
|
|
|
KIRQL OldLevel)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-04-14 11:35:16 +00:00
|
|
|
NTSTATUS
|
|
|
|
CreateUSBHardware(
|
|
|
|
PUSBHARDWAREDEVICE *OutHardware)
|
|
|
|
{
|
2011-04-14 11:58:07 +00:00
|
|
|
PUSBHARDWAREDEVICE This;
|
|
|
|
|
|
|
|
This = new(NonPagedPool, 0) CUSBHardwareDevice(0);
|
|
|
|
if (!This)
|
|
|
|
return STATUS_INSUFFICIENT_RESOURCES;
|
|
|
|
|
|
|
|
This->AddRef();
|
|
|
|
|
|
|
|
// return result
|
|
|
|
*OutHardware = (PUSBHARDWAREDEVICE)This;
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
2011-04-14 11:35:16 +00:00
|
|
|
}
|