diff --git a/arch/arm/cpu/Kconfig b/arch/arm/cpu/Kconfig index cbec79390..be01f3d6c 100644 --- a/arch/arm/cpu/Kconfig +++ b/arch/arm/cpu/Kconfig @@ -35,6 +35,11 @@ config CPU_ARM926T Say Y if you want support for the ARM926T processor. Otherwise, say N. +# ARMv6 +config CPU_V6 + bool + select CPU_32v6 + # ARMv7 config CPU_V7 bool @@ -48,6 +53,9 @@ config CPU_32v4T config CPU_32v5 bool +config CPU_32v6 + bool + config CPU_32v7 bool diff --git a/arch/arm/cpu/Makefile b/arch/arm/cpu/Makefile index 538ab57ae..2273e4502 100644 --- a/arch/arm/cpu/Makefile +++ b/arch/arm/cpu/Makefile @@ -11,5 +11,7 @@ obj-$(CONFIG_ARCH_IMX31) += start-arm.o obj-$(CONFIG_ARCH_IMX35) += start-arm.o obj-$(CONFIG_CMD_ARM_CPUINFO) += cpuinfo.o obj-$(CONFIG_MMU) += mmu.o -obj-$(CONFIG_MMU) += cache.o - +obj-$(CONFIG_CPU_32v4T) += cache-armv4.o +obj-$(CONFIG_CPU_32v5) += cache-armv4.o +obj-$(CONFIG_CPU_32v6) += cache-armv6.o +obj-$(CONFIG_CPU_32v7) += cache-armv7.o diff --git a/arch/arm/cpu/cache-armv4.S b/arch/arm/cpu/cache-armv4.S new file mode 100644 index 000000000..a0ab25601 --- /dev/null +++ b/arch/arm/cpu/cache-armv4.S @@ -0,0 +1,137 @@ +#include + +#define CACHE_DLINESIZE 32 + +ENTRY(__mmu_cache_on) + mov r12, lr +#ifdef CONFIG_MMU + mov r0, #0 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer + mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs + mrc p15, 0, r0, c1, c0, 0 @ read control reg + orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement + orr r0, r0, #0x0030 +#ifdef CONFIG_CPU_ENDIAN_BE8 + orr r0, r0, #1 << 25 @ big-endian page tables +#endif + bl __common_mmu_cache_on + mov r0, #0 + mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs +#endif + mov pc, r12 +ENDPROC(__mmu_cache_on) + +__common_mmu_cache_on: + orr r0, r0, #0x000d @ Write buffer, mmu + b 1f + .align 5 @ cache line aligned +1: mcr p15, 0, r0, c1, c0, 0 @ load control register + mrc p15, 0, r0, c1, c0, 0 @ and read it back to + sub pc, lr, r0, lsr #32 @ properly flush pipeline + +ENTRY(__mmu_cache_off) +#ifdef CONFIG_MMU + mrc p15, 0, r0, c1, c0 + bic r0, r0, #0x000d + mcr p15, 0, r0, c1, c0 @ turn MMU and cache off + mov r0, #0 + mcr p15, 0, r0, c7, c7 @ invalidate whole cache v4 + mcr p15, 0, r0, c8, c7 @ invalidate whole TLB v4 +#endif + mov pc, lr +ENDPROC(__mmu_cache_off) + +ENTRY(__mmu_cache_flush) + mrc p15, 0, r6, c0, c0 @ get processor ID + mov r2, #64*1024 @ default: 32K dcache size (*2) + mov r11, #32 @ default: 32 byte line size + mrc p15, 0, r3, c0, c0, 1 @ read cache type + teq r3, r6 @ cache ID register present? + beq no_cache_id + mov r1, r3, lsr #18 + and r1, r1, #7 + mov r2, #1024 + mov r2, r2, lsl r1 @ base dcache size *2 + tst r3, #1 << 14 @ test M bit + addne r2, r2, r2, lsr #1 @ +1/2 size if M == 1 + mov r3, r3, lsr #12 + and r3, r3, #3 + mov r11, #8 + mov r11, r11, lsl r3 @ cache line size in bytes +no_cache_id: + mov r1, pc + bic r1, r1, #63 @ align to longest cache line + add r2, r1, r2 +1: + ldr r3, [r1], r11 @ s/w flush D cache + teq r1, r2 + bne 1b + + mcr p15, 0, r1, c7, c5, 0 @ flush I cache + mcr p15, 0, r1, c7, c6, 0 @ flush D cache + mcr p15, 0, r1, c7, c10, 4 @ drain WB + mov pc, lr +ENDPROC(__mmu_cache_flush) + +/* + * dma_inv_range(start, end) + * + * Invalidate (discard) the specified virtual address range. + * May not write back any entries. If 'start' or 'end' + * are not cache line aligned, those lines must be written + * back. + * + * - start - virtual start address + * - end - virtual end address + * + * (same as v4wb) + */ +ENTRY(dma_inv_range) + tst r0, #CACHE_DLINESIZE - 1 + bic r0, r0, #CACHE_DLINESIZE - 1 + mcrne p15, 0, r0, c7, c10, 1 @ clean D entry + tst r1, #CACHE_DLINESIZE - 1 + mcrne p15, 0, r1, c7, c10, 1 @ clean D entry +1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b + mcr p15, 0, r0, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_clean_range(start, end) + * + * Clean the specified virtual address range. + * + * - start - virtual start address + * - end - virtual end address + * + * (same as v4wb) + */ +ENTRY(dma_clean_range) + bic r0, r0, #CACHE_DLINESIZE - 1 +1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b + mcr p15, 0, r0, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_flush_range(start, end) + * + * Clean and invalidate the specified virtual address range. + * + * - start - virtual start address + * - end - virtual end address + */ +ENTRY(dma_flush_range) + bic r0, r0, #CACHE_DLINESIZE - 1 +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b + mcr p15, 0, r0, c7, c10, 4 @ drain WB + mov pc, lr + diff --git a/arch/arm/cpu/cache-armv6.S b/arch/arm/cpu/cache-armv6.S new file mode 100644 index 000000000..ceabd524b --- /dev/null +++ b/arch/arm/cpu/cache-armv6.S @@ -0,0 +1,131 @@ +#include + +#define HARVARD_CACHE +#define CACHE_LINE_SIZE 32 +#define D_CACHE_LINE_SIZE 32 + +ENTRY(__mmu_cache_on) + mov r12, lr +#ifdef CONFIG_MMU + mov r0, #0 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer + mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs + mrc p15, 0, r0, c1, c0, 0 @ read control reg + orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement + orr r0, r0, #0x0030 +#ifdef CONFIG_CPU_ENDIAN_BE8 + orr r0, r0, #1 << 25 @ big-endian page tables +#endif + bl __common_mmu_cache_on + mov r0, #0 + mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs +#endif + mov pc, r12 +ENDPROC(__mmu_cache_on) + +__common_mmu_cache_on: + orr r0, r0, #0x000d @ Write buffer, mmu + b 1f + .align 5 @ cache line aligned +1: mcr p15, 0, r0, c1, c0, 0 @ load control register + mrc p15, 0, r0, c1, c0, 0 @ and read it back to + sub pc, lr, r0, lsr #32 @ properly flush pipeline + +ENTRY(__mmu_cache_off) +#ifdef CONFIG_MMU + mrc p15, 0, r0, c1, c0 + bic r0, r0, #0x000d + mcr p15, 0, r0, c1, c0 @ turn MMU and cache off + mov r0, #0 + mcr p15, 0, r0, c7, c7 @ invalidate whole cache v4 + mcr p15, 0, r0, c8, c7 @ invalidate whole TLB v4 +#endif + mov pc, lr + +ENTRY(__mmu_cache_flush) + mov r1, #0 + mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D + mcr p15, 0, r1, c7, c5, 0 @ invalidate I+BTB + mcr p15, 0, r1, c7, c15, 0 @ clean+invalidate unified + mcr p15, 0, r1, c7, c10, 4 @ drain WB + mov pc, lr +ENDPROC(__mmu_cache_flush) + +/* + * v6_dma_inv_range(start,end) + * + * Invalidate the data cache within the specified region; we will + * be performing a DMA operation in this region and we want to + * purge old data in the cache. + * + * - start - virtual start address of region + * - end - virtual end address of region + */ +ENTRY(dma_inv_range) + tst r0, #D_CACHE_LINE_SIZE - 1 + bic r0, r0, #D_CACHE_LINE_SIZE - 1 +#ifdef HARVARD_CACHE + mcrne p15, 0, r0, c7, c10, 1 @ clean D line +#else + mcrne p15, 0, r0, c7, c11, 1 @ clean unified line +#endif + tst r1, #D_CACHE_LINE_SIZE - 1 + bic r1, r1, #D_CACHE_LINE_SIZE - 1 +#ifdef HARVARD_CACHE + mcrne p15, 0, r1, c7, c14, 1 @ clean & invalidate D line +#else + mcrne p15, 0, r1, c7, c15, 1 @ clean & invalidate unified line +#endif +1: +#ifdef HARVARD_CACHE + mcr p15, 0, r0, c7, c6, 1 @ invalidate D line +#else + mcr p15, 0, r0, c7, c7, 1 @ invalidate unified line +#endif + add r0, r0, #D_CACHE_LINE_SIZE + cmp r0, r1 + blo 1b + mov r0, #0 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer + mov pc, lr + +/* + * v6_dma_clean_range(start,end) + * - start - virtual start address of region + * - end - virtual end address of region + */ +ENTRY(dma_clean_range) + bic r0, r0, #D_CACHE_LINE_SIZE - 1 +1: +#ifdef HARVARD_CACHE + mcr p15, 0, r0, c7, c10, 1 @ clean D line +#else + mcr p15, 0, r0, c7, c11, 1 @ clean unified line +#endif + add r0, r0, #D_CACHE_LINE_SIZE + cmp r0, r1 + blo 1b + mov r0, #0 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer + mov pc, lr + +/* + * v6_dma_flush_range(start,end) + * - start - virtual start address of region + * - end - virtual end address of region + */ +ENTRY(dma_flush_range) + bic r0, r0, #D_CACHE_LINE_SIZE - 1 +1: +#ifdef HARVARD_CACHE + mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line +#else + mcr p15, 0, r0, c7, c15, 1 @ clean & invalidate line +#endif + add r0, r0, #D_CACHE_LINE_SIZE + cmp r0, r1 + blo 1b + mov r0, #0 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer + mov pc, lr + diff --git a/arch/arm/cpu/cache-armv7.S b/arch/arm/cpu/cache-armv7.S new file mode 100644 index 000000000..b370acdd9 --- /dev/null +++ b/arch/arm/cpu/cache-armv7.S @@ -0,0 +1,185 @@ +#include + +ENTRY(__mmu_cache_on) + mov r12, lr +#ifdef CONFIG_MMU + mrc p15, 0, r11, c0, c1, 4 @ read ID_MMFR0 + tst r11, #0xf @ VMSA + mov r0, #0 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer + tst r11, #0xf @ VMSA + mcrne p15, 0, r0, c8, c7, 0 @ flush I,D TLBs +#endif + mrc p15, 0, r0, c1, c0, 0 @ read control reg + orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement + orr r0, r0, #0x003c @ write buffer +#ifdef CONFIG_MMU +#ifdef CONFIG_CPU_ENDIAN_BE8 + orr r0, r0, #1 << 25 @ big-endian page tables +#endif + orrne r0, r0, #1 @ MMU enabled + movne r1, #-1 + mcrne p15, 0, r3, c2, c0, 0 @ load page table pointer + mcrne p15, 0, r1, c3, c0, 0 @ load domain access control +#endif + mcr p15, 0, r0, c1, c0, 0 @ load control register + mrc p15, 0, r0, c1, c0, 0 @ and read it back + mov r0, #0 + mcr p15, 0, r0, c7, c5, 4 @ ISB + mov pc, r12 +ENDPROC(__mmu_cache_on) + +ENTRY(__mmu_cache_off) + mrc p15, 0, r0, c1, c0 +#ifdef CONFIG_MMU + bic r0, r0, #0x000d +#else + bic r0, r0, #0x000c +#endif + mcr p15, 0, r0, c1, c0 @ turn MMU and cache off + mov r12, lr + bl __mmu_cache_flush + mov r0, #0 +#ifdef CONFIG_MMU + mcr p15, 0, r0, c8, c7, 0 @ invalidate whole TLB +#endif + mcr p15, 0, r0, c7, c5, 6 @ invalidate BTC + mcr p15, 0, r0, c7, c10, 4 @ DSB + mcr p15, 0, r0, c7, c5, 4 @ ISB + mov pc, r12 +ENDPROC(__mmu_cache_on) + +ENTRY(__mmu_cache_flush) + mrc p15, 0, r10, c0, c1, 5 @ read ID_MMFR1 + tst r10, #0xf << 16 @ hierarchical cache (ARMv7) + mov r10, #0 + beq hierarchical + mcr p15, 0, r10, c7, c14, 0 @ clean+invalidate D + b iflush +hierarchical: + mcr p15, 0, r10, c7, c10, 5 @ DMB + stmfd sp!, {r0-r7, r9-r11} + mrc p15, 1, r0, c0, c0, 1 @ read clidr + ands r3, r0, #0x7000000 @ extract loc from clidr + mov r3, r3, lsr #23 @ left align loc bit field + beq finished @ if loc is 0, then no need to clean + mov r10, #0 @ start clean at cache level 0 +loop1: + add r2, r10, r10, lsr #1 @ work out 3x current cache level + mov r1, r0, lsr r2 @ extract cache type bits from clidr + and r1, r1, #7 @ mask of the bits for current cache only + cmp r1, #2 @ see what cache we have at this level + blt skip @ skip if no cache, or just i-cache + mcr p15, 2, r10, c0, c0, 0 @ select current cache level in cssr + mcr p15, 0, r10, c7, c5, 4 @ isb to sych the new cssr&csidr + mrc p15, 1, r1, c0, c0, 0 @ read the new csidr + and r2, r1, #7 @ extract the length of the cache lines + add r2, r2, #4 @ add 4 (line length offset) + ldr r4, =0x3ff + ands r4, r4, r1, lsr #3 @ find maximum number on the way size + clz r5, r4 @ find bit position of way size increment + ldr r7, =0x7fff + ands r7, r7, r1, lsr #13 @ extract max number of the index size +loop2: + mov r9, r4 @ create working copy of max way size +loop3: + orr r11, r10, r9, lsl r5 @ factor way and cache number into r11 + orr r11, r11, r7, lsl r2 @ factor index number into r11 + mcr p15, 0, r11, c7, c14, 2 @ clean & invalidate by set/way + subs r9, r9, #1 @ decrement the way + bge loop3 + subs r7, r7, #1 @ decrement the index + bge loop2 +skip: + add r10, r10, #2 @ increment cache number + cmp r3, r10 + bgt loop1 +finished: + ldmfd sp!, {r0-r7, r9-r11} + mov r10, #0 @ swith back to cache level 0 + mcr p15, 2, r10, c0, c0, 0 @ select current cache level in cssr +iflush: + mcr p15, 0, r10, c7, c10, 4 @ DSB + mcr p15, 0, r10, c7, c5, 0 @ invalidate I+BTB + mcr p15, 0, r10, c7, c10, 4 @ DSB + mcr p15, 0, r10, c7, c5, 4 @ ISB + mov pc, lr +ENDPROC(__mmu_cache_flush) + +/* + * cache_line_size - get the cache line size from the CSIDR register + * (available on ARMv7+). It assumes that the CSSR register was configured + * to access the L1 data cache CSIDR. + */ + .macro dcache_line_size, reg, tmp + mrc p15, 1, \tmp, c0, c0, 0 @ read CSIDR + and \tmp, \tmp, #7 @ cache line size encoding + mov \reg, #16 @ size offset + mov \reg, \reg, lsl \tmp @ actual cache line size + .endm + +/* + * v7_dma_inv_range(start,end) + * + * Invalidate the data cache within the specified region; we will + * be performing a DMA operation in this region and we want to + * purge old data in the cache. + * + * - start - virtual start address of region + * - end - virtual end address of region + */ +ENTRY(dma_inv_range) + dcache_line_size r2, r3 + sub r3, r2, #1 + tst r0, r3 + bic r0, r0, r3 + mcrne p15, 0, r0, c7, c14, 1 @ clean & invalidate D / U line + + tst r1, r3 + bic r1, r1, r3 + mcrne p15, 0, r1, c7, c14, 1 @ clean & invalidate D / U line +1: + mcr p15, 0, r0, c7, c6, 1 @ invalidate D / U line + add r0, r0, r2 + cmp r0, r1 + blo 1b + dsb + mov pc, lr +ENDPROC(dma_inv_range) + +/* + * v7_dma_clean_range(start,end) + * - start - virtual start address of region + * - end - virtual end address of region + */ +ENTRY(dma_clean_range) + dcache_line_size r2, r3 + sub r3, r2, #1 + bic r0, r0, r3 +1: + mcr p15, 0, r0, c7, c10, 1 @ clean D / U line + add r0, r0, r2 + cmp r0, r1 + blo 1b + dsb + mov pc, lr +ENDPROC(dma_clean_range) + +/* + * v7_dma_flush_range(start,end) + * - start - virtual start address of region + * - end - virtual end address of region + */ +ENTRY(dma_flush_range) + dcache_line_size r2, r3 + sub r3, r2, #1 + bic r0, r0, r3 +1: + mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D / U line + add r0, r0, r2 + cmp r0, r1 + blo 1b + dsb + mov pc, lr +ENDPROC(dma_flush_range) + diff --git a/arch/arm/cpu/cpu.c b/arch/arm/cpu/cpu.c index 501e9b99e..1b8fc970d 100644 --- a/arch/arm/cpu/cpu.c +++ b/arch/arm/cpu/cpu.c @@ -162,7 +162,7 @@ int cleanup_before_linux (void) * required. */ -static int do_icache(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_icache(struct command *cmdtp, int argc, char *argv[]) { if (argc == 1) { printf("icache is %sabled\n", icache_status() ? "en" : "dis"); diff --git a/arch/arm/cpu/cpuinfo.c b/arch/arm/cpu/cpuinfo.c index e7bcda978..e19b8de35 100644 --- a/arch/arm/cpu/cpuinfo.c +++ b/arch/arm/cpu/cpuinfo.c @@ -41,7 +41,7 @@ static char *crbits[] = {"M", "A", "C", "W", "P", "D", "L", "B", "S", "R", "F", "Z", "I", "V", "RR", "L4", "", "", "", "", "", "FI", "U", "XP", "VE", "EE", "L2"}; -static int do_cpuinfo(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_cpuinfo(struct command *cmdtp, int argc, char *argv[]) { unsigned long mainid, cache, cr; char *architecture, *implementer; diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c index 9e0092760..4c4e19620 100644 --- a/arch/arm/cpu/mmu.c +++ b/arch/arm/cpu/mmu.c @@ -53,12 +53,10 @@ void mmu_init(void) void mmu_enable(void) { asm volatile ( - "mrc p15, 0, r1, c1, c0, 0;" - "orr r1, r1, #0x0007;" /* enable MMU + Dcache */ - "mcr p15, 0, r1, c1, c0, 0" + "bl __mmu_cache_on;" : : - : "r1" /* Clobber list */ + : "r0", "r1", "r2", "r3", "r6", "r10", "r12", "cc", "memory" ); } @@ -67,28 +65,13 @@ void mmu_enable(void) */ void mmu_disable(void) { + asm volatile ( - "nop; " - "nop; " - "nop; " - "nop; " - "nop; " - "nop; " - /* test, clean and invalidate cache */ - "1: mrc p15, 0, r15, c7, c14, 3;" - " bne 1b;" - " mov pc, lr;" - " mov r0, #0x0;" - " mcr p15, 0, r0, c7, c10, 4;" /* drain the write buffer */ - " mcr p15, 0, r1, c7, c6, 0;" /* clear data cache */ - " mrc p15, 0, r1, c1, c0, 0;" - " bic r1, r1, #0x0007;" /* disable MMU + DCache */ - " mcr p15, 0, r1, c1, c0, 0;" - " mcr p15, 0, r0, c7, c6, 0;" /* flush d-cache */ - " mcr p15, 0, r0, c8, c7, 0;" /* flush i+d-TLBs */ + "bl __mmu_cache_flush;" + "bl __mmu_cache_off;" : : - : "r0" /* Clobber list */ + : "r0", "r1", "r2", "r3", "r6", "r10", "r12", "cc", "memory" ); } diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c index 25b7744b9..2415c29bc 100644 --- a/arch/arm/lib/armlinux.c +++ b/arch/arm/lib/armlinux.c @@ -235,7 +235,7 @@ struct zimage_header { u32 end; }; -static int do_bootz(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_bootz(struct command *cmdtp, int argc, char *argv[]) { void (*theKernel)(int zero, int arch, void *params); const char *commandline = getenv("bootargs"); @@ -308,7 +308,7 @@ BAREBOX_CMD_END #endif /* CONFIG_CMD_BOOTZ */ #ifdef CONFIG_CMD_BOOTU -static int do_bootu(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_bootu(struct command *cmdtp, int argc, char *argv[]) { void (*theKernel)(int zero, int arch, void *params); const char *commandline = getenv("bootargs"); diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index a1b2c1c45..eeb392aa1 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -57,10 +57,12 @@ config ARCH_IMX27 select ARCH_HAS_FEC_IMX config ARCH_IMX31 + select CPU_V6 bool "i.MX31" config ARCH_IMX35 bool "i.MX35" + select CPU_V6 select ARCH_HAS_FEC_IMX endchoice diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c index b6efe8780..37e17fe91 100644 --- a/arch/arm/mach-imx/clko.c +++ b/arch/arm/mach-imx/clko.c @@ -4,7 +4,7 @@ #include #include -static int do_clko (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_clko(struct command *cmdtp, int argc, char *argv[]) { int opt, div = 0, src = -2, ret; diff --git a/arch/arm/mach-imx/speed.c b/arch/arm/mach-imx/speed.c index 76ab6b9be..e02473324 100644 --- a/arch/arm/mach-imx/speed.c +++ b/arch/arm/mach-imx/speed.c @@ -69,7 +69,7 @@ unsigned int imx_decode_pll(unsigned int reg_val, unsigned int freq) extern void imx_dump_clocks(void); -static int do_clocks (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_clocks(struct command *cmdtp, int argc, char *argv[]) { imx_dump_clocks(); diff --git a/arch/arm/mach-netx/generic.c b/arch/arm/mach-netx/generic.c index 76ae6bdfe..69cf196c6 100644 --- a/arch/arm/mach-netx/generic.c +++ b/arch/arm/mach-netx/generic.c @@ -116,7 +116,7 @@ int loadxc(int xcno) { return 0; } -int do_loadxc (cmd_tbl_t *cmdtp, int argc, char *argv[]) +int do_loadxc(struct command *cmdtp, int argc, char *argv[]) { int xcno; diff --git a/arch/ppc/mach-mpc5xxx/interrupts.c b/arch/ppc/mach-mpc5xxx/interrupts.c index 58f4530dc..e484b6ecd 100644 --- a/arch/ppc/mach-mpc5xxx/interrupts.c +++ b/arch/ppc/mach-mpc5xxx/interrupts.c @@ -314,7 +314,7 @@ void irq_free_handler(int irq) /****************************************************************************/ #if (CONFIG_COMMANDS & CFG_CMD_IRQ) -void do_irqinfo(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char *argv[]) +void do_irqinfo(struct command * cmdtp, bd_t * bd, int flag, int argc, char *argv[]) { int irq, re_enable; u32 intr_ctrl; diff --git a/board/ipe337/cmd_alternate.c b/board/ipe337/cmd_alternate.c index 538f0bfd6..2883c77d3 100644 --- a/board/ipe337/cmd_alternate.c +++ b/board/ipe337/cmd_alternate.c @@ -6,7 +6,7 @@ #define MAGIC 0x19691228 -static int do_alternate (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_alternate(struct command *cmdtp, int argc, char *argv[]) { void *buf; size_t size; diff --git a/board/pcm043/lowlevel_init.S b/board/pcm043/lowlevel_init.S index 9df064cb4..abbc72c9c 100644 --- a/board/pcm043/lowlevel_init.S +++ b/board/pcm043/lowlevel_init.S @@ -96,7 +96,7 @@ board_init_lowlevel: ldr r2, CCM_CCMR_W str r2, [r0, #CCM_CCMR] - ldr r3, MPCTL_PARAM_399_W /* consumer path*/ + ldr r3, MPCTL_PARAM_532_W /* consumer path*/ /*Set MPLL , arm clock and ahb clock*/ str r3, [r0, #CCM_MPCTL] diff --git a/board/pcm043/pcm043.c b/board/pcm043/pcm043.c index 0e7f6d3bf..7b0bad1fb 100644 --- a/board/pcm043/pcm043.c +++ b/board/pcm043/pcm043.c @@ -353,7 +353,7 @@ core_initcall(pcm043_core_setup); #define MPCTL_PARAM_399 (IMX_PLL_PD(0) | IMX_PLL_MFD(15) | IMX_PLL_MFI(8) | IMX_PLL_MFN(5)) #define MPCTL_PARAM_532 ((1 << 31) | IMX_PLL_PD(0) | IMX_PLL_MFD(11) | IMX_PLL_MFI(11) | IMX_PLL_MFN(1)) -static int do_cpufreq(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_cpufreq(struct command *cmdtp, int argc, char *argv[]) { unsigned long freq; diff --git a/commands/bmp.c b/commands/bmp.c index 51989e14f..6e17200a1 100644 --- a/commands/bmp.c +++ b/commands/bmp.c @@ -29,7 +29,7 @@ static inline void set_pixel(struct fb_info *info, void *adr, int r, int g, int } } -static int do_bmp(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_bmp(struct command *cmdtp, int argc, char *argv[]) { int ret, opt, fd; char *fbdev = "/dev/fb0"; diff --git a/commands/bootm.c b/commands/bootm.c index 849d4c20d..11325dc07 100644 --- a/commands/bootm.c +++ b/commands/bootm.c @@ -52,7 +52,7 @@ * - loaded (first part of) image to header load address, * - disabled interrupts. */ -typedef void boot_os_Fcn (cmd_tbl_t *cmdtp, int flag, +typedef void boot_os_Fcn(struct command *cmdtp, int flag, int argc, char *argv[], ulong addr, /* of image to boot */ ulong *len_ptr, /* multi-file image length table */ @@ -364,7 +364,7 @@ static int handler_parse_options(struct image_data *data, int opt, char *optarg) return -1; } -static int do_bootm (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_bootm(struct command *cmdtp, int argc, char *argv[]) { ulong iflag; int opt; @@ -464,7 +464,7 @@ BAREBOX_CMD_START(bootm) BAREBOX_CMD_END #ifdef CONFIG_CMD_IMI -static int do_iminfo ( cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_iminfo(struct command *cmdtp, int argc, char *argv[]) { int arg; ulong addr; diff --git a/commands/cat.c b/commands/cat.c index c0a93d89d..41b332430 100644 --- a/commands/cat.c +++ b/commands/cat.c @@ -39,7 +39,7 @@ * @param[in] argc Argument count from command line * @param[in] argv List of input arguments */ -static int do_cat(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_cat(struct command *cmdtp, int argc, char *argv[]) { int ret; int fd, i; diff --git a/commands/cd.c b/commands/cd.c index 50e40b629..a842f4dc2 100644 --- a/commands/cd.c +++ b/commands/cd.c @@ -30,7 +30,7 @@ #include #include -static int do_cd (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_cd(struct command *cmdtp, int argc, char *argv[]) { int ret; diff --git a/commands/clear.c b/commands/clear.c index 178842845..7589a0c38 100644 --- a/commands/clear.c +++ b/commands/clear.c @@ -24,7 +24,7 @@ #include #include -static int do_clear (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_clear(struct command *cmdtp, int argc, char *argv[]) { printf(ANSI_CLEAR_SCREEN); diff --git a/commands/cp.c b/commands/cp.c index aa7b410e5..a0c7c84d4 100644 --- a/commands/cp.c +++ b/commands/cp.c @@ -37,7 +37,7 @@ * @param[in] argc Argument count from command line * @param[in] argv List of input arguments */ -static int do_cp ( cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_cp(struct command *cmdtp, int argc, char *argv[]) { int ret = 1; struct stat statbuf; diff --git a/commands/crc.c b/commands/crc.c index 17188c7e1..4842cdc82 100644 --- a/commands/crc.c +++ b/commands/crc.c @@ -30,7 +30,7 @@ #include #include -static int do_crc (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_crc(struct command *cmdtp, int argc, char *argv[]) { ulong start = 0, size = ~0, total = 0; ulong crc = 0, vcrc = 0; diff --git a/commands/dfu.c b/commands/dfu.c index fe865efb9..66fd6eaa6 100644 --- a/commands/dfu.c +++ b/commands/dfu.c @@ -95,7 +95,7 @@ static int dfu_do_parse_one(char *partstr, char **endstr, struct usb_dfu_dev *df * s = save mode (download whole image before flashing) * r = read back (firmware image can be downloaded back from host) */ -static int do_dfu(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_dfu(struct command *cmdtp, int argc, char *argv[]) { int opt, n = 0; struct usb_dfu_pdata pdata; diff --git a/commands/echo.c b/commands/echo.c index 49bd44ed8..d5640a0f0 100644 --- a/commands/echo.c +++ b/commands/echo.c @@ -26,7 +26,7 @@ #include #include -static int do_echo (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_echo(struct command *cmdtp, int argc, char *argv[]) { int i, optind = 1; int fd = stdout, opt, newline = 1; diff --git a/commands/edit.c b/commands/edit.c index d292a5231..e851f0f48 100644 --- a/commands/edit.c +++ b/commands/edit.c @@ -389,7 +389,7 @@ static void getwinsize(void) { } #endif -static int do_edit(cmd_tbl_t * cmdtp, int argc, char *argv[]) +static int do_edit(struct command * cmdtp, int argc, char *argv[]) { int lastscrcol; int i; diff --git a/commands/exec.c b/commands/exec.c index ce0a0a990..5f093b7b3 100644 --- a/commands/exec.c +++ b/commands/exec.c @@ -29,7 +29,7 @@ #include #include -static int do_exec(cmd_tbl_t * cmdtp, int argc, char *argv[]) +static int do_exec(struct command * cmdtp, int argc, char *argv[]) { int i; char *script; diff --git a/commands/export.c b/commands/export.c index 3e2f84d9f..31259cc9b 100644 --- a/commands/export.c +++ b/commands/export.c @@ -28,7 +28,7 @@ #include #include -static int do_export ( cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_export(struct command *cmdtp, int argc, char *argv[]) { int i = 1; char *ptr; diff --git a/commands/false.c b/commands/false.c index fec3fdf71..a90eadcbb 100644 --- a/commands/false.c +++ b/commands/false.c @@ -24,7 +24,7 @@ #include #include -static int do_false (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_false(struct command *cmdtp, int argc, char *argv[]) { return 1; } diff --git a/commands/flash.c b/commands/flash.c index ec793c531..f92b60404 100644 --- a/commands/flash.c +++ b/commands/flash.c @@ -37,7 +37,7 @@ #include #include -static int do_flerase (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_flerase(struct command *cmdtp, int argc, char *argv[]) { int fd; char *filename = NULL; @@ -107,7 +107,7 @@ BAREBOX_CMD_END * Refer \b addpart, \b delpart and \b devinfo for partition handling. */ -static int do_protect (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_protect(struct command *cmdtp, int argc, char *argv[]) { int fd; char *filename = NULL; diff --git a/commands/go.c b/commands/go.c index e720e3235..588d6fcd6 100644 --- a/commands/go.c +++ b/commands/go.c @@ -30,7 +30,7 @@ #include #include -static int do_go (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_go(struct command *cmdtp, int argc, char *argv[]) { void *addr; int rcode = 1; diff --git a/commands/gpio.c b/commands/gpio.c index 58bf8b637..2575c1e50 100644 --- a/commands/gpio.c +++ b/commands/gpio.c @@ -20,7 +20,7 @@ #include #include -static int do_gpio_get_value(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_gpio_get_value(struct command *cmdtp, int argc, char *argv[]) { int gpio, value; @@ -45,7 +45,7 @@ BAREBOX_CMD_START(gpio_get_value) BAREBOX_CMD_HELP(cmd_gpio_get_value_help) BAREBOX_CMD_END -static int do_gpio_set_value(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_gpio_set_value(struct command *cmdtp, int argc, char *argv[]) { int gpio, value; @@ -69,7 +69,7 @@ BAREBOX_CMD_START(gpio_set_value) BAREBOX_CMD_HELP(cmd_gpio_set_value_help) BAREBOX_CMD_END -static int do_gpio_direction_input(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_gpio_direction_input(struct command *cmdtp, int argc, char *argv[]) { int gpio, ret; @@ -94,7 +94,7 @@ BAREBOX_CMD_START(gpio_direction_input) BAREBOX_CMD_HELP(cmd_do_gpio_direction_input_help) BAREBOX_CMD_END -static int do_gpio_direction_output(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_gpio_direction_output(struct command *cmdtp, int argc, char *argv[]) { int gpio, value, ret; diff --git a/commands/help.c b/commands/help.c index d8c67cddb..f8387bd61 100644 --- a/commands/help.c +++ b/commands/help.c @@ -28,7 +28,7 @@ * Use puts() instead of printf() to avoid printf buffer overflow * for long help messages */ -static int do_help (cmd_tbl_t * cmdtp, int argc, char *argv[]) +static int do_help(struct command * cmdtp, int argc, char *argv[]) { if (argc == 1) { /* show list of commands */ for_each_command(cmdtp) { diff --git a/commands/insmod.c b/commands/insmod.c index e14af49f7..d3b4d1ad6 100644 --- a/commands/insmod.c +++ b/commands/insmod.c @@ -5,7 +5,7 @@ #include #include -static int do_insmod (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_insmod(struct command *cmdtp, int argc, char *argv[]) { struct module *module; void *buf; diff --git a/commands/loadb.c b/commands/loadb.c index efb1a3cd8..6740ef4a4 100644 --- a/commands/loadb.c +++ b/commands/loadb.c @@ -688,7 +688,7 @@ static struct console_device *get_current_console(void) * * @return success or failure */ -static int do_load_serial_bin(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_load_serial_bin(struct command *cmdtp, int argc, char *argv[]) { ulong offset = 0; ulong addr; diff --git a/commands/loadenv.c b/commands/loadenv.c index 8b885abf2..14fbf1e33 100644 --- a/commands/loadenv.c +++ b/commands/loadenv.c @@ -27,7 +27,7 @@ #include #include -static int do_loadenv(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_loadenv(struct command *cmdtp, int argc, char *argv[]) { char *filename, *dirname; diff --git a/commands/loads.c b/commands/loads.c index 2578c1525..8269af195 100644 --- a/commands/loads.c +++ b/commands/loads.c @@ -42,7 +42,7 @@ static int save_serial (ulong offset, ulong size); static int write_record (char *buf); # endif /* CFG_CMD_SAVES */ -int do_load_serial (cmd_tbl_t *cmdtp, int argc, char *argv[]) +int do_load_serial(struct command *cmdtp, int argc, char *argv[]) { ulong offset = 0; ulong addr; @@ -233,7 +233,7 @@ read_record (char *buf, ulong len) #if (CONFIG_COMMANDS & CFG_CMD_SAVES) -int do_save_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +int do_save_serial(struct command *cmdtp, int flag, int argc, char *argv[]) { ulong offset = 0; ulong size = 0; diff --git a/commands/ls.c b/commands/ls.c index 4d880e514..a02ccfe77 100644 --- a/commands/ls.c +++ b/commands/ls.c @@ -111,7 +111,7 @@ out: return 0; } -static int do_ls (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_ls(struct command *cmdtp, int argc, char *argv[]) { int ret, opt, o; struct stat s; diff --git a/commands/lsmod.c b/commands/lsmod.c index 696304d11..26d2fe4e3 100644 --- a/commands/lsmod.c +++ b/commands/lsmod.c @@ -2,7 +2,7 @@ #include #include -static int do_lsmod (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_lsmod(struct command *cmdtp, int argc, char *argv[]) { struct module *mod; diff --git a/commands/mem.c b/commands/mem.c index f06bc64f0..619246652 100644 --- a/commands/mem.c +++ b/commands/mem.c @@ -163,7 +163,7 @@ static int mem_parse_options(int argc, char *argv[], char *optstr, int *mode, return 0; } -static int do_mem_md(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_mem_md(struct command *cmdtp, int argc, char *argv[]) { ulong start = 0, size = 0x100; int r, now; @@ -238,7 +238,7 @@ BAREBOX_CMD_START(md) BAREBOX_CMD_HELP(cmd_md_help) BAREBOX_CMD_END -static int do_mem_mw ( cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_mem_mw(struct command *cmdtp, int argc, char *argv[]) { int ret = 0; int fd; @@ -301,7 +301,7 @@ BAREBOX_CMD_START(mw) BAREBOX_CMD_HELP(cmd_mw_help) BAREBOX_CMD_END -static int do_mem_cmp(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_mem_cmp(struct command *cmdtp, int argc, char *argv[]) { ulong addr1, addr2, count = ~0; int mode = O_RWSIZE_1; @@ -410,7 +410,7 @@ BAREBOX_CMD_START(memcmp) BAREBOX_CMD_HELP(cmd_memcmp_help) BAREBOX_CMD_END -static int do_mem_cp(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_mem_cp(struct command *cmdtp, int argc, char *argv[]) { ulong count; ulong dest, src; @@ -506,7 +506,7 @@ BAREBOX_CMD_START(memcpy) BAREBOX_CMD_HELP(cmd_memcpy_help) BAREBOX_CMD_END -static int do_memset(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_memset(struct command *cmdtp, int argc, char *argv[]) { ulong s, c, n; int fd; diff --git a/commands/meminfo.c b/commands/meminfo.c index 76caf0a4f..abbaf9c0d 100644 --- a/commands/meminfo.c +++ b/commands/meminfo.c @@ -23,7 +23,7 @@ #include #include -static int do_meminfo (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_meminfo(struct command *cmdtp, int argc, char *argv[]) { malloc_stats(); diff --git a/commands/memtest.c b/commands/memtest.c index 4038aceb7..d9c8b3d89 100644 --- a/commands/memtest.c +++ b/commands/memtest.c @@ -322,7 +322,7 @@ static int mem_test(ulong _start, ulong _end, ulong pattern) } #endif -static int do_mem_mtest (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_mem_mtest(struct command *cmdtp, int argc, char *argv[]) { ulong start, end, pattern = 0; diff --git a/commands/mkdir.c b/commands/mkdir.c index d5f58f027..b66795b6e 100644 --- a/commands/mkdir.c +++ b/commands/mkdir.c @@ -26,7 +26,7 @@ #include #include -static int do_mkdir (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_mkdir(struct command *cmdtp, int argc, char *argv[]) { int opt, parent = 0, ret; diff --git a/commands/mount.c b/commands/mount.c index 41735c834..8e4388ecd 100644 --- a/commands/mount.c +++ b/commands/mount.c @@ -30,7 +30,7 @@ #include #include -static int do_mount (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_mount(struct command *cmdtp, int argc, char *argv[]) { int ret = 0; struct mtab_entry *entry = NULL; diff --git a/commands/nand.c b/commands/nand.c index 55b89af31..7a4e99523 100644 --- a/commands/nand.c +++ b/commands/nand.c @@ -279,7 +279,7 @@ out1: #define NAND_DEL (1 << 1) #define NAND_MARKBAD (1 << 2) -static int do_nand(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_nand(struct command *cmdtp, int argc, char *argv[]) { int opt; struct nand_bb *bb; diff --git a/commands/net.c b/commands/net.c index df06227de..815a566a2 100644 --- a/commands/net.c +++ b/commands/net.c @@ -32,12 +32,8 @@ #include #include #include -#include #include #include -#include - -static int netboot_common (proto_t, cmd_tbl_t *, int , char *[]); void netboot_update_env(void) { @@ -77,41 +73,10 @@ void netboot_update_env(void) setenv ("domain", NetOurNISDomain); } -static int do_tftpb (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - return netboot_common (TFTP, cmdtp, argc, argv); -} - -static const __maybe_unused char cmd_tftp_help[] = -"Usage: tftp [localfile]\n" -"Load a file via network using BootP/TFTP protocol.\n"; - -BAREBOX_CMD_START(tftp) - .cmd = do_tftpb, - .usage = "Load file using tftp protocol", - BAREBOX_CMD_HELP(cmd_tftp_help) -BAREBOX_CMD_END - -/** - * @page tftp_command tftp - * - * Usage is: tftp \ [\] - * - * Load a file via network using BootP/TFTP protocol. The loaded file you - * can find after download in you current ramdisk. Refer \b ls command. - * - * \ can be the local filename only, or also a device name. In the - * case of a device name, the will gets stored there. This works also for - * partitions of flash memory. Refer \b erase, \b unprotect for flash - * preparation. - * - * Note: This command is available only, if enabled in the menuconfig. - */ - #ifdef CONFIG_NET_RARP extern void RarpRequest(void); -static int do_rarpb (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_rarpb(struct command *cmdtp, int argc, char *argv[]) { int size; @@ -137,128 +102,7 @@ BAREBOX_CMD_START(rarpboot) BAREBOX_CMD_END #endif /* CONFIG_NET_RARP */ -#ifdef CONFIG_NET_NFS -static int do_nfs (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - return netboot_common(NFS, cmdtp, argc, argv); -} - -static const __maybe_unused char cmd_nfs_help[] = -"Usage: nfs [localfile]\n" -"Load a file via network using nfs protocol.\n"; - -BAREBOX_CMD_START(nfs) - .cmd = do_nfs, - .usage = "boot image via network using nfs protocol", - BAREBOX_CMD_HELP(cmd_nfs_help) -BAREBOX_CMD_END - -#endif /* CONFIG_NET_NFS */ - -int net_store_fd; - -extern void TftpStart(char *); /* Begin TFTP get */ -extern void NfsStart(char *); - -static int -netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - int rcode = 0; - int size; - char *localfile; - char *remotefile; - - if (argc < 2) - return COMMAND_ERROR_USAGE; - - remotefile = argv[1]; - - if (argc == 2) - localfile = basename(remotefile); - else - localfile = argv[2]; - - net_store_fd = open(localfile, O_WRONLY | O_CREAT); - if (net_store_fd < 0) { - perror("open"); - return 1; - } - - if (NetLoopInit(proto) < 0) - goto out; - - switch (proto) { - case TFTP: - TftpStart(remotefile); - break; - case NFS: - NfsStart(remotefile); - default: - break; - } - - if ((size = NetLoop()) < 0) { - rcode = size; - goto out; - } - - /* NetLoop ok, update environment */ - netboot_update_env(); - -out: - close(net_store_fd); - return rcode; -} - -#ifdef CONFIG_NET_CDP - -static void cdp_update_env(void) -{ - char tmp[16]; - - if (CDPApplianceVLAN != htons(-1)) { - printf("CDP offered appliance VLAN %d\n", ntohs(CDPApplianceVLAN)); - VLAN_to_string(CDPApplianceVLAN, tmp); - setenv("vlan", tmp); - NetOurVLAN = CDPApplianceVLAN; - } - - if (CDPNativeVLAN != htons(-1)) { - printf("CDP offered native VLAN %d\n", ntohs(CDPNativeVLAN)); - VLAN_to_string(CDPNativeVLAN, tmp); - setenv("nvlan", tmp); - NetOurNativeVLAN = CDPNativeVLAN; - } - -} - -static int do_cdp (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - int r; - - if (NetLoopInit(CDP) < 0) - return 1; - - r = NetLoop(); - if (r < 0) { - printf("cdp failed; perhaps not a CISCO switch?\n"); - return 1; - } - - cdp_update_env(); - - return 0; -} - -BAREBOX_CMD_START(cdp) - .cmd = do_cdp, - .usage = "Perform CDP network configuration", - BAREBOX_CMD_HELP("[loadAddress] [host ip addr:bootfilename]\n") -BAREBOX_CMD_END - -#endif /* CONFIG_NET_CDP */ - -static int do_ethact (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_ethact(struct command *cmdtp, int argc, char *argv[]) { struct eth_device *edev; diff --git a/commands/partition.c b/commands/partition.c index bc0bbf962..779492594 100755 --- a/commands/partition.c +++ b/commands/partition.c @@ -107,7 +107,7 @@ static int mtd_part_do_parse_one(char *devname, const char *partstr, return ret; } -static int do_addpart(cmd_tbl_t * cmdtp, int argc, char *argv[]) +static int do_addpart(struct command * cmdtp, int argc, char *argv[]) { char *devname; char *endp; @@ -189,7 +189,7 @@ BAREBOX_CMD_END * @note This command has to be reworked and will probably change it's API. */ -static int do_delpart(cmd_tbl_t * cmdtp, int argc, char *argv[]) +static int do_delpart(struct command * cmdtp, int argc, char *argv[]) { int i, err; diff --git a/commands/printenv.c b/commands/printenv.c index 5490980c7..e6fc0e4e5 100644 --- a/commands/printenv.c +++ b/commands/printenv.c @@ -28,7 +28,7 @@ #include #include -static int do_printenv (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_printenv(struct command *cmdtp, int argc, char *argv[]) { struct variable_d *var; struct env_context *c, *current_c; diff --git a/commands/pwd.c b/commands/pwd.c index 6c3cbb976..d51fa1a17 100644 --- a/commands/pwd.c +++ b/commands/pwd.c @@ -23,7 +23,7 @@ #include #include -static int do_pwd (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_pwd(struct command *cmdtp, int argc, char *argv[]) { printf("%s\n", getcwd()); return 0; diff --git a/commands/readline.c b/commands/readline.c index 55c288cb8..cf2625ff7 100644 --- a/commands/readline.c +++ b/commands/readline.c @@ -27,7 +27,7 @@ #include #include -static int do_readline (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_readline(struct command *cmdtp, int argc, char *argv[]) { char *buf = xzalloc(CONFIG_CBSIZE); diff --git a/commands/reginfo.c b/commands/reginfo.c index f11a73c85..90651d5a3 100644 --- a/commands/reginfo.c +++ b/commands/reginfo.c @@ -23,7 +23,7 @@ #include #include -static int do_reginfo (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_reginfo(struct command *cmdtp, int argc, char *argv[]) { reginfo(); return 0; diff --git a/commands/reset.c b/commands/reset.c index f14862352..46ab90153 100644 --- a/commands/reset.c +++ b/commands/reset.c @@ -23,7 +23,7 @@ #include #include -static int cmd_reset (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int cmd_reset(struct command *cmdtp, int argc, char *argv[]) { reset_cpu(0); diff --git a/commands/rm.c b/commands/rm.c index 869460694..3437ae578 100644 --- a/commands/rm.c +++ b/commands/rm.c @@ -24,7 +24,7 @@ #include #include -static int do_rm (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_rm(struct command *cmdtp, int argc, char *argv[]) { int i = 1; diff --git a/commands/rmdir.c b/commands/rmdir.c index 3531f32d7..83a0b027d 100644 --- a/commands/rmdir.c +++ b/commands/rmdir.c @@ -3,7 +3,7 @@ #include #include -static int do_rmdir (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_rmdir(struct command *cmdtp, int argc, char *argv[]) { int i = 1; diff --git a/commands/saveenv.c b/commands/saveenv.c index 6a9da5cab..42ea58f4d 100644 --- a/commands/saveenv.c +++ b/commands/saveenv.c @@ -30,7 +30,7 @@ #include #include -static int do_saveenv(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_saveenv(struct command *cmdtp, int argc, char *argv[]) { int ret, fd; char *filename, *dirname; diff --git a/commands/setenv.c b/commands/setenv.c index 16b81776a..257348f80 100644 --- a/commands/setenv.c +++ b/commands/setenv.c @@ -28,7 +28,7 @@ #include #include -static int do_setenv ( cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_setenv(struct command *cmdtp, int argc, char *argv[]) { if (argc < 2) return COMMAND_ERROR_USAGE; diff --git a/commands/sleep.c b/commands/sleep.c index d88f39efb..40a3a47ef 100644 --- a/commands/sleep.c +++ b/commands/sleep.c @@ -24,7 +24,7 @@ #include #include -static int do_sleep (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_sleep(struct command *cmdtp, int argc, char *argv[]) { uint64_t start; ulong delay; diff --git a/commands/test.c b/commands/test.c index afabe1234..4af35156c 100644 --- a/commands/test.c +++ b/commands/test.c @@ -76,7 +76,7 @@ static int parse_opt(const char *opt) return -1; } -static int do_test (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_test(struct command *cmdtp, int argc, char *argv[]) { char **ap; int left, adv, expr, last_expr, neg, last_cmp, opt, zero; diff --git a/commands/timeout.c b/commands/timeout.c index dfbefc9c7..5f2ab9a20 100644 --- a/commands/timeout.c +++ b/commands/timeout.c @@ -31,7 +31,7 @@ #define TIMEOUT_ANYKEY (1 << 2) #define TIMEOUT_SILENT (1 << 3) -static int do_timeout(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_timeout(struct command *cmdtp, int argc, char *argv[]) { int timeout = 3, ret = 1; int flags = 0, opt, countdown; diff --git a/commands/true.c b/commands/true.c index 4697a8115..8c77dec26 100644 --- a/commands/true.c +++ b/commands/true.c @@ -24,7 +24,7 @@ #include #include -static int do_true (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_true(struct command *cmdtp, int argc, char *argv[]) { return 0; } diff --git a/commands/umount.c b/commands/umount.c index 0dc517a32..6ae584411 100644 --- a/commands/umount.c +++ b/commands/umount.c @@ -24,7 +24,7 @@ #include #include -static int do_umount (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_umount(struct command *cmdtp, int argc, char *argv[]) { int ret = 0; diff --git a/commands/version.c b/commands/version.c index 425f430f1..6c683d9bf 100644 --- a/commands/version.c +++ b/commands/version.c @@ -24,7 +24,7 @@ #include #include -static int do_version (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_version(struct command *cmdtp, int argc, char *argv[]) { extern char version_string[]; printf ("\n%s\n", version_string); diff --git a/common/command.c b/common/command.c index e21e80dc1..8ed107256 100644 --- a/common/command.c +++ b/common/command.c @@ -44,7 +44,7 @@ EXPORT_SYMBOL(command_list); #ifdef CONFIG_SHELL_HUSH -static int do_exit (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_exit(struct command *cmdtp, int argc, char *argv[]) { int r; @@ -62,7 +62,7 @@ BAREBOX_CMD_END #endif -void barebox_cmd_usage(cmd_tbl_t *cmdtp) +void barebox_cmd_usage(struct command *cmdtp) { #ifdef CONFIG_LONGHELP /* found - print (long) help info */ @@ -85,15 +85,15 @@ EXPORT_SYMBOL(barebox_cmd_usage); static int compare(struct list_head *a, struct list_head *b) { - char *na = (char*)list_entry(a, cmd_tbl_t, list)->name; - char *nb = (char*)list_entry(b, cmd_tbl_t, list)->name; + char *na = (char*)list_entry(a, struct command, list)->name; + char *nb = (char*)list_entry(b, struct command, list)->name; return strcmp(na, nb); } int execute_command(int argc, char **argv) { - cmd_tbl_t *cmdtp; + struct command *cmdtp; int ret; getopt_reset(); @@ -117,7 +117,7 @@ int execute_command(int argc, char **argv) } } -int register_command(cmd_tbl_t *cmd) +int register_command(struct command *cmd) { /* * We do not check if the command already exists. @@ -133,9 +133,9 @@ int register_command(cmd_tbl_t *cmd) char **aliases = (char**)cmd->aliases; while(*aliases) { char *usage = "alias for "; - cmd_tbl_t *c = xzalloc(sizeof(cmd_tbl_t)); + struct command *c = xzalloc(sizeof(struct command)); - memcpy(c, cmd, sizeof(cmd_tbl_t)); + memcpy(c, cmd, sizeof(struct command)); c->name = *aliases; c->usage = xmalloc(strlen(usage) + strlen(cmd->name) + 1); @@ -156,15 +156,15 @@ EXPORT_SYMBOL(register_command); /* * find command table entry for a command */ -cmd_tbl_t *find_cmd (const char *cmd) +struct command *find_cmd (const char *cmd) { - cmd_tbl_t *cmdtp; - cmd_tbl_t *cmdtp_temp = &__barebox_cmd_start; /*Init value */ + struct command *cmdtp; + struct command *cmdtp_temp = &__barebox_cmd_start; /*Init value */ int len; int n_found = 0; len = strlen (cmd); - cmdtp = list_entry(&command_list, cmd_tbl_t, list); + cmdtp = list_entry(&command_list, struct command, list); for_each_command(cmdtp) { if (strncmp (cmd, cmdtp->name, len) == 0) { @@ -191,7 +191,7 @@ cmd_tbl_t *find_cmd (const char *cmd) */ static int init_command_list(void) { - cmd_tbl_t *cmdtp; + struct command *cmdtp; for (cmdtp = &__barebox_cmd_start; cmdtp != &__barebox_cmd_end; diff --git a/common/complete.c b/common/complete.c index 87435ee82..46ba871a9 100644 --- a/common/complete.c +++ b/common/complete.c @@ -69,7 +69,7 @@ out: static int command_complete(struct string_list *sl, char *instr) { - cmd_tbl_t *cmdtp; + struct command *cmdtp; char cmd[128]; for_each_command(cmdtp) { diff --git a/common/flash.c b/common/flash.c deleted file mode 100644 index 4e3d9a366..000000000 --- a/common/flash.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * (C) Copyright 2000 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -/* #define DEBUG */ - -#include -#include -#include - -extern flash_info_t flash_info[]; /* info for FLASH chips */ - -flash_info_t * -addr2info (ulong addr) -{ - printf("%s is broken\n",__FUNCTION__); - - return (NULL); -} - -void flash_perror (int err) -{ - switch (err) { - case ERR_OK: - break; - case ERR_TIMOUT: - puts ("Timeout writing to Flash\n"); - break; - case ERR_NOT_ERASED: - puts ("Flash not Erased\n"); - break; - case ERR_PROTECTED: - puts ("Can't write to protected Flash sectors\n"); - break; - case ERR_INVAL: - puts ("Outside available Flash\n"); - break; - case ERR_ALIGN: - puts ("Start and/or end address not on sector boundary\n"); - break; - case ERR_UNKNOWN_FLASH_VENDOR: - puts ("Unknown Vendor of Flash\n"); - break; - case ERR_UNKNOWN_FLASH_TYPE: - puts ("Unknown Type of Flash\n"); - break; - case ERR_PROG_ERROR: - puts ("General Flash Programming Error\n"); - break; - default: - printf ("%s[%d] FIXME: rc=%d\n", __FILE__, __LINE__, err); - break; - } -} diff --git a/common/hush.c b/common/hush.c index e7a13c2bd..cf6704be7 100644 --- a/common/hush.c +++ b/common/hush.c @@ -122,7 +122,7 @@ #include /*cmd_boot.c*/ -extern int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); /* do_bootd */ +extern int do_bootd(struct command *cmdtp, int flag, int argc, char *argv[]); /* do_bootd */ #define SPECIAL_VAR_SYMBOL 03 @@ -1583,7 +1583,7 @@ int run_shell(void) return rcode; } -static int do_sh(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_sh(struct command *cmdtp, int argc, char *argv[]) { if (argc < 2) return COMMAND_ERROR_USAGE; @@ -1602,7 +1602,7 @@ BAREBOX_CMD_START(sh) BAREBOX_CMD_HELP(cmd_sh_help) BAREBOX_CMD_END -static int do_source(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_source(struct command *cmdtp, int argc, char *argv[]) { if (argc < 2) return COMMAND_ERROR_USAGE; diff --git a/common/module.c b/common/module.c index cedd7029b..29f3eb78c 100644 --- a/common/module.c +++ b/common/module.c @@ -297,8 +297,8 @@ struct module * load_module(void *mod_image, unsigned long len) #ifdef CONFIG_COMMAND cmdindex = find_sec(ehdr, sechdrs, secstrings, ".barebox_cmd"); if (cmdindex) { - cmd_tbl_t *cmd = (cmd_tbl_t *)sechdrs[cmdindex].sh_addr; - for (i = 0; i < sechdrs[cmdindex].sh_size / sizeof(cmd_tbl_t); i++) { + struct command *cmd =(struct command *)sechdrs[cmdindex].sh_addr; + for (i = 0; i < sechdrs[cmdindex].sh_size / sizeof(struct command); i++) { register_command(cmd); cmd++; } diff --git a/drivers/nand/nand_imx.c b/drivers/nand/nand_imx.c index 831ba628d..bd5ec10a2 100644 --- a/drivers/nand/nand_imx.c +++ b/drivers/nand/nand_imx.c @@ -1149,7 +1149,7 @@ void __nand_boot_init imx_nand_load_image(void *dest, int size) #ifdef CONFIG_NAND_IMX_BOOT_DEBUG #include -static int do_nand_boot_test(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_nand_boot_test(struct command *cmdtp, int argc, char *argv[]) { void *dest; int size; diff --git a/drivers/nand/nand_s3c2410.c b/drivers/nand/nand_s3c2410.c index 2f98c7622..b98958305 100644 --- a/drivers/nand/nand_s3c2410.c +++ b/drivers/nand/nand_s3c2410.c @@ -484,7 +484,7 @@ void __nand_boot_init s3c24x0_nand_load_image(void *dest, int size, int page, in #ifdef CONFIG_NAND_S3C24XX_BOOT_DEBUG #include -static int do_nand_boot_test(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_nand_boot_test(struct command *cmdtp, int argc, char *argv[]) { void *dest; int size, pagesize; diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c index d3b49edaf..cb65b1998 100644 --- a/drivers/usb/gadget/u_serial.c +++ b/drivers/usb/gadget/u_serial.c @@ -470,7 +470,7 @@ fail_out: } #include -static int do_mycdev (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_mycdev(struct command *cmdtp, int argc, char *argv[]) { int i,j; diff --git a/drivers/usb/usb.c b/drivers/usb/usb.c index decdbdd8e..1ad4babb8 100644 --- a/drivers/usb/usb.c +++ b/drivers/usb/usb.c @@ -478,7 +478,7 @@ static int __usb_init(void) return 0; } -static int do_usb(cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_usb(struct command *cmdtp, int argc, char *argv[]) { __usb_init(); diff --git a/include/command.h b/include/command.h index f103045fd..a612d65e5 100644 --- a/include/command.h +++ b/include/command.h @@ -42,12 +42,11 @@ extern struct list_head command_list; /* * Monitor Command Table */ - -struct cmd_tbl_s { +struct command { const char *name; /* Command Name */ const char **aliases; /* Implementation function */ - int (*cmd)(struct cmd_tbl_s *, int, char *[]); + int (*cmd)(struct command *, int, char *[]); const char *usage; /* Usage message (short) */ struct list_head list; /* List of commands */ @@ -61,17 +60,14 @@ __attribute__((aligned(64))) #endif ; - -typedef struct cmd_tbl_s cmd_tbl_t; - -extern cmd_tbl_t __barebox_cmd_start; -extern cmd_tbl_t __barebox_cmd_end; +extern struct command __barebox_cmd_start; +extern struct command __barebox_cmd_end; /* common/command.c */ -cmd_tbl_t *find_cmd(const char *cmd); +struct command *find_cmd(const char *cmd); int execute_command(int argc, char **argv); -void barebox_cmd_usage(cmd_tbl_t *cmdtp); +void barebox_cmd_usage(struct command *cmdtp); #define COMMAND_SUCCESS 0 #define COMMAND_ERROR 1 @@ -79,11 +75,6 @@ void barebox_cmd_usage(cmd_tbl_t *cmdtp); #endif /* __ASSEMBLY__ */ -/* - * Configurable monitor commands definitions have been moved - * to include/cmd_confdefs.h - */ - #define __stringify_1(x) #x #define __stringify(x) __stringify_1(x) @@ -91,7 +82,7 @@ void barebox_cmd_usage(cmd_tbl_t *cmdtp); #define Struct_Section __attribute__ ((unused,section (".barebox_cmd"))) #define BAREBOX_CMD_START(_name) \ -const cmd_tbl_t __barebox_cmd_##_name \ +const struct command __barebox_cmd_##_name \ __attribute__ ((unused,section (".barebox_cmd_" __stringify(_name)))) = { \ .name = #_name, @@ -104,6 +95,6 @@ const cmd_tbl_t __barebox_cmd_##_name \ #define BAREBOX_CMD_HELP(text) #endif -int register_command(cmd_tbl_t *); +int register_command(struct command *); #endif /* __COMMAND_H */ diff --git a/include/net.h b/include/net.h index c689a4327..7353c8f50 100644 --- a/include/net.h +++ b/include/net.h @@ -279,10 +279,6 @@ extern uchar NetEtherNullAddr[6]; extern ushort NetOurVLAN; /* Our VLAN */ extern ushort NetOurNativeVLAN; /* Our Native VLAN */ -extern uchar NetCDPAddr[6]; /* Ethernet CDP address */ -extern ushort CDPNativeVLAN; /* CDP returned native VLAN */ -extern ushort CDPApplianceVLAN; /* CDP returned appliance VLAN */ - extern int NetState; /* Network loop state */ /* ---------- Added by sha ------------ */ @@ -301,10 +297,6 @@ extern void ArpRequest (void); typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP } proto_t; -/* when CDP completes these hold the return values */ -extern ushort CDPNativeVLAN; -extern ushort CDPApplianceVLAN; - /* Initialize the network adapter */ int NetLoopInit(proto_t); diff --git a/lib/driver.c b/lib/driver.c index b3115de59..f433c3e9b 100644 --- a/lib/driver.c +++ b/lib/driver.c @@ -280,7 +280,7 @@ void devices_shutdown(void) #ifdef CONFIG_CMD_DEVINFO -static int do_devinfo ( cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_devinfo(struct command *cmdtp, int argc, char *argv[]) { struct device_d *dev; struct driver_d *drv; diff --git a/net/dhcp.c b/net/dhcp.c index 1c479cfe2..f27a6966d 100644 --- a/net/dhcp.c +++ b/net/dhcp.c @@ -589,7 +589,7 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) } -static int do_dhcp (cmd_tbl_t *cmdtp, int argc, char *argv[]) +static int do_dhcp(struct command *cmdtp, int argc, char *argv[]) { int size; diff --git a/net/net.c b/net/net.c index 214685c5e..4554d49e3 100644 --- a/net/net.c +++ b/net/net.c @@ -153,9 +153,8 @@ void ArpRequest (void) uchar *pkt; ARP_t *arp; -#ifdef ET_DEBUG - printf ("ARP broadcast\n"); -#endif + pr_debug("ARP broadcast\n"); + pkt = NetTxPacket; pkt += NetSetEther (pkt, NetBcastAddr, PROT_ARP); @@ -190,18 +189,6 @@ void ArpRequest (void) (void) eth_send (NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE); } -static void ArpTimeoutCheck(void) -{ - if (!NetArpWaitPacketIP) - return; - - /* check for arp timeout */ - if (is_timeout(NetArpWaitTimerStart, ARP_TIMEOUT)) { - NetArpWaitTimerStart = get_time_ns(); - ArpRequest(); - } -} - /**********************************************************************/ /* * Main network processing loop. @@ -299,7 +286,12 @@ int NetLoop(void) return -1; } - ArpTimeoutCheck(); + /* check for arp timeout */ + if (NetArpWaitPacketIP && + is_timeout(NetArpWaitTimerStart, ARP_TIMEOUT)) { + NetArpWaitTimerStart = get_time_ns(); + ArpRequest(); + } /* * Check for a timeout, and run the timeout handler @@ -379,10 +371,8 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len) /* if MAC address was not discovered yet, save the packet and do an ARP request */ if (memcmp(ether, NetEtherNullAddr, 6) == 0) { + pr_debug("sending ARP for %08lx\n", dest); -#ifdef ET_DEBUG - printf("sending ARP for %08lx\n", dest); -#endif NetArpWaitPacketIP = dest; NetArpWaitPacketMAC = ether; @@ -401,10 +391,8 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len) return 1; /* waiting */ } -#ifdef ET_DEBUG - printf("sending UDP to %08lx/%02x:%02x:%02x:%02x:%02x:%02x\n", + pr_debug("sending UDP to %08lx/%02x:%02x:%02x:%02x:%02x:%02x\n", dest, ether[0], ether[1], ether[2], ether[3], ether[4], ether[5]); -#endif pkt = (uchar *)NetTxPacket; pkt += NetSetEther (pkt, ether, PROT_IP); @@ -425,9 +413,7 @@ NetReceive(uchar * inpkt, int len) uchar *pkt; ushort cti = 0, vlanid = VLAN_NONE, myvlanid, mynvlanid; -#ifdef ET_DEBUG - printf("packet received\n"); -#endif + pr_debug("packet received\n"); NetRxPkt = inpkt; NetRxPktLen = len; @@ -446,9 +432,7 @@ NetReceive(uchar * inpkt, int len) x = ntohs(et->et_protlen); -#ifdef ET_DEBUG - printf("packet received\n"); -#endif + pr_debug("packet received\n"); if (x < 1514) { /* @@ -466,9 +450,8 @@ NetReceive(uchar * inpkt, int len) } else { /* VLAN packet */ VLAN_Ethernet_t *vet = (VLAN_Ethernet_t *)et; -#ifdef ET_DEBUG - printf("VLAN packet received\n"); -#endif + pr_debug("VLAN packet received\n"); + /* too small packet? */ if (len < VLAN_ETHER_HDR_SIZE) return; @@ -486,9 +469,7 @@ NetReceive(uchar * inpkt, int len) len -= VLAN_ETHER_HDR_SIZE; } -#ifdef ET_DEBUG - printf("Receive from protocol 0x%x\n", x); -#endif + pr_debug("Receive from protocol 0x%x\n", x); if ((myvlanid & VLAN_IDMASK) != VLAN_NONE) { if (vlanid == VLAN_NONE) @@ -510,9 +491,8 @@ NetReceive(uchar * inpkt, int len) * address; so if we receive such a packet, we set * the server ethernet address */ -#ifdef ET_DEBUG - puts ("Got ARP\n"); -#endif + pr_debug("Got ARP\n"); + arp = (ARP_t *)ip; if (len < ARP_HDR_SIZE) { printf("bad length %d < %d\n", len, ARP_HDR_SIZE); @@ -541,9 +521,8 @@ NetReceive(uchar * inpkt, int len) switch (ntohs(arp->ar_op)) { case ARPOP_REQUEST: /* reply with our IP address */ -#ifdef ET_DEBUG - puts ("Got ARP REQUEST, return our IP\n"); -#endif + pr_debug("Got ARP REQUEST, return our IP\n"); + pkt = (uchar *)et; pkt += NetSetEther(pkt, et->et_src, PROT_ARP); arp->ar_op = htons(ARPOP_REPLY); @@ -559,26 +538,20 @@ NetReceive(uchar * inpkt, int len) /* are we waiting for a reply */ if (!NetArpWaitPacketIP || !NetArpWaitPacketMAC) break; -#ifdef ET_DEBUG - printf("Got ARP REPLY, set server/gtwy eth addr (%02x:%02x:%02x:%02x:%02x:%02x)\n", + pr_debug("Got ARP REPLY, set server/gtwy eth addr (%02x:%02x:%02x:%02x:%02x:%02x)\n", arp->ar_data[0], arp->ar_data[1], arp->ar_data[2], arp->ar_data[3], arp->ar_data[4], arp->ar_data[5]); -#endif tmp = NetReadIP(&arp->ar_data[6]); /* matched waiting packet's address */ if (tmp == NetArpWaitReplyIP) { -#ifdef ET_DEBUG - puts ("Got it\n"); -#endif + pr_debug("Got it\n"); + /* save address for later use */ memcpy(NetArpWaitPacketMAC, &arp->ar_data[0], 6); -#ifdef CONFIG_NETCONSOLE - (*packetHandler)(0,0,0,0); -#endif /* modify header, and transmit it */ memcpy(((Ethernet_t *)NetArpWaitTxPacket)->et_dest, NetArpWaitPacketMAC, 6); (void) eth_send(NetArpWaitTxPacket, NetArpWaitTxPacketSize); @@ -591,17 +564,14 @@ NetReceive(uchar * inpkt, int len) } return; default: -#ifdef ET_DEBUG - printf("Unexpected ARP opcode 0x%x\n", ntohs(arp->ar_op)); -#endif + pr_debug("Unexpected ARP opcode 0x%x\n", ntohs(arp->ar_op)); return; } break; case PROT_RARP: -#ifdef ET_DEBUG - puts ("Got RARP\n"); -#endif + pr_debug("Got RARP\n"); + arp = (ARP_t *)ip; if (len < ARP_HDR_SIZE) { printf("bad length %d < %d\n", len, ARP_HDR_SIZE); @@ -625,9 +595,8 @@ NetReceive(uchar * inpkt, int len) break; case PROT_IP: -#ifdef ET_DEBUG - puts ("Got IP\n"); -#endif + pr_debug("Got IP\n"); + if (len < IP_HDR_SIZE) { debug ("len bad %d < %d\n", len, IP_HDR_SIZE); return; @@ -637,9 +606,9 @@ NetReceive(uchar * inpkt, int len) return; } len = ntohs(ip->ip_len); -#ifdef ET_DEBUG - printf("len=%d, v=%02x\n", len, ip->ip_hl_v & 0xff); -#endif + + pr_debug("len=%d, v=%02x\n", len, ip->ip_hl_v & 0xff); + if ((ip->ip_hl_v & 0xf0) != 0x40) { return; } @@ -737,13 +706,6 @@ NetReceive(uchar * inpkt, int len) } } #endif - -#ifdef CONFIG_NETCONSOLE - nc_input_packet((uchar *)ip +IP_HDR_SIZE, - ntohs(ip->udp_dst), - ntohs(ip->udp_src), - ntohs(ip->udp_len) - 8); -#endif /* * IP header OK. Pass the packet to the current handler. */ diff --git a/net/nfs.c b/net/nfs.c index fe0bc70cb..15f91abc4 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -29,6 +29,9 @@ #include #include #include +#include +#include +#include #include "nfs.h" /*#define NFS_DEBUG*/ @@ -63,7 +66,7 @@ static char *nfs_filename; static char *nfs_path; static char nfs_path_buff[2048]; -extern int net_store_fd; +static int net_store_fd; static __inline__ int store_block (uchar * src, unsigned offset, unsigned len) @@ -703,3 +706,54 @@ NfsStart (char *p) NfsSend (); } +static int do_nfs(struct command *cmdtp, int argc, char *argv[]) +{ + int rcode = 0; + char *localfile; + char *remotefile; + + if (argc < 2) + return COMMAND_ERROR_USAGE; + + remotefile = argv[1]; + + if (argc == 2) + localfile = basename(remotefile); + else + localfile = argv[2]; + + net_store_fd = open(localfile, O_WRONLY | O_CREAT); + if (net_store_fd < 0) { + perror("open"); + return 1; + } + + if (NetLoopInit(NFS) < 0) + goto out; + + NfsStart(remotefile); + + rcode = NetLoop(); + if (rcode < 0) { + rcode = 1; + goto out; + } + + /* NetLoop ok, update environment */ + netboot_update_env(); + +out: + close(net_store_fd); + return rcode; +} + +static const __maybe_unused char cmd_nfs_help[] = +"Usage: nfs [localfile]\n" +"Load a file via network using nfs protocol.\n"; + +BAREBOX_CMD_START(nfs) + .cmd = do_nfs, + .usage = "boot image via network using nfs protocol", + BAREBOX_CMD_HELP(cmd_nfs_help) +BAREBOX_CMD_END + diff --git a/net/ping.c b/net/ping.c index 7a1fda258..1bc481af4 100644 --- a/net/ping.c +++ b/net/ping.c @@ -18,9 +18,7 @@ static int PingSend(void) memcpy(mac, NetEtherNullAddr, 6); -#ifdef ET_DEBUG - printf("sending ARP for %08lx\n", NetPingIP); -#endif + pr_debug("sending ARP for %08lx\n", NetPingIP); NetArpWaitPacketIP = NetPingIP; NetArpWaitPacketMAC = mac; @@ -81,7 +79,7 @@ PingHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len) NetState = NETLOOP_SUCCESS; } -int do_ping (cmd_tbl_t *cmdtp, int argc, char *argv[]) +int do_ping(struct command *cmdtp, int argc, char *argv[]) { if (argc < 2 || string_to_ip(argv[1], &NetPingIP)) return COMMAND_ERROR_USAGE; diff --git a/net/tftp.c b/net/tftp.c index 169855f2d..26f0c43df 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -11,10 +11,10 @@ #include #include #include +#include +#include #include "tftp.h" -#undef ET_DEBUG - #define WELL_KNOWN_PORT 69 /* Well known TFTP port # */ #define TIMEOUT 5 /* Seconds to timeout for a lost pkt */ # define TIMEOUT_COUNT 10 /* # of timeouts before giving up */ @@ -49,7 +49,7 @@ static int TftpState; static char *tftp_filename; -extern int net_store_fd; +static int net_store_fd; static int store_block(unsigned block, uchar * src, unsigned len) { @@ -253,3 +253,71 @@ void TftpStart(char *filename) TftpSend(); } + +static int do_tftpb(struct command *cmdtp, int argc, char *argv[]) +{ + int rcode = 0; + char *localfile; + char *remotefile; + + if (argc < 2) + return COMMAND_ERROR_USAGE; + + remotefile = argv[1]; + + if (argc == 2) + localfile = basename(remotefile); + else + localfile = argv[2]; + + net_store_fd = open(localfile, O_WRONLY | O_CREAT); + if (net_store_fd < 0) { + perror("open"); + return 1; + } + + if (NetLoopInit(TFTP) < 0) + goto out; + + TftpStart(remotefile); + + rcode = NetLoop(); + if (rcode < 0) { + rcode = 1; + goto out; + } + + /* NetLoop ok, update environment */ + netboot_update_env(); + +out: + close(net_store_fd); + return rcode; +} + +static const __maybe_unused char cmd_tftp_help[] = +"Usage: tftp [localfile]\n" +"Load a file via network using BootP/TFTP protocol.\n"; + +BAREBOX_CMD_START(tftp) + .cmd = do_tftpb, + .usage = "Load file using tftp protocol", + BAREBOX_CMD_HELP(cmd_tftp_help) +BAREBOX_CMD_END + +/** + * @page tftp_command tftp + * + * Usage is: tftp \ [\] + * + * Load a file via network using BootP/TFTP protocol. The loaded file you + * can find after download in you current ramdisk. Refer \b ls command. + * + * \ can be the local filename only, or also a device name. In the + * case of a device name, the will gets stored there. This works also for + * partitions of flash memory. Refer \b erase, \b unprotect for flash + * preparation. + * + * Note: This command is available only, if enabled in the menuconfig. + */ +