1 1.4 christos /* $NetBSD: promboot.c,v 1.4 2005/12/11 12:19:29 christos Exp $ */ 2 1.1 fredette 3 1.1 fredette 4 1.1 fredette #include <sys/param.h> 5 1.1 fredette #include <sys/reboot.h> 6 1.1 fredette 7 1.1 fredette #include <machine/mon.h> 8 1.1 fredette 9 1.1 fredette #include "stand.h" 10 1.1 fredette #include "libsa.h" 11 1.1 fredette 12 1.2 lukem #ifdef DEBUG 13 1.1 fredette int debug = 0; 14 1.2 lukem #endif /* DEBUG */ 15 1.1 fredette int prom_boothow; 16 1.1 fredette char * prom_bootfile; 17 1.1 fredette char prom_bootdev[32]; 18 1.1 fredette 19 1.1 fredette /* 20 1.1 fredette * Get useful info from the PROM bootparams struct, i.e.: 21 1.1 fredette * arg[0] = sd(0,0,0)netbsd 22 1.1 fredette * arg[1] = -sa 23 1.1 fredette */ 24 1.1 fredette 25 1.3 chs void 26 1.3 chs prom_get_boot_info(void) 27 1.1 fredette { 28 1.1 fredette struct bootparam *bp; 29 1.1 fredette char c, *src, *dst; 30 1.1 fredette 31 1.1 fredette #ifdef DEBUG 32 1.1 fredette printf("prom_get_boot_info\n"); 33 1.1 fredette #endif 34 1.1 fredette 35 1.1 fredette bp = *romVectorPtr->bootParam; 36 1.1 fredette 37 1.1 fredette /* Get device and file names. */ 38 1.1 fredette src = bp->argPtr[0]; 39 1.1 fredette dst = prom_bootdev; 40 1.1 fredette *dst++ = *src++; 41 1.1 fredette *dst++ = *src++; 42 1.1 fredette if (*src == '(') { 43 1.1 fredette while (*src) { 44 1.1 fredette c = *src++; 45 1.1 fredette *dst++ = c; 46 1.1 fredette if (c == ')') 47 1.1 fredette break; 48 1.1 fredette } 49 1.1 fredette *dst = '\0'; 50 1.1 fredette } 51 1.1 fredette prom_bootfile = src; 52 1.1 fredette 53 1.1 fredette /* Get boothowto flags. */ 54 1.1 fredette src = bp->argPtr[1]; 55 1.1 fredette if (src && (*src == '-')) { 56 1.1 fredette while (*src) { 57 1.1 fredette switch (*src++) { 58 1.1 fredette case 'a': 59 1.1 fredette prom_boothow |= RB_ASKNAME; 60 1.1 fredette break; 61 1.1 fredette case 's': 62 1.1 fredette prom_boothow |= RB_SINGLE; 63 1.1 fredette break; 64 1.1 fredette case 'd': 65 1.1 fredette prom_boothow |= RB_KDB; 66 1.2 lukem #ifdef DEBUG 67 1.1 fredette debug++; 68 1.2 lukem #endif /* DEBUG */ 69 1.1 fredette break; 70 1.1 fredette } 71 1.1 fredette } 72 1.1 fredette } 73 1.1 fredette 74 1.2 lukem #ifdef DEBUG 75 1.1 fredette if (debug) { 76 1.1 fredette printf("Debug level %d - enter c to continue...", debug); 77 1.1 fredette /* This will print "\nAbort at ...\n" */ 78 1.1 fredette breakpoint(); 79 1.1 fredette } 80 1.2 lukem #endif /* DEBUG */ 81 1.1 fredette } 82