static void mem_cb(uint32_t addr, uint32_t len) { #ifdef DEBUG printf("MEMORY: addr: %x, len: %x\n", addr, len); #endif if(addr < 0x100000) { addr = 0x100000; len -= 0x100000; } chunk_register_free(addr, len); }
void atag_cb(struct atag *tag) { switch(tag->hdr.tag) { case ATAG_CORE: #ifdef ATAG_DEBUG puts("ATAG_CORE"); if(tag->hdr.size == 5) { puts("flags"); puthex(tag->u.core.flags); puts(""); puts("pagesize"); puthex(tag->u.core.pagesize); puts(""); puts("rootdev"); puthex(tag->u.core.rootdev); puts(""); } #endif break; case ATAG_MEM: #ifdef ATAG_DEBUG puts("ATAG_MEM"); puts("start"); puthex(tag->u.mem.start); puts(""); puts("size"); puthex(tag->u.mem.size); puts(""); #endif { uint32_t start = tag->u.mem.start; uint32_t size = tag->u.mem.size; if(start < 0x100000) start = 0x100000; size -= 0x100000; chunk_register_free(start, size); } break; case ATAG_NONE: break; case ATAG_CMDLINE: #ifdef ATAG_CMDLINE puts("ATAG_CMDLINE"); puts(&tag->u.cmdline.cmdline[0]); #endif atag_cmd_line = &tag->u.cmdline.cmdline[0]; break; default: puts("Unknown ATAG"); puthex(tag->hdr.tag); break; }; puts(""); }