patch-2.4.0-test12 linux/arch/arm/lib/io-ebsa110.S
Next file: linux/arch/arm/lib/io-footbridge.S
Previous file: linux/arch/arm/lib/io-acorn.S
Back to the patch index
Back to the overall index
- Lines: 170
- Date:
Wed Dec 31 16:00:00 1969
- Orig file:
v2.4.0-test11/linux/arch/arm/lib/io-ebsa110.S
- Orig date:
Sun Oct 8 10:50:05 2000
diff -u --recursive --new-file v2.4.0-test11/linux/arch/arm/lib/io-ebsa110.S linux/arch/arm/lib/io-ebsa110.S
@@ -1,169 +0,0 @@
-/*
- * linux/arch/arm/lib/io-ebsa.S
- *
- * Copyright (C) 1995, 1996 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#include <linux/linkage.h>
-#include <asm/assembler.h>
- .text
- .align
-
-#define OUT(reg) \
- mov r8, reg, lsl $16 ;\
- orr r8, r8, r8, lsr $16 ;\
- str r8, [r3, r0, lsl $2] ;\
- mov r8, reg, lsr $16 ;\
- orr r8, r8, r8, lsl $16 ;\
- str r8, [r3, r0, lsl $2]
-
-#define IN(reg) \
- ldr reg, [r0] ;\
- and reg, reg, ip ;\
- ldr lr, [r0] ;\
- orr reg, reg, lr, lsl $16
-
-/*
- * These make no sense on these machines.
- * Print a warning message.
- */
-ENTRY(insl)
-ENTRY(outsl)
-ENTRY(insb)
-ENTRY(outsb)
- adr r0, io_long_warning
- mov r1, lr
- b SYMBOL_NAME(printk)
-
-io_long_warning:
- .ascii "<4>ins?/outs? not implemented on this architecture\0"
- .align
-
-@ Purpose: read a block of data from a hardware register to memory.
-@ Proto : insw(int from_port, void *to, int len_in_words);
-@ Proto : inswb(int from_port, void *to, int len_in_bytes);
-@ Notes : increment to
-
-ENTRY(insw)
- mov r2, r2, lsl#1
-ENTRY(inswb)
- mov ip, sp
- stmfd sp!, {r4 - r10 ,fp ,ip ,lr ,pc}
- sub fp, ip, #4
- cmp r0, #0x00c00000
- movge r3, #0
- movlt r3, #0xf0000000
- add r0, r3, r0, lsl #2
- tst r1, #3
- beq Linswok
- tst r1, #1
- bne Linsw_notaligned
- cmp r2, #1
- ldrge r4, [r0]
- strgeb r4, [r1], #1
- movgt r4, r4, LSR#8
- strgtb r4, [r1], #1
- ldmleea fp, {r4 - r10, fp, sp, pc}^
- sub r2, r2, #2
-Linswok: mov ip, #0xFF
- orr ip, ip, ip, lsl #8
-Linswlp: subs r2, r2, #64
- bmi Linsw_toosmall
- IN(r3)
- IN(r4)
- IN(r5)
- IN(r6)
- IN(r7)
- IN(r8)
- IN(r9)
- IN(r10)
- stmia r1!, {r3 - r10}
- IN(r3)
- IN(r4)
- IN(r5)
- IN(r6)
- IN(r7)
- IN(r8)
- IN(r9)
- IN(r10)
- stmia r1!, {r3 - r10}
- bne Linswlp
- LOADREGS(ea, fp, {r4 - r10, fp, sp, pc})
-Linsw_toosmall:
- add r2, r2, #32
- bmi Linsw_toosmall2
-Linsw2lp: IN(r3)
- IN(r4)
- IN(r5)
- IN(r6)
- IN(r7)
- IN(r8)
- IN(r9)
- IN(r10)
- stmia r1!, {r3 - r10}
- LOADREGS(eqea, fp, {r4 - r10, fp, sp, pc})
- b Linsw_notaligned
-Linsw_toosmall2:
- add r2, r2, #32
-Linsw_notaligned:
- cmp r2, #1
- LOADREGS(ltea, fp, {r4 - r10, fp, sp, pc})
- ldr r4, [r0]
- strb r4, [r1], #1
- movgt r4, r4, LSR#8
- strgtb r4, [r1], #1
- subs r2, r2, #2
- bgt Linsw_notaligned
- LOADREGS(ea, fp, {r4 - r10, fp, sp, pc})
-
-@ Purpose: write a block of data from memory to a hardware register.
-@ Proto : outsw(int to_reg, void *from, int len_in_words);
-@ Proto : outswb(int to_reg, void *from, int len_in_bytes);
-@ Notes : increments from
-
-ENTRY(outsw)
- mov r2, r2, LSL#1
-ENTRY(outswb)
- mov ip, sp
- stmfd sp!, {r4 - r8, fp, ip, lr, pc}
- sub fp, ip, #4
- cmp r0, #0x00c00000
- movge r3, #0
- movlt r3, #0xf0000000
- tst r1, #2
- beq Loutsw32lp
- ldr r4, [r1], #2
- mov r4, r4, lsl #16
- orr r4, r4, r4, lsr #16
- str r4, [r3, r0, lsl #2]
- sub r2, r2, #2
- teq r2, #0
- LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
-Loutsw32lp: subs r2,r2,#32
- blt Loutsw_toosmall
- ldmia r1!,{r4,r5,r6,r7}
- OUT(r4)
- OUT(r5)
- OUT(r6)
- OUT(r7)
- ldmia r1!,{r4,r5,r6,r7}
- OUT(r4)
- OUT(r5)
- OUT(r6)
- OUT(r7)
- LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
- b Loutsw32lp
-Loutsw_toosmall:
- adds r2,r2,#32
- LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
-Llpx: ldr r4,[r1],#2
- mov r4,r4,LSL#16
- orr r4,r4,r4,LSR#16
- str r4,[r3,r0,LSL#2]
- subs r2,r2,#2
- bgt Llpx
- LOADREGS(ea, fp, {r4 - r8, fp, sp, pc})
-
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)