Classes | Public Types | Public Member Functions | Public Attributes | Protected Attributes

MemCache Class Reference

A cache for physical memory indexed by page number. More...

#include <memcache.h>

Inheritance diagram for MemCache:
MemTlb InstructionCache Halifax

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

CacheEntryget (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

MemCache::MemCache ( DBus< MessageMem > &  mem,
DBus< MessageMemRegion > &  memregion 
) [inline]

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

unsigned MemCache::_debug_fault_line [protected]
unsigned MemCache::_error_code [protected]
unsigned MemCache::_fault [protected]
unsigned MemCache::_mtr_in [protected]
unsigned MemCache::_mtr_out [protected]
unsigned MemCache::_mtr_read [protected]

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines