Subversion Repositories HelenOS

Rev

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

Rev 105 Rev 119
Line 35... Line 35...
35
#define PAGE_SIZE   FRAME_SIZE
35
#define PAGE_SIZE   FRAME_SIZE
36
 
36
 
37
#define KA2PA(x)    ((x) - 0x80000000)
37
#define KA2PA(x)    ((x) - 0x80000000)
38
#define PA2KA(x)    ((x) + 0x80000000)
38
#define PA2KA(x)    ((x) + 0x80000000)
39
 
39
 
-
 
40
/*
-
 
41
 * Implementation of generic 4-level page table interface.
-
 
42
 * IA-32 has 2-level page tables, so PTL1 and PTL2 are left out.
-
 
43
 */
-
 
44
#define PTL0_INDEX_ARCH(vaddr)  (((vaddr)>>22)&0x3ff)
-
 
45
#define PTL1_INDEX_ARCH(vaddr)  0
-
 
46
#define PTL2_INDEX_ARCH(vaddr)  0
-
 
47
#define PTL3_INDEX_ARCH(vaddr)  (((vaddr)>>12)&0x3ff)
-
 
48
 
-
 
49
#define GET_PTL1_ADDRESS_ARCH(ptl0, i)      ((pte_t *)((((pte_t *)(ptl0))[(i)].frame_address)<<12))
-
 
50
#define GET_PTL2_ADDRESS_ARCH(ptl1, i)      (ptl1)
-
 
51
#define GET_PTL3_ADDRESS_ARCH(ptl2, i)      (ptl2)
-
 
52
#define GET_FRAME_ADDRESS_ARCH(ptl3, i)     ((__address)((((pte_t *)(ptl3))[(i)].frame_address)<<12))
-
 
53
 
-
 
54
 
40
struct page_specifier {
55
struct page_specifier {
41
    unsigned present : 1;
56
    unsigned present : 1;
42
    unsigned writeable : 1;
57
    unsigned writeable : 1;
43
    unsigned uaccessible : 1;
58
    unsigned uaccessible : 1;
44
    unsigned page_write_through : 1;
59
    unsigned page_write_through : 1;
Line 48... Line 63...
48
    unsigned : 2;
63
    unsigned : 2;
49
    unsigned avl : 3;
64
    unsigned avl : 3;
50
    unsigned frame_address : 20;
65
    unsigned frame_address : 20;
51
} __attribute__ ((packed));
66
} __attribute__ ((packed));
52
 
67
 
-
 
68
typedef struct page_specifier   pte_t;
-
 
69
 
53
extern void page_arch_init(void);
70
extern void page_arch_init(void);
54
 
71
 
55
#endif
72
#endif