1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 #include <linux/linkage.h>
  10 #include <asm/assembler.h>
  11 
  12 #define CPSR2SPSR(rt) \
  13                 mrs     rt, cpsr; \
  14                 msr     spsr_cxsf, rt
  15 
  16 @ Purpose: call an expansion card loader to read bytes.
  17 @ Proto  : char read_loader(int offset, char *card_base, char *loader);
  18 @ Returns: byte read
  19 
  20 ENTRY(ecard_loader_read)
  21                 stmfd   sp!, {r4 - r12, lr}
  22                 mov     r11, r1
  23                 mov     r1, r0
  24                 CPSR2SPSR(r0)
  25                 mov     lr, pc
  26                 mov     pc, r2
  27                 ldmfd   sp!, {r4 - r12, pc}
  28 
  29 @ Purpose: call an expansion card loader to reset the card
  30 @ Proto  : void read_loader(int card_base, char *loader);
  31 @ Returns: byte read
  32 
  33 ENTRY(ecard_loader_reset)
  34                 stmfd   sp!, {r4 - r12, lr}
  35                 mov     r11, r0
  36                 CPSR2SPSR(r0)
  37                 mov     lr, pc
  38                 add     pc, r1, #8
  39                 ldmfd   sp!, {r4 - r12, pc}
  40