Changeset ff9f858 in mainline for include/mm/page.h


Ignore:
Timestamp:
2005-06-30T23:27:02Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a1a03f9
Parents:
992bbb97
Message:

Generic 4-level page tables interface & implementation (review & test).
Implement more architecture dependant macros on IA-32.
Provide fake implementation on IA-64 and MIPS.
Convert map_page_to_frame() to use the new interface.
Move adjusted map_page_to_frame() from IA-32's arch/mm/page.c to the generic mm/page.c.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • include/mm/page.h

    r992bbb97 rff9f858  
    3131
    3232#include <arch/types.h>
    33 #include <arch/mm/page.h>
    3433#include <typedefs.h>
    3534
    36 #define PAGE_NOT_CACHEABLE      (0<<0)
    37 #define PAGE_CACHEABLE          (1<<0)
     35#define PAGE_CACHEABLE_SHIFT            0
     36#define PAGE_NOT_CACHEABLE_SHIFT        PAGE_CACHEABLE_SHIFT
     37#define PAGE_PRESENT_SHIFT              1
     38#define PAGE_NOT_PRESENT_SHIFT          PAGE_PRESENT_SHIFT
     39#define PAGE_USER_SHIFT                 2
     40#define PAGE_KERNEL_SHIFT               PAGE_USER_SHIFT
     41#define PAGE_READ_SHIFT                 3
     42#define PAGE_WRITE_SHIFT                4
     43#define PAGE_EXEC_SHIFT                 5
    3844
    39 #define PAGE_PRESENT            (0<<1)
    40 #define PAGE_NOT_PRESENT        (1<<1)
     45#define PAGE_NOT_CACHEABLE      (0<<PAGE_CACHEABLE_SHIFT)
     46#define PAGE_CACHEABLE          (1<<PAGE_CACHEABLE_SHIFT)
    4147
    42 #define PAGE_USER               (1<<2)
    43 #define PAGE_KERNEL             (0<<2)
     48#define PAGE_PRESENT            (0<<PAGE_PRESENT_SHIFT)
     49#define PAGE_NOT_PRESENT        (1<<PAGE_PRESENT_SHIFT)
    4450
    45 #define PAGE_READ               (1<<3)
    46 #define PAGE_WRITE              (1<<4)
    47 #define PAGE_EXEC               (1<<5)
     51#define PAGE_USER               (1<<PAGE_USER_SHIFT)
     52#define PAGE_KERNEL             (0<<PAGE_USER_SHIFT)
     53
     54#define PAGE_READ               (1<<PAGE_READ_SHIFT)
     55#define PAGE_WRITE              (1<<PAGE_WRITE_SHIFT)
     56#define PAGE_EXEC               (1<<PAGE_EXEC_SHIFT)
    4857
    4958/*
     
    6170#define PTL3_INDEX(vaddr)               PTL3_INDEX_ARCH(vaddr)
    6271
     72#define GET_PTL0_ADDRESS()              GET_PTL0_ADDRESS_ARCH()
     73#define SET_PTL0_ADDRESS(ptl0)          SET_PTL0_ADDRESS_ARCH(ptl0)
     74
    6375/*
    6476 * These macros traverse the 4-level tree of page tables,
    6577 * each descending by one level.
    6678 */
     79#define GET_PTL0_ADDRESS()              GET_PTL0_ADDRESS_ARCH()
    6780#define GET_PTL1_ADDRESS(ptl0, i)       GET_PTL1_ADDRESS_ARCH(ptl0, i)
    6881#define GET_PTL2_ADDRESS(ptl1, i)       GET_PTL2_ADDRESS_ARCH(ptl1, i)
     
    7487 * tree of page tables on respective level.
    7588 */
     89#define SET_PTL0_ADDRESS(ptl0)          SET_PTL0_ADDRESS_ARCH(ptl0)
    7690#define SET_PTL1_ADDRESS(ptl0, i, a)    SET_PTL1_ADDRESS_ARCH(ptl0, i, a)
    7791#define SET_PTL2_ADDRESS(ptl1, i, a)    SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
    7892#define SET_PTL3_ADDRESS(ptl2, i, a)    SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
    7993#define SET_FRAME_ADDRESS(ptl3, i, a)   SET_FRAME_ADDRESS_ARCH(ptl3, i, a)
     94
     95/*
     96 * These macros are provided to query various flags within the page tables.
     97 */
     98#define GET_PTL1_FLAGS(ptl0, i)         GET_PTL1_FLAGS_ARCH(ptl0, i)
     99#define GET_PTL2_FLAGS(ptl1, i)         GET_PTL2_FLAGS_ARCH(ptl1, i)
     100#define GET_PTL3_FLAGS(ptl2, i)         GET_PTL3_FLAGS_ARCH(ptl2, i)
     101#define GET_FRAME_FLAGS(ptl3, i)        GET_FRAME_FLAGS_ARCH(ptl3, i)
    80102
    81103/*
     
    87109#define SET_FRAME_FLAGS(ptl3, i, x)     SET_FRAME_FLAGS_ARCH(ptl3, i, x)
    88110
     111#include <arch/mm/page.h>
    89112
    90113extern void page_init(void);
Note: See TracChangeset for help on using the changeset viewer.