class AddressSpace
Defined at line 21 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
Public Methods
void AddressSpace (magma::AddressSpaceOwner * owner, AddressSpaceType type)
Defined at line 19 of file ../../src/graphics/drivers/msd-intel-gen/src/address_space.h
AddressSpaceType type ()
Defined at line 22 of file ../../src/graphics/drivers/msd-intel-gen/src/address_space.h
bool InsertWithBusMapping ()
Defined at line 24 of file ../../src/graphics/drivers/msd-intel-gen/src/address_space.h
void AddressSpace (Owner * owner, uint32_t page_table_array_slot)
Defined at line 30 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
void ~AddressSpace ()
Defined at line 35 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
bool FreeLocked (uint64_t addr)
Though this address space does not support allocations, this needs to be implemented
to avoid errors from when a gpu mapping is released and attempts to call |FreeLocked|.
Defined at line 39 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
uint64_t Size ()
Defined at line 45 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
uint64_t bus_addr ()
Defined at line 47 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
uint32_t page_table_array_slot ()
Defined at line 49 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
void SetRingbufferGpuMapping (std::shared_ptr<GpuMapping> gpu_mapping)
Defined at line 51 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
bool GetRingbufferGpuAddress (uint64_t * gpu_addr_out)
Defined at line 56 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.h
bool is_mali_page_aligned (uint64_t address)
Defined at line 71 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.h
void Unlock ()
Defined at line 79 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.h
std::shared_ptr<Owner> owner ()
Defined at line 86 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.h
std::unique_ptr<AddressSpace> Create (Owner * owner, uint32_t page_table_array_slot)
///////////////////////////////////////////////////////////////////////////////////////////////
Defined at line 117 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.cc
void ReleaseSpaceMappings ()
Defined at line 64 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.cc
MapSettings MmioMapSettings ()
Defined at line 134 of file ../../zircon/kernel/phys/include/phys/address-space.h
bool InsertLocked (uint64_t addr, magma::PlatformBusMapper::BusMapping * bus_mapping, uint32_t guard_page_count)
Defined at line 139 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.cc
std::unique_ptr<AddressSpace> Create (Owner * owner, bool cache_coherent)
If cache_coherent is true, then updates to the page tables themselves
should be cache coherent with the GPU.
Defined at line 53 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.cc
bool Insert (gpu_addr_t addr, magma::PlatformBusMapper::BusMapping * bus_mapping, uint64_t offset_bytes, uint64_t length_bytes, uint64_t flags)
offset_bytes and length_bytes must be multiples of both the CPU page size and the GPU page
size.
Defined at line 68 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.cc
bool Clear (gpu_addr_t start, uint64_t length)
Defined at line 121 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.cc
fit::result<MapError> Map (uint64_t vaddr, uint64_t size, uint64_t paddr, MapSettings settings)
Maps the provided page-aligned physical memory region at the given virtual
address.
If execute-only access is requested and the hardware does not support
this, the permissions will be fixed up as RX.
If the requested virtual address range is in the upper address space, the
settings will also be fixed up to be global (as these ranges are intended
for permanent kernel mappings).
Defined at line 15 of file ../../zircon/kernel/phys/address-space-map.cc
fit::result<MapError> Map (uint64_t vaddr, uint64_t size, uint64_t paddr, MapSettings settings)
Maps the provided page-aligned physical memory region at the given virtual
address.
If execute-only access is requested and the hardware does not support
this, the permissions will be fixed up as RX.
If the requested virtual address range is in the upper address space, the
settings will also be fixed up to be global (as these ranges are intended
for permanent kernel mappings).
Defined at line 15 of file ../../zircon/kernel/phys/address-space-map.cc
MapSettings NormalMapSettings (arch::AccessPermissions access)
Defined at line 141 of file ../../zircon/kernel/phys/include/phys/address-space.h
void PanicIfError (const fit::result<MapError> & result)
Defined at line 145 of file ../../zircon/kernel/phys/include/phys/address-space.h
void SetPageTableAllocationBounds (ktl::optional<uint64_t> low, ktl::optional<uint64_t> high)
Restricts the memory out of which page tables may be allocated. A bound of
ktl::nullopt indicates that the corresponding default bound on the global
memalloc::Pool should be respected instead (i.e., the default behaviour).
This method may be called before Init() in order to ensure that root page
allocation respects these bounds as well.
In a nebulous period of early boot on x86-64, we have no guarantees on
what memory is mapped beyond our load image; in that case we must restrict
the allocation of fresh mappings out of that load image, which is where
this method comes in handy.
Defined at line 166 of file ../../zircon/kernel/phys/include/phys/address-space.h
template <typename... Args>
void Init (Args &&... args)
Initializes the address space, allocating the root page table(s), and
initializes system paging state with the arguments specified by
ArchCreatePagingState().
Defined at line 176 of file ../../zircon/kernel/phys/include/phys/address-space.h
uint64_t lower_root_paddr ()
Defined at line 181 of file ../../zircon/kernel/phys/include/phys/address-space.h
uint64_t upper_root_paddr ()
Defined at line 183 of file ../../zircon/kernel/phys/include/phys/address-space.h
template <typename = void>
uint64_t root_paddr ()
Defined at line 193 of file ../../zircon/kernel/phys/include/phys/address-space.h
template <typename = void>
uint64_t root_paddr ()
Defined at line 193 of file ../../zircon/kernel/phys/include/phys/address-space.h
const SystemState & state ()
Defined at line 197 of file ../../zircon/kernel/phys/include/phys/address-space.h
bool ClearLocked (uint64_t addr, magma::PlatformBusMapper::BusMapping * bus_mapping)
Defined at line 197 of file ../../src/graphics/drivers/msd-vsi-vip/src/address_space.cc
bool ReadPteForTesting (gpu_addr_t addr, mali_pte_t * entry)
Defined at line 153 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.cc
uint64_t translation_table_entry ()
Defined at line 165 of file ../../src/graphics/drivers/msd-arm-mali/src/address_space.cc
void SetPageTableAllocationBounds (ktl::optional<uint64_t> low, ktl::optional<uint64_t> high)
Restricts the memory out of which page tables may be allocated. A bound of
ktl::nullopt indicates that the corresponding default bound on the global
memalloc::Pool should be respected instead (i.e., the default behaviour).
This method may be called before Init() in order to ensure that root page
allocation respects these bounds as well.
In a nebulous period of early boot on x86-64, we have no guarantees on
what memory is mapped beyond our load image; in that case we must restrict
the allocation of fresh mappings out of that load image, which is where
this method comes in handy.
Defined at line 166 of file ../../zircon/kernel/phys/include/phys/address-space.h
fit::result<MapError> IdentityMap (uint64_t addr, uint64_t size, MapSettings settings)
Defined at line 210 of file ../../zircon/kernel/phys/include/phys/address-space.h
fit::result<MapError> IdentityMap (uint64_t addr, uint64_t size, MapSettings settings)
Defined at line 210 of file ../../zircon/kernel/phys/include/phys/address-space.h
void SetUpIdentityMappings ()
Identity maps in all RAM as RWX, as well as the global UART's registers
(assuming that they fit within a single page).
Defined at line 216 of file ../../zircon/kernel/phys/include/phys/address-space.h
void Install ()
Configures the hardware to install the address space (in an
architecture-specific fashion) and registers this instance as
gAddressSpace.
Defined at line 224 of file ../../zircon/kernel/phys/include/phys/address-space.h
template <bool DualSpaces = kDualSpaces, typename = ktl::enable_if_t<DualSpaces>>
void InstallNewRootTables (uint64_t new_lower_root_paddr, uint64_t new_upper_root_paddr)
Install new lower and upper root page tables.
Defined at line 231 of file ../../zircon/kernel/phys/include/phys/address-space.h
template <bool DualSpaces = kDualSpaces, typename = ktl::enable_if_t<DualSpaces>>
void InstallNewRootTables (uint64_t new_lower_root_paddr, uint64_t new_upper_root_paddr)
Install new lower and upper root page tables.
Defined at line 231 of file ../../zircon/kernel/phys/include/phys/address-space.h
template <bool DualSpaces = kDualSpaces, typename = ktl::enable_if_t<!DualSpaces>>
void InstallNewRootTable (uint64_t new_root_paddr)
Install a new root page table.
Defined at line 239 of file ../../zircon/kernel/phys/include/phys/address-space.h
template <bool DualSpaces = kDualSpaces, typename = ktl::enable_if_t<!DualSpaces>>
void InstallNewRootTable (uint64_t new_root_paddr)
Install a new root page table.
Defined at line 239 of file ../../zircon/kernel/phys/include/phys/address-space.h
PageTableDirectIo GetPageTableDirectIo (uint64_t paddr)
Defined at line 244 of file ../../zircon/kernel/phys/include/phys/address-space.h
PageTableDirectIo GetPageTableDirectIo (uint64_t paddr)
Defined at line 244 of file ../../zircon/kernel/phys/include/phys/address-space.h
Records
Friends
class TestAddressSpace_GarbageCollect_Test
class TestAddressSpace