1*6955d476Sthorpej/*	$NetBSD: becc_pci_space_asm.S,v 1.1 2003/05/30 18:38:02 thorpej Exp $	*/
2*6955d476Sthorpej
3*6955d476Sthorpej/*
4*6955d476Sthorpej * Copyright (c) 2003 Wasabi Systems, Inc.
5*6955d476Sthorpej * All rights reserved.
6*6955d476Sthorpej *
7*6955d476Sthorpej * Written by Jason R. Thorpe for Wasabi Systems, Inc.
8*6955d476Sthorpej *
9*6955d476Sthorpej * Redistribution and use in source and binary forms, with or without
10*6955d476Sthorpej * modification, are permitted provided that the following conditions
11*6955d476Sthorpej * are met:
12*6955d476Sthorpej * 1. Redistributions of source code must retain the above copyright
13*6955d476Sthorpej *    notice, this list of conditions and the following disclaimer.
14*6955d476Sthorpej * 2. Redistributions in binary form must reproduce the above copyright
15*6955d476Sthorpej *    notice, this list of conditions and the following disclaimer in the
16*6955d476Sthorpej *    documentation and/or other materials provided with the distribution.
17*6955d476Sthorpej * 3. All advertising materials mentioning features or use of this software
18*6955d476Sthorpej *    must display the following acknowledgement:
19*6955d476Sthorpej *	This product includes software developed for the NetBSD Project by
20*6955d476Sthorpej *	Wasabi Systems, Inc.
21*6955d476Sthorpej * 4. The name of Wasabi Systems, Inc. may not be used to endorse
22*6955d476Sthorpej *    or promote products derived from this software without specific prior
23*6955d476Sthorpej *    written permission.
24*6955d476Sthorpej *
25*6955d476Sthorpej * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
26*6955d476Sthorpej * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27*6955d476Sthorpej * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28*6955d476Sthorpej * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
29*6955d476Sthorpej * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30*6955d476Sthorpej * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31*6955d476Sthorpej * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32*6955d476Sthorpej * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33*6955d476Sthorpej * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34*6955d476Sthorpej * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35*6955d476Sthorpej * POSSIBILITY OF SUCH DAMAGE.
36*6955d476Sthorpej */
37*6955d476Sthorpej
38*6955d476Sthorpej#include <arm/asm.h>
39*6955d476Sthorpej#include <arm/cpuconf.h>
40*6955d476Sthorpej
41*6955d476Sthorpej/*
42*6955d476Sthorpej * Bus space functions for BECC PCI space access.  We have to swizzle
43*6955d476Sthorpej * the address for 1 and 2 byte accesses when in big-endian mode.
44*6955d476Sthorpej */
45*6955d476Sthorpej
46*6955d476Sthorpej/*
47*6955d476Sthorpej * read single
48*6955d476Sthorpej */
49*6955d476Sthorpej
50*6955d476SthorpejENTRY(becc_pci_bs_r_1)
51*6955d476Sthorpej#ifdef __ARMEB__
52*6955d476Sthorpej	add	r1, r1, r2
53*6955d476Sthorpej	eor	r1, r1, #0x3
54*6955d476Sthorpej	ldrb	r0, [r1]
55*6955d476Sthorpej#else
56*6955d476Sthorpej	ldrb	r0, [r1, r2]
57*6955d476Sthorpej#endif /* __ARMEB__ */
58*6955d476Sthorpej	mov	pc, lr
59*6955d476Sthorpej
60*6955d476SthorpejENTRY(becc_pci_bs_r_2)
61*6955d476Sthorpej#ifdef __ARMEB__
62*6955d476Sthorpej	add	r1, r1, r2
63*6955d476Sthorpej	eor	r1, r1, #0x2
64*6955d476Sthorpej	ldrh	r0, [r1]
65*6955d476Sthorpej#else
66*6955d476Sthorpej	ldrh	r0, [r1, r2]
67*6955d476Sthorpej#endif /* __ARMEB__ */
68*6955d476Sthorpej	mov	pc, lr
69*6955d476Sthorpej
70*6955d476SthorpejENTRY(becc_pci_bs_r_4)
71*6955d476Sthorpej	ldr	r0, [r1, r2]
72*6955d476Sthorpej	mov	pc, lr
73*6955d476Sthorpej
74*6955d476Sthorpej/*
75*6955d476Sthorpej * write single
76*6955d476Sthorpej */
77*6955d476Sthorpej
78*6955d476SthorpejENTRY(becc_pci_bs_w_1)
79*6955d476Sthorpej#ifdef __ARMEB__
80*6955d476Sthorpej	add	r1, r1, r2
81*6955d476Sthorpej	eor	r1, r1, #0x3
82*6955d476Sthorpej	strb	r3, [r1]
83*6955d476Sthorpej#else
84*6955d476Sthorpej	strb	r3, [r1, r2]
85*6955d476Sthorpej#endif /* __ARMEB__ */
86*6955d476Sthorpej	mov	pc, lr
87*6955d476Sthorpej
88*6955d476SthorpejENTRY(becc_pci_bs_w_2)
89*6955d476Sthorpej#ifdef __ARMEB__
90*6955d476Sthorpej	add	r1, r1, r2
91*6955d476Sthorpej	eor	r1, r1, #0x2
92*6955d476Sthorpej	strh	r3, [r1]
93*6955d476Sthorpej#else
94*6955d476Sthorpej	strh	r3, [r1, r2]
95*6955d476Sthorpej#endif /* __ARMEB__ */
96*6955d476Sthorpej	mov	pc, lr
97*6955d476Sthorpej
98*6955d476SthorpejENTRY(becc_pci_bs_w_4)
99*6955d476Sthorpej	str	r3, [r1, r2]
100*6955d476Sthorpej	mov	pc, lr
101