Home | History | Annotate | Line # | Download | only in isa
isa_io_asm.S revision 1.2
      1 /*	$NetBSD: isa_io_asm.S,v 1.2 2005/01/09 15:26:19 tsutsui Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 1997 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Mark Brinicombe.
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  * 3. All advertising materials mentioning features or use of this software
     19  *    must display the following acknowledgement:
     20  *	This product includes software developed by the NetBSD
     21  *	Foundation, Inc. and its contributors.
     22  * 4. Neither the name of The NetBSD Foundation nor the names of its
     23  *    contributors may be used to endorse or promote products derived
     24  *    from this software without specific prior written permission.
     25  *
     26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     36  * POSSIBILITY OF SUCH DAMAGE.
     37  */
     38 
     39 /*
     40  * Copyright 1997
     41  * Digital Equipment Corporation. All rights reserved.
     42  *
     43  * This software is furnished under license and may be used and
     44  * copied only in accordance with the following terms and conditions.
     45  * Subject to these conditions, you may download, copy, install,
     46  * use, modify and distribute this software in source and/or binary
     47  * form. No title or ownership is transferred hereby.
     48  *
     49  * 1) Any source code used, modified or distributed must reproduce
     50  *    and retain this copyright notice and list of conditions as
     51  *    they appear in the source file.
     52  *
     53  * 2) No right is granted to use any trade name, trademark, or logo of
     54  *    Digital Equipment Corporation. Neither the "Digital Equipment
     55  *    Corporation" name nor any trademark or logo of Digital Equipment
     56  *    Corporation may be used to endorse or promote products derived
     57  *    from this software without the prior written permission of
     58  *    Digital Equipment Corporation.
     59  *
     60  * 3) This software is provided "AS-IS" and any express or implied
     61  *    warranties, including but not limited to, any implied warranties
     62  *    of merchantability, fitness for a particular purpose, or
     63  *    non-infringement are disclaimed. In no event shall DIGITAL be
     64  *    liable for any damages whatsoever, and in particular, DIGITAL
     65  *    shall not be liable for special, indirect, consequential, or
     66  *    incidental damages or damages for lost profits, loss of
     67  *    revenue or loss of use, whether such damages arise in contract,
     68  *    negligence, tort, under statute, in equity, at law or otherwise,
     69  *    even if advised of the possibility of such damage.
     70  */
     71 
     72 /*
     73  * bus_space I/O functions for isa
     74  */
     75 
     76 #include <machine/asm.h>
     77 
     78 #ifdef GPROF
     79 #define	PAUSE	nop ; nop ; nop ; nop ; nop
     80 #else
     81 #define	PAUSE
     82 #endif
     83 
     84 /*
     85  * Note these functions use ARM Architecture V4 instructions as
     86  * all current systems with ISA will be using processors that support
     87  * V4 or later architectures (SHARK & CATS)
     88  */
     89 
     90 /*
     91  * read single
     92  */
     93 
     94 ENTRY(isa_bs_r_1)
     95 	ldrb	r0, [r1, r2]
     96 	PAUSE
     97 	mov	pc, lr
     98 
     99 ENTRY(isa_bs_r_2)
    100 	ldrh	r0, [r1, r2]	/*.word	0xe19100b2*/
    101 	PAUSE
    102 	mov	pc, lr
    103 
    104 ENTRY(isa_bs_r_4)
    105 	ldr	r0, [r1, r2]
    106 	PAUSE
    107 	mov	pc, lr
    108 
    109 /*
    110  * read multiple.
    111  */
    112 
    113 ENTRY(isa_bs_rm_1)
    114 	add	r0, r1, r2
    115 	mov	r1, r3
    116 	ldr	r2, [sp, #0]
    117 	teq	r2, #0
    118 	moveq	pc, lr
    119 
    120 Lisa_rm_1_loop:
    121 	ldrb	r3, [r0]
    122 	strb	r3, [r1], #1
    123 	subs	r2, r2, #1
    124 	bne	Lisa_rm_1_loop
    125 
    126 	mov	pc, lr
    127 
    128 ENTRY(isa_bs_rm_2)
    129 	add	r0, r1, r2
    130 	mov	r1, r3
    131 	ldr	r2, [sp, #0]
    132 	teq	r2, #0
    133 	moveq	pc, lr
    134 
    135 Lisa_rm_2_loop:
    136 	ldrh	r3, [r0]	/*.word 0xe1d030b0*/
    137 	strh	r3, [r1], #2	/*.word 0xe0c130b2*/
    138 	subs	r2, r2, #1
    139 	bne	Lisa_rm_2_loop
    140 
    141 	mov	pc, lr
    142 
    143 ENTRY(isa_bs_rm_4)
    144 	add	r0, r1, r2
    145 	mov	r1, r3
    146 	ldr	r2, [sp, #0]
    147 	teq	r2, #0
    148 	moveq	pc, lr
    149 
    150 Lisa_rm_4_loop:
    151 	ldr	r3, [r0]
    152 	str	r3, [r1], #4
    153 	subs	r2, r2, #1
    154 	bne	Lisa_rm_4_loop
    155 
    156 	mov	pc, lr
    157 
    158 /*
    159  * read region.
    160  */
    161 
    162 ENTRY(isa_bs_rr_1)
    163 	add	r0, r1, r2
    164 	mov	r1, r3
    165 	ldr	r2, [sp, #0]
    166 	teq	r2, #0
    167 	moveq	pc, lr
    168 
    169 Lisa_rr_1_loop:
    170 	ldrb	r3, [r0], #1
    171 	strb	r3, [r1], #1
    172 	subs	r2, r2, #1
    173 	bne	Lisa_rr_1_loop
    174 
    175 	mov	pc, lr
    176 
    177 ENTRY(isa_bs_rr_2)
    178 	add	r0, r1, r2
    179 	mov	r1, r3
    180 	ldr	r2, [sp, #0]
    181 	teq	r2, #0
    182 	moveq	pc, lr
    183 
    184 Lisa_rr_2_loop:
    185 	ldrh	r3, [r0], #2
    186 	strh	r3, [r1], #2	/*.word 0xe0c130b2*/
    187 	subs	r2, r2, #1
    188 	bne	Lisa_rr_2_loop
    189 
    190 	mov	pc, lr
    191 
    192 ENTRY(isa_bs_rr_4)
    193 	add	r0, r1, r2
    194 	mov	r1, r3
    195 	ldr	r2, [sp, #0]
    196 	teq	r2, #0
    197 	moveq	pc, lr
    198 
    199 Lisa_rr_4_loop:
    200 	ldr	r3, [r0], #4
    201 	str	r3, [r1], #4
    202 	subs	r2, r2, #1
    203 	bne	Lisa_rr_4_loop
    204 
    205 	mov	pc, lr
    206 
    207 /*
    208  * write single
    209  */
    210 
    211 ENTRY(isa_bs_w_1)
    212 	strb	r3, [r1, r2]
    213 	PAUSE
    214 	mov	pc, lr
    215 
    216 ENTRY(isa_bs_w_2)
    217 	strh	r3, [r1, r2]	/*.word 0xe18130b2*/
    218 	PAUSE
    219 	mov	pc, lr
    220 
    221 ENTRY(isa_bs_w_4)
    222 	str	r3, [r1, r2]
    223 	PAUSE
    224 	mov	pc, lr
    225 
    226 /*
    227  * write multiple
    228  */
    229 
    230 ENTRY(isa_bs_wm_1)
    231 	add	r0, r1, r2
    232 	mov	r1, r3
    233 	ldr	r2, [sp, #0]
    234 	teq	r2, #0
    235 	moveq	pc, lr
    236 
    237 Lisa_wm_1_loop:
    238 	ldrb	r3, [r1], #1
    239 	strb	r3, [r0]
    240 	subs	r2, r2, #1
    241 	bne	Lisa_wm_1_loop
    242 
    243 	mov	pc, lr
    244 
    245 ENTRY(isa_bs_wm_2)
    246 	add	r0, r1, r2
    247 	mov	r1, r3
    248 	ldr	r2, [sp, #0]
    249 	teq	r2, #0
    250 	moveq	pc, lr
    251 
    252 Lisa_wm_2_loop:
    253 	ldrh	r3, [r1], #2	/*.word 0xe0d130b2*/
    254 	strh	r3, [r0]	/*.word 0xe1c030b0*/
    255 	subs	r2, r2, #1
    256 	bne	Lisa_wm_2_loop
    257 
    258 	mov	pc, lr
    259 
    260 ENTRY(isa_bs_wm_4)
    261 	add	r0, r1, r2
    262 	mov	r1, r3
    263 	ldr	r2, [sp, #0]
    264 	teq	r2, #0
    265 	moveq	pc, lr
    266 
    267 Lisa_wm_4_loop:
    268 	ldr	r3, [r1], #4
    269 	str	r3, [r0]
    270 	subs	r2, r2, #1
    271 	bne	Lisa_wm_4_loop
    272 
    273 	mov	pc, lr
    274 
    275 
    276 /*
    277  * write region.
    278  */
    279 
    280 ENTRY(isa_bs_wr_1)
    281 	add	r0, r1, r2
    282 	mov	r1, r3
    283 	ldr	r2, [sp, #0]
    284 	teq	r2, #0
    285 	moveq	pc, lr
    286 
    287 Lisa_wr_1_loop:
    288 	ldrb	r3, [r1], #1
    289 	strb	r3, [r0], #1
    290 	subs	r2, r2, #1
    291 	bne	Lisa_wr_1_loop
    292 
    293 	mov	pc, lr
    294 
    295 ENTRY(isa_bs_wr_2)
    296 	add	r0, r1, r2
    297 	mov	r1, r3
    298 	ldr	r2, [sp, #0]
    299 	teq	r2, #0
    300 	moveq	pc, lr
    301 
    302 Lisa_wr_2_loop:
    303 	ldrh	r3, [r1], #2	/*.word 0xe0d130b2*/
    304 	strh	r3, [r0], #2
    305 	subs	r2, r2, #1
    306 	bne	Lisa_wr_2_loop
    307 
    308 	mov	pc, lr
    309 
    310 ENTRY(isa_bs_wr_4)
    311 	add	r0, r1, r2
    312 	mov	r1, r3
    313 	ldr	r2, [sp, #0]
    314 	teq	r2, #0
    315 	moveq	pc, lr
    316 
    317 Lisa_wr_4_loop:
    318 	ldr	r3, [r1], #4
    319 	str	r3, [r0], #4
    320 	subs	r2, r2, #1
    321 	bne	Lisa_wr_4_loop
    322 
    323 	mov	pc, lr
    324 
    325 /*
    326  * Set region
    327  */
    328 
    329 ENTRY(isa_bs_sr_2)
    330 	add	r0, r1, r2
    331 	mov	r1, r3
    332 	ldr	r2, [sp, #0]
    333 	teq	r2, #0
    334 	moveq	pc, lr
    335 
    336 Lisa_bs_sr_2_loop:
    337 	strh	r1, [r0], #2		/*.word e0c010b2*/
    338 	subs	r2, r2, #1
    339 	bne	Lisa_bs_sr_2_loop
    340 
    341 	mov	pc, lr
    342 
    343 /*
    344  * Copy region
    345  */
    346 
    347 ENTRY(isa_bs_c_2)
    348 	add	r0, r1, r2
    349 	ldr	r2, [sp, #0]
    350 	add	r1, r2, r3
    351 	ldr	r2, [sp, #4]
    352 	teq	r2, #0
    353 	moveq	pc, lr
    354 
    355 	cmp	r0, r1
    356 	blt	2f
    357 
    358 1:	ldrh	r3, [r0], #2
    359 	strh	r3, [r1], #2
    360 	subs	r2, r2, #1
    361 	bne	1b
    362 
    363 	mov	pc, lr
    364 
    365 2:	add	r0, r0, r2, lsl #1
    366 	add	r1, r1, r2, lsl #1
    367 	sub	r0, r0, #2
    368 	sub	r1, r1, #2
    369 
    370 3:	ldrh	r3, [r0], #-2
    371 	strh	r3, [r1], #-2
    372 	subs	r2, r2, #1
    373 	bne	3b
    374 
    375 	mov	pc, lr
    376