L4Re – L4 Runtime Environment
sigma0.h File Reference

Sigma0 interface. More...

#include <l4/sys/compiler.h>
#include <l4/sys/types.h>
#include <l4/sys/kip.h>
+ Include dependency graph for sigma0.h:

Go to the source code of this file.

Macros

#define SIGMA0_REQ_MAGIC   ~0xFFUL
 Request magic.
 
#define SIGMA0_REQ_MASK   ~0xFFUL
 Request mask.
 
#define SIGMA0_REQ_ID_MASK   0xF0
 ID mask.
 
#define SIGMA0_REQ_ID_FPAGE_RAM   0x60
 RAM.
 
#define SIGMA0_REQ_ID_FPAGE_IOMEM   0x70
 I/O memory.
 
#define SIGMA0_REQ_ID_FPAGE_IOMEM_CACHED   0x80
 Cached I/O memory.
 
#define SIGMA0_REQ_ID_FPAGE_ANY   0x90
 Any.
 
#define SIGMA0_REQ_ID_KIP   0xA0
 KIP.
 
#define SIGMA0_REQ_ID_DEBUG_DUMP   0xC0
 Debug dump.
 
#define SIGMA0_REQ_ID_NEW_CLIENT   0xD0
 New client.
 
#define SIGMA0_IS_MAGIC_REQ(d1)    ((d1 & SIGMA0_REQ_MASK) == SIGMA0_REQ_MAGIC)
 Check if magic.
 
#define SIGMA0_REQ(x)    (SIGMA0_REQ_MAGIC + SIGMA0_REQ_ID_ ## x)
 Construct.
 
#define SIGMA0_REQ_FPAGE_RAM   (SIGMA0_REQ(FPAGE_RAM))
 RAM.
 
#define SIGMA0_REQ_FPAGE_IOMEM   (SIGMA0_REQ(FPAGE_IOMEM))
 I/O memory.
 
#define SIGMA0_REQ_FPAGE_IOMEM_CACHED   (SIGMA0_REQ(FPAGE_IOMEM_CACHED))
 Cache I/O memory.
 
#define SIGMA0_REQ_FPAGE_ANY   (SIGMA0_REQ(FPAGE_ANY))
 Any.
 
#define SIGMA0_REQ_KIP   (SIGMA0_REQ(KIP))
 KIP.
 
#define SIGMA0_REQ_DEBUG_DUMP   (SIGMA0_REQ(DEBUG_DUMP))
 Debug dump.
 
#define SIGMA0_REQ_NEW_CLIENT   (SIGMA0_REQ(NEW_CLIENT))
 New client.
 

Enumerations

enum  l4sigma0_return_flags_t {
  L4SIGMA0_OK , L4SIGMA0_NOTALIGNED , L4SIGMA0_IPCERROR , L4SIGMA0_NOFPAGE ,
  L4SIGMA0_4 , L4SIGMA0_5 , L4SIGMA0_SMALLERFPAGE
}
 Return flags of libsigma0 functions. More...
 

Functions

l4_kernel_info_tl4sigma0_map_kip (l4_cap_idx_t sigma0, void *addr, unsigned log2_size)
 Map the kernel info page from sigma0 to addr. More...
 
int l4sigma0_map_mem (l4_cap_idx_t sigma0, l4_addr_t phys, l4_addr_t virt, l4_addr_t size)
 Request a memory mapping from sigma0. More...
 
int l4sigma0_map_iomem (l4_cap_idx_t sigma0, l4_addr_t phys, l4_addr_t virt, l4_addr_t size, int cached)
 Request IO memory from sigma0. More...
 
int l4sigma0_map_anypage (l4_cap_idx_t sigma0, l4_addr_t map_area, unsigned log2_map_size, l4_addr_t *base, unsigned sz)
 Request an arbitrary free page of RAM. More...
 
void l4sigma0_debug_dump (l4_cap_idx_t sigma0)
 Request sigma0 to dump internal debug information. More...
 
int l4sigma0_new_client (l4_cap_idx_t sigma0, l4_cap_idx_t gate)
 Create a new IPC gate for a new Sigma0 client. More...
 
char const * l4sigma0_map_errstr (int err)
 Get user readable error messages for the return codes. More...
 

Detailed Description

Sigma0 interface.

Definition in file sigma0.h.

Enumeration Type Documentation

◆ l4sigma0_return_flags_t

Return flags of libsigma0 functions.

Enumerator
L4SIGMA0_OK 

Ok.

L4SIGMA0_NOTALIGNED 

Phys, virt or size not aligned.

L4SIGMA0_IPCERROR 

IPC error.

L4SIGMA0_NOFPAGE 

No fpage received.

L4SIGMA0_SMALLERFPAGE 

Superpage requested but smaller flexpage received.

Definition at line 80 of file sigma0.h.

Function Documentation

◆ l4sigma0_debug_dump()

void l4sigma0_debug_dump ( l4_cap_idx_t  sigma0)

Request sigma0 to dump internal debug information.

Parameters
sigma0Capability selector for the sigma0 gate.

The debug information, such as internal memory maps, as well as statistics about the internal allocators is dumped to the kernel debugger.

◆ l4sigma0_map_anypage()

int l4sigma0_map_anypage ( l4_cap_idx_t  sigma0,
l4_addr_t  map_area,
unsigned  log2_map_size,
l4_addr_t base,
unsigned  sz 
)

Request an arbitrary free page of RAM.

Parameters
sigma0Capability selector for the sigma0 gate.
map_areaThe base address of the local virtual memory area where the page should be mapped.
log2_map_sizeThe size of the requested page log 2 (the size in bytes is 2^log2_map_size). This must be at least the minimal page size. By specifing larger sizes the largest possible hardware page size will be used.
[out]basePhysical address of the page received (i.e. the send base of the received mapping if any).
szSize to map by the server in 2^sz bytes.
Return values
0Success.
-L4SIGMA0_IPCERRORIPC error.
-L4SIGMA0_NOFPAGENo fpage received.

This function requests arbitrary free memory from sigma0. It should be used whenever spare memory is needed, instead of requesting specific physical memory with l4sigma0_map_mem().

See l4sigma0_map_errstr() to get a description of the return value.

◆ l4sigma0_map_errstr()

char const * l4sigma0_map_errstr ( int  err)
inline

Get user readable error messages for the return codes.

Parameters
errThe error code reported by the map functions.
Returns
A string containing the error message.

Definition at line 214 of file sigma0.h.

◆ l4sigma0_map_iomem()

int l4sigma0_map_iomem ( l4_cap_idx_t  sigma0,
l4_addr_t  phys,
l4_addr_t  virt,
l4_addr_t  size,
int  cached 
)

Request IO memory from sigma0.

Parameters
sigma0Capability selector for the sigma0 gate.
physThe physical address to be requested (page aligned).
virtThe virtual address where the memory should be mapped to (page aligned).
sizeThe size of the IO memory area to be mapped (multiple of page size)
cachedRequests cacheable IO memory if 1 and uncached if 0.
Return values
0Success.
-L4SIGMA0_NOTALIGNEDphys, virt, or size are not aligned.
-L4SIGMA0_IPCERRORIPC error.
-L4SIGMA0_NOFPAGENo fpage received.

This function is similar to l4sigma0_map_mem(), the difference is that it requests IO memory. IO memory is everything that is not known to be normal RAM. Also ACPI tables or the BIOS memory is treated as IO memory.

See l4sigma0_map_errstr() to get a description of the return value.

◆ l4sigma0_map_kip()

l4_kernel_info_t* l4sigma0_map_kip ( l4_cap_idx_t  sigma0,
void *  addr,
unsigned  log2_size 
)

Map the kernel info page from sigma0 to addr.

Parameters
sigma0Capability selector for the sigma0 gate.
addrStart of the receive window to receive KIP in.
log2_sizeSize of the receive window to receive KIP in.
Returns
Address KIP was mapped to, 0 indicates an error.

◆ l4sigma0_map_mem()

int l4sigma0_map_mem ( l4_cap_idx_t  sigma0,
l4_addr_t  phys,
l4_addr_t  virt,
l4_addr_t  size 
)

Request a memory mapping from sigma0.

Parameters
sigma0Capability selector for the sigma0 gate.
physThe physical address of the requested page (must be at least aligned to the minimum page size).
virtThe virtual address where the paged should be mapped in the local address space (must be at least aligned to the minimum page size).
sizeThe size of the requested page, this must be a multiple of the minimum page size.
Return values
0Success.
-L4SIGMA0_NOTALIGNEDphys, virt, or size are not aligned.
-L4SIGMA0_IPCERRORIPC error.
-L4SIGMA0_NOFPAGENo fpage received.

See l4sigma0_map_errstr() to get a description of the return value.

◆ l4sigma0_new_client()

int l4sigma0_new_client ( l4_cap_idx_t  sigma0,
l4_cap_idx_t  gate 
)

Create a new IPC gate for a new Sigma0 client.

Parameters
sigma0Capability selector for the sigma0 gate.
gateCapability selector to use for the new gate.
Return values
0Success.
-L4SIGMA0_IPCERRORIPC error.
-L4SIGMA0_NOFPAGENo fpage received.