OpenCloudOS-Kernel/arch/h8300/lib/romfs.S

58 lines
885 B
ArmAsm

/* romfs move to __ebss */
#include <asm/linkage.h>
#if defined(__H8300H__)
.h8300h
#endif
#if defined(__H8300S__)
.h8300s
#endif
#define BLKOFFSET 512
.text
.globl __move_romfs
_romfs_sig_len = 8
__move_romfs:
mov.l #__sbss,er0
mov.l #_romfs_sig,er1
mov.b #_romfs_sig_len,r3l
1: /* check romfs image */
mov.b @er0+,r2l
mov.b @er1+,r2h
cmp.b r2l,r2h
bne 2f
dec.b r3l
bne 1b
/* find romfs image */
mov.l @__sbss+8,er0 /* romfs length(be) */
mov.l #__sbss,er1
add.l er0,er1 /* romfs image end */
mov.l #__ebss,er2
add.l er0,er2 /* distination address */
#if defined(CONFIG_INTELFLASH)
add.l #BLKOFFSET,er2
#endif
adds #2,er0
adds #1,er0
shlr er0
shlr er0 /* transfer length */
1:
mov.l @er1,er3 /* copy image */
mov.l er3,@er2
subs #4,er1
subs #4,er2
dec.l #1,er0
bpl 1b
2:
rts
.section .rodata
_romfs_sig:
.ascii "-rom1fs-"
.end