Subversion Repositories HelenOS-historic

Rev

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

Rev 879 Rev 901
Line 28... Line 28...
28
 */
28
 */
29
 
29
 
30
#ifndef __ia64_PAGE_H__
30
#ifndef __ia64_PAGE_H__
31
#define __ia64_PAGE_H__
31
#define __ia64_PAGE_H__
32
 
32
 
33
#ifndef __ASM__
-
 
34
 
-
 
35
 
-
 
36
#include <arch/mm/frame.h>
-
 
37
#include <arch/barrier.h>
-
 
38
#include <genarch/mm/page_ht.h>
-
 
39
#include <arch/mm/asid.h>
-
 
40
#include <arch/types.h>
-
 
41
#include <typedefs.h>
-
 
42
#include <debug.h>
-
 
43
 
-
 
44
#endif
-
 
45
 
-
 
46
#define PAGE_SIZE   FRAME_SIZE
33
#define PAGE_SIZE   FRAME_SIZE
47
#define PAGE_WIDTH  FRAME_WIDTH
34
#define PAGE_WIDTH  FRAME_WIDTH
48
#define KERNEL_PAGE_WIDTH   28
-
 
49
 
-
 
50
 
35
 
-
 
36
/** Bit width of the TLB-locked portion of kernel address space. */
-
 
37
#define KERNEL_PAGE_WIDTH   28  /* 256M */
51
 
38
 
52
#define SET_PTL0_ADDRESS_ARCH(x)    /**< To be removed as situation permits. */
39
#define SET_PTL0_ADDRESS_ARCH(x)    /**< To be removed as situation permits. */
53
 
40
 
54
#define PPN_SHIFT           12
41
#define PPN_SHIFT           12
55
 
42
 
56
#define VRN_SHIFT           61
43
#define VRN_SHIFT           61
57
#define VRN_MASK            (7LL << VRN_SHIFT)
44
#define VRN_MASK            (7LL << VRN_SHIFT)
-
 
45
#define VA2VRN(va)          ((va)>>VRN_SHIFT)
58
 
46
 
59
#ifdef __ASM__
47
#ifdef __ASM__
60
#define VRN_KERNEL          7
48
#define VRN_KERNEL          7
61
#else
49
#else
62
#define VRN_KERNEL          7LL
50
#define VRN_KERNEL          7LL
Line 65... Line 53...
65
#define REGION_REGISTERS        8
53
#define REGION_REGISTERS        8
66
 
54
 
67
#define KA2PA(x)    ((__address) (x-(VRN_KERNEL<<VRN_SHIFT)))
55
#define KA2PA(x)    ((__address) (x-(VRN_KERNEL<<VRN_SHIFT)))
68
#define PA2KA(x)    ((__address) (x+(VRN_KERNEL<<VRN_SHIFT)))
56
#define PA2KA(x)    ((__address) (x+(VRN_KERNEL<<VRN_SHIFT)))
69
 
57
 
70
 
-
 
71
#define VHPT_WIDTH          20          /* 1M */
58
#define VHPT_WIDTH          20          /* 1M */
72
#define VHPT_SIZE           (1 << VHPT_WIDTH)
59
#define VHPT_SIZE           (1 << VHPT_WIDTH)
73
#define VHPT_BASE           0       /* Must be aligned to VHPT_SIZE */
60
#define VHPT_BASE           0       /* Must be aligned to VHPT_SIZE */
74
 
61
 
75
#define PTA_BASE_SHIFT          15
62
#define PTA_BASE_SHIFT          15
Line 85... Line 72...
85
/* Access Rigths. Only certain combinations are used by the kernel. */
72
/* Access Rigths. Only certain combinations are used by the kernel. */
86
#define AR_READ     0x0
73
#define AR_READ     0x0
87
#define AR_EXECUTE  0x1
74
#define AR_EXECUTE  0x1
88
#define AR_WRITE    0x2
75
#define AR_WRITE    0x2
89
 
76
 
90
 
-
 
91
#define VA_REGION_INDEX 61
-
 
92
 
-
 
93
#define VA_REGION(va) (va>>VA_REGION_INDEX)
-
 
94
 
-
 
95
#ifndef __ASM__
77
#ifndef __ASM__
96
 
78
 
-
 
79
#include <arch/mm/frame.h>
-
 
80
#include <arch/barrier.h>
-
 
81
#include <genarch/mm/page_ht.h>
-
 
82
#include <arch/mm/asid.h>
-
 
83
#include <arch/types.h>
-
 
84
#include <typedefs.h>
-
 
85
#include <debug.h>
-
 
86
 
97
struct vhpt_tag_info {
87
struct vhpt_tag_info {
98
    unsigned long long tag : 63;
88
    unsigned long long tag : 63;
99
    unsigned ti : 1;
89
    unsigned ti : 1;
100
} __attribute__ ((packed));
90
} __attribute__ ((packed));
101
 
91
 
Line 153... Line 143...
153
    struct vhpt_entry_present present;
143
    struct vhpt_entry_present present;
154
    struct vhpt_entry_not_present not_present;
144
    struct vhpt_entry_not_present not_present;
155
    __u64 word[4];
145
    __u64 word[4];
156
} vhpt_entry_t;
146
} vhpt_entry_t;
157
 
147
 
158
typedef vhpt_entry_t tlb_entry_t;
-
 
159
 
-
 
160
struct region_register_map {
148
struct region_register_map {
161
    unsigned ve : 1;
149
    unsigned ve : 1;
162
    unsigned : 1;
150
    unsigned : 1;
163
    unsigned ps : 6;
151
    unsigned ps : 6;
164
    unsigned rid : 24;
152
    unsigned rid : 24;
Line 228... Line 216...
228
 */
216
 */
229
static inline __u64 rr_read(index_t i)
217
static inline __u64 rr_read(index_t i)
230
{
218
{
231
    __u64 ret;
219
    __u64 ret;
232
    ASSERT(i < REGION_REGISTERS);
220
    ASSERT(i < REGION_REGISTERS);
233
    i=i<<VRN_SHIFT;
-
 
234
    __asm__ volatile ("mov %0 = rr[%1]\n" : "=r" (ret) : "r" (i));
221
    __asm__ volatile ("mov %0 = rr[%1]\n" : "=r" (ret) : "r" (i << VRN_SHIFT));
235
   
-
 
236
    return ret;
222
    return ret;
237
}
223
}
238
 
224
 
239
 
-
 
240
/** Write Region Register.
225
/** Write Region Register.
241
 *
226
 *
242
 * @param i Region register index.
227
 * @param i Region register index.
243
 * @param v Value to be written to rr[i].
228
 * @param v Value to be written to rr[i].
244
 */
229
 */
245
static inline void rr_write(index_t i, __u64 v)
230
static inline void rr_write(index_t i, __u64 v)
246
{
231
{
247
    ASSERT(i < REGION_REGISTERS);
232
    ASSERT(i < REGION_REGISTERS);
248
    i=i<<VRN_SHIFT;
-
 
249
    __asm__ volatile (
233
    __asm__ volatile (
250
    "mov rr[%0] = %1;;\n"
234
        "mov rr[%0] = %1\n"
251
    :
235
        :
252
    : "r" (i), "r" (v));
236
        : "r" (i << VRN_SHIFT), "r" (v)
-
 
237
    );
253
}
238
}
254
 
239
 
255
/** Read Page Table Register.
240
/** Read Page Table Register.
256
 *
241
 *
257
 * @return Current value stored in PTA.
242
 * @return Current value stored in PTA.
Line 278... Line 263...
278
 
263
 
279
extern vhpt_entry_t *vhpt_hash(__address page, asid_t asid);
264
extern vhpt_entry_t *vhpt_hash(__address page, asid_t asid);
280
extern bool vhpt_compare(__address page, asid_t asid, vhpt_entry_t *v);
265
extern bool vhpt_compare(__address page, asid_t asid, vhpt_entry_t *v);
281
extern void vhpt_set_record(vhpt_entry_t *v, __address page, asid_t asid, __address frame, int flags);
266
extern void vhpt_set_record(vhpt_entry_t *v, __address page, asid_t asid, __address frame, int flags);
282
 
267
 
283
 
-
 
284
 
-
 
285
#endif
268
#endif
286
 
269
 
287
#endif
270
#endif
288
 
-
 
289
 
-