Print this page
fakebop: make a note of multiple ATAG_MEM
fakebop: dump ATAG_ILLUMOS_{STATUS,MAPPING}
fakebop: make the atag dumping code a bit more readable

*** 202,219 **** --- 202,229 ---- bop_alloc_pnext = pstart + len; bop_alloc_plast = pmax; } + #define DUMP_ATAG_VAL(name, val) \ + do { \ + DBG_MSG("\t" name ":"); \ + bcons_puts("\t"); \ + DBG_MSG(fakebop_hack_ultostr((val), \ + &buffer[BUFFERSIZE-1])); \ + } while (0) + static void fakebop_dump_tags(void *tagstart) { atag_header_t *h = tagstart; atag_core_t *acp; atag_mem_t *amp; atag_cmdline_t *alp; atag_initrd_t *aip; + atag_illumos_status_t *aisp; + atag_illumos_mapping_t *aimp; const char *tname; int i; char *c; DBG_MSG("starting point:");
*** 249,258 **** --- 259,274 ---- tname = "ATAG_VIDEOLFB"; break; case ATAG_CMDLINE: tname = "ATAG_CMDLINE"; break; + case ATAG_ILLUMOS_STATUS: + tname = "ATAG_ILLUMOS_STATUS"; + break; + case ATAG_ILLUMOS_MAPPING: + tname = "ATAG_ILLUMOS_MAPPING"; + break; default: tname = fakebop_hack_ultostr(h->ah_tag, &buffer[BUFFERSIZE-1]); break; }
*** 266,310 **** case ATAG_CORE: if (h->ah_size == 2) { DBG_MSG("ATAG_CORE has no extra information"); } else { acp = (atag_core_t *)h; ! DBG_MSG("\tflags:"); ! bcons_puts("\t"); ! DBG_MSG(fakebop_hack_ultostr(acp->ac_flags, ! &buffer[BUFFERSIZE-1])); ! DBG_MSG("\tpage:"); ! bcons_puts("\t"); ! DBG_MSG(fakebop_hack_ultostr(acp->ac_pagesize, ! &buffer[BUFFERSIZE-1])); ! DBG_MSG("\troot:"); ! bcons_puts("\t"); ! DBG_MSG(fakebop_hack_ultostr(acp->ac_rootdev, ! &buffer[BUFFERSIZE-1])); } break; case ATAG_MEM: amp = (atag_mem_t *)h; ! DBG_MSG("\tsize:"); ! bcons_puts("\t"); ! DBG_MSG(fakebop_hack_ultostr(amp->am_size, ! &buffer[BUFFERSIZE-1])); ! DBG_MSG("\tstart:"); ! bcons_puts("\t"); ! DBG_MSG(fakebop_hack_ultostr(amp->am_start, ! &buffer[BUFFERSIZE-1])); break; case ATAG_INITRD2: aip = (atag_initrd_t *)h; ! DBG_MSG("\tsize:"); ! bcons_puts("\t"); ! DBG_MSG(fakebop_hack_ultostr(aip->ai_size, ! &buffer[BUFFERSIZE-1])); ! DBG_MSG("\tstart:"); ! bcons_puts("\t"); ! DBG_MSG(fakebop_hack_ultostr(aip->ai_start, ! &buffer[BUFFERSIZE-1])); break; case ATAG_CMDLINE: alp = (atag_cmdline_t *)h; DBG_MSG("\tcmdline:"); /* --- 282,305 ---- case ATAG_CORE: if (h->ah_size == 2) { DBG_MSG("ATAG_CORE has no extra information"); } else { acp = (atag_core_t *)h; ! DUMP_ATAG_VAL("flags", acp->ac_flags); ! DUMP_ATAG_VAL("pagesize", acp->ac_pagesize); ! DUMP_ATAG_VAL("rootdev", acp->ac_rootdev); } break; case ATAG_MEM: amp = (atag_mem_t *)h; ! DUMP_ATAG_VAL("size", amp->am_size); ! DUMP_ATAG_VAL("start", amp->am_start); break; case ATAG_INITRD2: aip = (atag_initrd_t *)h; ! DUMP_ATAG_VAL("size", aip->ai_size); ! DUMP_ATAG_VAL("start", aip->ai_start); break; case ATAG_CMDLINE: alp = (atag_cmdline_t *)h; DBG_MSG("\tcmdline:"); /*
*** 320,329 **** --- 315,347 ---- i = 0; } } bcons_puts("\n"); break; + case ATAG_ILLUMOS_STATUS: + aisp = (atag_illumos_status_t *)h; + DUMP_ATAG_VAL("version", aisp->ais_version); + DUMP_ATAG_VAL("ptbase", aisp->ais_ptbase); + DUMP_ATAG_VAL("freemem", aisp->ais_freemem); + DUMP_ATAG_VAL("freeused", aisp->ais_freeused); + DUMP_ATAG_VAL("archive", aisp->ais_archive); + DUMP_ATAG_VAL("archivelen", aisp->ais_archivelen); + DUMP_ATAG_VAL("pt_arena", aisp->ais_pt_arena); + DUMP_ATAG_VAL("pt_arena_max", aisp->ais_pt_arena_max); + DUMP_ATAG_VAL("stext", aisp->ais_stext); + DUMP_ATAG_VAL("etext", aisp->ais_etext); + DUMP_ATAG_VAL("sdata", aisp->ais_sdata); + DUMP_ATAG_VAL("edata", aisp->ais_edata); + break; + case ATAG_ILLUMOS_MAPPING: + aimp = (atag_illumos_mapping_t *)h; + DUMP_ATAG_VAL("paddr", aimp->aim_paddr); + DUMP_ATAG_VAL("plen", aimp->aim_plen); + DUMP_ATAG_VAL("vaddr", aimp->aim_vaddr); + DUMP_ATAG_VAL("vlen", aimp->aim_vlen); + DUMP_ATAG_VAL("mapflags", aimp->aim_mapflags); + break; default: break; } h = atag_next(h); }
*** 340,349 **** --- 358,371 ---- bp->bi_flags = 0; while (ahp != NULL) { switch (ahp->ah_tag) { case ATAG_MEM: + /* + * XXX: we may actually get more than one ATAG_MEM + * if the system has discontiguous physical memory + */ amp = (atag_mem_t *)ahp; bp->bi_memsize = amp->am_size; bp->bi_memstart = amp->am_start; break; case ATAG_CMDLINE: