NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | ALLOWED CALLING CONTEXTS | ATTRIBUTES | SEE ALSO
#include <dki/f_dki.h>KnError svPhysMap(KnPhMemChunk * chunk, KnPteAttr attr);
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
DKI
The microkernel provides services to allow device drivers to map physical space to virtual memory space. These services should be used mainly by a host bus driver to map bus I/O space or DMA memory.
svPhysMap() allocates a range of virtual addresses within the supervisor address space and maps it to a given range of physical addresses.
The chunk argument points to the KnPhMemChunk structure shown below:
typedef struct { PhAddr paddr; /* physical start addree */ PhSize psize; /* size */ VmAddr vaddr; /* virtual start address */ } KnPhMemChunk;
The paddr and psize fields specify the chunk of physical memory being mapped.
The vaddr field is used by svPhysMap() to return the virtual address to which the physical one is mapped.
The attr argument specifies the mapping attributes. attr is a bit-mask composed of two independent parts:
Data access attributes
Instruction access attributes
Each part of the attributes is a subset of bits defined by the translation table entry (TTE) of the MMU .
A combination of the following attributes may be specified for data access:
The PTE_DATTR_G bit set allows the mapping to be shared among all (user and supervisor) contexts.
The PTE_DATTR_W bit set grants write permission for the mapping.
The PTE_DATTR_P bit set restricts access to the mapping for the supervisor only.
The PTE_DATTR_E bit set makes noncacheable memory accesses to be strongly ordered against other E-bit accesses, and noncacheable stores are not merged. This bit should be set for I/O devices having side-effects.
The E-bit does not force an uncacheable access. When the E-bit is set, the PTE_DATTR_CV and PTE_DATTR_CP bits will be set to zero.
The PTE_DATTR_CV bit set allows data to be cached in the (L1) CPU data cache.
If the PTE_DATTR_CV bit is set, the PTE_DATTR_CP bit must also be set.
The PTE_DATTR_CP bit set allows data to be cached in the (L2) external cache.
The PTE_DATTR_IE bit set causes data accesses to the mapping to be processed with inverse endianness from that specified by the instruction.
The PTE_DATTR_V bit set enables data accesses to the mapping. If this bit is not set, all other bits (described above) are ignored and a data access to the mapping will result in a data access exception.
Combinations of the following attributes may be specified for instruction access:
The PTE_IATTR_G bit set allows the mapping to be shared among all (user and supervisor) contexts.
The PTE_IATTR_P bit set restricts access to the mapping to the supervisor only.
The PTE_IATTR_CV bit set allows instructions to be cached in the (L1) CPU instruction cache.
If the PTE_IATTR_CV bit is set, the PTE_IATTR_CP bit must also be set.
The PTE_IATTR_CP bit set allows instructions to be cached in the (L2) external cache.
The PTE_IATTR_V bit set enables instructions to be obtained from the mapping. If this bit is not set, all other bits (described above) are ignored and an instruction to fetch from the mapping will result in an instruction access exception.
On success, svPhysMap() returns K_OK . Otherwise, a negative error code is returned as follows:
The system is out of memory.
The psize argument is equal to zero.
svPhysUnmap() unmaps the physical memory chunk previously mapped by svPhysMap() . The chunk argument points to the KnPhMemChunk structure, which specifies the virtual and physical chunk start addresses and the chunk size.
T he paddr and psize fields must have the values previously specified in svPhysMap() .
The vaddr fields must have the value previously returned by svPhysMap() .
Typically, a driver uses the same KnPhMemChunk structure for the svPhysMap() and svPhysUnmap() calls and the structure fields are not modified by the driver once svPhysMap() has been performed.
vmMapToPhys() maps a given physical memory chunk to the target actor address space.
The actor argument specifies the target actor capability. If actor is K_MYACTOR , the address space of the current actor is used. If actor is K_SVACTOR , the supervisor address space is used.
The chunk argument points to the KnPhMemChunk structure, which specifies the physical and virtual chunk start addresses and the chunk size. The specified virtual address range must be allocated using the K_RESERVED option (see rgnAllocate() (2K) prior to the invocation of vmMapToPhys() . The specified actor can be a supervisor actor as well as an user actor. The mapping produced by vmMapToPhys() can only be invalidated by rgnFree() (2K).
vaddr , paddr , and psize must be page-aligned.
For family processors, the attr argument is defined in the same way as for the svPhysMap() routine above.
On success, K_OK is returned. Otherwise, a negative error code is returned as follows:
The actor argument points outside of the caller's address space.
An inconsistent actor capability was specified.
actorcap does not specify a reachable actor.
The system is out of memory.
The psize argument is equal to zero.
vaddr , paddr , or psize is not page-aligned.
Some or all addresses from the target virtual address range are out of a region allocated with the K_RESERVED option.
For performance reasons, the current implementation does not guarantee that any attempt to map a physical address to a virtual address outside a region allocated with K_RESERVED option would effectively produce a K_EADDR error.
The following table specifies the contexts in which a caller is allowed to invoke each service.
Services | Base level | DKI thread | Interrupt | Blocking |
svPhysMap() | + | + | - | + |
svPhysUnmap() | + | + | - | + |
vmMapToPhys() | + | + | - | + |
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | ALLOWED CALLING CONTEXTS | ATTRIBUTES | SEE ALSO