Home | History | Annotate | Line # | Download | only in mainbus
mainbus_io_asm.S revision 1.1.186.1
      1  1.1.186.1    rmind /*	$NetBSD: mainbus_io_asm.S,v 1.1.186.1 2013/08/28 23:59:12 rmind Exp $	*/
      2        1.1  reinoud 
      3        1.1  reinoud /*
      4        1.1  reinoud  * Copyright (c) 1997 Mark Brinicombe.
      5        1.1  reinoud  * All rights reserved.
      6        1.1  reinoud  *
      7        1.1  reinoud  * Redistribution and use in source and binary forms, with or without
      8        1.1  reinoud  * modification, are permitted provided that the following conditions
      9        1.1  reinoud  * are met:
     10        1.1  reinoud  * 1. Redistributions of source code must retain the above copyright
     11        1.1  reinoud  *    notice, this list of conditions and the following disclaimer.
     12        1.1  reinoud  * 2. Redistributions in binary form must reproduce the above copyright
     13        1.1  reinoud  *    notice, this list of conditions and the following disclaimer in the
     14        1.1  reinoud  *    documentation and/or other materials provided with the distribution.
     15        1.1  reinoud  * 3. All advertising materials mentioning features or use of this software
     16        1.1  reinoud  *    must display the following acknowledgement:
     17        1.1  reinoud  *	This product includes software developed by Mark Brinicombe.
     18        1.1  reinoud  * 4. The name of the company nor the name of the author may be used to
     19        1.1  reinoud  *    endorse or promote products derived from this software without specific
     20        1.1  reinoud  *    prior written permission.
     21        1.1  reinoud  *
     22        1.1  reinoud  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
     23        1.1  reinoud  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     24        1.1  reinoud  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     25        1.1  reinoud  * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     26        1.1  reinoud  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     27        1.1  reinoud  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     28        1.1  reinoud  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     29        1.1  reinoud  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     30        1.1  reinoud  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     31        1.1  reinoud  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     32        1.1  reinoud  * SUCH DAMAGE.
     33        1.1  reinoud  */
     34        1.1  reinoud 
     35        1.1  reinoud #include <machine/asm.h>
     36        1.1  reinoud 
     37        1.1  reinoud /*
     38        1.1  reinoud  * bus_space I/O functions for mainbus
     39        1.1  reinoud  */
     40        1.1  reinoud 
     41        1.1  reinoud 
     42        1.1  reinoud /*
     43        1.1  reinoud  * read single
     44        1.1  reinoud  */
     45        1.1  reinoud 
     46        1.1  reinoud ENTRY(mainbus_bs_r_1)
     47        1.1  reinoud 	ldrb	r0, [r1, r2, lsl #2]
     48  1.1.186.1    rmind 	RET
     49  1.1.186.1    rmind END(mainbus_bs_r_1)
     50        1.1  reinoud 
     51        1.1  reinoud ENTRY(mainbus_bs_r_2)
     52        1.1  reinoud 	ldr	r0, [r1, r2, lsl #2]
     53        1.1  reinoud 	bic	r0, r0, #0xff000000
     54        1.1  reinoud 	bic	r0, r0, #0x00ff0000
     55  1.1.186.1    rmind 	RET
     56  1.1.186.1    rmind END(mainbus_bs_r_2)
     57        1.1  reinoud 
     58        1.1  reinoud ENTRY(mainbus_bs_r_4)
     59        1.1  reinoud 	ldr	r0, [r1, r2, lsl #2]
     60  1.1.186.1    rmind 	RET
     61  1.1.186.1    rmind END(mainbus_bs_r_4)
     62        1.1  reinoud 
     63        1.1  reinoud /*
     64        1.1  reinoud  * write single
     65        1.1  reinoud  */
     66        1.1  reinoud 
     67        1.1  reinoud ENTRY(mainbus_bs_w_1)
     68        1.1  reinoud 	strb	r3, [r1, r2, lsl #2]
     69  1.1.186.1    rmind 	RET
     70  1.1.186.1    rmind END(mainbus_bs_w_1)
     71        1.1  reinoud 
     72        1.1  reinoud ENTRY(mainbus_bs_w_2)
     73        1.1  reinoud 	mov	r3, r3, lsl #16
     74        1.1  reinoud 	orr	r3, r3, r3, lsr #16
     75        1.1  reinoud 	str	r3, [r1, r2, lsl #2]
     76  1.1.186.1    rmind 	RET
     77  1.1.186.1    rmind END(mainbus_bs_w_2)
     78        1.1  reinoud 
     79        1.1  reinoud ENTRY(mainbus_bs_w_4)
     80        1.1  reinoud 	str	r3, [r1, r2, lsl #2]
     81  1.1.186.1    rmind 	RET
     82  1.1.186.1    rmind END(mainbus_bs_w_4)
     83        1.1  reinoud 
     84        1.1  reinoud /*
     85        1.1  reinoud  * read multiple
     86        1.1  reinoud  */
     87        1.1  reinoud 
     88        1.1  reinoud ENTRY(mainbus_bs_rm_2)
     89        1.1  reinoud 	add	r0, r1, r2, lsl #2
     90        1.1  reinoud 	mov	r1, r3
     91        1.1  reinoud 	ldr	r2, [sp, #0]
     92        1.1  reinoud 	b	_C_LABEL(insw16)
     93  1.1.186.1    rmind END(mainbus_bs_rm_2)
     94        1.1  reinoud 
     95        1.1  reinoud /*
     96        1.1  reinoud  * write multiple
     97        1.1  reinoud  */
     98        1.1  reinoud 
     99        1.1  reinoud ENTRY(mainbus_bs_wm_1)
    100        1.1  reinoud 	add	r0, r1, r2, lsl #2
    101        1.1  reinoud 	ldr	r2, [sp, #0]
    102        1.1  reinoud 
    103        1.1  reinoud 	/* Make sure that we have a positive length */
    104        1.1  reinoud 	cmp	r2, #0x00000000
    105  1.1.186.1    rmind 	RETc(le)
    106        1.1  reinoud 
    107  1.1.186.1    rmind .Lmainbus_wm_1_loop:
    108        1.1  reinoud 	ldrb	r1, [r3], #0x0001
    109        1.1  reinoud 	str	r1, [r0]
    110        1.1  reinoud 	subs	r2, r2, #0x00000001
    111  1.1.186.1    rmind 	bgt	.Lmainbus_wm_1_loop
    112        1.1  reinoud 
    113  1.1.186.1    rmind 	RET
    114  1.1.186.1    rmind END(mainbus_bs_wm_1)
    115        1.1  reinoud 
    116        1.1  reinoud ENTRY(mainbus_bs_wm_2)
    117        1.1  reinoud 	add	r0, r1, r2, lsl #2
    118        1.1  reinoud 	mov	r1, r3
    119        1.1  reinoud 	ldr	r2, [sp, #0]
    120        1.1  reinoud 	b	_C_LABEL(outsw16)
    121  1.1.186.1    rmind END(mainbus_bs_wm_2)
    122