Date: Thu, 14 Sep 2006 23:32:02 GMT From: Warner Losh <imp@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 106125 for review Message-ID: <200609142332.k8ENW2El093238@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=106125 Change 106125 by imp@imp_lighthouse on 2006/09/14 23:31:13 o Remove some unneeded printfs, shorten strings. o kill unneeded read the symbols code. o fix a couple of bugs with reading in chars. o read mac directly into mac rather than reading all of euid64 and copying. This fixes a few bugs, and saves another 164 bytes. boot2 now has > 1k (1056) free. Almost, but not quite, enough to allow both MMC and SD support with FPGA loading... Affected files ... .. //depot/projects/arm/src/sys/boot/arm/at91/boot2/boot2.c#18 edit Differences ... ==== //depot/projects/arm/src/sys/boot/arm/at91/boot2/boot2.c#18 (text+ko) ==== @@ -68,7 +68,7 @@ //#define PATH_KERNEL "/boot/kernel/kernel" #define PATH_KERNEL "/kernel.gz.tramp" -#define NOPT 6 +#define NOPT 5 #define OPT_SET(opt) (1 << (opt)) #define OPT_CHECK(opt) ((opts) & OPT_SET(opt)) @@ -105,20 +105,19 @@ { ssize_t rv; - if ((size_t)(rv = fsread(inode, buf, nbyte)) != nbyte) { - printf("Invalid %s\n", "sector"); + if ((size_t)(rv = fsread(inode, buf, nbyte)) != nbyte) return -1; - } return 0; } static inline void -getstr(void) +getstr(int c) { char *s; - int c; s = cmd; + if (c) + *s++ = c; for (;;) { switch (c = getc(10000)) { case 0: @@ -190,8 +189,6 @@ #if 0 uint8_t euid64[8] = { 0x00, 0x30, 0x96, 0x20, 0x00, 0x00, 0x00, 0x05 }; -#else - uint8_t euid64[8]; #endif #if 0 @@ -202,25 +199,18 @@ #endif sig = 0; EERead(0, (uint8_t *)&sig, sizeof(sig)); - if (sig != 0xaa55aa55) { - printf("Bad signature %x\n", sig); + if (sig != 0xaa55aa55) return; - } - EERead(48, euid64, sizeof(euid64)); - mac[0] = euid64[0]; - mac[1] = euid64[1]; - mac[2] = euid64[2]; - mac[3] = euid64[5]; - mac[4] = euid64[6]; - mac[5] = euid64[7]; - printf("MAC Address %x:%x:%x:%x:%x:%x\n", mac[0], + EERead(48, mac, 3); + EERead(48+5, mac+3, 3); + printf("MAC %x:%x:%x:%x:%x:%x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } int main(void) { - int autoboot; + int autoboot, c = 0; ino_t ino; #ifdef TSC_FPGA @@ -253,14 +243,13 @@ p_strcpy(kname, PATH_KERNEL); for (;;) { - printf("\nFreeBSD/arm boot\n" - "Default: %s\n" - "boot: ", kname); - if (!autoboot || getc(5) == -1) - getstr(); + printf("\nDefault: %s\nboot: ", kname); + if (!autoboot || (c = getc(2)) != -1) + getstr(c); else if (!autoboot) xputchar('\n'); autoboot = 0; + c = 0; if (parse()) xputchar('\a'); else @@ -273,9 +262,6 @@ { Elf32_Ehdr eh; static Elf32_Phdr ep[2]; -#if 0 - static Elf32_Shdr es[2]; -#endif caddr_t p; ino_t ino; uint32_t addr; @@ -305,30 +291,6 @@ if (xfsread(ino, p, ep[i].p_filesz)) return; } -#if 0 - printf("3\n"); - p += roundup2(ep[1].p_memsz, PAGE_SIZE); - if (eh.e_shnum == eh.e_shstrndx + 3) { - printf("4\n"); - fs_off = eh.e_shoff + sizeof(es[0]) * - (eh.e_shstrndx + 1); - printf("5\n"); - if (xfsread(ino, &es, sizeof(es))) { - printf("5a\n"); - return; - } - printf("6\n"); - for (i = 0; i < 2; i++) { - printf("6.%d\n", i); - memcpy(p, &es[i].sh_size, sizeof(es[i].sh_size)); - p += sizeof(es[i].sh_size); - fs_off = es[i].sh_offset; - if (xfsread(ino, p, es[i].sh_size)) - return; - p += es[i].sh_size; - } - } -#endif addr = eh.e_entry; ((void(*)(int))addr)(RB_BOOTINFO | (opts & RBX_MASK)); } @@ -384,10 +346,8 @@ if (dp[i].dp_typ == DOSPTYP_386BSD) break; } - if (i == NDOSPART) { - printf("No BSD partition found\n"); + if (i == NDOSPART) return -1; - } // Although dp_start is aligned within the disk partition structure, // DOSPARTOFF is 446, which is only word (2) aligned, not longword (4) // aligned. Cope by using memcpy to fetch the start of this partition.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200609142332.k8ENW2El093238>