|
The Pedigree Project 0.1
|
#include <DiskImage.h>
Inheritance diagram for DiskImage:
Collaboration diagram for DiskImage:Public Member Functions | |
| bool | initialise () |
| virtual void | getName (String &str) |
| virtual void | dump (String &str) |
| virtual BufferView | read (uint64_t location) |
| virtual size_t | getSize () const |
| Gets the size of the disk. | |
| virtual size_t | getBlockSize () const |
| Gets the preferred I/O extent of the disk. | |
| virtual void | align (uint64_t location) |
| Sets the page boundary alignment after a specific location on the disk. | |
| virtual bool | pin (uint64_t location) |
| Pins a cache page. | |
| virtual void | unpin (uint64_t location) |
Public Member Functions inherited from Disk | |
| Disk (Device *p) | |
| virtual Disk * | physicalDisk () |
| bool | acquireUse (DiskUse &use) |
| uint32_t | endpointId () |
| virtual bool | getPartitionUuid (String &uuid) const |
| virtual bool | getPartitionLabel (String &label) const |
| virtual PagingStatus | preparePagingTransport (PagingTransport *&transport) |
| void | retireEndpoint () |
| bool | tryCloseEndpoint () |
| void | reopenEndpoint () |
| virtual Type | getType () |
| virtual SubType | getSubType () |
| virtual DiskReadView | readView (uint64_t location) |
| virtual DiskWriteView | writeView (uint64_t location) |
| virtual MUST_USE_RESULT bool | readInto (uint64_t location, void *buffer, size_t length) |
| virtual MUST_USE_RESULT bool | writeFrom (uint64_t location, const void *buffer, size_t length) |
| virtual MUST_USE_RESULT bool | writeFromBatch (WriteBuffer *buffers, size_t count) |
| virtual MUST_USE_RESULT bool | readIntoBatch (ReadBuffer *buffers, size_t count) |
| virtual MUST_USE_RESULT bool | syncData () |
| MUST_USE_RESULT bool | readViews (uint64_t location, size_t length, BufferViewSequence &views) |
| void | unpinViews (uint64_t location, BufferViewSequence &views) |
| virtual void | write (uint64_t location) |
| virtual size_t | getNativeBlockSize () const |
| virtual bool | cacheIsCritical () |
| Whether or not the cache is critical and cannot be flushed or deleted. | |
| virtual void | flush (uint64_t location) |
| Flush a cached page to disk. | |
| virtual bool | sync (uint64_t location, bool async) |
| virtual MUST_USE_RESULT bool | syncPages (const uint64_t *locations, size_t count) |
| virtual MUST_USE_RESULT bool | syncAll () |
| virtual MUST_USE_RESULT bool | retireCachePage (uint64_t location) |
| virtual MUST_USE_RESULT bool | zero (uint64_t location, size_t length) |
Public Member Functions inherited from Device | |
| 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 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) |
Private Member Functions | |
| uint64_t | getAlignmentPoint (uint64_t location) const |
| uint64_t | getPageLocation (uint64_t location) const |
Private Attributes | |
| void * | m_pBase |
| size_t | m_nSize |
| Cache | m_Cache |
| Mutex | m_CacheLock |
| uint64_t | m_AlignPoints [8] |
| size_t | m_nAlignPoints |
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 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) |
Static Public Attributes inherited from Disk | |
| static constexpr size_t | MaxReadBuffers = 32 |
| static constexpr size_t | MaxWriteBuffers = 32 |
| static constexpr size_t | MaxSyncPages = 64 |
Protected Member Functions inherited from Disk | |
| void | reserveEndpoint () |
| void | publishEndpoint () |
| virtual BufferView | acquireView (uint64_t location, bool writable, uint64_t &token) |
| virtual void | releaseView (uint64_t token, bool writable) |
Protected Member Functions inherited from Device | |
| NOT_COPYABLE_OR_ASSIGNABLE (Device) | |
Static Protected Member Functions inherited from Device | |
| static Device & | root () |
Protected Attributes inherited from Device | |
| 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 |
Static Protected Attributes inherited from Device | |
| static Device | m_Root |
| static Mutex | m_TreeLock |
Loads a disk image as a usable disk device.
Definition at line 28 of file DiskImage.h.
|
inline |
Definition at line 30 of file DiskImage.h.
|
virtual |
Definition at line 30 of file DiskImage.cc.
|
virtual |
Sets the page boundary alignment after a specific location on the disk.
For example, a partition beginning at byte 512 should align its first cache page with that boundary rather than with byte zero of the parent.
Use this function to keep the cache pages manipulated in read() and write() aligned with a child device whose start is not naturally page-aligned on the parent.
Reimplemented from Disk.
Definition at line 105 of file DiskImage.cc.
|
inlinevirtual |
Dumps a textual representation of the device into the given string.
Reimplemented from Disk.
Definition at line 40 of file DiskImage.h.
|
private |
Definition at line 133 of file DiskImage.cc.
|
inlinevirtual |
Gets the preferred I/O extent of the disk.
This may describe a native device block or a larger cache-fill/readahead extent, depending on the implementation. It is independent of the cache page boundary reported by BufferView::size().
Reimplemented from Disk.
Definition at line 48 of file DiskImage.h.
|
inlinevirtual |
Stores the device's name in str.
Reimplemented from Disk.
Definition at line 36 of file DiskImage.h.
|
private |
Definition at line 143 of file DiskImage.cc.
|
virtual |
Gets the size of the disk.
This is the size in bytes of the disk. Reads or writes beyond this size will fail.
Reimplemented from Disk.
Definition at line 101 of file DiskImage.cc.
| bool DiskImage::initialise | ( | ) |
Definition at line 34 of file DiskImage.cc.
|
virtual |
Pins a cache page.
This allows an upstream user of Disk pages to 'pin' cache pages, causing them to only be freed once all consumers have done an 'unpin'. The pin and unpin semantics allow for memory mappings to be made in a reasonably safe manner, as it can be assumed that the physical page for a particular cache block will not be freed.
location. Callers must not use an address obtained before a failed pin. Implements Disk.
Definition at line 117 of file DiskImage.cc.
References Cache::pin().
|
virtual |
Read from location on disk and return a view beginning at that byte. location must be 512-byte aligned. The returned view ends at the boundary of the independently owned cache page containing location; its size is unrelated to the device's block or readahead size.
location. The view is non-owning: use unpin() exactly once after every copy and subview is no longer in use. Larger I/O extents do not extend this ownership. | location | The offset from the start of the device, in bytes, to start the read, must be multiple of 512. Prefer readView() for readers and writeView() for scoped mutation. This legacy interface treats every read()/pin() reference as potentially mutable until its matching unpin(). No derived pointers may survive that reference. |
write() or flush() ). Reimplemented from Disk.
Definition at line 62 of file DiskImage.cc.
References PhysicalMemoryManager::getPageSize(), Cache::insert(), Cache::lookup(), and Cache::markNoLongerEditing().
|
virtual |
Unpins a cache page (see pin() for more information and rationale).
Implements Disk.
Definition at line 125 of file DiskImage.cc.
References Cache::release().
|
private |
Definition at line 67 of file DiskImage.h.
|
private |
Definition at line 65 of file DiskImage.h.
|
private |
Definition at line 66 of file DiskImage.h.
|
private |
Definition at line 68 of file DiskImage.h.
|
private |
Definition at line 63 of file DiskImage.h.
|
private |
Definition at line 62 of file DiskImage.h.