Introduction   User API Reference   DSMlib Reference   IDL Interface   File List   Index  

Miscellaneous Memory Functions
[Dataspace Manager Client API]

Lock/unlock dataspace regions, get memory size, ... More...

Data Structures

struct  l4dm_mem_addr

Typedefs

typedef struct l4dm_mem_addr l4dm_mem_addr_t

Functions

L4_CV int l4dm_mem_size (const l4dm_dataspace_t *ds, l4_size_t *size)
 Return dataspace size.
L4_CV int l4dm_mem_ds_phys_addr (const l4dm_dataspace_t *ds, l4_offs_t offset, l4_size_t size, l4_addr_t *paddr, l4_size_t *psize)
 Get phys. address of dataspace region.
L4_CV int l4dm_mem_phys_addr (const void *ptr, l4_size_t size, l4dm_mem_addr_t addrs[], int num, l4_size_t *psize)
 Get phys. address of a of VM region.
L4_CV int l4dm_mem_ds_is_contiguous (const l4dm_dataspace_t *ds)
 Test if dataspace is allocated on contiguous memory.
L4_CV int l4dm_mem_ds_lock (const l4dm_dataspace_t *ds, l4_offs_t offset, l4_size_t size)
 Lock dataspace region.
L4_CV int l4dm_mem_ds_unlock (const l4dm_dataspace_t *ds, l4_offs_t offset, l4_size_t size)
 Unlock dataspace region.
L4_CV int l4dm_mem_lock (const void *ptr, l4_size_t size)
 Lock virtual memory region.
L4_CV int l4dm_mem_unlock (const void *ptr, l4_size_t size)
 Unlock virtual memory region.
L4_CV int l4dm_memphys_pagesize (const l4dm_dataspace_t *ds, l4_offs_t offs, l4_size_t size, int pagesize, int *ok)
 Check pagesize of dataspace region.
L4_CV int l4dm_memphys_check_pagesize (const void *ptr, l4_size_t size, int pagesize)
 Check if dataspaces attached to VM area can be mapped with a certain pagesize.
L4_CV int l4dm_memphys_poolsize (int pool, l4_size_t *size, l4_size_t *free)
 Return size of memory pool.

Detailed Description

Lock/unlock dataspace regions, get memory size, ...


Typedef Documentation

Address region


Function Documentation

L4_CV int l4dm_mem_size ( const l4dm_dataspace_t ds,
l4_size_t *  size 
)

Return dataspace size.

Parameters:
ds Dataspace descriptor
Return values:
size Dataspace size
Returns:
0 on success (size contains the dataspace size), error code otherwise:
  • -L4_EIPC IPC error calling dataspace manager
  • -L4_EINVAL invalid dataspace id
  • -L4_EPERM Caller is not a client of the dataspace

L4_CV int l4dm_mem_ds_phys_addr ( const l4dm_dataspace_t ds,
l4_offs_t  offset,
l4_size_t  size,
l4_addr_t *  paddr,
l4_size_t *  psize 
)

Get phys. address of dataspace region.

Parameters:
ds Dataspace id
offset Offset in dataspace
size Region size, L4DM_WHOLE_DS to get the size of the contiguous area at offset
Return values:
paddr Phys. address
psize Size of phys. contiguous dataspace region at offset
Returns:
0 on success, error code otherwise:
  • -L4_EIPC IPC error calling dataspace manager
  • -L4_EINVAL invalid dataspace id
  • -L4_EPERM caller is not a client of the dataspace
  • -L4_EINVAL_OFFS offset points beyond end of dataspace
Return the phys. address of the dataspace memory at offset. The dataspace manager will return the size of the contiguous memory starting at offset in psize (psize is set to size if the area is larger than size).
Note:
The dataspace region must be pinned in physical memory, otherwise it is not safe to use the returned phys. address (the dataspace region might get paged in the meantime).

L4_CV int l4dm_mem_phys_addr ( const void *  ptr,
l4_size_t  size,
l4dm_mem_addr_t  addrs[],
int  num,
l4_size_t *  psize 
)

Get phys. address of a of VM region.

Parameters:
ptr VM region address
size VM region size
addrs Phys. address regions destination buffer
num Number of elements in addrs.
Return values:
psize Total size of the address regions in addrs
Returns:
On success number of found phys. address regions, error code otherwise:
  • -L4_ENOTFOUND dataspace not found for a VM address
  • -L4_EINVAL Invalid vm region (i.e. no dataspace attached to that region, but external pager etc.)
  • -L4_EPERM caller is not a client of the dataspace
  • -L4_EIPC error calling region mapper / dataspace manager
Lookup the phys. addresses for the specified virtual memory region. If several dataspaces are attached to the VM region or the dataspaces are not phys. contiguous, the different addresses are returned in addrs (up to num entries). psize will contain the total size of the areas described in addrs. Like in l4dm_mem_ds_phys_addr(), the VM area must be pinned.

L4_CV int l4dm_mem_ds_is_contiguous ( const l4dm_dataspace_t ds  ) 

Test if dataspace is allocated on contiguous memory.

Parameters:
ds Dataspace id
Returns:
1 if dataspace is allocated on contiguous memory, 0 if not.

L4_CV int l4dm_mem_ds_lock ( const l4dm_dataspace_t ds,
l4_offs_t  offset,
l4_size_t  size 
)

Lock dataspace region.

Parameters:
ds Dataspace id
offset Offset in dataspace
size Region size, L4DM_WHOLE_DS to lock the whole dataspace starting at offset
Returns:
0 on success, error code otherwise:
  • -L4_EIPC IPC error calling dataspace manager
  • -L4_EPERM caller is not a client of the dataspace
  • -L4_EINVAL invalid dataspace id
  • -L4_EINVAL_OFFS offset points beyond end of dataspace
Lock ("pin") the dataspace region. This ensures that the dataspace region will not be unmapped by the dataspace manager.

L4_CV int l4dm_mem_ds_unlock ( const l4dm_dataspace_t ds,
l4_offs_t  offset,
l4_size_t  size 
)

Unlock dataspace region.

Parameters:
ds Dataspace id
offset Offset in dataspace
size Region size, L4DM_WHOLE_DS to unlock the whole dataspace starting at offset
Returns:
0 on success, error code otherwise:
  • -L4_EIPC IPC error calling dataspace manager
  • -L4_EPERM caller is not a client of the dataspace
  • -L4_EINVAL invalid dataspace id
  • -L4_EINVAL_OFFS offset points beyond end of dataspace

L4_CV int l4dm_mem_lock ( const void *  ptr,
l4_size_t  size 
)

Lock virtual memory region.

Parameters:
ptr VM region start address
size VM region size
Returns:
0 on success (locked VM region), error code otherwise:
  • -L4_ENOTFOUND dataspace not found for a VM address
  • -L4_EINVAL Invalid vm region (i.e. no dataspace attached to that region, but external pager etc.)
  • -L4_EIPC error calling region mapper / dataspace manager
  • -L4_EPERM caller is not a client of a dataspace attached to the VM region
Lock ("pin") the VM region. This ensures that the dataspaces attached to this region will not be unmapped by the dataspace managers.

L4_CV int l4dm_mem_unlock ( const void *  ptr,
l4_size_t  size 
)

Unlock virtual memory region.

Parameters:
ptr VM region start address
size VM region size
Returns:
0 on success (unlocked VM region), error code otherwise:
  • -L4_ENOTFOUND dataspace not found for a VM address
  • -L4_EINVAL Invalid vm region (i.e. no dataspace attached to that region, but external pager etc.)
  • -L4_EIPC error calling region mapper / dataspace manager
  • -L4_EPERM caller is not a client of a dataspace attached to the VM region

L4_CV int l4dm_memphys_pagesize ( const l4dm_dataspace_t ds,
l4_offs_t  offs,
l4_size_t  size,
int  pagesize,
int *  ok 
)

Check pagesize of dataspace region.

Parameters:
ds Dataspace id
offs Offset in dataspace
size Dataspace region size
pagesize Pagesize (log2)
Return values:
ok 1 if dataspace region can be mapped with given pagesize, 0 if not
Returns:
0 on success, error code otherwise:
  • -L4_EIPC IPC error calling DMphys
  • -L4_EPERM operation not permitted
  • -L4_EINVAL invalid dataspace id
  • -L4_EINVAL_OFFS offset points beyond end of dataspace

L4_CV int l4dm_memphys_check_pagesize ( const void *  ptr,
l4_size_t  size,
int  pagesize 
)

Check if dataspaces attached to VM area can be mapped with a certain pagesize.

Parameters:
ptr VM area address
size VM area size
pagesize Log2 pagesize
Returns:
1 if dataspace can be mapped with given pagesize, 0 if not

L4_CV int l4dm_memphys_poolsize ( int  pool,
l4_size_t *  size,
l4_size_t *  free 
)

Return size of memory pool.

Parameters:
pool Pool number
Return values:
size Memory pool size
Returns:
0 on success, error code otherwise:
  • -L4_EINVAL Invalid memory pool
  • -L4_ENODM DMphys not found
  • -L4_EIPC Dataspace manager call failed


DMphys Reference Manual, written by Lars Reuther  © 2000-2003