1 @ linux/arch/arm/drivers/scsi/acornscsi-io.S: Acorn SCSI card IO
2 #include <linux/linkage.h>
4 #include <asm/assembler.h>
5 #include <asm/hardware.h>
7 #if (IO_BASE == (PCIO_BASE & 0xff000000))
8 #define ADDR(off,reg) \
9 tst off, $0x80000000 ;\
11 orreq reg, reg, $(PCIO_BASE & 0x00ff0000)
13 #define ADDR(off,reg) \
14 tst off, $0x80000000 ;\
15 movne reg, $IO_BASE ;\
16 moveq reg, $(PCIO_BASE & 0xff000000) ;\
17 orreq reg, reg, $(PCIO_BASE & 0x00ff0000)
20 @ Purpose: transfer a block of data from the acorn scsi card to memory
21 @ Proto : void acornscsi_in(unsigned int addr_start, char *buffer, int length)
26 stmfd sp!, {r4 - r7, lr}
33 ldmia r0!, {r3, r4, r5, r6}
35 orr r3, r3, r4, lsl #16
37 orr r4, r4, r6, lsl #16
38 ldmia r0!, {r5, r6, r7, ip}
40 orr r5, r5, r6, lsl #16
42 orr r6, r6, ip, lsl #16
45 LOADREGS(fd, sp!, {r4 - r7, pc})
47 acornscsi_in8: adds r2, r2, #8
49 ldmia r0!, {r3, r4, r5, r6}
51 orr r3, r3, r4, lsl #16
53 orr r4, r4, r6, lsl #16
55 LOADREGS(eqfd, sp!, {r4 - r7, pc})
58 acornscsi_in4: adds r2, r2, #4
62 orr r3, r3, r4, lsl #16
64 LOADREGS(eqfd, sp!, {r4 - r7, pc})
67 acornscsi_in2: adds r2, r2, #2
73 LOADREGS(fd, sp!, {r4 - r7, pc})
75 @ Purpose: transfer a block of data from memory to the acorn scsi card
76 @ Proto : void acornscsi_in(unsigned int addr_start, char *buffer, int length)
79 ENTRY(__acornscsi_out)
80 stmfd sp!, {r4 - r6, lr}
85 ldmia r1!, {r4, r6, ip, lr}
87 orr r3, r3, r3, lsr #16
89 orr r4, r4, r4, lsl #16
91 orr r5, r5, r5, lsr #16
93 orr r6, r6, r6, lsl #16
94 stmia r0!, {r3, r4, r5, r6}
96 orr r3, r3, r3, lsr #16
98 orr r4, r4, r4, lsl #16
100 orr ip, ip, ip, lsr #16
102 orr lr, lr, lr, lsl #16
103 stmia r0!, {r3, r4, ip, lr}
104 bne acornscsi_out16lp
105 LOADREGS(fd, sp!, {r4 - r6, pc})
107 acornscsi_out8: adds r2, r2, #8
111 orr r3, r3, r3, lsr #16
113 orr r4, r4, r4, lsl #16
115 orr r5, r5, r5, lsr #16
117 orr r6, r6, r6, lsl #16
118 stmia r0!, {r3, r4, r5, r6}
119 LOADREGS(eqfd, sp!, {r4 - r6, pc})
122 acornscsi_out4: adds r2, r2, #4
126 orr r3, r3, r3, lsr #16
128 orr r4, r4, r4, lsl #16
130 LOADREGS(eqfd, sp!, {r4 - r6, pc})
133 acornscsi_out2: adds r2, r2, #2
138 LOADREGS(fd, sp!, {r4 - r6, pc})