Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 748 → Rev 749

/kernel/trunk/arch/ia64/include/mm/page.h
32,6 → 32,7
 
#include <arch/mm/frame.h>
#include <genarch/mm/page_ht.h>
#include <arch/mm/asid.h>
#include <arch/types.h>
#include <typedefs.h>
#include <debug.h>
46,20 → 47,21
#define SET_PTL0_ADDRESS_ARCH(ptl0)
 
/** Implementation of page hash table interface. */
#define HT_ENTRIES_ARCH (VHPT_SIZE/sizeof(pte_t))
#define HT_HASH_ARCH(page, asid) vhpt_hash((page), (asid))
#define HT_COMPARE_ARCH(page, asid, t) 0
#define HT_SLOT_EMPTY_ARCH(t) 1
#define HT_INVALIDATE_SLOT_ARCH(t)
#define HT_GET_NEXT_ARCH(t) 0
#define HT_SET_NEXT_ARCH(t, s)
#define HT_SET_RECORD_ARCH(t, page, asid, frame, flags)
#define HT_ENTRIES_ARCH (VHPT_SIZE/sizeof(pte_t))
#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
#define VRN_MASK (7LL << VRN_SHIFT)
 
#define VRN_KERNEL 0
#define VRN_WORK 1LL
#define REGION_REGISTERS 8
 
#define VHPT_WIDTH 20 /* 1M */
67,6 → 69,19
 
#define VHPT_BASE page_ht /* Must be aligned to VHPT_SIZE */
 
/** Memory Attributes. */
#define MA_WRITEBACK 0x0
#define MA_UNCACHEABLE 0x4
 
/** Privilege Levels. Only the most and the least privileged ones are ever used. */
#define PL_KERNEL 0x0
#define PL_USER 0x3
 
/* Access Rigths. Only certain combinations are used by the kernel. */
#define AR_READ 0x0
#define AR_EXECUTE 0x1
#define AR_WRITE 0x2
 
struct vhpt_tag_info {
unsigned long long tag : 63;
unsigned ti : 1;
101,7 → 116,7
union vhpt_tag tag;
/* Word 3 */
unsigned long long next : 64; /**< Collision chain next pointer. */
pte_t *next; /**< Collision chain next pointer. */
} __attribute__ ((packed));
 
struct vhpt_entry_not_present {
119,7 → 134,7
union vhpt_tag tag;
/* Word 3 */
unsigned long long next : 64; /**< Collision chain next pointer. */
pte_t *next; /**< Collision chain next pointer. */
} __attribute__ ((packed));
 
126,6 → 141,7
typedef union vhpt_entry {
struct vhpt_entry_present present;
struct vhpt_entry_not_present not_present;
__u64 word[4];
} vhpt_entry;
 
struct region_register_map {
243,5 → 259,7
 
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);
 
#endif