Changeset View
Changeset View
Standalone View
Standalone View
arm64/include/pmap.h
Show First 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | |||||
struct pmap { | struct pmap { | ||||
struct mtx pm_mtx; | struct mtx pm_mtx; | ||||
struct pmap_statistics pm_stats; /* pmap statictics */ | struct pmap_statistics pm_stats; /* pmap statictics */ | ||||
pd_entry_t *pm_l0; | pd_entry_t *pm_l0; | ||||
TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */ | TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */ | ||||
struct vm_radix pm_root; /* spare page table pages */ | struct vm_radix pm_root; /* spare page table pages */ | ||||
int pm_asid; | |||||
}; | }; | ||||
typedef struct pmap *pmap_t; | typedef struct pmap *pmap_t; | ||||
typedef struct pv_entry { | typedef struct pv_entry { | ||||
vm_offset_t pv_va; /* virtual address for mapping */ | vm_offset_t pv_va; /* virtual address for mapping */ | ||||
TAILQ_ENTRY(pv_entry) pv_next; | TAILQ_ENTRY(pv_entry) pv_next; | ||||
} *pv_entry_t; | } *pv_entry_t; | ||||
Show All 33 Lines | |||||
#define PMAP_LOCK_DESTROY(pmap) mtx_destroy(&(pmap)->pm_mtx) | #define PMAP_LOCK_DESTROY(pmap) mtx_destroy(&(pmap)->pm_mtx) | ||||
#define PMAP_LOCK_INIT(pmap) mtx_init(&(pmap)->pm_mtx, "pmap", \ | #define PMAP_LOCK_INIT(pmap) mtx_init(&(pmap)->pm_mtx, "pmap", \ | ||||
NULL, MTX_DEF | MTX_DUPOK) | NULL, MTX_DEF | MTX_DUPOK) | ||||
#define PMAP_OWNED(pmap) mtx_owned(&(pmap)->pm_mtx) | #define PMAP_OWNED(pmap) mtx_owned(&(pmap)->pm_mtx) | ||||
#define PMAP_MTX(pmap) (&(pmap)->pm_mtx) | #define PMAP_MTX(pmap) (&(pmap)->pm_mtx) | ||||
#define PMAP_TRYLOCK(pmap) mtx_trylock(&(pmap)->pm_mtx) | #define PMAP_TRYLOCK(pmap) mtx_trylock(&(pmap)->pm_mtx) | ||||
#define PMAP_UNLOCK(pmap) mtx_unlock(&(pmap)->pm_mtx) | #define PMAP_UNLOCK(pmap) mtx_unlock(&(pmap)->pm_mtx) | ||||
#define ASID_RESERVED_FOR_PID_0 0 | |||||
#define ASID_RESERVED_FOR_EFI 1 | |||||
#define ASID_FIRST_AVAILABLE (ASID_RESERVED_FOR_EFI + 1) | |||||
#define ASID_TO_OPERAND_SHIFT 48 | |||||
#define ASID_TO_OPERAND(asid) ({ \ | |||||
KASSERT((asid) != -1, ("invalid ASID")); \ | |||||
(uint64_t)(asid) << ASID_TO_OPERAND_SHIFT; \ | |||||
}) | |||||
extern vm_offset_t virtual_avail; | extern vm_offset_t virtual_avail; | ||||
extern vm_offset_t virtual_end; | extern vm_offset_t virtual_end; | ||||
/* | /* | ||||
* Macros to test if a mapping is mappable with an L1 Section mapping | * Macros to test if a mapping is mappable with an L1 Section mapping | ||||
* or an L2 Large Page mapping. | * or an L2 Large Page mapping. | ||||
*/ | */ | ||||
#define L1_MAPPABLE_P(va, pa, size) \ | #define L1_MAPPABLE_P(va, pa, size) \ | ||||
((((va) | (pa)) & L1_OFFSET) == 0 && (size) >= L1_SIZE) | ((((va) | (pa)) & L1_OFFSET) == 0 && (size) >= L1_SIZE) | ||||
void pmap_bootstrap(vm_offset_t, vm_offset_t, vm_paddr_t, vm_size_t); | void pmap_bootstrap(vm_offset_t, vm_offset_t, vm_paddr_t, vm_size_t); | ||||
int pmap_change_attr(vm_offset_t va, vm_size_t size, int mode); | int pmap_change_attr(vm_offset_t va, vm_size_t size, int mode); | ||||
void pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode); | void pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode); | ||||
void pmap_kenter_device(vm_offset_t, vm_size_t, vm_paddr_t); | void pmap_kenter_device(vm_offset_t, vm_size_t, vm_paddr_t); | ||||
vm_paddr_t pmap_kextract(vm_offset_t va); | vm_paddr_t pmap_kextract(vm_offset_t va); | ||||
void pmap_kremove(vm_offset_t); | void pmap_kremove(vm_offset_t); | ||||
void pmap_kremove_device(vm_offset_t, vm_size_t); | void pmap_kremove_device(vm_offset_t, vm_size_t); | ||||
void *pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_memattr_t ma); | void *pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_memattr_t ma); | ||||
bool pmap_page_is_mapped(vm_page_t m); | bool pmap_page_is_mapped(vm_page_t m); | ||||
bool pmap_ps_enabled(pmap_t pmap); | bool pmap_ps_enabled(pmap_t pmap); | ||||
uint64_t pmap_to_ttbr0(pmap_t pmap); | |||||
void *pmap_mapdev(vm_offset_t, vm_size_t); | void *pmap_mapdev(vm_offset_t, vm_size_t); | ||||
void *pmap_mapbios(vm_paddr_t, vm_size_t); | void *pmap_mapbios(vm_paddr_t, vm_size_t); | ||||
void pmap_unmapdev(vm_offset_t, vm_size_t); | void pmap_unmapdev(vm_offset_t, vm_size_t); | ||||
void pmap_unmapbios(vm_offset_t, vm_size_t); | void pmap_unmapbios(vm_offset_t, vm_size_t); | ||||
boolean_t pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t); | boolean_t pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t); | ||||
void pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t); | void pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t); | ||||
Show All 20 Lines |