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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/armv6/os/fakebop.c
          +++ new/usr/src/uts/armv6/os/fakebop.c
↓ open down ↓ 196 lines elided ↑ open up ↑
 197  197  
 198  198          armboot_mmu_map(pstart, vstart, len, PF_R | PF_W | PF_X);
 199  199          bop_alloc_scratch_next = vstart;
 200  200          bop_alloc_scratch_last = vstart + len;
 201  201          bop_alloc_scratch_size = len;
 202  202  
 203  203          bop_alloc_pnext = pstart + len;
 204  204          bop_alloc_plast = pmax;
 205  205  }
 206  206  
      207 +#define DUMP_ATAG_VAL(name, val)                                        \
      208 +        do {                                                            \
      209 +                DBG_MSG("\t" name ":");                                 \
      210 +                bcons_puts("\t");                                       \
      211 +                DBG_MSG(fakebop_hack_ultostr((val),                     \
      212 +                    &buffer[BUFFERSIZE-1]));                            \
      213 +        } while (0)
      214 +
 207  215  static void
 208  216  fakebop_dump_tags(void *tagstart)
 209  217  {
 210  218          atag_header_t *h = tagstart;
 211  219          atag_core_t *acp;
 212  220          atag_mem_t *amp;
 213  221          atag_cmdline_t *alp;
 214  222          atag_initrd_t *aip;
      223 +        atag_illumos_status_t *aisp;
      224 +        atag_illumos_mapping_t *aimp;
 215  225          const char *tname;
 216  226          int i;
 217  227          char *c;
 218  228  
 219  229          DBG_MSG("starting point:");
 220  230          DBG_MSG(fakebop_hack_ultostr((uintptr_t)h, &buffer[BUFFERSIZE-1]));
 221  231          DBG_MSG("first atag size:");
 222  232          DBG_MSG(fakebop_hack_ultostr(h->ah_size, &buffer[BUFFERSIZE-1]));
 223  233          DBG_MSG("first atag tag:");
 224  234          DBG_MSG(fakebop_hack_ultostr(h->ah_tag, &buffer[BUFFERSIZE-1]));
↓ open down ↓ 19 lines elided ↑ open up ↑
 244  254                          break;
 245  255                  case ATAG_REVISION:
 246  256                          tname = "ATAG_REVISION";
 247  257                          break;
 248  258                  case ATAG_VIDEOLFB:
 249  259                          tname = "ATAG_VIDEOLFB";
 250  260                          break;
 251  261                  case ATAG_CMDLINE:
 252  262                          tname = "ATAG_CMDLINE";
 253  263                          break;
      264 +                case ATAG_ILLUMOS_STATUS:
      265 +                        tname = "ATAG_ILLUMOS_STATUS";
      266 +                        break;
      267 +                case ATAG_ILLUMOS_MAPPING:
      268 +                        tname = "ATAG_ILLUMOS_MAPPING";
      269 +                        break;
 254  270                  default:
 255  271                          tname = fakebop_hack_ultostr(h->ah_tag,
 256  272                              &buffer[BUFFERSIZE-1]);
 257  273                          break;
 258  274                  }
 259  275                  DBG_MSG("tag:");
 260  276                  DBG_MSG(tname);
 261  277                  DBG_MSG("size:");
 262  278                  DBG_MSG(fakebop_hack_ultostr(h->ah_size,
 263  279                      &buffer[BUFFERSIZE-1]));
 264  280                  /* Extended information */
 265  281                  switch (h->ah_tag) {
 266  282                  case ATAG_CORE:
 267  283                          if (h->ah_size == 2) {
 268  284                                  DBG_MSG("ATAG_CORE has no extra information");
 269  285                          } else {
 270  286                                  acp = (atag_core_t *)h;
 271      -                                DBG_MSG("\tflags:");
 272      -                                bcons_puts("\t");
 273      -                                DBG_MSG(fakebop_hack_ultostr(acp->ac_flags,
 274      -                                    &buffer[BUFFERSIZE-1]));
 275      -                                DBG_MSG("\tpage:");
 276      -                                bcons_puts("\t");
 277      -                                DBG_MSG(fakebop_hack_ultostr(acp->ac_pagesize,
 278      -                                    &buffer[BUFFERSIZE-1]));
 279      -                                DBG_MSG("\troot:");
 280      -                                bcons_puts("\t");
 281      -                                DBG_MSG(fakebop_hack_ultostr(acp->ac_rootdev,
 282      -                                    &buffer[BUFFERSIZE-1]));
      287 +                                DUMP_ATAG_VAL("flags", acp->ac_flags);
      288 +                                DUMP_ATAG_VAL("pagesize", acp->ac_pagesize);
      289 +                                DUMP_ATAG_VAL("rootdev", acp->ac_rootdev);
 283  290                          }
 284  291                          break;
 285  292                  case ATAG_MEM:
 286  293                          amp = (atag_mem_t *)h;
 287      -                        DBG_MSG("\tsize:");
 288      -                        bcons_puts("\t");
 289      -                        DBG_MSG(fakebop_hack_ultostr(amp->am_size,
 290      -                            &buffer[BUFFERSIZE-1]));
 291      -                        DBG_MSG("\tstart:");
 292      -                        bcons_puts("\t");
 293      -                        DBG_MSG(fakebop_hack_ultostr(amp->am_start,
 294      -                            &buffer[BUFFERSIZE-1]));
      294 +                        DUMP_ATAG_VAL("size", amp->am_size);
      295 +                        DUMP_ATAG_VAL("start", amp->am_start);
 295  296                          break;
 296  297                  case ATAG_INITRD2:
 297  298                          aip = (atag_initrd_t *)h;
 298      -                        DBG_MSG("\tsize:");
 299      -                        bcons_puts("\t");
 300      -                        DBG_MSG(fakebop_hack_ultostr(aip->ai_size,
 301      -                            &buffer[BUFFERSIZE-1]));
 302      -                        DBG_MSG("\tstart:");
 303      -                        bcons_puts("\t");
 304      -                        DBG_MSG(fakebop_hack_ultostr(aip->ai_start,
 305      -                            &buffer[BUFFERSIZE-1]));
      299 +                        DUMP_ATAG_VAL("size", aip->ai_size);
      300 +                        DUMP_ATAG_VAL("start", aip->ai_start);
 306  301                          break;
 307  302                  case ATAG_CMDLINE:
 308  303                          alp = (atag_cmdline_t *)h;
 309  304                          DBG_MSG("\tcmdline:");
 310  305                          /*
 311  306                           * We have no intelligent thing to wrap our tty at 80
 312  307                           * chars so we just do this a bit more manually for now.
 313  308                           */
 314  309                          i = 0;
 315  310                          c = alp->al_cmdline;
 316  311                          while (*c != '\0') {
 317  312                                  bcons_putchar(*c++);
 318  313                                  if (++i == 72) {
 319  314                                          bcons_puts("\n");
 320  315                                          i = 0;
 321  316                                  }
 322  317                          }
 323  318                          bcons_puts("\n");
 324  319                          break;
      320 +                case ATAG_ILLUMOS_STATUS:
      321 +                        aisp = (atag_illumos_status_t *)h;
      322 +                        DUMP_ATAG_VAL("version", aisp->ais_version);
      323 +                        DUMP_ATAG_VAL("ptbase", aisp->ais_ptbase);
      324 +                        DUMP_ATAG_VAL("freemem", aisp->ais_freemem);
      325 +                        DUMP_ATAG_VAL("freeused", aisp->ais_freeused);
      326 +                        DUMP_ATAG_VAL("archive", aisp->ais_archive);
      327 +                        DUMP_ATAG_VAL("archivelen", aisp->ais_archivelen);
      328 +                        DUMP_ATAG_VAL("pt_arena", aisp->ais_pt_arena);
      329 +                        DUMP_ATAG_VAL("pt_arena_max", aisp->ais_pt_arena_max);
      330 +                        DUMP_ATAG_VAL("stext", aisp->ais_stext);
      331 +                        DUMP_ATAG_VAL("etext", aisp->ais_etext);
      332 +                        DUMP_ATAG_VAL("sdata", aisp->ais_sdata);
      333 +                        DUMP_ATAG_VAL("edata", aisp->ais_edata);
      334 +                        break;
      335 +                case ATAG_ILLUMOS_MAPPING:
      336 +                        aimp = (atag_illumos_mapping_t *)h;
      337 +                        DUMP_ATAG_VAL("paddr", aimp->aim_paddr);
      338 +                        DUMP_ATAG_VAL("plen", aimp->aim_plen);
      339 +                        DUMP_ATAG_VAL("vaddr", aimp->aim_vaddr);
      340 +                        DUMP_ATAG_VAL("vlen", aimp->aim_vlen);
      341 +                        DUMP_ATAG_VAL("mapflags", aimp->aim_mapflags);
      342 +                        break;
 325  343                  default:
 326  344                          break;
 327  345                  }
 328  346                  h = atag_next(h);
 329  347          }
 330  348  }
 331  349  
 332  350  static void
 333  351  fakebop_getatags(void *tagstart)
 334  352  {
 335  353          atag_mem_t *amp;
 336  354          atag_cmdline_t *alp;
 337  355          atag_header_t *ahp = tagstart;
 338  356          atag_illumos_status_t *aisp;
 339  357          bootinfo_t *bp = &bootinfo;
 340  358  
 341  359          bp->bi_flags = 0;
 342  360          while (ahp != NULL) {
 343  361                  switch (ahp->ah_tag) {
 344  362                  case ATAG_MEM:
      363 +                        /*
      364 +                         * XXX: we may actually get more than one ATAG_MEM
      365 +                         * if the system has discontiguous physical memory
      366 +                         */
 345  367                          amp = (atag_mem_t *)ahp;
 346  368                          bp->bi_memsize = amp->am_size;
 347  369                          bp->bi_memstart = amp->am_start;
 348  370                          break;
 349  371                  case ATAG_CMDLINE:
 350  372                          alp = (atag_cmdline_t *)ahp;
 351  373                          bp->bi_cmdline = alp->al_cmdline;
 352  374                          break;
 353  375                  case ATAG_ILLUMOS_STATUS:
 354  376                          aisp = (atag_illumos_status_t *)ahp;
↓ open down ↓ 539 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX