The Pedigree Project
0.1
|
#include <PciAtaController.h>
Public Member Functions | |
PciAtaController (Controller *pDev, int nController=0) | |
virtual void | getName (String &str) |
virtual bool | sendCommand (size_t nUnit, uintptr_t pCommand, uint8_t nCommandSize, uintptr_t pRespBuffer, uint16_t nRespBytes, bool bWrite) |
virtual uint64_t | executeRequest (uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8) |
virtual bool | irq (irq_id_t number, InterruptState &state) |
Public Member Functions inherited from AtaController | |
AtaController (Controller *pDev, int nController=0) | |
virtual bool | compareRequests (const RequestQueue::Request &a, const RequestQueue::Request &b) |
Public Member Functions inherited from ScsiController | |
ScsiController (Controller *pDev) | |
Public Member Functions inherited from Controller | |
Controller (Device *pDev) | |
virtual Type | getType () |
virtual void | dump (String &str) |
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 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 () |
Public Attributes | |
IoBase * | m_pCommandRegs |
IoBase * | m_pControlRegs |
Public Attributes inherited from AtaController | |
IoBase * | m_pCommandRegs |
IoBase * | m_pControlRegs |
Protected Attributes | |
int | m_nController |
Protected Attributes inherited from AtaController | |
int | m_nController |
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 |
Private Types | |
enum | { UnknownController, PIIX, PIIX3, PIIX4, ICH, ICH0, ICH2, ICH3, ICH4, ICH5 } |
Private Member Functions | |
PciAtaController (const PciAtaController &) | |
void | operator= (const PciAtaController &) |
void | diskHelper (bool master, IoBase *cmd, IoBase *ctl, BusMasterIde *dma, size_t irq) |
Private Attributes | |
enum PciAtaController:: { ... } | m_PciControllerType |
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) |
Protected Member Functions inherited from AtaController | |
virtual size_t | getNumUnits () |
Protected Member Functions inherited from ScsiController | |
void | searchDisks () |
Protected Member Functions inherited from Device | |
NOT_COPYABLE_OR_ASSIGNABLE (Device) | |
Protected Member Functions inherited from RequestQueue | |
RequestQueue (const RequestQueue &) | |
void | operator= (const RequestQueue &) |
bool | isRequestValid (const Request *r) |
int | work () |
Request * | getNextRequest () |
Protected Member Functions inherited from IrqHandler | |
virtual | ~IrqHandler () |
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) |
Static Protected Attributes inherited from Device | |
static Device | m_Root |
static Mutex | m_TreeLock |
Class for a PCI-based IDE controller.
Definition at line 38 of file PciAtaController.h.
PciAtaController::PciAtaController | ( | Controller * | pDev, |
int | nController = 0 |
||
) |
Definition at line 42 of file PciAtaController.cc.
References AtaStatus::__reg_contents, Device::addChild(), Device::addresses(), IoPort::allocate(), Vector< T >::clear(), ERROR, Device::getChild(), Device::getInterruptNumber(), Device::getNumChildren(), Device::getPciDeviceId(), Device::getPciProgInterface(), AtaDisk::initialise(), RequestQueue::initialise(), BusMasterIde::initialise(), irq(), Device::Address::m_Address, Device::m_Children, Device::Address::m_Io, NOTICE, Processor::pause(), PciBus::readConfigSpace(), IrqManager::registerIsaIrqHandler(), Device::removeChild(), AtaDisk::sendCommand(), Device::setInterruptNumber(), Device::setSpecificType(), IoPort::write8(), and PciBus::writeConfigSpace().
Referenced by getName().
|
virtual |
Callback - classes are expected to inherit and override this function. It's called when a request needs to be executed (by the worker thread).
Reimplemented from ScsiController.
Definition at line 374 of file PciAtaController.cc.
References AtaDisk::doRead(), AtaDisk::doWrite(), and Processor::information().
Referenced by getName().
|
inlinevirtual |
Stores the device's name in str.
Implements AtaController.
Definition at line 44 of file PciAtaController.h.
References executeRequest(), irq(), and PciAtaController().
|
virtual |
Called when the handler is registered with the irq manager and the irq occurred
[in] | number | the irq number |
Reimplemented from AtaController.
Definition at line 390 of file PciAtaController.cc.
References BusMasterIde::commandComplete(), AtaDisk::getBusMaster(), Device::getChild(), Device::getInterruptNumber(), Device::getNumChildren(), AtaDisk::irqReceived(), and BusMasterIde::isActive().
Referenced by getName(), and PciAtaController().