Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / arch / acorn32 / eb7500atx / rsbus_io_asm.S
blobe92825712aafba558b5e6f858422671950227a90
1 /*      $NetBSD: rsbus_io_asm.S,v 1.1.4.3 2004/09/21 13:11:27 skrll Exp $       */
3 /*
4  * Copyright (c) 1997 Mark Brinicombe.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. All advertising materials mentioning features or use of this software
16  *    must display the following acknowledgement:
17  *      This product includes software developed by Mark Brinicombe.
18  * 4. The name of the company nor the name of the author may be used to
19  *    endorse or promote products derived from this software without specific
20  *    prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
23  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25  * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
26  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
27  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  */
35 #include <machine/asm.h>
38  * bus_space I/O functions for rsbus
39  */
42  * read single
43  */
45 ENTRY(rsbus_bs_r_1)
46         mov     r2, r2, lsl r0
47         ldrb    r0, [r1, r2]
48         mov     pc, lr
50 ENTRY(rsbus_bs_r_2)
51         mov     r2, r2, lsl r0
52         ldr     r0, [r1, r2]
53         bic     r0, r0, #0xff000000
54         bic     r0, r0, #0x00ff0000
55         mov     pc, lr
57 ENTRY(rsbus_bs_r_4)
58         mov     r2, r2, lsl r0
59         ldr     r0, [r1, r2]
60         mov     pc, lr
63  * write single
64  */
66 ENTRY(rsbus_bs_w_1)
67         mov     r2, r2, lsl r0
68         strb    r3, [r1, r2]
69         mov     pc, lr
71 ENTRY(rsbus_bs_w_2)
72         mov     r3, r3, lsl #16
73         orr     r3, r3, r3, lsr #16
74         mov     r2, r2, lsl r0
75         str     r3, [r1, r2]
76         mov     pc, lr
78 ENTRY(rsbus_bs_w_4)
79         mov     r2, r2, lsl r0
80         str     r3, [r1, r2]
81         mov     pc, lr
84  * read multiple
85  */
87 ENTRY(rsbus_bs_rm_1)
88         add     r0, r1, r2, lsl r0
89         ldr     r2, [sp, #0]
91         /* Make sure that we have a positive length */
92         cmp     r2, #0x00000000
93         movle   pc, lr
95 rsbus_rm_1_loop:
96         ldrb    r1, [r0]
97         strb    r1, [r3], #0x0001
98         subs    r2, r2, #0x00000001
99         bgt     rsbus_rm_1_loop
101         mov     pc, lr
103 ENTRY(rsbus_bs_rm_2)
104         add     r0, r1, r2, lsl r0
105         mov     r1, r3
106         ldr     r2, [sp, #0]
107         b       _C_LABEL(insw)
110  * write multiple
111  */
113 ENTRY(rsbus_bs_wm_1)
114         add     r0, r1, r2, lsl r0
115         ldr     r2, [sp, #0]
117         /* Make sure that we have a positive length */
118         cmp     r2, #0x00000000
119         movle   pc, lr
121 rsbus_wm_1_loop:
122         ldrb    r1, [r3], #0x0001
123         strb    r1, [r0]
124         subs    r2, r2, #0x00000001
125         bgt     rsbus_wm_1_loop
127         mov     pc, lr
129 ENTRY(rsbus_bs_wm_2)
130         add     r0, r1, r2, lsl r0
131         mov     r1, r3
132         ldr     r2, [sp, #0]
133         b       _C_LABEL(outsw)