|
The Pedigree Project 0.1
|
#include <Uhci.h>
Inheritance diagram for Uhci:
Collaboration diagram for Uhci:Classes | |
| struct | QH |
| struct | TD |
Public Member Functions | |
| Uhci (Device *pDev) | |
| bool | initialised () const |
| struct Uhci::TD | ALIGN (16) |
| struct Uhci::QH | ALIGN (16) |
| virtual void | getName (String &str) |
| virtual void | addTransferToTransaction (uintptr_t pTransaction, bool bToggle, UsbPid pid, uintptr_t pBuffer, size_t nBytes) |
| Adds a new transfer to an existent transaction. | |
| virtual uintptr_t | createTransaction (UsbEndpoint endpointInfo) |
| Creates a new transaction with the given endpoint data. | |
| virtual MUST_USE_RESULT bool | doAsync (uintptr_t pTransaction, void(*pCallback)(uintptr_t, ssize_t)=0, uintptr_t pParam=0) |
| virtual MUST_USE_RESULT bool | addInterruptInHandler (UsbEndpoint endpointInfo, uintptr_t pBuffer, uint16_t nBytes, void(*pCallback)(uintptr_t, ssize_t), UsbInterruptInHandle &handle, uintptr_t pParam=0) |
| Adds an owned recurring interrupt-IN transaction. | |
| IrqDisposition | irq (irq_id_t number) override |
| IRQ handler. | |
| void | doDequeue () |
| void | timer (uint64_t delta) |
| Timer callback to handle port status changes. | |
| virtual bool | portReset (uint8_t nPort, bool bErrorResponse=false) |
| Gets a UsbDevice from a given vendor:product pair. | |
Public Member Functions inherited from UsbHub | |
| UsbHub (Device *p) | |
| RootConnection | rootConnectionForChild (uint8_t childPort) const |
| virtual bool | controllerAssignsAddresses () const |
| virtual bool | supportsHubDevices () const |
| virtual bool | prepareDevice (uint8_t, const UsbEndpoint &) |
| virtual bool | addressDevice (uint8_t, const UsbEndpoint &) |
| virtual bool | resetEndpoint (const UsbEndpoint &) |
| virtual Type | getType () |
| bool | deviceConnected (uint8_t nPort, UsbSpeed speed) |
| Called when a device is connected to a port on the hub. | |
| void | deviceDisconnected (uint8_t nPort) |
| Called when a device is disconnected from a port on the hub. | |
| ssize_t | doSync (uintptr_t nTransaction, uint32_t timeout=5000) |
Public Member Functions inherited from Device | |
| Device (Device *p) | |
| Device * | getParent () const |
| void | setParent (Device *p) |
| virtual const String & | getSpecificType () |
| virtual void | setSpecificType (String str) |
| void | setPciPosition (uint32_t bus, uint32_t device, uint32_t func) |
| void | setPciIdentifiers (uint8_t classCode, uint8_t subclassCode, uint16_t vendorId, uint16_t deviceId, uint8_t progIf) |
| void | setPciConfigHeader (const PciBus::ConfigSpace &space) |
| PciBus::ConfigSpace | getPciConfigHeader () const |
| uint8_t | getPciClassCode () |
| uint8_t | getPciSubclassCode () |
| uint16_t | getPciVendorId () |
| uint16_t | getPciDeviceId () |
| uint8_t | getPciProgInterface () |
| uint32_t | getPciBusPosition () |
| uint32_t | getPciDevicePosition () |
| uint32_t | getPciFunctionNumber () |
| Device * | getPhysicalFunction () const |
| size_t | getVirtualFunctionIndex () const |
| void | setVirtualFunction (Device *physicalFunction, size_t index) |
| virtual void | dump (String &str) |
| virtual Vector< Address * > & | addresses () |
| virtual uintptr_t | getInterruptNumber () |
| virtual void | setInterruptNumber (uintptr_t n) |
| void | addChild (Device *pDevice) |
| Device * | getChild (size_t n) |
| size_t | getNumChildren () |
| void | removeChild (size_t n) |
| void | removeChild (Device *d) |
| void | replaceChild (Device *src, Device *dest) |
Public Member Functions inherited from IrqHandler | |
| virtual bool | acceptsSpuriousInterrupts () const |
Public Member Functions inherited from RequestQueue | |
| RequestQueue (const String &name) | |
| virtual void | initialise () |
| virtual void | destroy () |
| MUST_USE_RESULT uint64_t | addRequest (size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0) |
| MUST_USE_RESULT uint64_t | addRequest (size_t priority, ActionOnDuplicate action, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0) |
| uint64_t | addAsyncRequest (size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0) |
| MUST_USE_RESULT bool | publishAsyncRequest (size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0) |
| bool | canWaitForCompletion () |
| MUST_USE_RESULT bool | waitForPreallocated (PreallocatedRequest &request) |
| MUST_USE_RESULT PreallocatedPublishResult | publishPreallocated (PreallocatedRequest &request, size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0) |
| MUST_USE_RESULT PreallocatedPublishResult | republishPreallocatedWhileReleasing (PreallocatedRequest &request, size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0) |
| MUST_USE_RESULT bool | halt () |
| MUST_USE_RESULT bool | resume () |
| LifecycleState | getLifecycleState () |
| bool | drain () |
Protected Member Functions | |
| virtual void | cancelAsyncAndDrain (uintptr_t pTransaction, void(*pCallback)(uintptr_t, ssize_t), uintptr_t pParam) |
| MUST_USE_RESULT bool | cancelInterruptInAndDrain (const UsbInterruptInToken &token, void(*callback)(uintptr_t, ssize_t), uintptr_t parameter, bool producerAlreadyStopped) override |
| bool | inInterruptCallbackContext () const override |
| size_t | currentRootPortGeneration (size_t port) const override |
| void | replaySuppressedConnectionChange (size_t port) override |
| virtual uint64_t | executeRequest (uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0) |
| void | cancelRequest (const Request &request) override |
Protected Member Functions inherited from UsbHub | |
| virtual bool | portSpeed (uint8_t, UsbSpeed &) |
| virtual bool | beginStartupActivity () |
| virtual void | endStartupActivity (UsbStartup::Outcome) |
| virtual void | releaseDeviceAddress (uint8_t) |
| MUST_USE_RESULT bool | publishInterruptInHandle (UsbInterruptInHandle &handle, const UsbInterruptInToken &token, void(*callback)(uintptr_t, ssize_t), uintptr_t parameter) |
| void | disconnectAllDevices () |
| void | retainDisconnectedAddressesUntilControllerTeardown () |
| void | attachToUpstreamHub (UsbHub *upstream, const RootConnection &connection) |
| UsbHub * | rootHub () const |
| MUST_USE_RESULT bool | suppressConnectionChanges (size_t port, ConnectionChangeSuppression &suppression) |
| MUST_USE_RESULT bool | deferConnectionChangeIfSuppressed (size_t port) |
Protected Member Functions inherited from Device | |
| NOT_COPYABLE_OR_ASSIGNABLE (Device) | |
Protected Member Functions inherited from IrqHandler | |
| virtual | ~IrqHandler () |
Protected Member Functions inherited from IrqHandlerBase | |
| virtual | ~IrqHandlerBase () |
Protected Member Functions inherited from RequestQueue | |
| virtual bool | workerPlacement (ThreadPlacement &) const |
| RequestQueue (const RequestQueue &) | |
| void | operator= (const RequestQueue &) |
| virtual bool | compareRequests (const Request &a, const Request &b) |
| int | work () |
| NextRequestResult | getNextRequest (Request *&request) |
| bool | drainIntakeLocked (size_t priority) |
| void | publishRequest (Request *request) |
| Request * | findDuplicate (const Request &request) |
| void | discardRequest (Request *request) |
| uint64_t | addAsyncRequestInternal (size_t priority, uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8) |
| PreallocatedPublishResult | publishPreallocatedRequest (PreallocatedRequest &request, PreallocatedRequest::State availableState, size_t priority, uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8) |
| void | releasePreallocatedRequest (Request *request) |
| void | invokeCancelRequest (const Request &request) |
| bool | callbackActiveOnCurrentThread () const |
| void | releaseRequest (Request *request) |
| uint64_t | waitForRequest (Request *request) |
| bool | startWorker () |
| bool | stopWorker () |
| void | closePreallocatedAdmission () |
| void | waitForPreallocatedPublishers () |
Private Member Functions | |
| bool | doAsyncOwned (uintptr_t transaction, void(*callback)(uintptr_t, ssize_t), uintptr_t parameter, UsbInterruptInHandle *interruptHandle, size_t interruptGeneration) |
| void | rebuildPeriodicScheduleLocked () |
| void | detachQueueHeadLocked (QH *pQH) |
| void | reclaimQueueHeadLocked (QH *pQH) |
| void | stop () |
| Stops the controller or panics before DMA ownership can be transferred. | |
| void | start () |
| Starts the controller or panics instead of leaving work silently stuck. | |
| bool | setLegacySupportControl (uint16_t control) |
| void | modifyPortControl (size_t portRegister, uint16_t clearMask, uint16_t setMask) |
| Serialises control RMWs with scanning without echoing W1C status bits. | |
| Uhci (const Uhci &) | |
| void | operator= (const Uhci &) |
Static Private Member Functions | |
| static void | enqueueCompletedTransfer (void *context) |
| static void | rearmPeriodicCompletion (void *context) |
| static void | destroyPeriodicCompletion (void *context) |
Additional Inherited Members | |
Public Types inherited from Device | |
| enum | Type { Generic , Root , Disk , Bus , Display , Network , Sound , Console , Mouse , Controller , UsbController , UsbGeneric , UsbContainer } |
| typedef Device *(* | Callback) (Device *) |
Public Types inherited from RequestQueue | |
| enum class | OverrunStatus { Clear , Armed , Stalled , Overloaded } |
| enum class | PreallocatedPublishResult { Accepted , TokenBusy , QueueStopped , QueueFull , InvalidPriority } |
| enum | ActionOnDuplicate { Block , NewRequest , ReturnImmediately } |
| enum class | LifecycleState { Stopped , Accepting , Stopping , Destroyed } |
Static Public Member Functions inherited from Device | |
| static bool | treeLockHeldByCurrentThread () |
| static void | foreach (Callback callback, Device *root=0) |
| template<class F , class... Args> | |
| static void | foreach (pedigree_std::Callable< F > &callback, Device *root, Args... args) |
| static void | addToRoot (Device *device) |
| static void | searchByVendorId (uint16_t vendorId, void(*callback)(Device *), Device *root=0) |
| static void | searchByVendorIdAndDeviceId (uint16_t vendorId, uint16_t deviceId, void(*callback)(Device *), Device *root=0) |
| static void | searchByClass (uint16_t classCode, void(*callback)(Device *), Device *root=0) |
| static void | searchByClassAndSubclass (uint16_t classCode, uint16_t subclassCode, void(*callback)(Device *), Device *root=0) |
| static void | searchByClassSubclassAndProgInterface (uint16_t classCode, uint16_t subclassCode, uint8_t progInterface, void(*callback)(Device *), Device *root=0) |
Protected Types inherited from RequestQueue | |
| enum class | NextRequestResult { Item , Empty , Retry } |
Static Protected Member Functions inherited from Device | |
| static Device & | root () |
Static Protected Member Functions inherited from RequestQueue | |
| static int | trampoline (void *p) |
| static void | completeRequest (Request *request, uint64_t returnValue, bool rejected) |
| static void | retainRequest (Request *request) |
Protected Attributes inherited from Device | |
| Vector< Address * > | m_Addresses |
| Vector< Device * > | m_Children |
| Device * | m_pParent |
| Device * | m_PhysicalFunction |
| size_t | m_VirtualFunctionIndex |
| uintptr_t | m_InterruptNumber |
| String | m_SpecificType |
| PciBus::ConfigSpace | m_ConfigHeader |
| uint8_t | m_ClassCode |
| uint8_t | m_SubclassCode |
| uint16_t | m_VendorId |
| uint16_t | m_DeviceId |
| uint8_t | m_ProgInterface |
| uint32_t | m_PciBusPos |
| uint32_t | m_PciDevicePos |
| uint32_t | m_PciFunctionNum |
Protected Attributes inherited from RequestQueue | |
| IntakeLane | m_IntakeLanes [REQUEST_QUEUE_NUM_PRIORITIES] |
| Request * | m_pRequestQueue [REQUEST_QUEUE_NUM_PRIORITIES] |
| Request * | m_pRequestQueueTail [REQUEST_QUEUE_NUM_PRIORITIES] |
| Request * | m_pActiveRequest |
| Atomic< size_t > | m_State |
| Mutex | m_LifecycleMutex |
| WaitQueue | m_RequestQueueWaiters |
| WaitQueue | m_WorkerWaiters |
| Thread * | m_pThread |
| Atomic< PerProcessorScheduler * > | m_pWorkerScheduler |
| SchedulerWorkerWake | m_WorkerWake |
| Atomic< size_t > | m_bWorkerReady |
| Atomic< size_t > | m_bWorkerActive |
| size_t | m_WorkerProgressGeneration |
| RequestQueueOverrunChecker | m_OverrunChecker |
| Timer * | m_pOverrunTimer |
| Atomic< size_t > | m_PublicationState |
| size_t | m_nMaxAsyncRequests |
| Atomic< size_t > | m_nAsyncRequests |
| Atomic< size_t > | m_nTotalRequests |
| Atomic< size_t > | m_nActiveRequests |
| NormalStaticString | m_Name |
Static Protected Attributes inherited from Device | |
| static Device | m_Root |
| static Mutex | m_TreeLock |
Static Protected Attributes inherited from RequestQueue | |
| static constexpr size_t | PublicationClosed = static_cast<size_t>(1) << ((sizeof(size_t) * 8) - 1) |
| static constexpr size_t | PublicationCountMask = ~PublicationClosed |
|
virtual |
Adds an owned recurring interrupt-IN transaction.
Implements UsbHub.
Definition at line 1346 of file Uhci.cc.
References addTransferToTransaction(), createTransaction(), m_CompletionDeliveries, m_SubmissionOperations, reclaimQueueHeadLocked(), ExtensibleBitmap::test(), and OperationBarrier::tryAcquire().
|
virtual |
Adds a new transfer to an existent transaction.
Implements UsbHub.
Definition at line 979 of file Uhci.cc.
References ExtensibleBitmap::clear(), Uhci::QH::MetaData::completion, ExtensibleBitmap::getFirstClear(), ProcessorBase::information(), m_SubmissionOperations, List< T, nodePoolSize >::pushBack(), ExtensibleBitmap::set(), ExtensibleBitmap::test(), and OperationBarrier::tryAcquire().
Referenced by addInterruptInHandler().
Here is the caller graph for this function:
|
protectedvirtual |
Cancels an accepted transaction or drains a completion which won the race. On return, the matching callback has run exactly once and the controller can no longer access any transfer buffer.
The callback and parameter identify the original transaction generation, preventing a stale numeric transaction handle from cancelling a reused controller slot.
Implements UsbHub.
Definition at line 1230 of file Uhci.cc.
References UsbHcd::TransferCompletion::claimCancellation(), Uhci::QH::MetaData::completion, List< T, nodePoolSize >::count(), UsbHcd::CallbackDeliveryQueue::deliver(), detachQueueHeadLocked(), UsbHcd::CallbackDeliveryQueue::drain(), enqueueCompletedTransfer(), m_CancelOperations, m_CompletionDeliveries, m_DequeueOperations, m_IrqProcessingLock, List< T, nodePoolSize >::popFront(), UsbHcd::CallbackDeliveryQueue::publish(), List< T, nodePoolSize >::pushBack(), IoBase::read16(), start(), stop(), ExtensibleBitmap::test(), OperationBarrier::tryAcquire(), OperationBarrier::tryEnter(), and IoBase::write16().
|
overrideprotectedvirtual |
Stops and drains one exact recurring interrupt-IN subscription.
Implements UsbHub.
Definition at line 1297 of file Uhci.cc.
References UsbHcd::CallbackDeliveryQueue::cancelSubscription(), detachQueueHeadLocked(), OperationBarrier::leave(), m_CancelOperations, m_CompletionDeliveries, m_IrqProcessingLock, m_TransferOperations, panic(), IoBase::read16(), reclaimQueueHeadLocked(), start(), stop(), ExtensibleBitmap::test(), OperationBarrier::tryAcquire(), and IoBase::write16().
|
overrideprotectedvirtual |
Releases payload ownership for a request that will not execute.
This runs without the queue guard for rejected candidates (including stopped queues, duplicates and capacity limits) and queued requests cancelled by destroy(). Implementations used by allocation-free producers must not sleep. Derived destructors must call destroy() while their override and member state are still alive. During destroy(), the lifecycle is serialized: halt() and resume() on this queue return false, while recursive destroy() is a fatal contract violation.
Reimplemented from RequestQueue.
|
virtual |
Creates a new transaction with the given endpoint data.
Implements UsbHub.
Definition at line 1073 of file Uhci.cc.
References ExtensibleBitmap::getFirstClear(), m_SubmissionOperations, ExtensibleBitmap::set(), and OperationBarrier::tryAcquire().
Referenced by addInterruptInHandler().
Here is the caller graph for this function:
|
overrideprotectedvirtual |
|
staticprivate |
|
private |
Requires IRQ then queue-list ownership and an established DMA halt.
Definition at line 370 of file Uhci.cc.
References m_AsyncSchedule, m_pCurrentAsyncQueueTail, and rebuildPeriodicScheduleLocked().
Referenced by cancelAsyncAndDrain(), cancelInterruptInAndDrain(), and irq().
Here is the caller graph for this function:
|
virtual |
Performs a transaction asynchronously.
Returning true transfers one completion obligation to the controller: it must call the callback exactly once, and only after it can no longer access any transfer buffer. Returning false guarantees that the callback was not and will not be called, and that the rejected transaction no longer owns controller or transfer-buffer state.
Implements UsbHub.
|
private |
|
staticprivate |
Runs after callback delivery and hands the QH to the reclaim worker.
Definition at line 359 of file Uhci.cc.
References m_DequeueCount, m_DequeueList, and Semaphore::release().
Referenced by cancelAsyncAndDrain(), and irq().
Here is the caller graph for this function:
|
protectedvirtual |
Callback - classes are expected to inherit and override this function. It's called when a request needs to be executed (by the worker thread).
Implements RequestQueue.
Definition at line 1485 of file Uhci.cc.
References Dec, UsbHub::deviceConnected(), UsbHub::deviceDisconnected(), Hex, and IoBase::read16().
|
inlinevirtual |
|
inlineoverrideprotectedvirtual |
True when this execution context must not wait for a USB callback.
Reimplemented from UsbHub.
Definition at line 188 of file Uhci.h.
References UsbHcd::CallbackDeliveryQueue::isInCallbackContext().
|
overridevirtual |
IRQ handler.
Implements IrqHandler.
Definition at line 735 of file Uhci.cc.
References List< T, nodePoolSize >::begin(), UsbHcd::TransferCompletion::captureNatural(), UsbHcd::TransferCompletion::claimCaptured(), Uhci::QH::MetaData::completion, List< T, nodePoolSize >::count(), currentRootPortGeneration(), Dec, UsbHcd::CallbackDeliveryQueue::deliver(), detachQueueHeadLocked(), EMIT_IF, List< T, nodePoolSize >::end(), enqueueCompletedTransfer(), List< T, nodePoolSize >::erase(), Hex, m_AsyncSchedule, m_CompletionDeliveries, m_DequeueOperations, m_IrqProcessingLock, List< T, nodePoolSize >::popFront(), UsbHcd::CallbackDeliveryQueue::publish(), List< T, nodePoolSize >::pushBack(), List< T, nodePoolSize >::pushFront(), Quiesced, IoBase::read16(), start(), stop(), OperationBarrier::tryAcquire(), OperationBarrier::tryEnter(), and IoBase::write16().
|
private |
Serialises control RMWs with scanning without echoing W1C status bits.
Definition at line 1404 of file Uhci.cc.
References IoBase::read16(), and IoBase::write16().
Referenced by portReset().
Here is the caller graph for this function:
|
virtual |
Gets a UsbDevice from a given vendor:product pair.
Performs a port reset for the given port. Should only be used in situations where a device cannot recover from an error without a complete reset.
| bErrorResponse | true if this is a reset as a response to an error. Error responses are allowed to use significantly longer delays in their reset logic. |
Implements UsbHub.
Definition at line 1414 of file Uhci.cc.
References Dec, EMIT_IF, Hex, modifyPortControl(), IoBase::read16(), and IoBase::write16().
|
staticprivate |
|
private |
Requires the IRQ and queue-list locks, with DMA halted.
Definition at line 407 of file Uhci.cc.
Referenced by detachQueueHeadLocked().
Here is the caller graph for this function:
|
private |
Reclaims a detached or never-published QH while m_Mutex is held.
Definition at line 473 of file Uhci.cc.
References ExtensibleBitmap::clear(), List< T, nodePoolSize >::count(), and List< T, nodePoolSize >::popFront().
Referenced by addInterruptInHandler(), and cancelInterruptInAndDrain().
Here is the caller graph for this function:
|
overrideprotectedvirtual |
|
private |
|
private |
Starts the controller or panics instead of leaving work silently stuck.
Definition at line 1631 of file Uhci.cc.
References panic(), IoBase::read16(), and IoBase::write16().
Referenced by cancelAsyncAndDrain(), cancelInterruptInAndDrain(), and irq().
Here is the caller graph for this function:
|
private |
Stops the controller or panics before DMA ownership can be transferred.
Definition at line 1621 of file Uhci.cc.
References panic(), IoBase::read16(), and IoBase::write16().
Referenced by cancelAsyncAndDrain(), cancelInterruptInAndDrain(), and irq().
Here is the caller graph for this function:
|
virtual |
Timer callback to handle port status changes.
Implements TimerHandler.
Definition at line 1527 of file Uhci.cc.
References Timer::armHandler(), UsbHub::deferConnectionChangeIfSuppressed(), Machine::getTimer(), m_nPortCheckTicks, panic(), IoBase::read16(), Timer::supportsDeadlines(), OperationBarrier::tryAcquire(), and IoBase::write16().
List of QHs in the active asynchronous schedule.
Definition at line 307 of file Uhci.h.
Referenced by detachQueueHeadLocked(), and irq().
|
private |
|
private |
Drains cancellation callers before their callback state is reclaimed.
Definition at line 261 of file Uhci.h.
Referenced by cancelAsyncAndDrain(), and cancelInterruptInAndDrain().
|
private |
Per-generation callback publication and cancellation drain boundary.
Definition at line 279 of file Uhci.h.
Referenced by addInterruptInHandler(), cancelAsyncAndDrain(), cancelInterruptInAndDrain(), and irq().
|
private |
Semaphore for the dequeue list.
Definition at line 314 of file Uhci.h.
Referenced by enqueueCompletedTransfer().
List of QHs ready for dequeue.
Definition at line 311 of file Uhci.h.
Referenced by enqueueCompletedTransfer().
|
private |
Protects queue-head admission from racing controller teardown. The persistent worker is joined separately after admitted work drains.
Definition at line 320 of file Uhci.h.
Referenced by cancelAsyncAndDrain(), and irq().
|
private |
Serialises transaction completion with synchronous cancellation.
Definition at line 277 of file Uhci.h.
Referenced by cancelAsyncAndDrain(), cancelInterruptInAndDrain(), and irq().
|
private |
|
private |
|
private |
Pointer to the current queue tail, which allows insertion of new queue heads to the asynchronous schedule.
Definition at line 300 of file Uhci.h.
Referenced by detachQueueHeadLocked().
|
private |
|
private |
|
private |
Rejects submissions which race transfer teardown.
Definition at line 259 of file Uhci.h.
Referenced by addInterruptInHandler(), addTransferToTransaction(), and createTransaction().
|
private |
|
private |
Retained from accepted publication through worker reclamation.
Definition at line 263 of file Uhci.h.
Referenced by cancelInterruptInAndDrain().
|
private |