Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ppc32/include/mm/page.h

    rf3277d49 r7a0359b  
    2727 */
    2828
    29 /** @addtogroup ppc32mm 
     29/** @addtogroup ppc32mm
    3030 * @{
    3131 */
     
    3737
    3838#include <arch/mm/frame.h>
     39#include <trace.h>
    3940
    40 #define PAGE_WIDTH      FRAME_WIDTH
    41 #define PAGE_SIZE       FRAME_SIZE
     41#define PAGE_WIDTH  FRAME_WIDTH
     42#define PAGE_SIZE   FRAME_SIZE
    4243
    4344#ifdef KERNEL
    4445
    4546#ifndef __ASM__
    46 #       define KA2PA(x) (((uintptr_t) (x)) - 0x80000000)
    47 #       define PA2KA(x) (((uintptr_t) (x)) + 0x80000000)
     47        #define KA2PA(x)  (((uintptr_t) (x)) - 0x80000000)
     48        #define PA2KA(x)  (((uintptr_t) (x)) + 0x80000000)
    4849#else
    49 #       define KA2PA(x) ((x) - 0x80000000)
    50 #       define PA2KA(x) ((x) + 0x80000000)
     50        #define KA2PA(x)  ((x) - 0x80000000)
     51        #define PA2KA(x)  ((x) + 0x80000000)
    5152#endif
    5253
     
    6566
    6667/* Number of entries in each level. */
    67 #define PTL0_ENTRIES_ARCH       1024
    68 #define PTL1_ENTRIES_ARCH       0
    69 #define PTL2_ENTRIES_ARCH       0
    70 #define PTL3_ENTRIES_ARCH       1024
     68#define PTL0_ENTRIES_ARCH  1024
     69#define PTL1_ENTRIES_ARCH  0
     70#define PTL2_ENTRIES_ARCH  0
     71#define PTL3_ENTRIES_ARCH  1024
    7172
    7273/* Page table sizes for each level. */
    73 #define PTL0_SIZE_ARCH          ONE_FRAME
    74 #define PTL1_SIZE_ARCH          0
    75 #define PTL2_SIZE_ARCH          0
    76 #define PTL3_SIZE_ARCH          ONE_FRAME
     74#define PTL0_SIZE_ARCH  ONE_FRAME
     75#define PTL1_SIZE_ARCH  0
     76#define PTL2_SIZE_ARCH  0
     77#define PTL3_SIZE_ARCH  ONE_FRAME
    7778
    7879/* Macros calculating indices into page tables on each level. */
    79 #define PTL0_INDEX_ARCH(vaddr)  (((vaddr) >> 22) & 0x3ff)
    80 #define PTL1_INDEX_ARCH(vaddr)  0
    81 #define PTL2_INDEX_ARCH(vaddr)  0
    82 #define PTL3_INDEX_ARCH(vaddr)  (((vaddr) >> 12) & 0x3ff)
     80#define PTL0_INDEX_ARCH(vaddr)  (((vaddr) >> 22) & 0x3ff)
     81#define PTL1_INDEX_ARCH(vaddr)  0
     82#define PTL2_INDEX_ARCH(vaddr)  0
     83#define PTL3_INDEX_ARCH(vaddr)  (((vaddr) >> 12) & 0x3ff)
    8384
    8485/* Get PTE address accessors for each level. */
    8586#define GET_PTL1_ADDRESS_ARCH(ptl0, i) \
    8687        (((pte_t *) (ptl0))[(i)].pfn << 12)
     88
    8789#define GET_PTL2_ADDRESS_ARCH(ptl1, i) \
    8890        (ptl1)
     91
    8992#define GET_PTL3_ADDRESS_ARCH(ptl2, i) \
    9093        (ptl2)
    91 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) \
     94
     95#define GET_FRAME_ADDRESS_ARCH(ptl3, i) \
    9296        (((pte_t *) (ptl3))[(i)].pfn << 12)
    9397
    9498/* Set PTE address accessors for each level. */
    9599#define SET_PTL0_ADDRESS_ARCH(ptl0)
     100
    96101#define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) \
    97102        (((pte_t *) (ptl0))[(i)].pfn = (a) >> 12)
     103
    98104#define SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
    99105#define SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
     106
    100107#define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) \
    101108        (((pte_t *) (ptl3))[(i)].pfn = (a) >> 12)
     
    104111#define GET_PTL1_FLAGS_ARCH(ptl0, i) \
    105112        get_pt_flags((pte_t *) (ptl0), (size_t) (i))
     113
    106114#define GET_PTL2_FLAGS_ARCH(ptl1, i) \
    107115        PAGE_PRESENT
     116
    108117#define GET_PTL3_FLAGS_ARCH(ptl2, i) \
    109118        PAGE_PRESENT
     119
    110120#define GET_FRAME_FLAGS_ARCH(ptl3, i) \
    111121        get_pt_flags((pte_t *) (ptl3), (size_t) (i))
    112122
    113123/* Set PTE flags accessors for each level. */
    114 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) \
     124#define SET_PTL1_FLAGS_ARCH(ptl0, i, x) \
    115125        set_pt_flags((pte_t *) (ptl0), (size_t) (i), (x))
     126
    116127#define SET_PTL2_FLAGS_ARCH(ptl1, i, x)
    117128#define SET_PTL3_FLAGS_ARCH(ptl2, i, x)
     129
    118130#define SET_FRAME_FLAGS_ARCH(ptl3, i, x) \
    119131        set_pt_flags((pte_t *) (ptl3), (size_t) (i), (x))
    120132
    121133/* Macros for querying the last-level PTEs. */
    122 #define PTE_VALID_ARCH(pte)                     (*((uint32_t *) (pte)) != 0)
    123 #define PTE_PRESENT_ARCH(pte)                   ((pte)->present != 0)
    124 #define PTE_GET_FRAME_ARCH(pte)                 ((pte)->pfn << 12)
    125 #define PTE_WRITABLE_ARCH(pte)                  1
    126 #define PTE_EXECUTABLE_ARCH(pte)                1
     134#define PTE_VALID_ARCH(pte)       (*((uint32_t *) (pte)) != 0)
     135#define PTE_PRESENT_ARCH(pte)     ((pte)->present != 0)
     136#define PTE_GET_FRAME_ARCH(pte)   ((pte)->pfn << 12)
     137#define PTE_WRITABLE_ARCH(pte)    1
     138#define PTE_EXECUTABLE_ARCH(pte)  1
    127139
    128140#ifndef __ASM__
     
    133145/** Page Table Entry. */
    134146typedef struct {
    135         unsigned present : 1;             /**< Present bit. */
    136         unsigned page_write_through : 1;  /**< Write thought caching. */
    137         unsigned page_cache_disable : 1;  /**< No caching. */
    138         unsigned accessed : 1;            /**< Accessed bit. */
    139         unsigned global : 1;              /**< Global bit. */
    140         unsigned valid : 1;               /**< Valid content even if not present. */
    141         unsigned pfn : 20;                /**< Physical frame number. */
     147        unsigned int present : 1;             /**< Present bit. */
     148        unsigned int page_write_through : 1;  /**< Write thought caching. */
     149        unsigned int page_cache_disable : 1;  /**< No caching. */
     150        unsigned int accessed : 1;            /**< Accessed bit. */
     151        unsigned int global : 1;              /**< Global bit. */
     152        unsigned int valid : 1;               /**< Valid content even if not present. */
     153        unsigned int pfn : 20;                /**< Physical frame number. */
    142154} pte_t;
    143155
    144 static inline unsigned int get_pt_flags(pte_t *pt, size_t i)
     156NO_TRACE static inline unsigned int get_pt_flags(pte_t *pt, size_t i)
    145157{
    146         pte_t *p = &pt[i];
     158        pte_t *entry = &pt[i];
    147159       
    148         return (((!p->page_cache_disable) << PAGE_CACHEABLE_SHIFT) |
    149             ((!p->present) << PAGE_PRESENT_SHIFT) |
     160        return (((!entry->page_cache_disable) << PAGE_CACHEABLE_SHIFT) |
     161            ((!entry->present) << PAGE_PRESENT_SHIFT) |
    150162            (1 << PAGE_USER_SHIFT) |
    151163            (1 << PAGE_READ_SHIFT) |
    152164            (1 << PAGE_WRITE_SHIFT) |
    153165            (1 << PAGE_EXEC_SHIFT) |
    154             (p->global << PAGE_GLOBAL_SHIFT));
     166            (entry->global << PAGE_GLOBAL_SHIFT));
    155167}
    156168
    157 static inline void set_pt_flags(pte_t *pt, size_t i, int flags)
     169NO_TRACE static inline void set_pt_flags(pte_t *pt, size_t i, int flags)
    158170{
    159         pte_t *p = &pt[i];
     171        pte_t *entry = &pt[i];
    160172       
    161         p->page_cache_disable = !(flags & PAGE_CACHEABLE);
    162         p->present = !(flags & PAGE_NOT_PRESENT);
    163         p->global = (flags & PAGE_GLOBAL) != 0;
    164         p->valid = 1;
     173        entry->page_cache_disable = !(flags & PAGE_CACHEABLE);
     174        entry->present = !(flags & PAGE_NOT_PRESENT);
     175        entry->global = (flags & PAGE_GLOBAL) != 0;
     176        entry->valid = 1;
    165177}
    166178
Note: See TracChangeset for help on using the changeset viewer.