45,6 → 45,16 |
|
#define SET_PTL0_ADDRESS_ARCH(x) /**< To be removed as situation permits. */ |
|
/** Implementation of page hash table interface. */ |
#define HT_WIDTH_ARCH 20 /* 1M */ |
#define HT_HASH_ARCH(page, asid) vhpt_hash((page), (asid)) |
#define HT_COMPARE_ARCH(page, asid, t) vhpt_compare((page), (asid), (t)) |
#define HT_SLOT_EMPTY_ARCH(t) ((t)->present.tag.tag_info.ti) |
#define HT_INVALIDATE_SLOT_ARCH(t) (t)->present.tag.tag_info.ti = true |
#define HT_GET_NEXT_ARCH(t) (t)->present.next |
#define HT_SET_NEXT_ARCH(t, s) (t)->present.next = (s) |
#define HT_SET_RECORD_ARCH(t, page, asid, frame, flags) vhpt_set_record(t, page, asid, frame, flags) |
|
#define PPN_SHIFT 12 |
|
#define VRN_SHIFT 61 |
54,7 → 64,7 |
|
#define VHPT_WIDTH 20 /* 1M */ |
#define VHPT_SIZE (1 << VHPT_WIDTH) |
#define VHPT_BASE 0 /* Must be aligned to VHPT_SIZE */ |
#define VHPT_BASE page_ht /* Must be aligned to VHPT_SIZE */ |
|
#define PTA_BASE_SHIFT 15 |
|
105,7 → 115,7 |
union vhpt_tag tag; |
|
/* Word 3 */ |
__u64 ig3 : 64; |
pte_t *next; /**< Collision chain next pointer. */ |
} __attribute__ ((packed)); |
|
struct vhpt_entry_not_present { |
123,7 → 133,8 |
union vhpt_tag tag; |
|
/* Word 3 */ |
__u64 ig3 : 64; |
pte_t *next; /**< Collision chain next pointer. */ |
|
} __attribute__ ((packed)); |
|
typedef union vhpt_entry { |
130,7 → 141,7 |
struct vhpt_entry_present present; |
struct vhpt_entry_not_present not_present; |
__u64 word[4]; |
} vhpt_entry_t; |
} vhpt_entry; |
|
struct region_register_map { |
unsigned ve : 1; |
246,9 → 257,8 |
} |
|
extern void page_arch_init(void); |
extern pte_t *vhpt_hash(__address page, asid_t asid); |
extern bool vhpt_compare(__address page, asid_t asid, pte_t *t); |
extern void vhpt_set_record(pte_t *t, __address page, asid_t asid, __address frame, int flags); |
|
extern vhpt_entry_t *vhpt_hash(__address page, asid_t asid); |
extern bool vhpt_compare(__address page, asid_t asid, vhpt_entry_t *v); |
extern void vhpt_set_record(vhpt_entry_t *v, __address page, asid_t asid, __address frame, int flags); |
|
#endif |