Linux-2.6.12-rc2
[linux-2.6/next.git] / arch / arm26 / lib / io-acorn.S
blobf6c3e30b1b4f0a08c05f244e08c322eda4b05625
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/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       printk
57 @ Purpose: write a memc register
58 @ Proto  : void memc_write(int register, int value);
59 @ Returns: nothing
61 ENTRY(memc_write)
62                 cmp     r0, #7
63                 RETINSTR(movgt,pc,lr)
64                 mov     r0, r0, lsl #17
65                 mov     r1, r1, lsl #15
66                 mov     r1, r1, lsr #17
67                 orr     r0, r0, r1, lsl #2
68                 add     r0, r0, #0x03600000
69                 strb    r0, [r0]
70                 RETINSTR(mov,pc,lr)