Merge git://git.infradead.org/~dwmw2/cafe-2.6
[sfrench/cifs-2.6.git] / arch / arm26 / lib / io-acorn.S
1 /*
2  *  linux/arch/arm26/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/linkage.h>
11 #include <asm/assembler.h>
12 #include <asm/hardware.h>
13
14                 .text
15                 .align
16
17                 .equ    diff_pcio_base, PCIO_BASE - IO_BASE
18
19                 .macro  outw2   rd
20                 mov     r8, \rd, lsl #16
21                 orr     r8, r8, r8, lsr #16
22                 str     r8, [r3, r0, lsl #2]
23                 mov     r8, \rd, lsr #16
24                 orr     r8, r8, r8, lsl #16
25                 str     r8, [r3, r0, lsl #2]
26                 .endm
27
28                 .macro  inw2    rd, mask, temp
29                 ldr     \rd, [r0]
30                 and     \rd, \rd, \mask
31                 ldr     \temp, [r0]
32                 orr     \rd, \rd, \temp, lsl #16
33                 .endm
34
35                 .macro  addr    rd
36                 tst     \rd, #0x80000000
37                 mov     \rd, \rd, lsl #2
38                 add     \rd, \rd, #IO_BASE
39                 addeq   \rd, \rd, #diff_pcio_base
40                 .endm
41
42 .iosl_warning:
43                 .ascii  "<4>insl/outsl not implemented, called from %08lX\0"
44                 .align
45
46 /*
47  * These make no sense on Acorn machines.
48  * Print a warning message.
49  */
50 ENTRY(insl)
51 ENTRY(outsl)
52                 adr     r0, .iosl_warning
53                 mov     r1, lr
54                 b       printk
55
56 @ Purpose: write a memc register
57 @ Proto  : void memc_write(int register, int value);
58 @ Returns: nothing
59
60 ENTRY(memc_write)
61                 cmp     r0, #7
62                 RETINSTR(movgt,pc,lr)
63                 mov     r0, r0, lsl #17
64                 mov     r1, r1, lsl #15
65                 mov     r1, r1, lsr #17
66                 orr     r0, r0, r1, lsl #2
67                 add     r0, r0, #0x03600000
68                 strb    r0, [r0]
69                 RETINSTR(mov,pc,lr)
70