The Pedigree Project  0.1
Public Member Functions | Private Member Functions | Private Attributes | List of all members
CdiDisk Class Reference

#include <CdiDisk.h>

+ Inheritance diagram for CdiDisk:
+ Collaboration diagram for CdiDisk:

Public Member Functions

 CdiDisk (struct cdi_storage_device *device)
 
 CdiDisk (Disk *pDev, struct cdi_storage_device *device)
 
virtual void getName (String &str)
 
bool initialise ()
 
virtual uintptr_t read (uint64_t location)
 
virtual void write (uint64_t location)
 
virtual bool cacheIsCritical ()
 Assume CDI-provided disks are never read-only.
 
virtual void flush (uint64_t location)
 
- Public Member Functions inherited from Disk
 Disk (Device *p)
 
virtual Type getType ()
 
virtual SubType getSubType ()
 
virtual void dump (String &str)
 
virtual void align (uint64_t location)
 Sets the page boundary alignment after a specific location on the disk. More...
 
virtual size_t getSize () const
 Gets the size of the disk. More...
 
virtual size_t getBlockSize () const
 Gets the block size of the disk. More...
 
virtual void pin (uint64_t location)
 Pins a cache page. More...
 
virtual void unpin (uint64_t location)
 
- 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 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)
 

Private Member Functions

 CdiDisk (const CdiDisk &)
 
const CdiDiskoperator= (const CdiDisk &)
 

Private Attributes

struct cdi_storage_device * m_Device
 
Cache m_Cache
 

Additional Inherited Members

- Public Types inherited from Disk
enum  SubType { ATA = 0, ATAPI }
 
- Public Types inherited from Device
enum  Type {
  Generic, Root, Disk, Bus,
  Display, Network, Sound, Console,
  Mouse, Controller, UsbController, UsbGeneric,
  UsbContainer
}
 
typedef Device *(* Callback) (Device *)
 
- 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 Device
 NOT_COPYABLE_OR_ASSIGNABLE (Device)
 
- Static Protected Member Functions inherited from Device
static Deviceroot ()
 
- 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
 
- Static Protected Attributes inherited from Device
static Device m_Root
 
static Mutex m_TreeLock
 

Detailed Description

CDI Disk Device

Definition at line 32 of file CdiDisk.h.

Member Function Documentation

virtual void CdiDisk::flush ( uint64_t  location)
inlinevirtual

CDI disks do not yet do any form of caching.

Todo:
Fix that.

Reimplemented from Disk.

Definition at line 65 of file CdiDisk.h.

virtual void CdiDisk::getName ( String str)
inlinevirtual

Stores the device's name in str.

Reimplemented from Disk.

Definition at line 39 of file CdiDisk.h.

References initialise(), read(), and write().

bool CdiDisk::initialise ( )

Tries to detect if this device is present.

Returns
True if the device is present and was successfully initialised.

Definition at line 54 of file CdiDisk.cc.

References ServiceManager::enumerateOperations(), ERROR, ServiceManager::getService(), NOTICE, ServiceFeatures::provides(), Service::serve(), and ServiceFeatures::touch.

Referenced by getName(), and write().

+ Here is the caller graph for this function:

uintptr_t CdiDisk::read ( uint64_t  location)
virtual

Read from location on disk and return a pointer to it. location must be 512 byte aligned. The pointer returned is within a page of cache that maps to 4096 bytes of disk area.

Note
If the Disk is backed by a Cache, the buffer returned should have its refcount incremented by one by a successful run of read(). Use unpin() to indicate you no longer care about the buffer.
Parameters
locationThe offset from the start of the device, in bytes, to start the read, must be multiple of 512.
Returns
Pointer to writable area of memory containing the data. If the data is written, the page is marked as dirty and may be written back to disk at any time (or forced with write() or flush() ).

Reimplemented from Disk.

Definition at line 93 of file CdiDisk.cc.

References assert.

Referenced by getName().

+ Here is the caller graph for this function:

void CdiDisk::write ( uint64_t  location)
virtual

This function schedules a cache writeback of the given location. The data to be written back is fetched from the cache (pointer returned by read() ).

Parameters
locationThe offset from the start of the device, in bytes, to start the write. Must be 512byte aligned.

Reimplemented from Disk.

Definition at line 108 of file CdiDisk.cc.

References Device::addToRoot(), assert, and initialise().

Referenced by getName().

+ Here is the caller graph for this function:


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