static void create_atags(unsigned taddr, const char *cmdline, unsigned raddr, unsigned rsize) { unsigned n = 0; unsigned pcount; unsigned *tags = (unsigned *) taddr; // ATAG_CORE tags[n++] = 2; tags[n++] = 0x54410001; if(rsize) { // ATAG_INITRD2 tags[n++] = 4; tags[n++] = 0x54420005; tags[n++] = raddr; tags[n++] = rsize; } if((pcount = flash_get_ptn_count())){ ptentry *ptn; unsigned pn; unsigned m = n + 2; for(pn = 0; pn < pcount; pn++) { ptn = flash_get_ptn(pn); memcpy(tags + m, ptn, sizeof(ptentry)); m += (sizeof(ptentry) / sizeof(unsigned)); } tags[n + 0] = m - n; tags[n + 1] = 0x4d534d70; n = m; } if(cmdline && cmdline[0]) { const char *src; char *dst; unsigned len = 0; dst = (char*) (tags + n + 2); src = cmdline; while((*dst++ = *src++)) len++; len++; len = (len + 3) & (~3); // ATAG_CMDLINE tags[n++] = 2 + (len / 4); tags[n++] = 0x54410009; n += (len / 4); } // ATAG_NONE tags[n++] = 0; tags[n++] = 0; }
void board_init() { unsigned n; /* if we already have partitions from elsewhere, ** don't use the hardcoded ones */ if(flash_get_ptn_count() == 0) { for(n = 0; n < 2; n++) { flash_add_ptn(PTABLE + n); } } #ifdef DEBUG /* UART configuration */ /* UART1 */ uart_init(0); #endif }