2 * linux/arch/arm/lib/io-ebsa.S
4 * Copyright (C) 1995, 1996 Russell King
6 #include <linux/linkage.h>
7 #include <asm/assembler.h>
12 mov r8, reg, lsl $16 ;\
13 orr r8, r8, r8, lsr $16 ;\
14 str r8, [r3, r0, lsl $2] ;\
15 mov r8, reg, lsr $16 ;\
16 orr r8, r8, r8, lsl $16 ;\
17 str r8, [r3, r0, lsl $2]
23 orr reg, reg, lr, lsl $16
26 * These make no sense on these machines.
27 * Print a warning message.
33 adr r0, io_long_warning
38 .ascii "<4>ins?/outs? not implemented on this architecture\0"
41 @ Purpose: read a block of data from a hardware register to memory.
42 @ Proto : insw(int from_port, void *to, int len_in_words);
43 @ Proto : inswb(int from_port, void *to, int len_in_bytes);
44 @ Notes : increment to
50 stmfd sp!, {r4 - r10 ,fp ,ip ,lr ,pc}
55 add r0, r3, r0, lsl #2
65 ldmleea fp, {r4 - r10, fp, sp, pc}^
67 Linswok: mov ip, #0xFF
68 orr ip, ip, ip, lsl #8
69 Linswlp: subs r2, r2, #64
90 LOADREGS(ea, fp, {r4 - r10, fp, sp, pc})
102 stmia r1!, {r3 - r10}
103 LOADREGS(eqea, fp, {r4 - r10, fp, sp, pc})
109 LOADREGS(ltea, fp, {r4 - r10, fp, sp, pc})
116 LOADREGS(ea, fp, {r4 - r10, fp, sp, pc})
118 @ Purpose: write a block of data from memory to a hardware register.
119 @ Proto : outsw(int to_reg, void *from, int len_in_words);
120 @ Proto : outswb(int to_reg, void *from, int len_in_bytes);
121 @ Notes : increments from
127 stmfd sp!, {r4 - r8, fp, ip, lr, pc}
131 movlt r3, #0xf0000000
136 orr r4, r4, r4, lsr #16
137 str r4, [r3, r0, lsl #2]
140 LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
141 Loutsw32lp: subs r2,r2,#32
143 ldmia r1!,{r4,r5,r6,r7}
148 ldmia r1!,{r4,r5,r6,r7}
153 LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
157 LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
164 LOADREGS(ea, fp, {r4 - r8, fp, sp, pc})