|
The Pedigree Project
0.1
|
#include <Ehci.h>
Inheritance diagram for Ehci:
Collaboration diagram for Ehci:Classes | |
| struct | QH |
| struct | qTD |
Public Member Functions | |
| Ehci (Device *pDev) | |
| bool | initialiseController () |
| struct Ehci::qTD | ALIGN (32) |
| 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 void | doAsync (uintptr_t pTransaction, void(*pCallback)(uintptr_t, ssize_t)=0, uintptr_t pParam=0) |
| virtual void | addInterruptInHandler (UsbEndpoint endpointInfo, uintptr_t pBuffer, uint16_t nBytes, void(*pCallback)(uintptr_t, ssize_t), uintptr_t pParam=0) |
| Adds a new handler for an interrupt IN transaction. | |
| virtual bool | irq (irq_id_t number, InterruptState &state) |
| IRQ handler. | |
| void | doDequeue () |
| virtual bool | portReset (uint8_t nPort, bool bErrorResponse=false) |
| Gets a UsbDevice from a given vendor:product pair. More... | |
Public Member Functions inherited from UsbHub | |
| UsbHub (Device *p) | |
| 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) |
| void | ignoreConnectionChanges (uint8_t nPort, bool bIgnore=true) |
Public Member Functions inherited from Device | |
| Device (Device *p) | |
| Device * | getParent () const |
| void | setParent (Device *p) |
| virtual 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 () |
| 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 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) |
| void | halt () |
| void | resume () |
Protected Member Functions | |
| 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) |
Protected Member Functions inherited from Device | |
| NOT_COPYABLE_OR_ASSIGNABLE (Device) | |
Protected Member Functions inherited from IrqHandler | |
| virtual | ~IrqHandler () |
Protected Member Functions inherited from RequestQueue | |
| RequestQueue (const RequestQueue &) | |
| void | operator= (const RequestQueue &) |
| virtual bool | compareRequests (const Request &a, const Request &b) |
| bool | isRequestValid (const Request *r) |
| int | work () |
| Request * | getNextRequest () |
Private Member Functions | |
| Ehci (const Ehci &) | |
| void | operator= (const Ehci &) |
Private Attributes | |
| enum Ehci::EhciConstants | ALIGN |
| IoBase * | m_pBase |
| uint8_t | m_nOpRegsOffset |
| uint8_t | m_nPorts |
| Mutex | m_Mutex |
| Spinlock | m_QueueListChangeLock |
| QH * | m_pQHList |
| uintptr_t | m_pQHListPhys |
| ExtensibleBitmap | m_QHBitmap |
| uint32_t * | m_pFrameList |
| uintptr_t | m_pFrameListPhys |
| ExtensibleBitmap | m_FrameBitmap |
| qTD * | m_pqTDList |
| uintptr_t | m_pqTDListPhys |
| ExtensibleBitmap | m_qTDBitmap |
| QH * | m_pCurrentQueueTail |
| QH * | m_pCurrentQueueHead |
| MemoryRegion | m_EhciMR |
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 | ActionOnDuplicate { Block, NewRequest, ReturnImmediately } |
Static Public Member Functions inherited from Device | |
| 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) |
Static Protected Member Functions inherited from Device | |
| static Device & | root () |
Static Protected Member Functions inherited from RequestQueue | |
| static int | trampoline (void *p) |
| static int | doAsync (void *p) |
Protected Attributes inherited from UsbHub | |
| ExtensibleBitmap | m_IgnoredPorts |
| Bitmap of ports to ignore connection changes on. | |
Protected Attributes inherited from Device | |
| Vector< Address * > | m_Addresses |
| Vector< Device * > | m_Children |
| Device * | m_pParent |
| 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 | |
| Request * | m_pRequestQueue [REQUEST_QUEUE_NUM_PRIORITIES] |
| volatile bool | m_Stop |
| Mutex | m_RequestQueueMutex |
| ConditionVariable | m_RequestQueueCondition |
| ConditionVariable | m_AsyncRequestQueueCondition |
| Thread * | m_pThread |
| bool | m_Halted |
| Mutex | m_HaltAcknowledged |
| RequestQueueOverrunChecker | m_OverrunChecker |
| size_t | m_nMaxAsyncRequests |
| size_t | m_nAsyncRequests |
| size_t | m_nTotalRequests |
| String | m_Name |
Static Protected Attributes inherited from Device | |
| static Device | m_Root |
| static Mutex | m_TreeLock |
|
virtual |
|
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 1061 of file Ehci.cc.
References DEBUG_LOG, Dec, Hex, and WARNING.
Referenced by getName().
Here is the caller graph for this function:
|
inlinevirtual |
Stores the device's name in str.
Reimplemented from Device.
Definition at line 148 of file Ehci.h.
References addInterruptInHandler(), addTransferToTransaction(), createTransaction(), doAsync(), executeRequest(), irq(), and portReset().
| bool Ehci::initialiseController | ( | ) |
Definition at line 86 of file Ehci.cc.
References PhysicalMemoryManager::continuous, IrqManager::control(), DEBUG_LOG, Dec, ERROR, Hex, InterruptManager::instance(), PhysicalMemoryManager::instance(), VirtualAddressSpace::KernelMode, NOTICE, PciBus::readConfigSpace(), InterruptManager::registerInterruptHandler(), IrqManager::registerPciIrqHandler(), VirtualAddressSpace::Write, and PciBus::writeConfigSpace().
|
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 996 of file Ehci.cc.
References DEBUG_LOG, Dec, Hex, and WARNING.
Referenced by getName().
Here is the caller graph for this function:
1.8.11