- Linus: drop support for old-style Makefiles entirely. Big.
[davej-history.git] / arch / arm / lib / io-acorn.S
bloba40272fdbd478d92fc299aa5d990166892ec4678
1 /*
2  *  linux/arch/arm/lib/io-acorn.S
3  *
4  *  Copyright (C) 1995, 1996 Russell King
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 #include <linux/config.h> /* for CONFIG_CPU_nn */
11 #include <linux/linkage.h>
12 #include <asm/assembler.h>
13 #include <asm/hardware.h>
15                 .text
16                 .align
18                 .equ    diff_pcio_base, PCIO_BASE - IO_BASE
20                 .macro  outw2   rd
21                 mov     r8, \rd, lsl #16
22                 orr     r8, r8, r8, lsr #16
23                 str     r8, [r3, r0, lsl #2]
24                 mov     r8, \rd, lsr #16
25                 orr     r8, r8, r8, lsl #16
26                 str     r8, [r3, r0, lsl #2]
27                 .endm
29                 .macro  inw2    rd, mask, temp
30                 ldr     \rd, [r0]
31                 and     \rd, \rd, \mask
32                 ldr     \temp, [r0]
33                 orr     \rd, \rd, \temp, lsl #16
34                 .endm
36                 .macro  addr    rd
37                 tst     \rd, #0x80000000
38                 mov     \rd, \rd, lsl #2
39                 add     \rd, \rd, #IO_BASE
40                 addeq   \rd, \rd, #diff_pcio_base
41                 .endm
43 .iosl_warning:
44                 .ascii  "<4>insl/outsl not implemented, called from %08lX\0"
45                 .align
48  * These make no sense on Acorn machines.
49  * Print a warning message.
50  */
51 ENTRY(insl)
52 ENTRY(outsl)
53                 adr     r0, .iosl_warning
54                 mov     r1, lr
55                 b       SYMBOL_NAME(printk)
57 /* Purpose: read a block of data from a hardware register to memory.
58  * Proto  : void insw(int from_port, void *to, int len_in_words);
59  * Notes  : increment to, 'to' must be 16-bit aligned
60  */
62 ENTRY(insw)
63                 teq     r2, #0
64                 RETINSTR(moveq, pc, lr)
65                 addr    r0
66                 b       __arch_readsw
68 ENTRY(insb)
69                 teq     r2, #0
70                 RETINSTR(moveq, pc, lr)
71                 addr    r0
72                 b       __arch_readsb
74 @ Purpose: write a block of data from memory to a hardware register.
75 @ Proto  : outsw(int to_reg, void *from, int len_in_words);
76 @ Notes  : increments from
78 ENTRY(outsw)
79                 teq     r2, #0
80                 RETINSTR(moveq, pc, lr)
81                 addr    r0
82                 b       __arch_writesw
84 ENTRY(outsb)
85                 teq     r2, #0
86                 RETINSTR(moveq, pc, lr)
87                 addr    r0
88                 b       __arch_writesb
90 @ Purpose: write a memc register
91 @ Proto  : void memc_write(int register, int value);
92 @ Returns: nothing
94 #if defined(CONFIG_CPU_26)
95 ENTRY(memc_write)
96                 cmp     r0, #7
97                 RETINSTR(movgt,pc,lr)
98                 mov     r0, r0, lsl #17
99                 mov     r1, r1, lsl #15
100                 mov     r1, r1, lsr #17
101                 orr     r0, r0, r1, lsl #2
102                 add     r0, r0, #0x03600000
103                 strb    r0, [r0]
104                 RETINSTR(mov,pc,lr)
105 #endif