Merge branch 'pu'
This commit is contained in:
commit
6cbf70a01a
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
160
commands/net.c
160
commands/net.c
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
98
net/net.c
98
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.
|
||||
*/
|
||||
|
|
56
net/nfs.c
56
net/nfs.c
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
74
net/tftp.c
74
net/tftp.c
|
@ -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.
|
||||
*/
|
||||
|
||||
|
|
Loading…
Reference in New Issue