1/*	$NetBSD: rapide_io_asm.S,v 1.1 2001/10/05 22:27:58 reinoud Exp $	*/
2
3/*
4 * Copyright (c) 1997 Mark Brinicombe.
5 * Copyright (c) 1997 Causality Limited.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 *    must display the following acknowledgement:
18 *	This product includes software developed by Mark Brinicombe
19 *	for the NetBSD Project.
20 * 4. The name of the company nor the name of the author may be used to
21 *    endorse or promote products derived from this software without specific
22 *    prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
25 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27 * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
28 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 */
36
37#include <machine/asm.h>
38
39/*
40 * bus_space I/O functions for Yellowstone RapIDE podule
41 *
42 * These are optimised 32 bit transfer routines
43 */
44
45ENTRY(rapide_bs_rm_4)
46	add	r0, r1, r2
47	mov	r1, r3
48
49	/* Test length */
50	ldr	r2, [sp, #0]
51	tst	r2, #0x7f
52	beq	rapide_rm_4_m128
53	tst	r2, #0x07
54	beq	rapide_rm_4_m8
55
56	/* xfer 4 bytes at a time */
57rapide_rm_4_loop:
58	ldr	r3, [r0]
59	str	r3, [r1], #0x0004
60	subs	r2, r2, #1
61	bne	rapide_rm_4_loop
62
63	mov	pc, lr
64
65rapide_rm_4_m8:
66	/* xfer 32 bytes at a time */
67	stmfd	sp!, {r4-r10}
68
69rapide_rm_4_m8_loop:
70	ldmia	r0, {r3-r10}
71	stmia	r1!, {r3-r10}
72	subs	r2, r2, #8
73	bne	rapide_rm_4_m8_loop
74
75	ldmfd	sp!, {r4-r10}
76	mov	pc, lr
77
78rapide_rm_4_m128:
79	/* xfer 512 bytes at a time */
80	stmfd	sp!, {r4-r12, r14}
81
82rapide_rm_4_m128_loop:
83	ldmia	r0, {r3-r12, r14}
84	stmia	r1!, {r3-r12, r14}
85	ldmia	r0, {r3-r12, r14}
86	stmia	r1!, {r3-r12, r14}
87	ldmia	r0, {r3-r12, r14}
88	stmia	r1!, {r3-r12, r14}
89	ldmia	r0, {r3-r12, r14}
90	stmia	r1!, {r3-r12, r14}
91	ldmia	r0, {r3-r12, r14}
92	stmia	r1!, {r3-r12, r14}
93	ldmia	r0, {r3-r12, r14}
94	stmia	r1!, {r3-r12, r14}
95	ldmia	r0, {r3-r12, r14}
96	stmia	r1!, {r3-r12, r14}
97	ldmia	r0, {r3-r12, r14}
98	stmia	r1!, {r3-r12, r14}
99	ldmia	r0, {r3-r12, r14}
100	stmia	r1!, {r3-r12, r14}
101	ldmia	r0, {r3-r12, r14}
102	stmia	r1!, {r3-r12, r14}
103	ldmia	r0, {r3-r12, r14}
104	stmia	r1!, {r3-r12, r14}
105	ldmia	r0, {r3-r9}
106	stmia	r1!, {r3-r9}
107	subs	r2, r2, #128
108	bne	rapide_rm_4_m128_loop
109
110	ldmfd	sp!, {r4-r12, pc}
111
112ENTRY(rapide_bs_wm_4)
113	add	r0, r1, r2
114	mov	r1, r3
115	ldr	r2, [sp, #0]
116	tst	r2, #0x7f
117	beq	rapide_wm_4_m128
118	tst	r2, #0x07
119	beq	rapide_wm_4_m8
120
121	/* xfer 4 bytes at a time */
122rapide_wm_4_loop:
123	ldr	r3, [r1], #0x0004
124	str	r3, [r0]
125	subs	r2, r2, #1
126	bne	rapide_wm_4_loop
127
128	mov	pc, lr
129
130rapide_wm_4_m8:
131	/* xfer 32 bytes at a time */
132	stmfd	sp!, {r4-r10}
133
134rapide_wm_4_m8_loop:
135	ldmia	r1!, {r3-r10}
136	stmia	r0, {r3-r10}
137	subs	r2, r2, #8
138	bne	rapide_wm_4_m8_loop
139
140	ldmfd	sp!, {r4-r10}
141	mov	pc, lr
142
143rapide_wm_4_m128:
144	/* xfer 512 bytes at a time */
145	stmfd	sp!, {r4-r12}
146
147rapide_wm_4_m128_loop:
148	ldmia	r1!, {r3-r12}
149	stmia	r0, {r3-r12}
150	ldmia	r1!, {r3-r12}
151	stmia	r0, {r3-r12}
152	ldmia	r1!, {r3-r12}
153	stmia	r0, {r3-r12}
154	ldmia	r1!, {r3-r12}
155	stmia	r0, {r3-r12}
156	ldmia	r1!, {r3-r12}
157	stmia	r0, {r3-r12}
158	ldmia	r1!, {r3-r12}
159	stmia	r0, {r3-r12}
160	ldmia	r1!, {r3-r12}
161	stmia	r0, {r3-r12}
162	ldmia	r1!, {r3-r12}
163	stmia	r0, {r3-r12}
164	ldmia	r1!, {r3-r12}
165	stmia	r0, {r3-r12}
166	ldmia	r1!, {r3-r12}
167	stmia	r0, {r3-r12}
168	ldmia	r1!, {r3-r12}
169	stmia	r0, {r3-r12}
170	ldmia	r1!, {r3-r12}
171	stmia	r0, {r3-r12}
172	ldmia	r1!, {r3-r10}
173	stmia	r0, {r3-r10}
174	subs	r2, r2, #128
175	bne	rapide_wm_4_m128_loop
176
177	ldmfd	sp!, {r4-r12}
178	mov	pc, lr
179