- Use the same lock in the IUSBQueue as in the IDMAMemoryManager
- add debug traces (default off)
svn path=/branches/usb-bringup-trunk/; revision=55110
//
// Initialize the UsbQueue now that we have an AdapterObject.
//
//
// Initialize the UsbQueue now that we have an AdapterObject.
//
- Status = m_UsbQueue->Initialize(PUSBHARDWAREDEVICE(this), m_Adapter, m_MemoryManager, NULL);
+ Status = m_UsbQueue->Initialize(PUSBHARDWAREDEVICE(this), m_Adapter, m_MemoryManager, &m_Lock);
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to Initialize the UsbQueue\n");
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to Initialize the UsbQueue\n");
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel);
KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
CUSBHardwareDevice::ReleaseDeviceLock(
KIRQL OldLevel)
{
CUSBHardwareDevice::ReleaseDeviceLock(
KIRQL OldLevel)
{
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel);
}
KeReleaseSpinLock(&m_Lock, OldLevel);
}
//
// acquire device lock
//
//
// acquire device lock
//
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel);
KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
//
// release spin lock
//
//
// release spin lock
//
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel);
//
KeReleaseSpinLock(&m_Lock, OldLevel);
//
//
// acquire device lock
//
//
// acquire device lock
//
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel);
KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel);
}
//-----------------------------------------------------------------------------------------
KeReleaseSpinLock(&m_Lock, OldLevel);
}
//-----------------------------------------------------------------------------------------
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel);
KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
//
// point to first entry
//
// point to first entry
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel);
//
KeReleaseSpinLock(&m_Lock, OldLevel);
//
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel);
KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
//
// point to first entry
//
// point to first entry
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel);
//
KeReleaseSpinLock(&m_Lock, OldLevel);
//
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel);
KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
//
// release spin lock
//
//
// release spin lock
//
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel);
//
KeReleaseSpinLock(&m_Lock, OldLevel);
//
//
// acquire hub controller lock
//
//
// acquire hub controller lock
//
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel);
KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
//
// now set the callback routine and context of the hub
//
// now set the callback routine and context of the hub
m_HubCallbackContext = CallbackContext;
m_HubCallbackRoutine = CallbackRoutine;
m_HubCallbackContext = CallbackContext;
m_HubCallbackRoutine = CallbackRoutine;
- //
- // release hub controller lock
- //
- KeReleaseSpinLock(&m_Lock, OldLevel);
+ //
+ // release hub controller lock
+ //
+ DPRINT(__FUNCTION__ "release\n");
+ KeReleaseSpinLock(&m_Lock, OldLevel);
}
//=================================================================================================
}
//=================================================================================================
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(m_Lock, &OldLevel);
KeAcquireSpinLock(m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(m_Lock, OldLevel);
//
KeReleaseSpinLock(m_Lock, OldLevel);
//
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(m_Lock, &OldLevel);
KeAcquireSpinLock(m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(m_Lock, OldLevel);
//
KeReleaseSpinLock(m_Lock, OldLevel);
//
//
// acquire device lock
//
//
// acquire device lock
//
+ DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel);
KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
+ DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel);
return Status;
KeReleaseSpinLock(&m_Lock, OldLevel);
return Status;
- virtual NTSTATUS Initialize(IN PUSBHARDWAREDEVICE Hardware, PDMA_ADAPTER AdapterObject, IN PDMAMEMORYMANAGER MemManager, IN OPTIONAL PKSPIN_LOCK Lock);
+ virtual NTSTATUS Initialize(IN PUSBHARDWAREDEVICE Hardware, PDMA_ADAPTER AdapterObject, IN PDMAMEMORYMANAGER MemManager, IN PKSPIN_LOCK Lock);
virtual ULONG GetPendingRequestCount();
virtual NTSTATUS AddUSBRequest(PURB Urb);
virtual NTSTATUS AddUSBRequest(IUSBRequest * Request);
virtual ULONG GetPendingRequestCount();
virtual NTSTATUS AddUSBRequest(PURB Urb);
virtual NTSTATUS AddUSBRequest(IUSBRequest * Request);
protected:
LONG m_Ref; // reference count
protected:
LONG m_Ref; // reference count
- KSPIN_LOCK m_Lock; // list lock
+ PKSPIN_LOCK m_Lock; // list lock
PDMA_ADAPTER m_Adapter; // dma adapter
PUSBHARDWAREDEVICE m_Hardware; // stores hardware object
PQUEUE_HEAD AsyncListQueueHead; // async queue head
PDMA_ADAPTER m_Adapter; // dma adapter
PUSBHARDWAREDEVICE m_Hardware; // stores hardware object
PQUEUE_HEAD AsyncListQueueHead; // async queue head
//
// initialize device lock
//
//
// initialize device lock
//
- KeInitializeSpinLock(&m_Lock);
//
// Get the AsyncQueueHead
//
// Get the AsyncQueueHead
//
// Add it to the pending list
//
//
// Add it to the pending list
//
- KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquire\n");
+ KeAcquireSpinLock(m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
+
LinkQueueHead(AsyncListQueueHead, QueueHead);
LinkQueueHead(AsyncListQueueHead, QueueHead);
- KeReleaseSpinLock(&m_Lock, OldLevel);
+ DPRINT(__FUNCTION__ "release\n");
+ KeReleaseSpinLock(m_Lock, OldLevel);
PQUEUE_HEAD CurrentQH,
NTSTATUS Status)
{
PQUEUE_HEAD CurrentQH,
NTSTATUS Status)
{
//
// now unlink the queue head
// FIXME: implement chained queue heads
//
// now unlink the queue head
// FIXME: implement chained queue heads
//
// lock completed async list
//
//
// lock completed async list
//
- KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquire\n");
+ KeAcquireSpinLock(m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
- KeReleaseSpinLock(&m_Lock, OldLevel);
+ DPRINT(__FUNCTION__ "release\n");
+ KeReleaseSpinLock(m_Lock, OldLevel);
//
// first acquire request lock
//
//
// first acquire request lock
//
- KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquire\n");
+ KeAcquireSpinLock(m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
//
// add to pending list
//
// add to pending list
//
// release queue head
//
//
// release queue head
//
- KeReleaseSpinLock(&m_Lock, OldLevel);
+ DPRINT(__FUNCTION__ "release\n");
+ KeReleaseSpinLock(m_Lock, OldLevel);
//
// first acquire request lock
//
//
// first acquire request lock
//
- KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquire\n");
+ KeAcquireSpinLock(m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
//
// the list should not be empty
//
// the list should not be empty
- KeReleaseSpinLock(&m_Lock, OldLevel);
+ DPRINT(__FUNCTION__ "release\n");
+ KeReleaseSpinLock(m_Lock, OldLevel);
//
// complete request now
//
// complete request now
//
// first acquire request lock
//
//
// first acquire request lock
//
- KeAcquireSpinLock(&m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquire\n");
+ KeAcquireSpinLock(m_Lock, &OldLevel);
+ DPRINT(__FUNCTION__ " acquired\n");
+
- KeReleaseSpinLock(&m_Lock, OldLevel);
+ DPRINT(__FUNCTION__ "release\n");
+ KeReleaseSpinLock(m_Lock, OldLevel);