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,18 +202,28 @@
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,10 +259,16 @@
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,45 +282,24 @@
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]));
+ 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;
- 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]));
+ DUMP_ATAG_VAL("size", amp->am_size);
+ DUMP_ATAG_VAL("start", amp->am_start);
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]));
+ 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,10 +315,33 @@
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,10 +358,14 @@
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: