NOVA User-Level Environment
Version testbox/changed-memory-timing-317-g320d8b5
|
This is the complete list of members for Sigma0, including all inherited members.
__attribute__((noinline)) preinit(Utcb *utcb | Sigma0 | |
NovaProgram::__attribute__((nonnull(6))) unsigned create_ec_helper(C *tls | NovaProgram | protected |
NovaProgram::__attribute__((noreturn)) block_forever() | NovaProgram | inlineprotected |
__hip | Sigma0 | |
_cap_ | CapAllocator | |
_cap_block | NovaProgram | protected |
_cap_order | CapAllocator | |
_cap_start | CapAllocator | |
_console_data | Sigma0 | |
_cpunr | Sigma0 | |
_disk_data | Sigma0 | |
_free_phys | NovaProgram | protected |
_free_virt | NovaProgram | protected |
_gsi | Sigma0 | |
_hip | NovaProgram | protected |
_irq_cap_base | Sigma0 | |
_irq_cap_base | Sigma0 | |
_last_affinity | Sigma0 | |
_lock_gsi | Sigma0 | |
_lock_gsi | Sigma0 | |
_lock_mem | Sigma0 | static |
_lock_mem | Sigma0 | |
_mac | Sigma0 | |
_mb | Sigma0 | |
_modinfo | Sigma0 | |
_msivector | Sigma0 | |
_numcpus | Sigma0 | |
_pcidirect | Sigma0 | |
_percpu | Sigma0 | |
_prod_network | Sigma0 | |
_start_config(Utcb *utcb, char *elf, unsigned long mod_size, char const *client_cmdline, ModuleInfo *modinfo, unsigned &sc_usage_cap, bool bswitch) | Sigma0 | inline |
_vga | Sigma0 | |
_vga | Sigma0 | |
_vga_regs | Sigma0 | |
_virt_phys | NovaProgram | protected |
acpi(MessageAcpi &msg) | Sigma0Base | inlinestatic |
adapt_ptr_map(ModuleInfo *modinfo, unsigned long &physoffset, unsigned long &physsize) | Sigma0 | inlinestatic |
alloc_cap(unsigned count=1) | CapAllocator | inline |
alloc_console(ModuleInfo const *modinfo, const char *cmdline, bool bswitch) | Sigma0 | inline |
alloc_crd() | Sigma0 | inline |
alloc_module(char const *cmdline, unsigned sigma0_cmdlen, bool s0_reserved=false) | Sigma0 | inline |
alloc_utcb() | NovaProgram | inlineprotected |
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) | Sigma0 | inline |
attach_drives(char const *cmdline, unsigned long cmdlen, unsigned client) | Sigma0 | inline |
attach_irq(unsigned gsi, unsigned cap_sm, bool unlocked, phy_cpu_no cpunr, char const *_name=0) | Sigma0 | inline |
attach_msi(MessageHostOp *msg, phy_cpu_no cpunr) | Sigma0 | inline |
boot_s0_services(Utcb *utcb) | Sigma0 | inline |
cap | NovaProgram | protected |
cap_ec_echo | Sigma0 | |
cap_ec_worker | Sigma0 | |
cap_pt_echo | Sigma0 | |
CapAllocator(unsigned long cap_, unsigned long cap_start, unsigned long cap_order) | CapAllocator | inline |
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) | Sigma0Base | inlinestatic |
consolesem | Sigma0 | |
convert_client_ptr(ModuleInfo *modinfo, T *&ptr, unsigned size) | Sigma0 | inlinestatic |
cpunr | NovaProgram | protected |
create_host_devices(Utcb *utcb, Hip *hip) | Sigma0 | inline |
create_worker_threads(Hip *hip, phy_cpu_no cpunr) | Sigma0 | inline |
cursor_pos | Sigma0 | |
dealloc_cap(unsigned cap, unsigned count=1) | CapAllocator | inline |
debug_dump() | Device | inline |
del(Region(CLIENT_PT_OFFSET, 1U<< (CLIENT_PT_ORDER+1))) | Sigma0 | |
Device(const char *debug_name) | Device | inline |
disk(MessageDisk &msg) | Sigma0Base | inlinestatic |
eax | Sigma0 | |
ecx | Sigma0 | |
eip | Sigma0 | |
esp | Sigma0 | |
exc_base | Sigma0 | |
excbase | NovaProgram | protected |
exception_handler_address(unsigned vector) | Sigma0 | inline |
exit(const char *msg) | NovaProgram | inlinestatic |
fancy_output(const char *st, unsigned maxchars) | Sigma0 | inlinestatic |
find_free_tag(unsigned short client, unsigned char disknr, unsigned long usertag, unsigned long &tag) | Sigma0 | inline |
for(unsigned gsi=0;gsi< hip->cfg_gsi;gsi++) | Sigma0 | inline |
free_module(ModuleInfo *modinfo) | Sigma0 | inline |
func | NovaProgram | protected |
generate_hostmac() | Sigma0 | inline |
get_config_space(uint16 rid) | Sigma0 | inline |
get_mac(unsigned clientnr) | Sigma0 | inline |
get_module(unsigned id) | Sigma0 | inline |
handle_attach(ModuleInfo *modinfo, PRODUCER &res, Utcb *utcb) | Sigma0 | inline |
hostop(MessageHostOp &msg) | Sigma0Base | inlinestatic |
idle_sc_sanity_check(unsigned pt) | Sigma0 | inline |
if(consolesem) consolesem->up() | Sigma0 | |
if(consolesem) consolesem->down() | Sigma0 | |
init_console() | Sigma0 | inline |
init_disks() | Sigma0 | inline |
init_mem(Hip *hip) | NovaProgram | inlineprotected |
init_memmap(Utcb *utcb) | Sigma0 | inline |
init_network() | Sigma0 | inline |
initialized_console | Sigma0 | |
initialized_s0_tasks | Sigma0 | |
internal_error(unsigned pid, Utcb *utcb) | Sigma0 | inline |
kill_module(ModuleInfo *modinfo) | Sigma0 | inline |
local | NovaProgram | protected |
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) | Sigma0 | inline |
map_idle_scs(Utcb *utcb, unsigned pt) | Sigma0 | inline |
map_self(Utcb *utcb, unsigned long physmem, unsigned long size, unsigned rights, bool frame=false) | Sigma0 | inline |
map_string(Utcb *utcb, unsigned long src) | Sigma0 | inline |
MAXDISKREQUESTS enum value | Sigma0 | |
MAXDISKS enum value | Sigma0 | |
memcpy(_vga+0x1a000, _vga+0x18000, 0x1000) | Sigma0 | |
memmove(utcb->item_start(), utcb->msg, sizeof(unsigned)*utcb->head.typed *2) | Sigma0 | |
modinfo | Sigma0 | |
mtd | Sigma0 | |
Sigma0Base::mycpu() | BaseProgram | inlinestatic |
NovaProgram::mycpu() | BaseProgram | inlinestatic |
Sigma0Base::myutcb(unsigned long esp=0) | BaseProgram | inlinestatic |
NovaProgram::myutcb(unsigned long esp=0) | BaseProgram | inlinestatic |
network(MessageNetwork &msg) | Sigma0Base | inlinestatic |
NovaProgram() | NovaProgram | inline |
offset | Sigma0 | |
pcicfg(MessagePciConfig &msg) | Sigma0Base | inlinestatic |
postinit(Hip *hip) | Sigma0 | inline |
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_singlestep | Sigma0 | |
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_map | Sigma0 | |
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) | Sigma0 | inline |
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_startup | Sigma0 | |
putc(void *data, int value) | Sigma0 | inlinestatic |
putcd | Sigma0 | |
receive(MessageNetwork &msg) | Sigma0 | inline |
receive(MessageDiskCommit &msg) | Sigma0 | inline |
receive(MessageConsole &msg) | Sigma0 | inline |
receive_static(Device *o, M &msg) | StaticReceiver< Sigma0 > | inlinestatic |
regs | Sigma0 | |
REQUEST_ACPI enum value | Sigma0Base | |
request_attach(Utcb *utcb, void *consumer, unsigned sem_nq) | Sigma0Base | inlineprotectedstatic |
request_console(ModuleInfo *modinfo, Utcb *utcb) | Sigma0 | inline |
REQUEST_CONSOLE enum value | Sigma0Base | |
REQUEST_DISK enum value | Sigma0Base | |
request_disks(ModuleInfo *modinfo, Utcb *utcb) | Sigma0 | inline |
REQUEST_DISKS_ATTACH enum value | Sigma0Base | |
request_disks_attach(Utcb *utcb, DiskConsumer *consumer, unsigned sem_nq) | Sigma0Base | inlinestatic |
REQUEST_HOSTOP enum value | Sigma0Base | |
Sigma0Base::request_mapping(char *start, unsigned long size, unsigned long hotspot) | BaseProgram | inlinestatic |
NovaProgram::request_mapping(char *start, unsigned long size, unsigned long hotspot) | BaseProgram | inlinestatic |
REQUEST_NETWORK enum value | Sigma0Base | |
request_network(ModuleInfo *modinfo, Utcb *utcb) | Sigma0 | inline |
REQUEST_NETWORK_ATTACH enum value | Sigma0Base | |
request_network_attach(Utcb *utcb, NetworkConsumer *consumer, unsigned sem_nq) | Sigma0Base | inlinestatic |
request_pcicfg(unsigned client, Utcb *utcb) | Sigma0 | inline |
REQUEST_PCICFG enum value | Sigma0Base | |
request_portal() | Sigma0Base | inlineprotectedstatic |
request_stdin(Utcb *utcb, StdinConsumer *consumer, unsigned sem_nq) | Sigma0Base | inlinestatic |
REQUEST_STDIN_ATTACH enum value | Sigma0Base | |
reserve | Sigma0 | |
reset() | Sigma0 | |
return | Sigma0 | |
Sigma0Base::revoke_all_mem(void *address, unsigned long size, unsigned rights, bool myself) | BaseProgram | inlinestatic |
NovaProgram::revoke_all_mem(void *address, unsigned long size, unsigned rights, bool myself) | BaseProgram | inlinestatic |
run(Utcb *utcb, Hip *hip) NORETURN | Sigma0 | inline |
s0_ParentProtocol class | Sigma0 | friend |
screen | Sigma0 | |
sem | Sigma0 | |
serial_send(long value) | Sigma0 | inlinestatic |
service_admission | Sigma0 | |
service_parent | Sigma0 | |
set_header(2, 0) | Sigma0 | |
set_header(0, utcb->head.untyped/2) | Sigma0 | |
Sigma0() | Sigma0 | inline |
sigma0_memalloc(unsigned long size, unsigned long align) | Sigma0 | inlinestatic |
sigma0_memfree(void *ptr) | Sigma0 | inlinestatic |
sigma0_message(MESSAGE &msg) | Sigma0Base | inlineprotectedstatic |
Sigma0Base::stack_size | BaseProgram | static |
NovaProgram::stack_size | BaseProgram | static |
Sigma0Base::stack_size_shift | BaseProgram | static |
NovaProgram::stack_size_shift | BaseProgram | static |
start(phy_cpu_no cpu, Utcb *utcb) asm("start") REGPARM(3) NORETURN | Sigma0 | static |
start_config(Utcb *utcb, unsigned short which, unsigned &internal_id) | Sigma0 | inline |
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) | Sigma0 | inline |
StaticReceiver() | StaticReceiver< Sigma0 > | inline |
switch_view(Motherboard *mb, int view, unsigned short consoleid) | Sigma0 | inline |
translate_client_fault(ModuleInfo *modinfo, mword fault, mword err, mword &translated, mword &begin, mword &size, unsigned &rights) | Sigma0 | inline |
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_out | NovaProgram | protected |