Changeset c03ee1c in mainline for kernel/arch/arm32/include/mm/page.h


Ignore:
Timestamp:
2007-06-13T17:49:57Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
de7663f
Parents:
6b781c0
Message:

Improve comments for arch-specific implementations of hierarchical
4-level page tables. Improve formatting.

File:
1 edited

Legend:

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

    r6b781c0 rc03ee1c  
    5656#ifdef KERNEL
    5757
     58/* Number of entries in each level. */
    5859#define PTL0_ENTRIES_ARCH       (2 << 12)       /* 4096 */
    5960#define PTL1_ENTRIES_ARCH       0
    6061#define PTL2_ENTRIES_ARCH       0
    61 
    6262/* coarse page tables used (256 * 4 = 1KB per page) */
    6363#define PTL3_ENTRIES_ARCH       (2 << 8)        /* 256 */
    6464
     65/* Page table sizes for each level. */
    6566#define PTL0_SIZE_ARCH          FOUR_FRAMES
    6667#define PTL1_SIZE_ARCH          0
     
    6869#define PTL3_SIZE_ARCH          ONE_FRAME
    6970
     71/* Macros calculating indices into page tables for each level. */
    7072#define PTL0_INDEX_ARCH(vaddr)  (((vaddr) >> 20) & 0xfff)
    7173#define PTL1_INDEX_ARCH(vaddr)  0
     
    7375#define PTL3_INDEX_ARCH(vaddr)  (((vaddr) >> 12) & 0x0ff)
    7476
     77/* Get PTE address accessors for each level. */
    7578#define GET_PTL1_ADDRESS_ARCH(ptl0, i) \
    7679        ((pte_t *) ((((pte_level0_t *)(ptl0))[(i)]).coarse_table_addr << 10))
     
    8285        ((uintptr_t) ((((pte_level1_t *)(ptl3))[(i)]).frame_base_addr << 12))
    8386
     87/* Set PTE address accessors for each level. */
    8488#define SET_PTL0_ADDRESS_ARCH(ptl0) \
    8589        (set_ptl0_addr((pte_level0_t *) (ptl0)))
     
    9195        (((pte_level1_t *) (ptl3))[(i)].frame_base_addr = (a) >> 12)
    9296
     97/* Get PTE flags accessors for each level. */
    9398#define GET_PTL1_FLAGS_ARCH(ptl0, i) \
    9499        get_pt_level0_flags((pte_level0_t *) (ptl0), (index_t) (i))
     
    100105        get_pt_level1_flags((pte_level1_t *) (ptl3), (index_t) (i))
    101106
     107/* Set PTE flags accessors for each level. */
    102108#define SET_PTL1_FLAGS_ARCH(ptl0, i, x) \
    103109        set_pt_level0_flags((pte_level0_t *) (ptl0), (index_t) (i), (x))
     
    107113        set_pt_level1_flags((pte_level1_t *) (ptl3), (index_t) (i), (x))
    108114
     115/* Macros for querying the last-level PTE entries. */
    109116#define PTE_VALID_ARCH(pte) \
    110117        (*((uint32_t *) (pte)) != 0)
    111118#define PTE_PRESENT_ARCH(pte) \
    112119        (((pte_level0_t *) (pte))->descriptor_type != 0)
    113 
    114 /* pte should point into ptl3 */
    115120#define PTE_GET_FRAME_ARCH(pte) \
    116121        (((pte_level1_t *) (pte))->frame_base_addr << FRAME_WIDTH)
    117 
    118 /* pte should point into ptl3 */
    119122#define PTE_WRITABLE_ARCH(pte) \
    120123        (((pte_level1_t *) (pte))->access_permission_0 == \
    121124            PTE_AP_USER_RW_KERNEL_RW)
    122 
    123125#define PTE_EXECUTABLE_ARCH(pte) \
    124126        1
     
    129131typedef struct {
    130132        /* 0b01 for coarse tables, see below for details */
    131         unsigned descriptor_type     : 2;
    132         unsigned impl_specific       : 3;
    133         unsigned domain              : 4;
    134         unsigned should_be_zero      : 1;
     133        unsigned descriptor_type : 2;
     134        unsigned impl_specific : 3;
     135        unsigned domain : 4;
     136        unsigned should_be_zero : 1;
    135137
    136138        /* Pointer to the coarse 2nd level page table (holding entries for small
     
    139141         * per table in comparison with 1KB per the coarse table)
    140142         */
    141         unsigned coarse_table_addr   : 22;
     143        unsigned coarse_table_addr : 22;
    142144} ATTRIBUTE_PACKED pte_level0_t;
    143145
     
    146148
    147149        /* 0b10 for small pages */
    148         unsigned descriptor_type     : 2;
    149         unsigned bufferable          : 1;
    150         unsigned cacheable           : 1;
     150        unsigned descriptor_type : 2;
     151        unsigned bufferable : 1;
     152        unsigned cacheable : 1;
    151153
    152154        /* access permissions for each of 4 subparts of a page
     
    156158        unsigned access_permission_2 : 2;
    157159        unsigned access_permission_3 : 2;
    158         unsigned frame_base_addr     : 20;
     160        unsigned frame_base_addr : 20;
    159161} ATTRIBUTE_PACKED pte_level1_t;
    160162
     
    191193 * @param pt    Pointer to the page table to set.
    192194 */   
    193 static inline void set_ptl0_addr( pte_level0_t *pt)
     195static inline void set_ptl0_addr(pte_level0_t *pt)
    194196{
    195197        asm volatile (
Note: See TracChangeset for help on using the changeset viewer.