List of all members.
Classes |
struct | Buffers |
| Cache MMIO registers and pending writes to them.
|
struct | CacheEntry |
Public Types |
enum | Type {
TYPE_R = 1u << 0,
TYPE_W = 1u << 1,
TYPE_RMW = TYPE_R | TYPE_W,
TYPE_U = 1u << 2,
TYPE_RES = 1u << 3,
TYPE_X = 1u << 4
} |
Public Member Functions |
CacheEntry * | get (unsigned long phys1, unsigned long phys2, unsigned len, Type type) |
| Get an entry from the cache or fetch one from memory.
|
void | invalidate (bool writeback) |
| Invalidate the cache, thus writeback the buffers.
|
| MemCache (DBus< MessageMem > &mem, DBus< MessageMemRegion > &memregion) |
Public Attributes |
bool | debug |
CacheEntry | _values [ASSOZ] |
unsigned | _newest |
Protected Attributes |
DBus< MessageMem > & | _mem |
DBus< MessageMemRegion > & | _memregion |
unsigned | _fault |
unsigned | _error_code |
unsigned | _debug_fault_line |
unsigned | _mtr_in |
unsigned | _mtr_read |
unsigned | _mtr_out |
Detailed Description
A cache for physical memory indexed by page number.
Member Enumeration Documentation
- Enumerator:
TYPE_R |
|
TYPE_W |
|
TYPE_RMW |
|
TYPE_U |
|
TYPE_RES |
|
TYPE_X |
|
Constructor & Destructor Documentation
Member Function Documentation
CacheEntry* MemCache::get |
( |
unsigned long |
phys1, |
|
|
unsigned long |
phys2, |
|
|
unsigned |
len, |
|
|
Type |
type | |
|
) |
| | [inline] |
Get an entry from the cache or fetch one from memory.
What should we do if two different pages are referenced?
We could fallback to dword mode but there is this strange corner case where somebody does an locked operation crossing two non-adjunct pages, where we have to map the two pages into an 8k region and unmap them later on....
Invalidate a dirty entry, as we entry points to the last used buffer it must be the oldest write.
void MemCache::invalidate |
( |
bool |
writeback |
) |
[inline] |
Invalidate the cache, thus writeback the buffers.
Member Data Documentation
The documentation for this class was generated from the following file: