void enable() { endpoint_t ep; char name[256]; int priv_f; /* Fetch our endpoint */ sys_whoami(&ep, name, 256, &priv_f); /* Enable IO-sensitive operations for ourselves */ sys_enable_iop(ep); asm( "STI" ); }
/*===========================================================================* * panic * *===========================================================================*/ void panic(const char *fmt, ...) { /* Something awful has happened. Panics are caused when an internal * inconsistency is detected, e.g., a programming error or illegal * value of a defined constant. */ endpoint_t me = NONE; char name[20]; int priv_flags; int init_flags; void (*suicide)(void); va_list args; if(sys_whoami(&me, name, sizeof(name), &priv_flags, &init_flags) == OK && me != NONE) printf("%s(%d): panic: ", name, me); else printf("(sys_whoami failed): panic: "); if(fmt) { va_start(args, fmt); vprintf(fmt, args); va_end(args); } else { printf("no message\n"); } printf("\n"); printf("syslib:panic.c: stacktrace: "); util_stacktrace(); panic_hook(); /* Try exit */ _exit(1); /* Try to signal ourself */ abort(); /* If exiting nicely through PM fails for some reason, try to * commit suicide. E.g., message to PM might fail due to deadlock. */ suicide = (void (*)(void)) -1; suicide(); /* If committing suicide fails for some reason, hang. */ for(;;) { } }
static int sef_cb_init_fresh(__unused int type, __unused sef_init_info_t *info) { int err; unsigned int hz; char my_name[16]; int my_priv; err = sys_whoami(&lwip_ep, my_name, sizeof(my_name), &my_priv); if (err != OK) panic("Cannot get own endpoint"); nic_init_all(); inet_read_conf(); /* init lwip library */ stats_init(); sys_init(); mem_init(); memp_init(); pbuf_init(); hz = sys_hz(); arp_ticks = ARP_TMR_INTERVAL / (1000 / hz); tcp_fticks = TCP_FAST_INTERVAL / (1000 / hz); tcp_sticks = TCP_SLOW_INTERVAL / (1000 / hz); etharp_init(); set_timer(&arp_tmr, arp_ticks, arp_watchdog, 0); set_timer(&tcp_ftmr, tcp_fticks, tcp_fwatchdog, 0); set_timer(&tcp_stmr, tcp_sticks, tcp_swatchdog, 0); netif_init(); netif_lo = netif_find("lo0"); /* Read configuration. */ #if 0 nw_conf(); /* Get a random number */ timerand= 1; fd = open(RANDOM_DEV_NAME, O_RDONLY | O_NONBLOCK); if (fd != -1) { err= read(fd, randbits, sizeof(randbits)); if (err == sizeof(randbits)) timerand= 0; else { printf("inet: unable to read random data from %s: %s\n", RANDOM_DEV_NAME, err == -1 ? strerror(errno) : err == 0 ? "EOF" : "not enough data"); } close(fd); } else { printf("inet: unable to open random device %s: %s\n", RANDOM_DEV_NAME, strerror(errno)); } if (timerand) { printf("inet: using current time for random-number seed\n"); err= gettimeofday(&tv, NULL); if (err == -1) { printf("sysutime failed: %s\n", strerror(errno)); exit(1); } memcpy(randbits, &tv, sizeof(tv)); } init_rand256(randbits); #endif /* Subscribe to driver events for network drivers. */ if ((err = ds_subscribe("drv\\.net\\..*", DSF_INITIAL | DSF_OVERWRITE)) != OK) panic(("inet: can't subscribe to driver events")); /* Announce we are up. LWIP announces its presence to VFS just like * any other character driver. */ chardriver_announce(); return(OK); }