|
| | Ehci (Device *pDev) |
| |
| bool | initialiseController () |
| |
| void | startFirmwareRecovery () |
| |
|
struct Ehci::qTD | ALIGN (4) |
| |
|
struct Ehci::QH | ALIGN (32) |
| |
| 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 () |
| |
| virtual bool | portReset (uint8_t nPort, bool bErrorResponse=false) |
| | Gets a UsbDevice from a given vendor:product pair.
|
| |
| | 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) |
| |
| | 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 |
| |
| | 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 () |
| |
|
| 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 |
| |
| 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 |
| |
| virtual bool | portSpeed (uint8_t, UsbSpeed &) |
| |
| 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) |
| |
| virtual size_t | currentRootPortGeneration (size_t port) const |
| |
|
| NOT_COPYABLE_OR_ASSIGNABLE (Device) |
| |
Protected Member Functions inherited from IrqHandler |
| virtual | ~IrqHandler () |
| |
Protected Member Functions inherited from IrqHandlerBase |
| virtual | ~IrqHandlerBase () |
| |
| 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 () |
| |
|
| enum | EhciConstants {
EHCI_CAPLENGTH = 0x00
, EHCI_HCIVERSION = 0x02
, EHCI_HCSPARAMS = 0x04
, EHCI_HCCPARAMS = 0x08
,
EHCI_CMD = 0x00
, EHCI_STS = 0x04
, EHCI_INTR = 0x08
, EHCI_CTRLDSEG = 0x10
,
EHCI_FRINDEX = 0x0c
, EHCI_PERIODICLP = 0x14
, EHCI_ASYNCLP = 0x18
, EHCI_CFGFLAG = 0x40
,
EHCI_PORTSC = 0x44
, EHCI_CMD_ASYNCLE = 0x20
, EHCI_CMD_PERIODICLE = 0x10
, EHCI_CMD_HCRES = 0x02
,
EHCI_CMD_RUN = 0x01
, EHCI_STS_HALTED = 0x1000
, EHCI_STS_SYSERR = 0x10
, EHCI_STS_ASYNCADVANCE = 0x20
,
EHCI_STS_PORTCH = 0x4
, EHCI_STS_ERR = 0x2
, EHCI_STS_INT = 0x1
, EHCI_PORTSC_PPOW = 0x1000
,
EHCI_PORTSC_PRES = 0x100
, EHCI_PORTSC_OCCH = 0x20
, EHCI_PORTSC_ENCH = 0x8
, EHCI_PORTSC_EN = 0x4
,
EHCI_PORTSC_CSCH = 0x2
, EHCI_PORTSC_CONN = 0x1
} |
| |
| using | IrqProcessingLock = Mutex |
| |
|
| enum | Type {
Generic
, Root
, Disk
, Bus
,
Display
, Network
, Sound
, Console
,
Mouse
, Controller
, UsbController
, UsbGeneric
,
UsbContainer
} |
| |
| typedef Device *(* | Callback) (Device *) |
| |
| 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 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) |
| |
| enum class | NextRequestResult { Item
, Empty
, Retry
} |
| |
| static Device & | root () |
| |
| static int | trampoline (void *p) |
| |
| static void | completeRequest (Request *request, uint64_t returnValue, bool rejected) |
| |
| static void | retainRequest (Request *request) |
| |
| 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 |
| |
| 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 Device | m_Root |
| |
| static Mutex | m_TreeLock |
| |
| static constexpr size_t | PublicationClosed = static_cast<size_t>(1) << ((sizeof(size_t) * 8) - 1) |
| |
| static constexpr size_t | PublicationCountMask = ~PublicationClosed |
| |
Device driver for the Ehci class
Definition at line 51 of file Ehci.h.