Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/include/mm/page_pt.h

    rda1bafb raf863d0  
    3737 * Architectures that use hierarchical page tables
    3838 * are supposed to implement *_ARCH macros.
    39  *
    4039 */
    4140
     
    4544#define KERN_PAGE_PT_H_
    4645
     46#include <arch/types.h>
    4747#include <mm/as.h>
    4848#include <mm/page.h>
    49 #include <arch/mm/page.h>
    50 #include <typedefs.h>
    5149
    5250/*
    5351 * Number of entries in each level.
    5452 */
    55 #define PTL0_ENTRIES  PTL0_ENTRIES_ARCH
    56 #define PTL1_ENTRIES  PTL1_ENTRIES_ARCH
    57 #define PTL2_ENTRIES  PTL2_ENTRIES_ARCH
    58 #define PTL3_ENTRIES  PTL3_ENTRIES_ARCH
     53#define PTL0_ENTRIES                    PTL0_ENTRIES_ARCH
     54#define PTL1_ENTRIES                    PTL1_ENTRIES_ARCH
     55#define PTL2_ENTRIES                    PTL2_ENTRIES_ARCH
     56#define PTL3_ENTRIES                    PTL3_ENTRIES_ARCH
    5957
    6058/* Table sizes in each level */
    61 #define PTL0_SIZE  PTL0_SIZE_ARCH
    62 #define PTL1_SIZE  PTL1_SIZE_ARCH
    63 #define PTL2_SIZE  PTL2_SIZE_ARCH
    64 #define PTL3_SIZE  PTL3_SIZE_ARCH
     59#define PTL0_SIZE                       PTL0_SIZE_ARCH
     60#define PTL1_SIZE                       PTL1_SIZE_ARCH
     61#define PTL2_SIZE                       PTL2_SIZE_ARCH
     62#define PTL3_SIZE                       PTL3_SIZE_ARCH
    6563
    6664/*
    6765 * These macros process vaddr and extract those portions
    6866 * of it that function as indices to respective page tables.
    69  *
    7067 */
    71 #define PTL0_INDEX(vaddr)  PTL0_INDEX_ARCH(vaddr)
    72 #define PTL1_INDEX(vaddr)  PTL1_INDEX_ARCH(vaddr)
    73 #define PTL2_INDEX(vaddr)  PTL2_INDEX_ARCH(vaddr)
    74 #define PTL3_INDEX(vaddr)  PTL3_INDEX_ARCH(vaddr)
     68#define PTL0_INDEX(vaddr)               PTL0_INDEX_ARCH(vaddr)
     69#define PTL1_INDEX(vaddr)               PTL1_INDEX_ARCH(vaddr)
     70#define PTL2_INDEX(vaddr)               PTL2_INDEX_ARCH(vaddr)
     71#define PTL3_INDEX(vaddr)               PTL3_INDEX_ARCH(vaddr)
    7572
    76 #define SET_PTL0_ADDRESS(ptl0)  SET_PTL0_ADDRESS_ARCH(ptl0)
     73#define SET_PTL0_ADDRESS(ptl0)          SET_PTL0_ADDRESS_ARCH(ptl0)
    7774
    7875/*
    7976 * These macros traverse the 4-level tree of page tables,
    8077 * each descending by one level.
    81  *
    8278 */
    83 #define GET_PTL1_ADDRESS(ptl0, i)   GET_PTL1_ADDRESS_ARCH(ptl0, i)
    84 #define GET_PTL2_ADDRESS(ptl1, i)   GET_PTL2_ADDRESS_ARCH(ptl1, i)
    85 #define GET_PTL3_ADDRESS(ptl2, i)   GET_PTL3_ADDRESS_ARCH(ptl2, i)
    86 #define GET_FRAME_ADDRESS(ptl3, i)  GET_FRAME_ADDRESS_ARCH(ptl3, i)
     79#define GET_PTL1_ADDRESS(ptl0, i)       GET_PTL1_ADDRESS_ARCH(ptl0, i)
     80#define GET_PTL2_ADDRESS(ptl1, i)       GET_PTL2_ADDRESS_ARCH(ptl1, i)
     81#define GET_PTL3_ADDRESS(ptl2, i)       GET_PTL3_ADDRESS_ARCH(ptl2, i)
     82#define GET_FRAME_ADDRESS(ptl3, i)      GET_FRAME_ADDRESS_ARCH(ptl3, i)
    8783
    8884/*
    8985 * These macros are provided to change the shape of the 4-level tree of page
    9086 * tables on respective level.
    91  *
    9287 */
    93 #define SET_PTL1_ADDRESS(ptl0, i, a)   SET_PTL1_ADDRESS_ARCH(ptl0, i, a)
    94 #define SET_PTL2_ADDRESS(ptl1, i, a)   SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
    95 #define SET_PTL3_ADDRESS(ptl2, i, a)   SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
    96 #define SET_FRAME_ADDRESS(ptl3, i, a)  SET_FRAME_ADDRESS_ARCH(ptl3, i, a)
     88#define SET_PTL1_ADDRESS(ptl0, i, a)    SET_PTL1_ADDRESS_ARCH(ptl0, i, a)
     89#define SET_PTL2_ADDRESS(ptl1, i, a)    SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
     90#define SET_PTL3_ADDRESS(ptl2, i, a)    SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
     91#define SET_FRAME_ADDRESS(ptl3, i, a)   SET_FRAME_ADDRESS_ARCH(ptl3, i, a)
    9792
    9893/*
    9994 * These macros are provided to query various flags within the page tables.
    100  *
    10195 */
    102 #define GET_PTL1_FLAGS(ptl0, i)   GET_PTL1_FLAGS_ARCH(ptl0, i)
    103 #define GET_PTL2_FLAGS(ptl1, i)   GET_PTL2_FLAGS_ARCH(ptl1, i)
    104 #define GET_PTL3_FLAGS(ptl2, i)   GET_PTL3_FLAGS_ARCH(ptl2, i)
    105 #define GET_FRAME_FLAGS(ptl3, i)  GET_FRAME_FLAGS_ARCH(ptl3, i)
     96#define GET_PTL1_FLAGS(ptl0, i)         GET_PTL1_FLAGS_ARCH(ptl0, i)
     97#define GET_PTL2_FLAGS(ptl1, i)         GET_PTL2_FLAGS_ARCH(ptl1, i)
     98#define GET_PTL3_FLAGS(ptl2, i)         GET_PTL3_FLAGS_ARCH(ptl2, i)
     99#define GET_FRAME_FLAGS(ptl3, i)        GET_FRAME_FLAGS_ARCH(ptl3, i)
    106100
    107101/*
    108102 * These macros are provided to set/clear various flags within the page tables.
    109  *
    110103 */
    111 #define SET_PTL1_FLAGS(ptl0, i, x)   SET_PTL1_FLAGS_ARCH(ptl0, i, x)
    112 #define SET_PTL2_FLAGS(ptl1, i, x)   SET_PTL2_FLAGS_ARCH(ptl1, i, x)
    113 #define SET_PTL3_FLAGS(ptl2, i, x)   SET_PTL3_FLAGS_ARCH(ptl2, i, x)
    114 #define SET_FRAME_FLAGS(ptl3, i, x)  SET_FRAME_FLAGS_ARCH(ptl3, i, x)
     104#define SET_PTL1_FLAGS(ptl0, i, x)      SET_PTL1_FLAGS_ARCH(ptl0, i, x)
     105#define SET_PTL2_FLAGS(ptl1, i, x)      SET_PTL2_FLAGS_ARCH(ptl1, i, x)
     106#define SET_PTL3_FLAGS(ptl2, i, x)      SET_PTL3_FLAGS_ARCH(ptl2, i, x)
     107#define SET_FRAME_FLAGS(ptl3, i, x)     SET_FRAME_FLAGS_ARCH(ptl3, i, x)
    115108
    116109/*
    117110 * Macros for querying the last-level PTEs.
    118  *
    119111 */
    120 #define PTE_VALID(p)       PTE_VALID_ARCH((p))
    121 #define PTE_PRESENT(p)     PTE_PRESENT_ARCH((p))
    122 #define PTE_GET_FRAME(p)   PTE_GET_FRAME_ARCH((p))
    123 #define PTE_READABLE(p)    1
    124 #define PTE_WRITABLE(p)    PTE_WRITABLE_ARCH((p))
    125 #define PTE_EXECUTABLE(p)  PTE_EXECUTABLE_ARCH((p))
     112#define PTE_VALID(p)            PTE_VALID_ARCH((p))
     113#define PTE_PRESENT(p)          PTE_PRESENT_ARCH((p))
     114#define PTE_GET_FRAME(p)        PTE_GET_FRAME_ARCH((p))
     115#define PTE_READABLE(p)         1
     116#define PTE_WRITABLE(p)         PTE_WRITABLE_ARCH((p))
     117#define PTE_EXECUTABLE(p)       PTE_EXECUTABLE_ARCH((p))
    126118
    127119extern as_operations_t as_pt_operations;
    128120extern page_mapping_operations_t pt_mapping_operations;
    129121
    130 extern void page_mapping_insert_pt(as_t *, uintptr_t, uintptr_t, unsigned int);
    131 extern pte_t *page_mapping_find_pt(as_t *, uintptr_t);
     122extern void page_mapping_insert_pt(as_t *as, uintptr_t page, uintptr_t frame,
     123    int flags);
     124extern pte_t *page_mapping_find_pt(as_t *as, uintptr_t page);
    132125
    133126#endif
Note: See TracChangeset for help on using the changeset viewer.