Subversion Repositories HelenOS-historic

Rev

Rev 756 | Rev 818 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 756 Rev 792
Line 43... Line 43...
43
#define KA2PA(x)    ((__address) (x))
43
#define KA2PA(x)    ((__address) (x))
44
#define PA2KA(x)    ((__address) (x))
44
#define PA2KA(x)    ((__address) (x))
45
 
45
 
46
#define SET_PTL0_ADDRESS_ARCH(x)    /**< To be removed as situation permits. */
46
#define SET_PTL0_ADDRESS_ARCH(x)    /**< To be removed as situation permits. */
47
 
47
 
48
/** Implementation of page hash table interface. */
-
 
49
#define HT_WIDTH_ARCH                   20  /* 1M */
-
 
50
#define HT_HASH_ARCH(page, asid)            vhpt_hash((page), (asid))
-
 
51
#define HT_COMPARE_ARCH(page, asid, t)          vhpt_compare((page), (asid), (t))
-
 
52
#define HT_SLOT_EMPTY_ARCH(t)               ((t)->present.tag.tag_info.ti)
-
 
53
#define HT_INVALIDATE_SLOT_ARCH(t)          (t)->present.tag.tag_info.ti = true
-
 
54
#define HT_GET_NEXT_ARCH(t)             (t)->present.next
-
 
55
#define HT_SET_NEXT_ARCH(t, s)              (t)->present.next = (s)
-
 
56
#define HT_SET_RECORD_ARCH(t, page, asid, frame, flags) vhpt_set_record(t, page, asid, frame, flags)
-
 
57
 
-
 
58
#define PPN_SHIFT           12
48
#define PPN_SHIFT           12
59
 
49
 
60
#define VRN_SHIFT           61
50
#define VRN_SHIFT           61
61
#define VRN_MASK            (7LL << VRN_SHIFT)
51
#define VRN_MASK            (7LL << VRN_SHIFT)
62
#define VRN_KERNEL          0
52
#define VRN_KERNEL          0
63
#define REGION_REGISTERS        8
53
#define REGION_REGISTERS        8
64
 
54
 
65
#define VHPT_WIDTH          20          /* 1M */
55
#define VHPT_WIDTH          20          /* 1M */
66
#define VHPT_SIZE           (1<<VHPT_WIDTH)
56
#define VHPT_SIZE           (1 << VHPT_WIDTH)
67
#define VHPT_BASE           page_ht     /* Must be aligned to VHPT_SIZE */
57
#define VHPT_BASE           0       /* Must be aligned to VHPT_SIZE */
68
 
58
 
69
#define PTA_BASE_SHIFT          15
59
#define PTA_BASE_SHIFT          15
70
 
60
 
71
/** Memory Attributes. */
61
/** Memory Attributes. */
72
#define MA_WRITEBACK    0x0
62
#define MA_WRITEBACK    0x0
Line 113... Line 103...
113
   
103
   
114
    /* Word 2 */
104
    /* Word 2 */
115
    union vhpt_tag tag;
105
    union vhpt_tag tag;
116
   
106
   
117
    /* Word 3 */                                                   
107
    /* Word 3 */                                                   
118
    pte_t *next;            /**< Collision chain next pointer. */
108
    __u64 ig3 : 64;
119
} __attribute__ ((packed));
109
} __attribute__ ((packed));
120
 
110
 
121
struct vhpt_entry_not_present {
111
struct vhpt_entry_not_present {
122
    /* Word 0 */
112
    /* Word 0 */
123
    unsigned p : 1;
113
    unsigned p : 1;
Line 131... Line 121...
131
 
121
 
132
    /* Word 2 */
122
    /* Word 2 */
133
    union vhpt_tag tag;
123
    union vhpt_tag tag;
134
   
124
   
135
    /* Word 3 */                                                   
125
    /* Word 3 */                                                   
136
    pte_t *next;            /**< Collision chain next pointer. */
126
    __u64 ig3 : 64;
137
   
-
 
138
} __attribute__ ((packed));
127
} __attribute__ ((packed));
139
 
128
 
140
typedef union vhpt_entry {
129
typedef union vhpt_entry {
141
    struct vhpt_entry_present present;
130
    struct vhpt_entry_present present;
142
    struct vhpt_entry_not_present not_present;
131
    struct vhpt_entry_not_present not_present;
143
    __u64 word[4];
132
    __u64 word[4];
144
} vhpt_entry;
133
} vhpt_entry_t;
145
 
134
 
146
struct region_register_map {
135
struct region_register_map {
147
    unsigned ve : 1;
136
    unsigned ve : 1;
148
    unsigned : 1;
137
    unsigned : 1;
149
    unsigned ps : 6;
138
    unsigned ps : 6;
Line 255... Line 244...
255
{
244
{
256
    __asm__ volatile ("mov cr.pta = %0\n" : : "r" (v));
245
    __asm__ volatile ("mov cr.pta = %0\n" : : "r" (v));
257
}
246
}
258
 
247
 
259
extern void page_arch_init(void);
248
extern void page_arch_init(void);
-
 
249
 
260
extern pte_t *vhpt_hash(__address page, asid_t asid);
250
extern vhpt_entry_t *vhpt_hash(__address page, asid_t asid);
261
extern bool vhpt_compare(__address page, asid_t asid, pte_t *t);
251
extern bool vhpt_compare(__address page, asid_t asid, vhpt_entry_t *v);
262
extern void vhpt_set_record(pte_t *t, __address page, asid_t asid, __address frame, int flags);
252
extern void vhpt_set_record(vhpt_entry_t *v, __address page, asid_t asid, __address frame, int flags);
263
 
253
 
264
#endif
254
#endif