Changeset 613bc54 in mainline for arch/ppc32/include/mm/page.h


Ignore:
Timestamp:
2006-04-22T20:11:23Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c118940
Parents:
c7c0b89b
Message:

ppc32: stub for Page Hash Table support

File:
1 edited

Legend:

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

    rc7c0b89b r613bc54  
    4545#endif
    4646
    47 #define PTL0_ENTRIES_ARCH               0
    48 #define PTL1_ENTRIES_ARCH               0
    49 #define PTL2_ENTRIES_ARCH               0
    50 #define PTL3_ENTRIES_ARCH               0
     47/*
     48 * Implementation of generic 4-level page table interface,
     49 * the hardware Page Hash Table is used as cache.
     50 *
     51 * Page table layout:
     52 * - 32-bit virtual addressess
     53 * - Offset is 12 bits => pages are 4K long
     54 * - PTL0 has 1024 entries (10 bits)
     55 * - PTL1 is not used
     56 * - PTL2 is not used
     57 * - PLT3 has 1024 entries (10 bits)
     58 */
    5159
    52 #define PTL0_INDEX_ARCH(vaddr)          0
    53 #define PTL1_INDEX_ARCH(vaddr)          0
    54 #define PTL2_INDEX_ARCH(vaddr)          0
    55 #define PTL3_INDEX_ARCH(vaddr)          0
     60#define PTL0_ENTRIES_ARCH       1024
     61#define PTL1_ENTRIES_ARCH       0
     62#define PTL2_ENTRIES_ARCH       0
     63#define PTL3_ENTRIES_ARCH       1024
     64
     65#define PTL0_INDEX_ARCH(vaddr)  (((vaddr) >> 22) & 0x3ff)
     66#define PTL1_INDEX_ARCH(vaddr)  0
     67#define PTL2_INDEX_ARCH(vaddr)  0
     68#define PTL3_INDEX_ARCH(vaddr)  (((vaddr) >> 12) & 0x3ff)
    5669
    5770#define SET_PTL0_ADDRESS_ARCH(ptl0)
    5871
    59 #define GET_PTL1_ADDRESS_ARCH(ptl0, i)          ((pte_t *) 0)
    60 #define GET_PTL2_ADDRESS_ARCH(ptl1, i)          ((pte_t *) 0)
    61 #define GET_PTL3_ADDRESS_ARCH(ptl2, i)          ((pte_t *) 0)
    62 #define GET_FRAME_ADDRESS_ARCH(ptl3, i)         ((pte_t *) 0)
     72#define GET_PTL1_ADDRESS_ARCH(ptl0, i)          (((pte_t *) (ptl0))[(i)].pfn << 12)
     73#define GET_PTL2_ADDRESS_ARCH(ptl1, i)          (ptl1)
     74#define GET_PTL3_ADDRESS_ARCH(ptl2, i)          (ptl2)
     75#define GET_FRAME_ADDRESS_ARCH(ptl3, i)         (((pte_t *) (ptl3))[(i)].pfn << 12)
    6376
    64 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a)
     77#define SET_PTL1_ADDRESS_ARCH(ptl0, i, a)       (((pte_t *) (ptl0))[(i)].pfn = (a) >> 12)
    6578#define SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
    6679#define SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
    67 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)
     80#define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)      (((pte_t *) (ptl3))[(i)].pfn = (a) >> 12)
    6881
    69 #define GET_PTL1_FLAGS_ARCH(ptl0, i)            0
    70 #define GET_PTL2_FLAGS_ARCH(ptl1, i)            0
    71 #define GET_PTL3_FLAGS_ARCH(ptl2, i)            0
    72 #define GET_FRAME_FLAGS_ARCH(ptl3, i)           0
     82#define GET_PTL1_FLAGS_ARCH(ptl0, i)            get_pt_flags((pte_t *) (ptl0), (index_t) (i))
     83#define GET_PTL2_FLAGS_ARCH(ptl1, i)            PAGE_PRESENT
     84#define GET_PTL3_FLAGS_ARCH(ptl2, i)            PAGE_PRESENT
     85#define GET_FRAME_FLAGS_ARCH(ptl3, i)           get_pt_flags((pte_t *) (ptl3), (index_t) (i))
    7386
    74 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x)
     87#define SET_PTL1_FLAGS_ARCH(ptl0, i, x)         set_pt_flags((pte_t *) (ptl0), (index_t) (i), (x))
    7588#define SET_PTL2_FLAGS_ARCH(ptl1, i, x)
    7689#define SET_PTL3_FLAGS_ARCH(ptl2, i, x)
    77 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x)
     90#define SET_FRAME_FLAGS_ARCH(ptl3, i, x)        set_pt_flags((pte_t *) (ptl3), (index_t) (i), (x))
    7891
    79 #define PTE_VALID_ARCH(p)               1
    80 #define PTE_PRESENT_ARCH(p)             1
    81 #define PTE_GET_FRAME_ARCH(p)           0
     92#define PTE_VALID_ARCH(pte)                     (*((__u32 *) (pte)) != 0)
     93#define PTE_PRESENT_ARCH(pte)           ((pte)->p != 0)
     94#define PTE_GET_FRAME_ARCH(pte)         ((pte)->pfn << 12)
    8295
    8396#ifndef __ASM__
     
    8699#include <arch/mm/frame.h>
    87100#include <arch/types.h>
     101
     102static inline int get_pt_flags(pte_t *pt, index_t i)
     103{
     104        pte_t *p = &pt[i];
     105       
     106        return (
     107                (1 << PAGE_CACHEABLE_SHIFT) |
     108                ((!p->p) << PAGE_PRESENT_SHIFT) |
     109                (1 << PAGE_USER_SHIFT) |
     110                (1 << PAGE_READ_SHIFT) |
     111                (1 << PAGE_WRITE_SHIFT) |
     112                (1 << PAGE_EXEC_SHIFT)
     113        );
     114}
     115
     116static inline void set_pt_flags(pte_t *pt, index_t i, int flags)
     117{
     118        pte_t *p = &pt[i];
     119       
     120        p->p = !(flags & PAGE_NOT_PRESENT);
     121        p->valid = 1;
     122}
    88123
    89124extern void page_arch_init(void);
Note: See TracChangeset for help on using the changeset viewer.