Sigma0 application class. More...
Classes | |
struct | ConsoleData |
struct | DiskData |
struct | PutcData |
Public Types | |
enum | { MAXDISKS = 32, MAXDISKREQUESTS = DISKS_SIZE } |
Public Member Functions | |
char * | map_self (Utcb *utcb, unsigned long physmem, unsigned long size, unsigned rights=DESC_MEM_ALL) |
char * | map_string (Utcb *utcb, unsigned long src) |
Command lines need to be mapped. | |
bool | attach_irq (unsigned gsi, unsigned cap_sm, bool unlocked, unsigned cpunr) |
unsigned | attach_msi (MessageHostOp *msg, unsigned cpunr) |
template<class CONSUMER , class PRODUCER > | |
void | handle_attach (ModuleInfo *modinfo, PRODUCER &res, Utcb *utcb) |
Handle an attach request. | |
void | postinit (Hip *hip) |
unsigned | create_host_devices (Utcb *utcb, Hip *hip) |
Create the needed host devices aka instantiate the drivers. | |
unsigned | alloc_crd () |
Prepare UTCB for receiving a new cap. | |
unsigned | create_worker_threads (Hip *hip, int cpunr) |
unsigned | __attribute__ ((noinline)) preinit(Utcb *utcb |
Init the pager, console and map initial resources. | |
unsigned Hip *hip | Logging::init (putc, 0) |
Logging::printf ("s0: preinit %p\n\n", hip) | |
check1 (1, init(hip)) | |
assert (_cap_start==0 &&_cap_order==16 &&CLIENT_PT_OFFSET==0x20000U) | |
assert (reserve &&reserve->virt<=CLIENT_PT_OFFSET &&reserve->size-(reserve->virt-CLIENT_PT_OFFSET) >=(2<< CLIENT_PT_ORDER)) | |
_cap_region | del (Region(CLIENT_PT_OFFSET, 2U<< CLIENT_PT_ORDER)) |
assert (!_cap_region.find(CLIENT_PT_OFFSET)&&!_cap_region.find(CLIENT_PT_OFFSET+(1U<< CLIENT_PT_ORDER)-1U)) | |
assert (!_cap_region.find(CLIENT_PT_OFFSET+(2U<< CLIENT_PT_ORDER)-1U)) | |
assert (!_cap_region.find(0)) | |
assert (!_cap_region.find(ParentProtocol::CAP_PT_PERCPU-1U)) | |
assert (!_cap_region.find(ParentProtocol::CAP_PT_PERCPU+Config::MAX_CPUS-1U)) | |
Logging::printf ("s0: create locks\n") | |
check1 (2, nova_create_sm(_lock_gsi.sm())||nova_create_sm(_lock_mem.sm())) | |
_lock_mem | up () |
Logging::printf ("s0: create pf echo+worker threads\n") | |
check1 (3, create_worker_threads(hip, utcb->head.nul_cpunr)) | |
Logging::printf ("s0: map vga memory\n") | |
memcpy (_vga+0x1a000, _vga+0x18000, 0x1000) | |
putcd sem | up () |
check1 (6, nova_create_sm(putcd.sem.sm())) | |
Logging::init (putc,&putcd) | |
check1 (7, nova_create_sm(CLIENT_PT_OFFSET+ParentProtocol::CAP_PARENT_ID)) | |
Utcb::TypedMapCap (CLIENT_PT_OFFSET+ParentProtocol::CAP_PARENT_ID).fill_words(utcb->msg | |
Crd (ParentProtocol::CAP_PARENT_ID, 0, MAP_MAP).value()) | |
*utcb<< Crd(0, 31, DESC_CAP_ALL);utcb-> | set_header (2, 0) |
for (unsigned gsi=0;gsi< hip->cfg_gsi;gsi++) | |
check1 (8, nova_call(_percpu[utcb->head.nul_cpunr].cap_pt_echo)) | |
unsigned | init_memmap (Utcb *utcb) |
Init the memory map from the Hip. | |
void | free_module (ModuleInfo *modinfo) |
ModuleInfo * | get_module (unsigned id) |
ModuleInfo * | alloc_module (char const *cmdline, unsigned sigma0_cmdlen) |
unsigned | start_config (Utcb *utcb, unsigned which, unsigned &internal_id) |
Starts a configuration loaded during boottime. | |
unsigned | start_config (Utcb *utcb, char const *mconfig, unsigned &internal_id) |
Start a configuration from a stable memory region (mconfig). | |
unsigned | _start_config (Utcb *utcb, char *elf, unsigned long mod_size, char const *mconfig, char const *client_cmdline, unsigned sigma0_cmdlen, unsigned &internal_id) |
unsigned | kill_module (ModuleInfo *modinfo) |
Kill the given module. | |
unsigned | assign_pci_device (unsigned pd_cap, unsigned bdf, unsigned vfbdf) |
Assign a PCI device to a PD. | |
NORETURN void | internal_error (unsigned pid, Utcb *utcb) |
PT_FUNC (do_map, assert(~utcb->head.untyped &1);utcb->set_header(0, utcb->head.untyped/2);memmove(utcb->item_start(), utcb->msg, sizeof(unsigned)*utcb->head.typed *2);) PT_FUNC_NORETURN(do_gsi | |
Logging::printf ("s0: %s(%x) vec %x %s\n", __func__, cap_irq, gsi, locked?"locked":"unlocked") | |
MessageIrq | msg (shared?MessageIrq::ASSERT_NOTIFY:MessageIrq::ASSERT_IRQ, gsi) |
while (!(res=nova_semdownmulti(cap_irq))) | |
Logging::panic ("s0: %s(%x, %x) request failed with %x\n", __func__, gsi, cap_irq, res) | |
PT_FUNC (do_startup, ModuleInfo *modinfo=get_module((pid-CLIENT_PT_OFFSET) >> CLIENT_PT_SHIFT);assert(modinfo);utcb->eip=modinfo->rip;utcb->esp=CLIENT_HIP;utcb->mtd=MTD_RIP_LEN|MTD_RSP;) PT_FUNC(do_request | |
assert (modinfo) | |
COUNTER_INC ("request") | |
if (utcb->head.untyped==EXCEPTION_WORDS) | |
if (request_pcicfg(modinfo->id, utcb)) return | |
SemaphoreGuard | l (_lock_gsi) |
if (!request_vnet(modinfo, utcb)&&!request_disks(modinfo, utcb)&&!request_console(modinfo, utcb)&&!request_network(modinfo, utcb)) switch(utcb->msg[0]) | |
utcb | set_header (1, 0) |
bool | receive (MessageHostOp &msg) |
void | init_network () |
bool | request_network (ModuleInfo *modinfo, Utcb *utcb) |
Handle network requests from other PDs. | |
bool | receive (MessageNetwork &msg) |
void | init_vnet () |
bool | receive (MessageVirtualNetPing &msg) |
bool | request_vnet (ModuleInfo *modinfo, Utcb *utcb) |
void | init_disks () |
Global init. | |
void | attach_drives (char const *cmdline, unsigned long cmdlen, unsigned client) |
Attach drives to a module. | |
unsigned long | find_free_tag (unsigned short client, unsigned char disknr, unsigned long usertag, unsigned long &tag) |
Find a free disk tag for a client. | |
bool | request_disks (ModuleInfo *modinfo, Utcb *utcb) |
Handle disk requests from other PDs. | |
bool | receive (MessageDiskCommit &msg) |
void | init_console () |
Init the console subsystem. | |
void | alloc_console (ModuleInfo const *modinfo, const char *cmdline) |
bool | request_console (ModuleInfo *modinfo, Utcb *utcb) |
Handle console requests from other PDs. | |
bool | receive (MessageConsole &msg) |
bool | request_pcicfg (unsigned client, Utcb *utcb) |
unsigned | hash (unsigned state, unsigned value) |
A very simple hash function. | |
unsigned | generate_hostmac () |
Generate a pseudo-random but persistent hostmac by hashing all PCI device IDs, their BDFs and the serial numbers of devices. | |
unsigned long long | get_mac (unsigned clientnr) |
Return a MAC by adding the MAC-prefix, the host-MAC and a client specific number. | |
void | __attribute__ ((noreturn)) run(Utcb *utcb |
Sigma0 () | |
Static Public Member Functions | |
template<typename T > | |
static bool | convert_client_ptr (ModuleInfo *modinfo, T *&ptr, unsigned size) |
Converts client ptr to a pointer in our address space. | |
static bool | adapt_ptr_map (ModuleInfo *modinfo, unsigned long &physoffset, unsigned long &physsize) |
Returns true on error. | |
static void | serial_send (long value) |
static void | putc (void *data, int value) |
static void | fancy_output (const char *st, unsigned maxchars) |
static void * | sigma0_memalloc (unsigned long size, unsigned long align) |
Request memory from the memmap. | |
static void | switch_view (Motherboard *mb, int view=0, unsigned short consoleid=console_id) |
Switch to our view. | |
Public Attributes | |
unsigned | _cpunr [MAXCPUS] |
unsigned | _numcpus |
unsigned | _last_affinity |
struct { | |
unsigned cap_ec_worker | |
unsigned cap_ec_echo | |
unsigned cap_pt_echo | |
unsigned exc_base | |
} | _percpu [MAXCPUS] |
Semaphore | _lock_gsi |
char * | _vga |
VgaRegs | _vga_regs |
struct Sigma0::PutcData | putcd |
Motherboard * | _mb |
ModuleInfo | _modinfo [MAXMODULES] |
unsigned | _mac |
Hip * | __hip |
unsigned | _msivector |
unsigned long long | _gsi |
unsigned | _pcidirect [MAXPCIDIRECT] |
bool | admission |
s0_AdmissionProtocol * | service_admission |
s0_ParentProtocol * | service_parent |
Region * | reserve = _cap_region.find(CLIENT_PT_OFFSET) |
_lock_gsi = Semaphore(alloc_cap()) | |
_lock_mem = Semaphore(alloc_cap()) | |
_vga = map_self(utcb, 0xa0000, 1<<17) | |
putcd | screen = reinterpret_cast<unsigned short *>(_vga + 0x18000) |
putcd | regs = &_vga_regs |
putcd | sem = Semaphore(alloc_cap()) |
consolesem = &putcd.sem | |
_vga_regs | cursor_pos = 24*80*2 |
_vga_regs | offset = 0 |
return | |
unsigned char | res |
unsigned | gsi = utcb->msg[1] & 0xff |
bool | shared = (utcb->msg[1] >> 8) & 1 |
bool | locked = !(utcb->msg[1] & 0x200) |
unsigned | cap_irq = utcb->msg[0] |
ModuleInfo * | modinfo = get_module((pid - CLIENT_PT_OFFSET) >> CLIENT_PT_SHIFT) |
fail | __pad0__: utcb->msg[0] = ~0x10u |
NetworkProducer | _prod_network [MAXMODULES] |
Network data. | |
unsigned | vnet_sm [MAXMODULES] |
struct Sigma0::DiskData | _disk_data [MAXMODULES] |
struct Sigma0::ConsoleData | _console_data [MAXMODULES] |
Static Public Attributes | |
static Semaphore | _lock_mem |
Friends | |
class | s0_ParentProtocol |
Sigma0 application class.
Sigma0::Sigma0 | ( | ) | [inline] |
unsigned Sigma0::__attribute__ | ( | (noinline) | ) |
Init the pager, console and map initial resources.
void Sigma0::__attribute__ | ( | (noreturn) | ) |
unsigned Sigma0::_start_config | ( | Utcb * | utcb, | |
char * | elf, | |||
unsigned long | mod_size, | |||
char const * | mconfig, | |||
char const * | client_cmdline, | |||
unsigned | sigma0_cmdlen, | |||
unsigned & | internal_id | |||
) | [inline] |
We memset the client memory to make sure we get an deterministic run and not leak any information between clients.
static bool Sigma0::adapt_ptr_map | ( | ModuleInfo * | modinfo, | |
unsigned long & | physoffset, | |||
unsigned long & | physsize | |||
) | [inline, static] |
Returns true on error.
(Why?!)
void Sigma0::alloc_console | ( | ModuleInfo const * | modinfo, | |
const char * | cmdline | |||
) | [inline] |
unsigned Sigma0::alloc_crd | ( | ) | [inline] |
Prepare UTCB for receiving a new cap.
ModuleInfo* Sigma0::alloc_module | ( | char const * | cmdline, | |
unsigned | sigma0_cmdlen | |||
) | [inline] |
Sigma0::assert | ( | _cap_start | = =0 &&_cap_order==16 &&CLIENT_PT_OFFSET==0x20000U |
) |
Sigma0::assert | ( | reserve &&reserve->virt<=CLIENT_PT_OFFSET &&reserve->size- | reserve->virt-CLIENT_PT_OFFSET) >=(2<< CLIENT_PT_ORDER | ) |
Sigma0::assert | ( | !_cap_region. | findCLIENT_PT_OFFSET)&&!_cap_region.find(CLIENT_PT_OFFSET+(1U<< CLIENT_PT_ORDER)-1U | ) |
Sigma0::assert | ( | !_cap_region. | findCLIENT_PT_OFFSET+(2U<< CLIENT_PT_ORDER)-1U | ) |
Sigma0::assert | ( | !_cap_region. | find0 | ) |
Sigma0::assert | ( | !_cap_region. | findParentProtocol::CAP_PT_PERCPU-1U | ) |
Sigma0::assert | ( | !_cap_region. | findParentProtocol::CAP_PT_PERCPU+Config::MAX_CPUS-1U | ) |
Sigma0::assert | ( | modinfo | ) |
unsigned Sigma0::assign_pci_device | ( | unsigned | pd_cap, | |
unsigned | bdf, | |||
unsigned | vfbdf | |||
) | [inline] |
Assign a PCI device to a PD.
It makes sure only the first will get it.
Returns 0 on success.
void Sigma0::attach_drives | ( | char const * | cmdline, | |
unsigned long | cmdlen, | |||
unsigned | client | |||
) | [inline] |
Attach drives to a module.
bool Sigma0::attach_irq | ( | unsigned | gsi, | |
unsigned | cap_sm, | |||
bool | unlocked, | |||
unsigned | cpunr | |||
) | [inline] |
unsigned Sigma0::attach_msi | ( | MessageHostOp * | msg, | |
unsigned | cpunr | |||
) | [inline] |
Sigma0::check1 | ( | 6 | , | |
nova_create_sm(putcd.sem.sm()) | ||||
) |
Sigma0::check1 | ( | 1 | , | |
init(hip) | ||||
) |
Sigma0::check1 | ( | 7 | , | |
nova_create_sm(CLIENT_PT_OFFSET+ParentProtocol::CAP_PARENT_ID) | ||||
) |
Sigma0::check1 | ( | 8 | , | |
nova_call(_percpu[utcb->head.nul_cpunr].cap_pt_echo) | ||||
) |
Sigma0::check1 | ( | 2 | , | |
nova_create_sm(_lock_gsi.sm())||nova_create_sm(_lock_mem.sm()) | ||||
) |
Sigma0::check1 | ( | 3 | , | |
create_worker_threads(hip, utcb->head.nul_cpunr) | ||||
) |
static bool Sigma0::convert_client_ptr | ( | ModuleInfo * | modinfo, | |
T *& | ptr, | |||
unsigned | size | |||
) | [inline, static] |
Converts client ptr to a pointer in our address space.
Returns true on error.
Sigma0::COUNTER_INC | ( | "request" | ) |
Sigma0::Crd | ( | ParentProtocol::CAP_PARENT_ID | , | |
0 | , | |||
MAP_MAP | ||||
) |
Create the needed host devices aka instantiate the drivers.
unsigned Sigma0::create_worker_threads | ( | Hip * | hip, | |
int | cpunr | |||
) | [inline] |
_cap_region Sigma0::del | ( | Region(CLIENT_PT_OFFSET, 2U<< CLIENT_PT_ORDER) | ) |
static void Sigma0::fancy_output | ( | const char * | st, | |
unsigned | maxchars | |||
) | [inline, static] |
unsigned long Sigma0::find_free_tag | ( | unsigned short | client, | |
unsigned char | disknr, | |||
unsigned long | usertag, | |||
unsigned long & | tag | |||
) | [inline] |
Find a free disk tag for a client.
void Sigma0::free_module | ( | ModuleInfo * | modinfo | ) | [inline] |
unsigned Sigma0::generate_hostmac | ( | ) | [inline] |
Generate a pseudo-random but persistent hostmac by hashing all PCI device IDs, their BDFs and the serial numbers of devices.
unsigned long long Sigma0::get_mac | ( | unsigned | clientnr | ) | [inline] |
Return a MAC by adding the MAC-prefix, the host-MAC and a client specific number.
ModuleInfo* Sigma0::get_module | ( | unsigned | id | ) | [inline] |
void Sigma0::handle_attach | ( | ModuleInfo * | modinfo, | |
PRODUCER & | res, | |||
Utcb * | utcb | |||
) | [inline] |
Handle an attach request.
unsigned Sigma0::hash | ( | unsigned | state, | |
unsigned | value | |||
) | [inline] |
A very simple hash function.
Sigma0::if | ( | ! | request_vnetmodinfo, utcb)&&!request_disks(modinfo, utcb)&&!request_console(modinfo, utcb)&&!request_network(modinfo, utcb | ) | [inline] |
Sigma0::if | ( | utcb->head. | untyped = = EXCEPTION_WORDS |
) | [inline] |
void Sigma0::init_console | ( | ) | [inline] |
Init the console subsystem.
void Sigma0::init_disks | ( | ) | [inline] |
Global init.
void Sigma0::init_network | ( | ) | [inline] |
void Sigma0::init_vnet | ( | ) | [inline] |
NORETURN void Sigma0::internal_error | ( | unsigned | pid, | |
Utcb * | utcb | |||
) | [inline] |
unsigned Sigma0::kill_module | ( | ModuleInfo * | modinfo | ) | [inline] |
Kill the given module.
SemaphoreGuard Sigma0::l | ( | _lock_gsi | ) |
unsigned Hip* hip Sigma0::Logging::init | ( | putc | , | |
0 | ||||
) |
Sigma0::Logging::init | ( | putc | , | |
& | putcd | |||
) |
Sigma0::Logging::panic | ( | "s0: %s(%x, %x) request failed with %x\n" | , | |
__func__ | , | |||
gsi | , | |||
cap_irq | , | |||
res | ||||
) |
Sigma0::Logging::printf | ( | "s0: map vga memory\n" | ) |
Sigma0::Logging::printf | ( | "s0: preinit %p\n\n" | , | |
hip | ||||
) |
Sigma0::Logging::printf | ( | "s0: %s(%x) vec %x %s\n" | , | |
__func__ | , | |||
cap_irq | , | |||
gsi | , | |||
locked?"locked":"unlocked" | ||||
) |
Sigma0::Logging::printf | ( | "s0: create locks\n" | ) |
Sigma0::Logging::printf | ( | "s0: create pf echo+worker threads\n" | ) |
char* Sigma0::map_self | ( | Utcb * | utcb, | |
unsigned long | physmem, | |||
unsigned long | size, | |||
unsigned | rights = DESC_MEM_ALL | |||
) | [inline] |
char* Sigma0::map_string | ( | Utcb * | utcb, | |
unsigned long | src | |||
) | [inline] |
Command lines need to be mapped.
MessageIrq Sigma0::msg | ( | shared?MessageIrq::ASSERT_NOTIFY:MessageIrq::ASSERT_IRQ | , | |
gsi | ||||
) |
void Sigma0::postinit | ( | Hip * | hip | ) | [inline] |
Sigma0::PT_FUNC | ( | do_map | , | |
assert(~utcb->head.untyped &1);utcb->set_header(0, utcb->head.untyped/2);memmove(utcb->item_start(), utcb->msg, sizeof(unsigned)*utcb->head.typed *2); | ||||
) |
Sigma0::PT_FUNC | ( | do_startup | , | |
ModuleInfo * | modinfo = get_module((pid - CLIENT_PT_OFFSET) >> CLIENT_PT_SHIFT); assert(modinfo); utcb->eip = modinfo->rip; utcb->esp = CLIENT_HIP; utcb->mtd = MTD_RIP_LEN | MTD_RSP; | |||
) |
static void Sigma0::putc | ( | void * | data, | |
int | value | |||
) | [inline, static] |
bool Sigma0::receive | ( | MessageNetwork & | msg | ) | [inline] |
bool Sigma0::receive | ( | MessageHostOp & | msg | ) | [inline] |
bool Sigma0::receive | ( | MessageDiskCommit & | msg | ) | [inline] |
bool Sigma0::receive | ( | MessageVirtualNetPing & | msg | ) | [inline] |
bool Sigma0::receive | ( | MessageConsole & | msg | ) | [inline] |
bool Sigma0::request_console | ( | ModuleInfo * | modinfo, | |
Utcb * | utcb | |||
) | [inline] |
Handle console requests from other PDs.
bool Sigma0::request_disks | ( | ModuleInfo * | modinfo, | |
Utcb * | utcb | |||
) | [inline] |
Handle disk requests from other PDs.
bool Sigma0::request_network | ( | ModuleInfo * | modinfo, | |
Utcb * | utcb | |||
) | [inline] |
Handle network requests from other PDs.
bool Sigma0::request_pcicfg | ( | unsigned | client, | |
Utcb * | utcb | |||
) | [inline] |
bool Sigma0::request_vnet | ( | ModuleInfo * | modinfo, | |
Utcb * | utcb | |||
) | [inline] |
static void Sigma0::serial_send | ( | long | value | ) | [inline, static] |
* utcb<< Crd(0, 31, DESC_CAP_ALL); utcb-> Sigma0::set_header | ( | 2 | , | |
0 | ||||
) |
utcb Sigma0::set_header | ( | 1 | , | |
0 | ||||
) |
static void* Sigma0::sigma0_memalloc | ( | unsigned long | size, | |
unsigned long | align | |||
) | [inline, static] |
Request memory from the memmap.
Minimum alignment is 16-bytes (for SSE stuff).
unsigned Sigma0::start_config | ( | Utcb * | utcb, | |
char const * | mconfig, | |||
unsigned & | internal_id | |||
) | [inline] |
Start a configuration from a stable memory region (mconfig).
Region has to be zero terminated.
unsigned Sigma0::start_config | ( | Utcb * | utcb, | |
unsigned | which, | |||
unsigned & | internal_id | |||
) | [inline] |
Starts a configuration loaded during boottime.
Configuration numbers start at zero.
static void Sigma0::switch_view | ( | Motherboard * | mb, | |
int | view = 0 , |
|||
unsigned short | consoleid = console_id | |||
) | [inline, static] |
Switch to our view.
_lock_mem Sigma0::up | ( | ) |
Sigma0::Utcb::TypedMapCap | ( | CLIENT_PT_OFFSET+ParentProtocol::CAP_PARENT_ID | ) |
Sigma0::while | ( | ! | res=nova_semdownmulti(cap_irq) | ) | [inline] |
friend class s0_ParentProtocol [friend] |
fail Sigma0::__pad0__ |
struct Sigma0::ConsoleData Sigma0::_console_data[MAXMODULES] |
unsigned Sigma0::_cpunr[MAXCPUS] |
struct Sigma0::DiskData Sigma0::_disk_data[MAXMODULES] |
unsigned long long Sigma0::_gsi |
unsigned Sigma0::_last_affinity |
Sigma0::_lock_gsi = Semaphore(alloc_cap()) |
Semaphore Sigma0::_lock_mem [static] |
Sigma0::_lock_mem = Semaphore(alloc_cap()) |
unsigned Sigma0::_mac |
ModuleInfo Sigma0::_modinfo[MAXMODULES] |
unsigned Sigma0::_msivector |
unsigned Sigma0::_numcpus |
unsigned Sigma0::_pcidirect[MAXPCIDIRECT] |
struct { ... } Sigma0::_percpu[MAXCPUS] |
NetworkProducer Sigma0::_prod_network[MAXMODULES] |
Network data.
char* Sigma0::_vga |
Sigma0::_vga = map_self(utcb, 0xa0000, 1<<17) |
bool Sigma0::admission |
unsigned Sigma0::cap_ec_echo |
unsigned Sigma0::cap_ec_worker |
unsigned Sigma0::cap_irq = utcb->msg[0] |
unsigned Sigma0::cap_pt_echo |
Sigma0::consolesem = &putcd.sem |
_vga_regs Sigma0::cursor_pos = 24*80*2 |
unsigned Sigma0::exc_base |
unsigned Sigma0::gsi = utcb->msg[1] & 0xff |
bool Sigma0::locked = !(utcb->msg[1] & 0x200) |
ModuleInfo* Sigma0::modinfo = get_module((pid - CLIENT_PT_OFFSET) >> CLIENT_PT_SHIFT) |
struct Sigma0::PutcData Sigma0::putcd |
unsigned char Sigma0::res |
Region* Sigma0::reserve = _cap_region.find(CLIENT_PT_OFFSET) |
putcd Sigma0::screen = reinterpret_cast<unsigned short *>(_vga + 0x18000) |
putcd Sigma0::sem = Semaphore(alloc_cap()) |
bool Sigma0::shared = (utcb->msg[1] >> 8) & 1 |
unsigned Sigma0::vnet_sm[MAXMODULES] |