9
0
Fork 0

Merge branch 'pu'

This commit is contained in:
Sascha Hauer 2010-02-01 17:25:59 +01:00
commit 6cbf70a01a
80 changed files with 734 additions and 450 deletions

View File

@ -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

View File

@ -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

137
arch/arm/cpu/cache-armv4.S Normal file
View File

@ -0,0 +1,137 @@
#include <linux/linkage.h>
#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

131
arch/arm/cpu/cache-armv6.S Normal file
View File

@ -0,0 +1,131 @@
#include <linux/linkage.h>
#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

185
arch/arm/cpu/cache-armv7.S Normal file
View File

@ -0,0 +1,185 @@
#include <linux/linkage.h>
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)

View File

@ -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");

View File

@ -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;

View File

@ -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"
);
}

View File

@ -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");

View File

@ -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

View File

@ -4,7 +4,7 @@
#include <mach/imx-regs.h>
#include <mach/clock.h>
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;

View File

@ -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();

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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]

View File

@ -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;

View File

@ -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";

View File

@ -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;

View File

@ -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;

View File

@ -30,7 +30,7 @@
#include <fs.h>
#include <errno.h>
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;

View File

@ -24,7 +24,7 @@
#include <command.h>
#include <readkey.h>
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);

View File

@ -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;

View File

@ -30,7 +30,7 @@
#include <malloc.h>
#include <linux/ctype.h>
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;

View File

@ -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;

View File

@ -26,7 +26,7 @@
#include <fcntl.h>
#include <errno.h>
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;

View File

@ -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;

View File

@ -29,7 +29,7 @@
#include <malloc.h>
#include <xfuncs.h>
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;

View File

@ -28,7 +28,7 @@
#include <errno.h>
#include <environment.h>
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;

View File

@ -24,7 +24,7 @@
#include <common.h>
#include <command.h>
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;
}

View File

@ -37,7 +37,7 @@
#include <fcntl.h>
#include <linux/stat.h>
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;

View File

@ -30,7 +30,7 @@
#include <linux/ctype.h>
#include <errno.h>
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;

View File

@ -20,7 +20,7 @@
#include <errno.h>
#include <gpio.h>
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;

View File

@ -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) {

View File

@ -5,7 +5,7 @@
#include <fs.h>
#include <malloc.h>
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;

View File

@ -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;

View File

@ -27,7 +27,7 @@
#include <command.h>
#include <environment.h>
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;

View File

@ -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;

View File

@ -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;

View File

@ -2,7 +2,7 @@
#include <command.h>
#include <module.h>
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;

View File

@ -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;

View File

@ -23,7 +23,7 @@
#include <command.h>
#include <malloc.h>
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();

View File

@ -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;

View File

@ -26,7 +26,7 @@
#include <errno.h>
#include <getopt.h>
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;

View File

@ -30,7 +30,7 @@
#include <fs.h>
#include <errno.h>
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;

View File

@ -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;

View File

@ -32,12 +32,8 @@
#include <driver.h>
#include <net.h>
#include <fs.h>
#include <fcntl.h>
#include <errno.h>
#include <libbb.h>
#include <libgen.h>
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 <file> [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 \<filename\> [\<localfilename\>]
*
* 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.
*
* \<localfile> 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 <file> [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;

View File

@ -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;

View File

@ -28,7 +28,7 @@
#include <errno.h>
#include <environment.h>
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;

View File

@ -23,7 +23,7 @@
#include <command.h>
#include <fs.h>
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;

View File

@ -27,7 +27,7 @@
#include <xfuncs.h>
#include <environment.h>
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);

View File

@ -23,7 +23,7 @@
#include <common.h>
#include <command.h>
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;

View File

@ -23,7 +23,7 @@
#include <common.h>
#include <command.h>
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);

View File

@ -24,7 +24,7 @@
#include <fs.h>
#include <errno.h>
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;

View File

@ -3,7 +3,7 @@
#include <fs.h>
#include <errno.h>
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;

View File

@ -30,7 +30,7 @@
#include <fcntl.h>
#include <environment.h>
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;

View File

@ -28,7 +28,7 @@
#include <errno.h>
#include <environment.h>
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;

View File

@ -24,7 +24,7 @@
#include <command.h>
#include <clock.h>
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;

View File

@ -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;

View File

@ -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;

View File

@ -24,7 +24,7 @@
#include <common.h>
#include <command.h>
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;
}

View File

@ -24,7 +24,7 @@
#include <fs.h>
#include <errno.h>
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;

View File

@ -24,7 +24,7 @@
#include <common.h>
#include <command.h>
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);

View File

@ -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;

View File

@ -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) {

View File

@ -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 <common.h>
#include <command.h>
#include <cfi_flash.h>
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;
}
}

View File

@ -122,7 +122,7 @@
#include <glob.h>
/*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;

View File

@ -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++;
}

View File

@ -1149,7 +1149,7 @@ void __nand_boot_init imx_nand_load_image(void *dest, int size)
#ifdef CONFIG_NAND_IMX_BOOT_DEBUG
#include <command.h>
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;

View File

@ -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 <command.h>
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;

View File

@ -470,7 +470,7 @@ fail_out:
}
#include <command.h>
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;

View File

@ -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();

View File

@ -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 */

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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.
*/

View File

@ -29,6 +29,9 @@
#include <malloc.h>
#include <libgen.h>
#include <fs.h>
#include <libgen.h>
#include <fcntl.h>
#include <errno.h>
#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 <file> [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

View File

@ -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;

View File

@ -11,10 +11,10 @@
#include <clock.h>
#include <fs.h>
#include <errno.h>
#include <libgen.h>
#include <fcntl.h>
#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 <file> [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 \<filename\> [\<localfilename\>]
*
* 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.
*
* \<localfile> 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.
*/