NOVA User-Level Environment  Version testbox/changed-memory-timing-317-g320d8b5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Sigma0 Member List

This is the complete list of members for Sigma0, including all inherited members.

__attribute__((noinline)) preinit(Utcb *utcbSigma0
NovaProgram::__attribute__((nonnull(6))) unsigned create_ec_helper(C *tlsNovaProgramprotected
NovaProgram::__attribute__((noreturn)) block_forever()NovaPrograminlineprotected
__hipSigma0
_cap_CapAllocator
_cap_blockNovaProgramprotected
_cap_orderCapAllocator
_cap_startCapAllocator
_console_dataSigma0
_cpunrSigma0
_disk_dataSigma0
_free_physNovaProgramprotected
_free_virtNovaProgramprotected
_gsiSigma0
_hipNovaProgramprotected
_irq_cap_baseSigma0
_irq_cap_baseSigma0
_last_affinitySigma0
_lock_gsiSigma0
_lock_gsiSigma0
_lock_memSigma0static
_lock_memSigma0
_macSigma0
_mbSigma0
_modinfoSigma0
_msivectorSigma0
_numcpusSigma0
_pcidirectSigma0
_percpuSigma0
_prod_networkSigma0
_start_config(Utcb *utcb, char *elf, unsigned long mod_size, char const *client_cmdline, ModuleInfo *modinfo, unsigned &sc_usage_cap, bool bswitch)Sigma0inline
_vgaSigma0
_vgaSigma0
_vga_regsSigma0
_virt_physNovaProgramprotected
acpi(MessageAcpi &msg)Sigma0Baseinlinestatic
adapt_ptr_map(ModuleInfo *modinfo, unsigned long &physoffset, unsigned long &physsize)Sigma0inlinestatic
alloc_cap(unsigned count=1)CapAllocatorinline
alloc_console(ModuleInfo const *modinfo, const char *cmdline, bool bswitch)Sigma0inline
alloc_crd()Sigma0inline
alloc_module(char const *cmdline, unsigned sigma0_cmdlen, bool s0_reserved=false)Sigma0inline
alloc_utcb()NovaPrograminlineprotected
assert(_cap_start==0 &&_cap_order==16)Sigma0
assert(reserve and reserve->virt<=CLIENT_PT_OFFSET and reserve->size-(reserve->virt-CLIENT_PT_OFFSET) >=(1<< (CLIENT_PT_ORDER+1)))Sigma0
assert(!_cap_region.find(CLIENT_PT_OFFSET)&&!_cap_region.find(CLIENT_PT_OFFSET+(1U<< CLIENT_PT_ORDER)-1U))Sigma0
assert(!_cap_region.find(CLIENT_PT_OFFSET+(2U<< CLIENT_PT_ORDER)-1U))Sigma0
assert(!_cap_region.find(0))Sigma0
assert(!_cap_region.find(ParentProtocol::CAP_PT_PERCPU-1U))Sigma0
assert(!_cap_region.find(ParentProtocol::CAP_PT_PERCPU+Config::MAX_CPUS-1U))Sigma0
assert(~utcb->head.untyped &1)Sigma0
assert(modinfo)Sigma0
assign_pci_device(unsigned pd_cap, unsigned bdf, unsigned hint)Sigma0inline
attach_drives(char const *cmdline, unsigned long cmdlen, unsigned client)Sigma0inline
attach_irq(unsigned gsi, unsigned cap_sm, bool unlocked, phy_cpu_no cpunr, char const *_name=0)Sigma0inline
attach_msi(MessageHostOp *msg, phy_cpu_no cpunr)Sigma0inline
boot_s0_services(Utcb *utcb)Sigma0inline
capNovaProgramprotected
cap_ec_echoSigma0
cap_ec_workerSigma0
cap_pt_echoSigma0
CapAllocator(unsigned long cap_, unsigned long cap_start, unsigned long cap_order)CapAllocatorinline
check1(1, init(hip))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))Sigma0
check1(6, nova_create_sm(putcd.sem.sm()))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
console(MessageConsole &msg)Sigma0Baseinlinestatic
consolesemSigma0
convert_client_ptr(ModuleInfo *modinfo, T *&ptr, unsigned size)Sigma0inlinestatic
cpunrNovaProgramprotected
create_host_devices(Utcb *utcb, Hip *hip)Sigma0inline
create_worker_threads(Hip *hip, phy_cpu_no cpunr)Sigma0inline
cursor_posSigma0
dealloc_cap(unsigned cap, unsigned count=1)CapAllocatorinline
debug_dump()Deviceinline
del(Region(CLIENT_PT_OFFSET, 1U<< (CLIENT_PT_ORDER+1)))Sigma0
Device(const char *debug_name)Deviceinline
disk(MessageDisk &msg)Sigma0Baseinlinestatic
eaxSigma0
ecxSigma0
eipSigma0
espSigma0
exc_baseSigma0
excbaseNovaProgramprotected
exception_handler_address(unsigned vector)Sigma0inline
exit(const char *msg)NovaPrograminlinestatic
fancy_output(const char *st, unsigned maxchars)Sigma0inlinestatic
find_free_tag(unsigned short client, unsigned char disknr, unsigned long usertag, unsigned long &tag)Sigma0inline
for(unsigned gsi=0;gsi< hip->cfg_gsi;gsi++)Sigma0inline
free_module(ModuleInfo *modinfo)Sigma0inline
funcNovaProgramprotected
generate_hostmac()Sigma0inline
get_config_space(uint16 rid)Sigma0inline
get_mac(unsigned clientnr)Sigma0inline
get_module(unsigned id)Sigma0inline
handle_attach(ModuleInfo *modinfo, PRODUCER &res, Utcb *utcb)Sigma0inline
hostop(MessageHostOp &msg)Sigma0Baseinlinestatic
idle_sc_sanity_check(unsigned pt)Sigma0inline
if(consolesem) consolesem->up()Sigma0
if(consolesem) consolesem->down()Sigma0
init_console()Sigma0inline
init_disks()Sigma0inline
init_mem(Hip *hip)NovaPrograminlineprotected
init_memmap(Utcb *utcb)Sigma0inline
init_network()Sigma0inline
initialized_consoleSigma0
initialized_s0_tasksSigma0
internal_error(unsigned pid, Utcb *utcb)Sigma0inline
kill_module(ModuleInfo *modinfo)Sigma0inline
localNovaProgramprotected
Logging::init(putc, 0)Sigma0
Logging::init(putc,&putcd)Sigma0
Logging::printf("s0: preinit %p\n\n", hip)Sigma0
Logging::printf("s0: create locks\n")Sigma0
Logging::printf("s0: create pf echo+worker threads\n")Sigma0
Logging::printf("s0: map vga memory\n")Sigma0
Logging::printf(">>> Step EIP %08x ESP %08x EFLAGS %08x\n", utcb->eip, utcb->esp, utcb->efl)Sigma0
map_exc_pts(const ModuleInfo *modinfo, unsigned pt)Sigma0inline
map_idle_scs(Utcb *utcb, unsigned pt)Sigma0inline
map_self(Utcb *utcb, unsigned long physmem, unsigned long size, unsigned rights, bool frame=false)Sigma0inline
map_string(Utcb *utcb, unsigned long src)Sigma0inline
MAXDISKREQUESTS enum valueSigma0
MAXDISKS enum valueSigma0
memcpy(_vga+0x1a000, _vga+0x18000, 0x1000)Sigma0
memmove(utcb->item_start(), utcb->msg, sizeof(unsigned)*utcb->head.typed *2)Sigma0
modinfoSigma0
mtdSigma0
Sigma0Base::mycpu()BasePrograminlinestatic
NovaProgram::mycpu()BasePrograminlinestatic
Sigma0Base::myutcb(unsigned long esp=0)BasePrograminlinestatic
NovaProgram::myutcb(unsigned long esp=0)BasePrograminlinestatic
network(MessageNetwork &msg)Sigma0Baseinlinestatic
NovaProgram()NovaPrograminline
offsetSigma0
pcicfg(MessagePciConfig &msg)Sigma0Baseinlinestatic
postinit(Hip *hip)Sigma0inline
PT_FUNC(do_breakpoint, if(consolesem) consolesem->up();Logging::printf(">>> Break EIP %08x ESP %08x EFLAGS %08x\n", utcb->eip, utcb->esp, utcb->efl);if(consolesem) consolesem->down();) PT_FUNC(do_singlestepSigma0
PT_FUNC(do_recall, utcb->efl^=0x100;Logging::printf("RECALL EFLAGS %08x EIP %08x\n", utcb->efl, utcb->eip);utcb->mtd=MTD_RFLAGS;) PT_FUNC(do_mapSigma0
PT_FUNC(do_request, ModuleInfo *modinfo=get_module((pid-CLIENT_PT_OFFSET) >> CLIENT_PT_SHIFT);assert(modinfo);COUNTER_INC("request");if(utcb->head.untyped==EXCEPTION_WORDS){assert(MEM_OFFSET+modinfo->physsize<=CLIENT_BOOT_UTCB);LOG_VERBOSE("s0: [%2u, %02x] pagefault %x/%x for %llx err %llx at %x\n", modinfo->id, pid, utcb->head.untyped, utcb->head.typed, utcb->qual[1], utcb->qual[0], utcb->eip);mword fault=utcb->qual[1];mword begin;mword size;mword translated;unsigned rights;if(not translate_client_fault(modinfo, fault, utcb->qual[0], translated, begin, size, rights)){Logging::printf("s0: [%2u, %02x] pagefault %x/%x for %llx err %llx at %x\n", modinfo->id, pid, utcb->head.untyped, utcb->head.typed, utcb->qual[1], utcb->qual[0], utcb->eip);Logging::printf("s0: [%2u] unresolvable pagefault - killing client ...\n", modinfo->id);utcb->reset();kill_module(modinfo);return;}assert((begin<=translated)&&(translated< (begin+size)));const mword page_mask=((1UL<< Utcb::MINSHIFT)-1);assert((size >=0x1000) and((begin &page_mask)==0));unsigned order=Cpu::maxalign(translated-begin, begin, fault-(translated-begin), size);LOG_VERBOSE("s0: [%2u, %02x] %lx %lx+%lx -> order %u: %lx+%lx\n", modinfo->id, pid, translated, begin, size, order, translated &~((1UL<< order)-1), 1UL<< order);assert(order >=Utcb::MINSHIFT);assert((1UL<< order)<=size);mword aligned_begin=translated &~((1UL<< order)-1);const Crd region=Crd(aligned_begin >> Utcb::MINSHIFT, order-Utcb::MINSHIFT, rights);if(utcb->qual[0]&1){Logging::printf("s0: potential overmap. revoke!\n");nova_revoke(region, false);}utcb->reset();*utcb<< Utcb::TypedMapCap(region,(fault &~page_mask));utcb->set_header(0, 0);if((utcb->qual[1]&CLIENT_HIP)==CLIENT_HIP){unsigned long rest=utcb->add_mappings(reinterpret_cast< unsigned long >(modinfo->hip), 0x1000, CLIENT_HIP|MAP_MAP, DESC_MEM_ALL);assert(!rest);}else{unsigned long rest=utcb->add_mappings(reinterpret_cast< unsigned long >(modinfo->mem), modinfo->physsize, MEM_OFFSET|MAP_MAP, DESC_MEM_ALL);if(rest){utcb->set_header(0, 0);unsigned long offset=(utcb->qual[1]&~((1UL<< Utcb::MINSHIFT)-1))-MEM_OFFSET;rest=utcb->add_mappings(reinterpret_cast< unsigned long >(modinfo->mem)+offset, 1UL<< Utcb::MINSHIFT,(MEM_OFFSET+offset)|MAP_MAP, DESC_MEM_ALL);assert(!rest);}}LOG_VERBOSE("s0: [%2u, %02x] map %x/%x for %llx err %llx at %x\n", modinfo->id, pid, utcb->head.untyped, utcb->head.typed, utcb->qual[1], utcb->qual[0], utcb->eip);return;}SemaphoreGuard l(_lock_gsi);if(request_pcicfg(modinfo->id, utcb)) return;if(!request_disks(modinfo, utcb)&&!request_console(modinfo, utcb)&&!request_network(modinfo, utcb)) switch(utcb->msg[0]){case REQUEST_HOSTOP:{MessageHostOp *msg=reinterpret_cast< MessageHostOp * >(utcb->msg+1);if(utcb->head.untyped *sizeof(unsigned)< sizeof(unsigned)+sizeof(*msg)) goto fail;switch(msg->type){case MessageHostOp::OP_GET_MAC:msg->mac=get_mac(modinfo->mac++*MAXMODULES+modinfo->id);utcb->msg[0]=0;break;case MessageHostOp::OP_ASSIGN_PCI:if(modinfo->dma){if(assign_pci_device(NOVA_DEFAULT_PD_CAP+(modinfo->id<< CLIENT_PT_SHIFT)+CLIENT_PT_OFFSET, msg->value, msg->len)) utcb->msg[0]=0;else goto fail;}else{Logging::printf("s0: [%2u] DMA access denied.\n", modinfo->id);goto fail;}break;case MessageHostOp::OP_ATTACH_IRQ:if((msg->value &0xff)< _hip->cfg_gsi){unsigned gsi_cap=_irq_cap_base+(msg->value &0xff);unsigned res=nova_assign_gsi(gsi_cap, modinfo->cpunr);if(res!=NOVA_ESUCCESS) goto fail;Logging::printf("s0: [%2u] gsi %lx granted\n", modinfo->id, msg->value);utcb->set_header(1, 0);utcb->msg[0]=utcb->add_mappings(gsi_cap<< Utcb::MINSHIFT, 1<< Utcb::MINSHIFT, MAP_MAP, DESC_CAP_ALL);if(utcb->msg[0]) goto fail;}else{Logging::printf("s0: [%2u] irq request dropped %x nr %x\n", modinfo->id, utcb->msg[2], utcb->msg[2] >> Utcb::MINSHIFT);goto fail;}break;case MessageHostOp::OP_ATTACH_MSI:{if(msg->is_hpet){Logging::printf("s0: Client tried to map HPET MSI. He can do that himself!\n");goto fail;}unsigned cap=attach_msi(msg, modinfo->cpunr);if(!cap){Logging::printf("s0: [%2u] granting msi to cpu %u failed\n", modinfo->id, modinfo->cpunr);goto fail;}utcb->set_header(1+sizeof(*msg)/sizeof(unsigned), 0);unsigned long res=utcb->add_mappings(cap<< Utcb::MINSHIFT, 1<< Utcb::MINSHIFT, MAP_MAP, DESC_CAP_ALL);assert(res==0);utcb->msg[0]=0;Logging::printf("s0: [%2u] msi granted to cpu %u\n", modinfo->id, modinfo->cpunr);}break;case MessageHostOp::OP_ALLOC_IOIO_REGION:map_self(utcb,(msg->value >> 8)<< Utcb::MINSHIFT, 1<< (Utcb::MINSHIFT+msg->value &0xff), DESC_IO_ALL);utcb->set_header(1, 0);utcb->msg[0]=utcb->add_mappings((msg->value >> 8)<< Utcb::MINSHIFT,(1<< (Utcb::MINSHIFT+msg->value &0xff)), MAP_MAP, DESC_IO_ALL);if(utcb->msg[0]) goto fail;break;case MessageHostOp::OP_ALLOC_IOMEM:{unsigned long addr=msg->value &~0xffful;char *ptr=map_self(utcb, addr, msg->len, DESC_MEM_ALL);utcb->set_header(1, 0);utcb->msg[0]=utcb->add_mappings(reinterpret_cast< unsigned long >(ptr), msg->len, MAP_MAP, DESC_MEM_ALL);if(utcb->msg[0]==0) Logging::printf("s0: [%2u] iomem %lx+%lx granted from %p\n", modinfo->id, addr, msg->len, ptr);else{Logging::printf("s0: [%2u] iomem mapping failed.\n", modinfo->id);goto fail;}}break;case MessageHostOp::OP_ALLOC_SEMAPHORE:case MessageHostOp::OP_ALLOC_SERVICE_THREAD:case MessageHostOp::OP_ALLOC_SERVICE_PORTAL:case MessageHostOp::OP_GUEST_MEM:case MessageHostOp::OP_ALLOC_FROM_GUEST:case MessageHostOp::OP_VIRT_TO_PHYS:case MessageHostOp::OP_NOTIFY_IRQ:case MessageHostOp::OP_VCPU_CREATE_BACKEND:case MessageHostOp::OP_VCPU_BLOCK:case MessageHostOp::OP_VCPU_RELEASE:case MessageHostOp::OP_REGISTER_SERVICE:case MessageHostOp::OP_GET_MODULE:case MessageHostOp::OP_WAIT_CHILD:case MessageHostOp::OP_CREATE_EC4PT:default:Logging::printf("s0: [%2u] unknown request (%x,%x,%x) dropped \n", modinfo->id, utcb->msg[0], utcb->msg[1], utcb->msg[2]);goto fail;}}break;case REQUEST_ACPI:{MessageAcpi *msg=reinterpret_cast< MessageAcpi * >(utcb->msg+1);if(utcb->head.untyped *sizeof(unsigned)< sizeof(unsigned)+sizeof(*msg)) goto fail;if(msg->type==MessageAcpi::ACPI_GET_IRQ) utcb->msg[0]=!_mb->bus_acpi.send(*msg, true);}break;default:Logging::printf("s0: [%2u] unknown request (%x,%x,%x) dropped \n", modinfo->id, utcb->msg[0], utcb->msg[1], utcb->msg[2]);goto fail;}return;fail:utcb->msg[0]=~0x10u;utcb->set_header(1, 0);) bool receive(MessageHostOp &msg)Sigma0inline
PT_FUNC_NORETURN(do_gsi, 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];MessageIrq msg(shared?MessageIrq::ASSERT_NOTIFY:MessageIrq::ASSERT_IRQ, gsi);while(!(res=nova_semdownmulti(cap_irq))){COUNTER_INC("GSI");if(locked) _lock_gsi.down();_mb->bus_hostirq.send(msg);if(locked) _lock_gsi.up();}Logging::panic("s0: %s(%x, %x) request failed with %x\n", __func__, gsi, cap_irq, res);) PT_FUNC(do_startupSigma0
putc(void *data, int value)Sigma0inlinestatic
putcdSigma0
receive(MessageNetwork &msg)Sigma0inline
receive(MessageDiskCommit &msg)Sigma0inline
receive(MessageConsole &msg)Sigma0inline
receive_static(Device *o, M &msg)StaticReceiver< Sigma0 >inlinestatic
regsSigma0
REQUEST_ACPI enum valueSigma0Base
request_attach(Utcb *utcb, void *consumer, unsigned sem_nq)Sigma0Baseinlineprotectedstatic
request_console(ModuleInfo *modinfo, Utcb *utcb)Sigma0inline
REQUEST_CONSOLE enum valueSigma0Base
REQUEST_DISK enum valueSigma0Base
request_disks(ModuleInfo *modinfo, Utcb *utcb)Sigma0inline
REQUEST_DISKS_ATTACH enum valueSigma0Base
request_disks_attach(Utcb *utcb, DiskConsumer *consumer, unsigned sem_nq)Sigma0Baseinlinestatic
REQUEST_HOSTOP enum valueSigma0Base
Sigma0Base::request_mapping(char *start, unsigned long size, unsigned long hotspot)BasePrograminlinestatic
NovaProgram::request_mapping(char *start, unsigned long size, unsigned long hotspot)BasePrograminlinestatic
REQUEST_NETWORK enum valueSigma0Base
request_network(ModuleInfo *modinfo, Utcb *utcb)Sigma0inline
REQUEST_NETWORK_ATTACH enum valueSigma0Base
request_network_attach(Utcb *utcb, NetworkConsumer *consumer, unsigned sem_nq)Sigma0Baseinlinestatic
request_pcicfg(unsigned client, Utcb *utcb)Sigma0inline
REQUEST_PCICFG enum valueSigma0Base
request_portal()Sigma0Baseinlineprotectedstatic
request_stdin(Utcb *utcb, StdinConsumer *consumer, unsigned sem_nq)Sigma0Baseinlinestatic
REQUEST_STDIN_ATTACH enum valueSigma0Base
reserveSigma0
reset()Sigma0
returnSigma0
Sigma0Base::revoke_all_mem(void *address, unsigned long size, unsigned rights, bool myself)BasePrograminlinestatic
NovaProgram::revoke_all_mem(void *address, unsigned long size, unsigned rights, bool myself)BasePrograminlinestatic
run(Utcb *utcb, Hip *hip) NORETURNSigma0inline
s0_ParentProtocol classSigma0friend
screenSigma0
semSigma0
serial_send(long value)Sigma0inlinestatic
service_admissionSigma0
service_parentSigma0
set_header(2, 0)Sigma0
set_header(0, utcb->head.untyped/2)Sigma0
Sigma0()Sigma0inline
sigma0_memalloc(unsigned long size, unsigned long align)Sigma0inlinestatic
sigma0_memfree(void *ptr)Sigma0inlinestatic
sigma0_message(MESSAGE &msg)Sigma0Baseinlineprotectedstatic
Sigma0Base::stack_sizeBaseProgramstatic
NovaProgram::stack_sizeBaseProgramstatic
Sigma0Base::stack_size_shiftBaseProgramstatic
NovaProgram::stack_size_shiftBaseProgramstatic
start(phy_cpu_no cpu, Utcb *utcb) asm("start") REGPARM(3) NORETURNSigma0static
start_config(Utcb *utcb, unsigned short which, unsigned &internal_id)Sigma0inline
start_config(Utcb *utcb, char const *mconfig, unsigned &internal_id, unsigned &sc_usage_cap, unsigned long &usage_mem, bool bswitch, bool part_of_s0=false)Sigma0inline
StaticReceiver()StaticReceiver< Sigma0 >inline
switch_view(Motherboard *mb, int view, unsigned short consoleid)Sigma0inline
translate_client_fault(ModuleInfo *modinfo, mword fault, mword err, mword &translated, mword &begin, mword &size, unsigned &rights)Sigma0inline
up()Sigma0
up()Sigma0
Utcb::TypedMapCap(CLIENT_PT_OFFSET+ParentProtocol::CAP_PARENT_ID, DESC_CAP_ALL, ParentProtocol::CAP_PARENT_ID).fill_words(utcb->msg)Sigma0
utcb_outNovaProgramprotected