Ignore:
File:
1 edited

Legend:

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

    raf863d0 rda1bafb  
    3737 * Architectures that use hierarchical page tables
    3838 * are supposed to implement *_ARCH macros.
     39 *
    3940 */
    4041
     
    4445#define KERN_PAGE_PT_H_
    4546
    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>
    4951
    5052/*
    5153 * Number of entries in each level.
    5254 */
    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
     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
    5759
    5860/* Table sizes in each level */
    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
     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
    6365
    6466/*
    6567 * These macros process vaddr and extract those portions
    6668 * of it that function as indices to respective page tables.
     69 *
    6770 */
    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)
     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)
    7275
    73 #define SET_PTL0_ADDRESS(ptl0)          SET_PTL0_ADDRESS_ARCH(ptl0)
     76#define SET_PTL0_ADDRESS(ptl0)  SET_PTL0_ADDRESS_ARCH(ptl0)
    7477
    7578/*
    7679 * These macros traverse the 4-level tree of page tables,
    7780 * each descending by one level.
     81 *
    7882 */
    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)
     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)
    8387
    8488/*
    8589 * These macros are provided to change the shape of the 4-level tree of page
    8690 * tables on respective level.
     91 *
    8792 */
    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)
     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)
    9297
    9398/*
    9499 * These macros are provided to query various flags within the page tables.
     100 *
    95101 */
    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)
     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)
    100106
    101107/*
    102108 * These macros are provided to set/clear various flags within the page tables.
     109 *
    103110 */
    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)
     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)
    108115
    109116/*
    110117 * Macros for querying the last-level PTEs.
     118 *
    111119 */
    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))
     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))
    118126
    119127extern as_operations_t as_pt_operations;
    120128extern page_mapping_operations_t pt_mapping_operations;
    121129
    122 extern void page_mapping_insert_pt(as_t *as, uintptr_t page, uintptr_t frame,
    123     int flags);
    124 extern pte_t *page_mapping_find_pt(as_t *as, uintptr_t page);
     130extern void page_mapping_insert_pt(as_t *, uintptr_t, uintptr_t, unsigned int);
     131extern pte_t *page_mapping_find_pt(as_t *, uintptr_t);
    125132
    126133#endif
Note: See TracChangeset for help on using the changeset viewer.