[USBEHCI_NEW]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 14 Apr 2011 11:58:07 +0000 (11:58 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 14 Apr 2011 11:58:07 +0000 (11:58 +0000)
- Implement stubs for classes CHCDController and CUSBHardwareDevice
- Implement CreateHCDController, CreateUSBHardware
- Implement CUSBHardwareDevice::QueryInterface, CUSBHardwareDevice::AddRef, CUSBHardwareDevice::Release
- Implement CHCDController::AddRef, CHCDController::Release, CHCDController::QueryInterface

svn path=/branches/usb-bringup/; revision=51337

drivers/usb/usbehci_new/hardware.cpp
drivers/usb/usbehci_new/hcd_controller.cpp

index 7c3a427..fb8394b 100644 (file)
 
 #include "usbehci.h"
 
+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
+}
+
+
 NTSTATUS
 CreateUSBHardware(
     PUSBHARDWAREDEVICE *OutHardware)
 {
-    return STATUS_NOT_IMPLEMENTED;
+    PUSBHARDWAREDEVICE This;
+
+    This = new(NonPagedPool, 0) CUSBHardwareDevice(0);
+    if (!This)
+        return STATUS_INSUFFICIENT_RESOURCES;
+
+    This->AddRef();
+
+    // return result
+    *OutHardware = (PUSBHARDWAREDEVICE)This;
+
+    return STATUS_SUCCESS;
 }
index 23460f7..dd6a142 100644 (file)
 
 #include "usbehci.h"
 
+class CHCDController : public IHCDController
+{
+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;
+    }
+
+    // interface functions
+    NTSTATUS Initialize(IN PROOTHDCCONTROLLER RootHCDController, IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject);
+    NTSTATUS HandlePnp(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp);
+    NTSTATUS HandlePower(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp);
+    NTSTATUS HandleDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp);
+
+    // constructor / destructor
+    CHCDController(IUnknown *OuterUnknown){}
+    virtual ~CHCDController(){}
+
+protected:
+    LONG m_Ref;
+};
+
+//=================================================================================================
+// COM
+//
+NTSTATUS
+STDMETHODCALLTYPE
+CHCDController::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
+CHCDController::Initialize(
+    IN PROOTHDCCONTROLLER RootHCDController,
+    IN PDRIVER_OBJECT DriverObject,
+    IN PDEVICE_OBJECT PhysicalDeviceObject)
+{
+    UNIMPLEMENTED
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+CHCDController::HandleDeviceControl(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp)
+{
+    UNIMPLEMENTED
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+CHCDController::HandlePnp(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp)
+{
+    UNIMPLEMENTED
+
+    Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+CHCDController::HandlePower(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp)
+{
+    UNIMPLEMENTED
+
+    Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+
+
+
 NTSTATUS
 CreateHCDController(
     PHCDCONTROLLER *OutHcdController)
 {
-    return STATUS_NOT_IMPLEMENTED;
+    PHCDCONTROLLER This;
+
+    This = new(NonPagedPool, 0) CHCDController(0);
+    if (!This)
+        return STATUS_INSUFFICIENT_RESOURCES;
+
+    This->AddRef();
+
+    // return result
+    *OutHcdController = (PHCDCONTROLLER)This;
+
+    return STATUS_SUCCESS;
 }