blob: 5f62ade5be39141ea60eaaa3deb41e50dc348fe0 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070010#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 */
50ENTRY(insl)
51ENTRY(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
60ENTRY(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