The Pedigree Project  0.1
Classes | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
Ehci Class Reference

#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)
 
DevicegetParent () 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)
 
DevicegetChild (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 ()
 
RequestgetNextRequest ()
 

Private Types

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_ASYNCADVANCE = 0x20, EHCI_STS_PORTCH = 0x4,
  EHCI_STS_ERR = 0x2, EHCI_STS_INT = 0x1, EHCI_PORTSC_PPOW = 0x1000, EHCI_PORTSC_PRES = 0x100,
  EHCI_PORTSC_ENCH = 0x8, EHCI_PORTSC_EN = 0x4, EHCI_PORTSC_CSCH = 0x2, EHCI_PORTSC_CONN = 0x1
}
 

Private Member Functions

 Ehci (const Ehci &)
 
void operator= (const Ehci &)
 

Private Attributes

enum Ehci::EhciConstants ALIGN
 
IoBasem_pBase
 
uint8_t m_nOpRegsOffset
 
uint8_t m_nPorts
 
Mutex m_Mutex
 
Spinlock m_QueueListChangeLock
 
QHm_pQHList
 
uintptr_t m_pQHListPhys
 
ExtensibleBitmap m_QHBitmap
 
uint32_t * m_pFrameList
 
uintptr_t m_pFrameListPhys
 
ExtensibleBitmap m_FrameBitmap
 
qTDm_pqTDList
 
uintptr_t m_pqTDListPhys
 
ExtensibleBitmap m_qTDBitmap
 
QHm_pCurrentQueueTail
 
QHm_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 Deviceroot ()
 
- 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
 
Devicem_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
Requestm_pRequestQueue [REQUEST_QUEUE_NUM_PRIORITIES]
 
volatile bool m_Stop
 
Mutex m_RequestQueueMutex
 
ConditionVariable m_RequestQueueCondition
 
ConditionVariable m_AsyncRequestQueueCondition
 
Threadm_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
 

Detailed Description

Device driver for the Ehci class

Definition at line 41 of file Ehci.h.

Member Function Documentation

void Ehci::doAsync ( uintptr_t  pTransaction,
void(*)(uintptr_t, ssize_t)  pCallback = 0,
uintptr_t  pParam = 0 
)
virtual

Performs a transaction asynchronously, calling the given callback on completion

Implements UsbHub.

Definition at line 880 of file Ehci.cc.

References DEBUG_LOG, Dec, ERROR, and Hex.

Referenced by getName().

+ Here is the caller graph for this function:

uint64_t Ehci::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 
)
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:

virtual void Ehci::getName ( String str)
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 ( )
bool Ehci::portReset ( uint8_t  nPort,
bool  bErrorResponse = false 
)
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.

Note
Assumes the port is at CONNECTED with a VALID DEVICE attached.
Parameters
bErrorResponsetrue 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:


The documentation for this class was generated from the following files: