void cpu_reboot(int howto, char *bootstr) { #ifdef DIAGNOSTIC /* info */ printf("boot: howto=%08x curproc=%p\n", howto, curproc); #endif /* * If we are still cold then hit the air brakes * and crash to earth fast */ if (cold) { doshutdownhooks(); pmf_system_shutdown(boothowto); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cngetc(); printf("rebooting...\n"); cpu_reset(); /*NOTREACHED*/ } /* * If RB_NOSYNC was not specified sync the discs. * Note: Unless cold is set to 1 here, syslogd will die during the * unmount. It looks like syslogd is getting woken up only to find * that it cannot page part of the binary in as the filesystem has * been unmounted. */ if (!(howto & RB_NOSYNC)) bootsync(); /* Say NO to interrupts */ splhigh(); /* Do a dump if requested. */ if ((howto & (RB_DUMP | RB_HALT)) == RB_DUMP) dumpsys(); /* Run any shutdown hooks */ doshutdownhooks(); pmf_system_shutdown(boothowto); /* Make sure IRQ's are disabled */ IRQdisable; if (howto & RB_HALT) { printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cngetc(); } printf("rebooting...\n"); cpu_reset(); /*NOTREACHED*/ }
/* * void cpu_reboot(int howto, char *bootstr) * * Reboots the system * * Deal with any syncing, unmounting, dumping and shutdown hooks, * then reset the CPU. */ void cpu_reboot(int howto, char *bootstr) { /* * If we are still cold then hit the air brakes * and crash to earth fast */ if (cold) { doshutdownhooks(); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cngetc(); printf("rebooting...\n"); goto reset; } /* Disable console buffering */ /* * If RB_NOSYNC was not specified sync the discs. * Note: Unless cold is set to 1 here, syslogd will die during the * unmount. It looks like syslogd is getting woken up only to find * that it cannot page part of the binary in as the filesystem has * been unmounted. */ if (!(howto & RB_NOSYNC)) bootsync(); /* Say NO to interrupts */ splhigh(); /* Do a dump if requested. */ if ((howto & (RB_DUMP | RB_HALT)) == RB_DUMP) dumpsys(); /* Run any shutdown hooks */ doshutdownhooks(); /* Make sure IRQ's are disabled */ IRQdisable; if (howto & RB_HALT) { brh_7seg('8'); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cngetc(); } printf("rebooting...\n\r"); reset: cpu_reset(); }
/* * Simple pager */ int db_more(int *nl) { ++*nl; if (*nl == 20) { int c; db_printf("--More--"); c = cngetc(); db_printf("\r"); /* * A whole screenfull or just one line? */ switch (c) { case '\n': /* just one line */ *nl = 19; break; case ' ': *nl = 0; /* another screenfull */ break; default: /* exit */ db_printf("\n"); return(-1); } } return(0); }
void cpu_reboot(int howto, char *bootstr) { extern void exit(int); extern void abort(void); splhigh(); if ((howto & RB_POWERDOWN) == RB_POWERDOWN) exit(0); if (howto & RB_HALT) { printf("\n"); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cnpollc(1); cngetc(); cnpollc(0); } printf("rebooting...\n"); /* * XXXJDM If we've panic'd, make sure we dump a core */ abort(); /* NOTREACHED */ }
static void db_more() { register char *p; boolean_t quit_output = FALSE; for (p = "--db_more--"; *p; p++) cnputc(*p); switch(cngetc()) { case ' ': db_output_line = 0; break; case 'q': case CTRL('c'): db_output_line = 0; quit_output = TRUE; break; default: db_output_line--; break; } p = "\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b"; while (*p) cnputc(*p++); if (quit_output) { db_error(0); /* NOTREACHED */ } }
static void db_more(void) { char *p; int quit_output = 0; for (p = "--db_more--"; *p; p++) cnputc(*p); switch(cngetc()) { case ' ': db_output_line = 0; break; case 'q': case CTRL('c'): db_output_line = 0; quit_output = 1; break; default: db_output_line--; break; } p = "\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b"; while (*p) cnputc(*p++); if (quit_output) { db_error(0); /* NOTREACHED */ } }
/* * Check to see if the system paniced, pause and then reboot * according to the specified delay. */ static void shutdown_panic(void *junk, int howto) { int loop; if (howto & RB_DUMP) { if (PANIC_REBOOT_WAIT_TIME != 0) { if (PANIC_REBOOT_WAIT_TIME != -1) { kprintf("Automatic reboot in %d seconds - " "press a key on the console to abort\n", PANIC_REBOOT_WAIT_TIME); for (loop = PANIC_REBOOT_WAIT_TIME * 10; loop > 0; --loop) { DELAY(1000 * 100); /* 1/10th second */ /* Did user type a key? */ if (cncheckc() != -1) break; } if (!loop) return; } } else { /* zero time specified - reboot NOW */ return; } kprintf("--> Press a key on the console to reboot,\n"); kprintf("--> or switch off the system now.\n"); cngetc(); } }
void boot(int howto) { if (cold) { if ((howto & RB_USERREQ) == 0) howto |= RB_HALT; goto haltsys; } boothowto = howto; if ((howto & RB_NOSYNC) == 0) { vfs_shutdown(); /* * If we've been adjusting the clock, the todr * will be out of synch; adjust it now. */ if ((howto & RB_TIMEBAD) == 0) resettodr(); else printf("WARNING: not updating battery clock\n"); } uvm_shutdown(); splhigh(); /* Disable interrupts. */ /* Do a dump if requested. */ if (howto & RB_DUMP) dumpsys(); haltsys: doshutdownhooks(); if ((howto & RB_POWERDOWN) == RB_POWERDOWN) { _reg_write_1(LANDISK_PWRMNG, PWRMNG_POWEROFF); delay(1 * 1000 * 1000); printf("POWEROFF FAILED!\n"); howto |= RB_HALT; } if (howto & RB_HALT) { printf("\n"); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cnpollc(1); cngetc(); cnpollc(0); } printf("rebooting...\n"); machine_reset(); /*NOTREACHED*/ for (;;) { continue; } }
void cpu_reboot(int howto, char *bootstr) { /* Take a snapshot before clobbering any registers. */ savectx(curpcb); if (cold) { howto |= RB_HALT; goto haltsys; } /* If "always halt" was specified as a boot flag, obey. */ if (boothowto & RB_HALT) howto |= RB_HALT; boothowto = howto; if ((howto & RB_NOSYNC) == 0 && (waittime < 0)) { waittime = 0; vfs_shutdown(); /* * If we've been adjusting the clock, the todr * will be out of synch; adjust it now. */ resettodr(); } splhigh(); if (howto & RB_DUMP) dumpsys(); haltsys: doshutdownhooks(); pmf_system_shutdown(boothowto); if (howto & RB_HALT) { printf("\n"); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cnpollc(1); /* For proper keyboard command handling */ cngetc(); cnpollc(0); } printf("rebooting...\n\n"); delay(500000); *(volatile char *)MIPS_PHYS_TO_KSEG1(LED_ADDR) = LED_RESET; printf("WARNING: reboot failed!\n"); for (;;) ; }
__dead void boot(int howto) { if (cold) { if ((howto & RB_USERREQ) == 0) howto |= RB_HALT; goto haltsys; } /* * If RB_NOSYNC was not specified sync the discs. * Note: Unless cold is set to 1 here, syslogd will die during the * unmount. It looks like syslogd is getting woken up only to find * that it cannot page part of the binary in as the filesystem has * been unmounted. */ if ((howto & RB_NOSYNC) == 0) bootsync(howto); if_downall(); uvm_shutdown(); splhigh(); cold = 1; if ((howto & (RB_DUMP | RB_HALT)) == RB_DUMP) dumpsys(); haltsys: config_suspend_all(DVACT_POWERDOWN); /* Make sure IRQ's are disabled */ IRQdisable; if ((howto & RB_HALT) != 0) { if ((howto & RB_POWERDOWN) != 0) { board_powerdown(); printf("WARNING: powerdown failed!\n"); } printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cnpollc(1); cngetc(); cnpollc(0); } printf("rebooting...\n"); board_reset(); cpu_reset(); printf("reboot failed; spinning\n"); for (;;) ; /* NOTREACHED */ }
/* * XXX we know that scankbd is only called from read/write to interrupt * a boot program. Since we restart only on ^C and we do that here, we * always return 0 to avoid a longjmp in the caller. */ scankbd() { register int c; c = cngetc(); if (c == ('c'&037)) { printf("^C"); _stop(""); /* NOTREACHED */ } return(0); }
int kmgetc_silent( __unused dev_t dev) { int c; c= cngetc(); if (c == '\r') { c = '\n'; } return c; }
static int ramd_norm_read(struct read_info *rsp) { long bytes_left; int done, error; struct buf *bp; int dotc = 0; bytes_left = rsp->nbytes; bp = rsp->bp; error = 0; while (bytes_left > 0) { bp->b_cflags = BC_BUSY; bp->b_flags = B_PHYS | B_READ; bp->b_oflags &= ~BO_DONE; bp->b_blkno = btodb(rsp->offset); bp->b_bcount = min(rsp->chunk, bytes_left); bp->b_data = rsp->bufp; bp->b_error = 0; /* Initiate read */ (*rsp->strat)(bp); /* Wait for results */ biowait(bp); error = bp->b_error; /* Dot counter */ printf("."); if (!(++dotc % 40)) printf("\n"); done = bp->b_bcount - bp->b_resid; bytes_left -= done; rsp->offset += done; rsp->bufp += done; if (error || !done) break; if ((rsp->offset == rsp->media_sz) && (bytes_left != 0)) { printf("\nInsert next media and hit any key..."); cngetc(); printf("\n"); rsp->offset = 0; } } printf("\n"); return error; }
/* * Read a maximum of 'nbyte' bytes into 'buf'. */ static int md_compressed(void * buf, int nbyte, struct read_info *rsp) { static int dotc = 0; struct buf *bp; int nread = 0; int done, error; error = 0; bp = rsp->bp; nbyte &= ~(DEV_BSIZE - 1); while (nbyte > 0) { bp->b_cflags = BC_BUSY; bp->b_flags = B_PHYS | B_READ; bp->b_oflags &= ~BO_DONE; bp->b_blkno = btodb(rsp->offset); bp->b_bcount = min(rsp->chunk, nbyte); bp->b_data = buf; bp->b_error = 0; /* Initiate read */ (*rsp->strat)(bp); /* Wait for results */ biowait(bp); error = bp->b_error; /* Dot counter */ printf("."); if (!(++dotc % 40)) printf("\n"); done = bp->b_bcount - bp->b_resid; nbyte -= done; nread += done; rsp->offset += done; if (error || !done) break; if ((rsp->offset == rsp->media_sz) && (nbyte != 0)) { printf("\nInsert next media and hit any key..."); if (cngetc() != '\n') printf("\n"); rsp->offset = 0; } } return nread; }
int kmgetc(__unused dev_t dev) { int c; c= cngetc(); if (c == '\r') { c = '\n'; } cnputcusr(c); return c; }
/* * A simple paging callout function. It supports several simple more(1)-like * commands as well as a quit command that sets db_pager_quit which db * commands can poll to see if they should terminate early. */ void db_pager(void) { int c, done; db_capture_enterpager(); db_printf("--More--\r"); done = 0; while (!done) { c = cngetc(); switch (c) { case 'e': case 'j': case '\n': /* Just one more line. */ db_maxlines = 1; done++; break; case 'd': /* Half a page. */ db_maxlines = db_lines_per_page / 2; done++; break; case 'f': case ' ': /* Another page. */ db_maxlines = db_lines_per_page; done++; break; case 'q': case 'Q': case 'x': case 'X': /* Quit */ db_maxlines = 0; db_pager_quit = 1; done++; break; #if 0 /* FALLTHROUGH */ default: cnputc('\007'); #endif } } db_printf(" "); db_force_whitespace(); db_printf("\r"); db_newlines = 0; db_capture_exitpager(); }
boolean_t db_step_again(void) { if (db_inst_count && !(db_inst_count%db_max_inst_count)) { char c; db_printf("%d instructions, continue ? (y/n) ", db_inst_count); c = cngetc(); db_printf("\n"); if(c == 'n') return(FALSE); } return(TRUE); }
int getchar(void) { register int c = cngetc(); if (c == '\r') c = '\n'; if ((c < ' ' && c != '\n') || c == '\177') return c; putchar(c); return c; }
int getchar() { int c = cngetc(); if (c == '\r') c = '\n'; if ((c < ' ' && c != '\n') || c == '\177') return c; putchar(c); return c; }
int getchar(void) { int c; while ((c = cngetc()) == 0) ; if (c == '\r') c = '\n'; else if (c == ('c'&037)) { panic("^C"); /* NOTREACHED */ } return c; }
int tgetchar() { int c; if ((c = cngetc()) == 0) return(0); if (c == '\r') c = '\n'; else if (c == ('c'&037)) { panic("^C"); /* NOTREACHED */ } return(c); }
getchar() { register int c; while((c = cngetc()) == 0) ; if (c == '\r') c = '\n'; else if (c == ('c'&037)) { printf("^C"); _stop(""); /* NOTREACHED */ } putchar(c); return(c); }
/* * Mountroot hook: prompt the user to enter the root file system * floppy. */ void fd_mountroot_hook(device_t dev) { int c; printf("Insert filesystem floppy and press return."); cnpollc(1); for (;;) { c = cngetc(); if ((c == '\r') || (c == '\n')) { printf("\n"); break; } } cnpollc(0); }
int getchar(void) { int c; c = cngetc(); #if 0 if (c == 0x1b) /* ESC ? */ call_kdp(); #endif 0 if (c == '\r') c = '\n'; cnputc(c); return c; }
char *ngets ( char * str, int size ) { int i = 0; while ( (i < size - 1) && (str[i] = cngetc()) != '\r') { if ( str[i] == '\b' || str[i] == 0x7F ) { if ( i == 0) continue; i--; puts("\b \b"); continue; } putchar(str[i]); i++; } puts("\n"); str[i] = '\0'; return(&str[i]); }
int cngetsn(char *cp, int size) { char *lp; int c, len; cnpollc(1); lp = cp; len = 0; for (;;) { c = cngetc(); switch (c) { case '\n': case '\r': printf("\n"); *lp++ = '\0'; cnpollc(0); return (len); case '\b': case '\177': case '#': if (len) { --len; --lp; printf("\b \b"); } continue; case '@': case 'u'&037: /* CTRL-u */ len = 0; lp = cp; printf("\n"); continue; default: if (len + 1 >= size || c < ' ') { printf("\007"); continue; } printf("%c", c); ++len; *lp++ = c; } } }
int db_readline(char *lstart, int lsize) { db_force_whitespace(); /* synch output position */ db_lbuf_start = lstart; db_lbuf_end = lstart + lsize - 1; db_lc = lstart; db_le = lstart; while (!db_inputchar(cngetc())) continue; db_putchar('\n'); /* synch output position */ *db_le = 0; return (db_le - db_lbuf_start); }
/* * If the shutdown was a clean halt, behave accordingly. */ static void shutdown_halt(void *junk, int howto) { if (howto & RB_HALT) { printf("\n"); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); switch (cngetc()) { case -1: /* No console, just die */ cpu_halt(); /* NOTREACHED */ default: howto &= ~RB_HALT; break; } } }
void cpu_reboot(int howto, char *bootstr) { static int waittime = -1; if (cold) { howto |= RB_HALT; goto haltsys; } boothowto = howto; if ((howto & RB_NOSYNC) == 0 && waittime < 0) { waittime = 0; vfs_shutdown(); /* * If we've been adjusting the clock, the todr * will be out of synch; adjust it now. */ /* resettodr(); */ } /* Disable interrupts. */ splhigh(); /* Do a dump if requested. */ if ((howto & (RB_DUMP | RB_HALT)) == RB_DUMP) dumpsys(); haltsys: doshutdownhooks(); if (howto & RB_HALT) { printf("\n"); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); cngetc(); } printf("rebooting...\n"); cpu_reset(); for(;;) ; /*NOTREACHED*/ }
int userconf_more() { int quit = 0; char c = '\0'; if (userconf_cnt != -1) { if (userconf_cnt == userconf_lines) { printf("--- more ---"); c = cngetc(); userconf_cnt = 0; printf("\r \r"); } userconf_cnt++; if (c == 'q' || c == 'Q') quit = 1; } return (quit); }