[USBEHCI]

- Use the same lock in the IUSBQueue as in the IDMAMemoryManager
- add debug traces (default off)

svn path=/branches/usb-bringup-trunk/; revision=55110
This commit is contained in:
Johannes Anderwald 2012-01-23 15:49:43 +00:00
parent 437353f8cd
commit 8478147bbf
5 changed files with 65 additions and 20 deletions

View file

@ -438,7 +438,7 @@ CUSBHardwareDevice::PnpStart(
// //
// 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)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("Failed to Initialize the UsbQueue\n"); DPRINT1("Failed to Initialize the UsbQueue\n");
@ -934,7 +934,9 @@ CUSBHardwareDevice::AcquireDeviceLock(void)
// //
// acquire lock // acquire lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel); KeAcquireSpinLock(&m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// return old irql // return old irql
@ -947,6 +949,7 @@ VOID
CUSBHardwareDevice::ReleaseDeviceLock( CUSBHardwareDevice::ReleaseDeviceLock(
KIRQL OldLevel) KIRQL OldLevel)
{ {
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel); KeReleaseSpinLock(&m_Lock, OldLevel);
} }

View file

@ -1861,7 +1861,9 @@ CHubController::AcquireDeviceAddress()
// //
// acquire device lock // acquire device lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel); KeAcquireSpinLock(&m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// find address // find address
@ -1883,6 +1885,7 @@ CHubController::AcquireDeviceAddress()
// //
// release spin lock // release spin lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel); KeReleaseSpinLock(&m_Lock, OldLevel);
// //
@ -1900,7 +1903,9 @@ CHubController::ReleaseDeviceAddress(
// //
// acquire device lock // acquire device lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel); KeAcquireSpinLock(&m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// sanity check // sanity check
@ -1920,6 +1925,7 @@ CHubController::ReleaseDeviceAddress(
// //
// release lock // release lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel); KeReleaseSpinLock(&m_Lock, OldLevel);
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
@ -1935,7 +1941,9 @@ CHubController::RemoveUsbDevice(
// //
// acquire lock // acquire lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel); KeAcquireSpinLock(&m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// point to first entry // point to first entry
@ -1983,6 +1991,7 @@ CHubController::RemoveUsbDevice(
// //
// release lock // release lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel); KeReleaseSpinLock(&m_Lock, OldLevel);
// //
@ -2002,7 +2011,9 @@ CHubController::ValidateUsbDevice(PUSBDEVICE UsbDevice)
// //
// acquire lock // acquire lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel); KeAcquireSpinLock(&m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// point to first entry // point to first entry
@ -2040,6 +2051,7 @@ CHubController::ValidateUsbDevice(PUSBDEVICE UsbDevice)
// //
// release lock // release lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel); KeReleaseSpinLock(&m_Lock, OldLevel);
// //
@ -2077,7 +2089,9 @@ CHubController::AddUsbDevice(
// //
// acquire lock // acquire lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel); KeAcquireSpinLock(&m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// insert entry // insert entry
@ -2087,6 +2101,7 @@ CHubController::AddUsbDevice(
// //
// release spin lock // release spin lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel); KeReleaseSpinLock(&m_Lock, OldLevel);
// //
@ -2106,7 +2121,9 @@ CHubController::SetNotification(
// //
// 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
@ -2117,6 +2134,7 @@ CHubController::SetNotification(
// //
// release hub controller lock // release hub controller lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel); KeReleaseSpinLock(&m_Lock, OldLevel);
} }

View file

@ -157,7 +157,9 @@ CDMAMemoryManager::Allocate(
// //
// acquire lock // acquire lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(m_Lock, &OldLevel); KeAcquireSpinLock(m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// helper variable // helper variable
@ -235,6 +237,7 @@ CDMAMemoryManager::Allocate(
// //
// release lock // release lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(m_Lock, OldLevel); KeReleaseSpinLock(m_Lock, OldLevel);
// //
@ -304,7 +307,9 @@ CDMAMemoryManager::Release(
// //
// acquire lock // acquire lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(m_Lock, &OldLevel); KeAcquireSpinLock(m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// release buffer // release buffer
@ -314,6 +319,7 @@ CDMAMemoryManager::Release(
// //
// release lock // release lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(m_Lock, OldLevel); KeReleaseSpinLock(m_Lock, OldLevel);
// //

View file

@ -519,7 +519,9 @@ CUSBDevice::SubmitIrp(
// //
// acquire device lock // acquire device lock
// //
DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(&m_Lock, &OldLevel); KeAcquireSpinLock(&m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// commit urb // commit urb
@ -529,6 +531,7 @@ CUSBDevice::SubmitIrp(
// //
// release lock // release lock
// //
DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(&m_Lock, OldLevel); KeReleaseSpinLock(&m_Lock, OldLevel);
return Status; return Status;

View file

@ -33,7 +33,7 @@ public:
return m_Ref; return m_Ref;
} }
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 ULONG GetPendingRequestCount();
virtual NTSTATUS AddUSBRequest(PURB Urb); virtual NTSTATUS AddUSBRequest(PURB Urb);
virtual NTSTATUS AddUSBRequest(IUSBRequest * Request); virtual NTSTATUS AddUSBRequest(IUSBRequest * Request);
@ -48,7 +48,7 @@ public:
protected: protected:
LONG m_Ref; // reference count LONG m_Ref; // reference count
KSPIN_LOCK m_Lock; // list lock PKSPIN_LOCK m_Lock; // list lock
PDMA_ADAPTER m_Adapter; // dma adapter PDMA_ADAPTER m_Adapter; // dma adapter
PUSBHARDWAREDEVICE m_Hardware; // stores hardware object PUSBHARDWAREDEVICE m_Hardware; // stores hardware object
PQUEUE_HEAD AsyncListQueueHead; // async queue head PQUEUE_HEAD AsyncListQueueHead; // async queue head
@ -114,7 +114,7 @@ CUSBQueue::Initialize(
// //
// initialize device lock // initialize device lock
// //
KeInitializeSpinLock(&m_Lock); m_Lock = Lock;
// //
// Get the AsyncQueueHead // Get the AsyncQueueHead
@ -355,9 +355,13 @@ CUSBQueue::AddUSBRequest(
// //
// 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);
} }
@ -575,8 +579,6 @@ CUSBQueue::QueueHeadCompletion(
PQUEUE_HEAD CurrentQH, PQUEUE_HEAD CurrentQH,
NTSTATUS Status) NTSTATUS Status)
{ {
KIRQL OldLevel;
// //
// now unlink the queue head // now unlink the queue head
// FIXME: implement chained queue heads // FIXME: implement chained queue heads
@ -608,7 +610,9 @@ CUSBQueue::ProcessAsyncList(
// //
// lock completed async list // lock completed async list
// //
KeAcquireSpinLock(&m_Lock, &OldLevel); DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
// //
// walk async list // walk async list
@ -664,7 +668,8 @@ CUSBQueue::ProcessAsyncList(
// //
// release lock // release lock
// //
KeReleaseSpinLock(&m_Lock, OldLevel); DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(m_Lock, OldLevel);
} }
@ -767,7 +772,9 @@ CUSBQueue::QueueHeadCleanup(
// //
// 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
@ -777,7 +784,8 @@ CUSBQueue::QueueHeadCleanup(
// //
// release queue head // release queue head
// //
KeReleaseSpinLock(&m_Lock, OldLevel); DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(m_Lock, OldLevel);
// //
// Done for now // Done for now
@ -846,7 +854,9 @@ CUSBQueue::CompleteAsyncRequests()
// //
// 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
@ -873,7 +883,8 @@ CUSBQueue::CompleteAsyncRequests()
// //
// release lock // release lock
// //
KeReleaseSpinLock(&m_Lock, OldLevel); DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(m_Lock, OldLevel);
// //
// complete request now // complete request now
@ -883,7 +894,10 @@ CUSBQueue::CompleteAsyncRequests()
// //
// first acquire request lock // first acquire request lock
// //
KeAcquireSpinLock(&m_Lock, &OldLevel); DPRINT(__FUNCTION__ " acquire\n");
KeAcquireSpinLock(m_Lock, &OldLevel);
DPRINT(__FUNCTION__ " acquired\n");
} }
// //
@ -910,7 +924,8 @@ CUSBQueue::CompleteAsyncRequests()
// //
// release lock // release lock
// //
KeReleaseSpinLock(&m_Lock, OldLevel); DPRINT(__FUNCTION__ "release\n");
KeReleaseSpinLock(m_Lock, OldLevel);
} }
NTSTATUS NTSTATUS