1,5 → 1,5 |
/* |
* Copyright (c) 2003-2007 Jakub Jermar |
* Copyright (c) 2007 Pavel Jancik, Michal Kebrt |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
68,27 → 68,37 |
typedef int32_t inr_t; |
typedef int32_t devno_t; |
|
/** Page Table Entry. */ |
/** Page table entry. |
* |
* We have different structs for level 0 and level 1 page table entries. |
* */ |
typedef struct { |
/**PageTables are so different that we have different types |
* for level 0 and level1 page table entries |
*/ |
unsigned dummy : 32; |
} pte_t; |
|
/** Level 0 page table entry. */ |
typedef struct { |
/* 01b for coarse tables, see below for details */ |
unsigned descriptor_type : 2; |
unsigned machine_depend : 3; // Alf: ???? v Architecture previev neni vyznam definovan |
unsigned impl_specific : 3; |
unsigned domain : 4; |
unsigned should_be_zero : 1; |
/* Pointer to the coarse 2nd level page table (holding entries for small (4KB) |
* or large (64KB) pages. ARM also supports fine 2nd level page tables that |
* may hold even tiny pages (1KB) but they are bigger (4KB per table in comparison |
* with 1KB per the coarse table) |
*/ |
unsigned coarse_table_addr : 22; |
} __attribute__ ((packed)) pte_level0_t; |
|
//TODO Alf: Comments |
/** Level 1 page table entry (small (4KB) pages used) */ |
typedef struct { |
/* 0b10 for small pages */ |
unsigned descriptor_type : 2; |
unsigned bufferable : 1; |
unsigned cacheable : 1; |
/* access permissions for each of 4 subparts of a page |
* (for each 1KB when small pages used */ |
unsigned access_permission_0 : 2; |
unsigned access_permission_1 : 2; |
unsigned access_permission_2 : 2; |
96,23 → 106,29 |
unsigned frame_base_addr : 20; |
} __attribute__ ((packed)) pte_level1_t; |
|
/// Page table level 1 access permission constants |
/// User no acess, kernel no access |
|
/* Level 1 page tables access permissions */ |
|
/** User mode: no access, privileged mode: no access */ |
#define pte_ap_user_no_kernel_no 0 |
/// User no acess, kernel read/write |
/** User mode: no access, privileged mode: read/write */ |
#define pte_ap_user_no_kernel_rw 1 |
/// User read only, kernel read/write |
/** User mode: read only, privileged mode: read/write */ |
#define pte_ap_user_ro_kernel_rw 2 |
/// User read/write, kernel read/write |
#define pte_ap_user_rw_kernel_rw 2 |
/// User mode: read/write, privileged mode: read/write |
#define pte_ap_user_rw_kernel_rw 3 |
|
/// Value of descriptor_type in pte_level0_t and pte_level1_t that signal not present flag |
#define pte_descriptor_not_preset 0 |
/// Value of descriptor_type in pte_level0_t that signal a coarse page table format |
|
/* pte_level0_t and pte_level1_t descriptor_type flags */ |
|
/** pte_level0_t and pte_level1_t "not present" flag (used in descriptor_type) */ |
#define pte_descriptor_not_preset 0 |
/** pte_level0_t coarse page table flag (used in descriptor_type) */ |
#define pte_descriptor_coarse_table 1 |
/// Value of descriptor_type in pte_level1_t that signal a small page table entry format |
#define pte_descriptor_small_page 2 |
/** pte_level1_t small page table flag (used in descriptor type) */ |
#define pte_descriptor_small_page 2 |
|
|
#endif |
|
/** @} |