1164426Ssam/*	$NetBSD: ixp425_pci_space.c,v 1.6 2006/04/10 03:36:03 simonb Exp $ */
2164426Ssam
3164426Ssam/*
4164426Ssam * Copyright (c) 2003
5164426Ssam *	Ichiro FUKUHARA <ichiro@ichiro.org>.
6164426Ssam * All rights reserved.
7164426Ssam *
8164426Ssam * Redistribution and use in source and binary forms, with or without
9164426Ssam * modification, are permitted provided that the following conditions
10164426Ssam * are met:
11164426Ssam * 1. Redistributions of source code must retain the above copyright
12164426Ssam *    notice, this list of conditions and the following disclaimer.
13164426Ssam * 2. Redistributions in binary form must reproduce the above copyright
14164426Ssam *    notice, this list of conditions and the following disclaimer in the
15164426Ssam *    documentation and/or other materials provided with the distribution.
16164426Ssam * 3. All advertising materials mentioning features or use of this software
17164426Ssam *    must display the following acknowledgement:
18164426Ssam *	This product includes software developed by Ichiro FUKUHARA.
19164426Ssam * 4. The name of the company nor the name of the author may be used to
20164426Ssam *    endorse or promote products derived from this software without specific
21164426Ssam *    prior written permission.
22164426Ssam *
23164426Ssam * THIS SOFTWARE IS PROVIDED BY ICHIRO FUKUHARA ``AS IS'' AND ANY EXPRESS OR
24164426Ssam * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25164426Ssam * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26164426Ssam * IN NO EVENT SHALL ICHIRO FUKUHARA OR THE VOICES IN HIS HEAD BE LIABLE FOR
27164426Ssam * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28164426Ssam * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29164426Ssam * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30164426Ssam * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31164426Ssam * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32164426Ssam * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33164426Ssam * SUCH DAMAGE.
34164426Ssam */
35164426Ssam
36164426Ssam#include <sys/cdefs.h>
37164426Ssam__FBSDID("$FreeBSD$");
38164426Ssam
39164426Ssam/*
40164426Ssam * bus_space PCI functions for ixp425
41164426Ssam */
42164426Ssam
43164426Ssam#include <sys/param.h>
44164426Ssam#include <sys/systm.h>
45164426Ssam#include <sys/bus.h>
46164426Ssam#include <sys/endian.h>
47164426Ssam
48164426Ssam#include <machine/pcb.h>
49164426Ssam
50164426Ssam#include <vm/vm.h>
51164426Ssam#include <vm/vm_kern.h>
52164426Ssam#include <vm/pmap.h>
53164426Ssam#include <vm/vm_page.h>
54164426Ssam#include <vm/vm_extern.h>
55164426Ssam
56164426Ssam#include <machine/bus.h>
57164426Ssam
58164426Ssam#include <arm/xscale/ixp425/ixp425reg.h>
59164426Ssam#include <arm/xscale/ixp425/ixp425var.h>
60164426Ssam
61164426Ssam/*
62164426Ssam * Macros to read/write registers
63164426Ssam*/
64164426Ssam#define CSR_READ_4(x)		*(volatile uint32_t *) \
65164426Ssam	(IXP425_PCI_CSR_BASE + (x))
66164426Ssam#define CSR_WRITE_4(x, v)	*(volatile uint32_t *) \
67164426Ssam	(IXP425_PCI_CSR_BASE + (x)) = (v)
68164426Ssam
69164426Ssam/* Proto types for all the bus_space structure functions */
70164426Ssambs_protos(ixp425_pci);
71164426Ssambs_protos(ixp425_pci_io);
72164426Ssambs_protos(ixp425_pci_mem);
73164426Ssam
74164426Ssam/* special I/O functions */
75278727Sianstatic u_int8_t  _pci_io_bs_r_1(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
76278727Sianstatic u_int16_t _pci_io_bs_r_2(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
77278727Sianstatic u_int32_t _pci_io_bs_r_4(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
78164426Ssam
79278727Sianstatic void _pci_io_bs_w_1(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int8_t);
80278727Sianstatic void _pci_io_bs_w_2(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int16_t);
81278727Sianstatic void _pci_io_bs_w_4(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int32_t);
82164426Ssam
83164426Ssam#ifdef __ARMEB__
84278727Sianstatic u_int8_t  _pci_io_bs_r_1_s(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
85278727Sianstatic u_int16_t _pci_io_bs_r_2_s(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
86278727Sianstatic u_int32_t _pci_io_bs_r_4_s(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
87164426Ssam
88278727Sianstatic void _pci_io_bs_w_1_s(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int8_t);
89278727Sianstatic void _pci_io_bs_w_2_s(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int16_t);
90278727Sianstatic void _pci_io_bs_w_4_s(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int32_t);
91164426Ssam
92278727Sianstatic u_int8_t  _pci_mem_bs_r_1(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
93278727Sianstatic u_int16_t _pci_mem_bs_r_2(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
94278727Sianstatic u_int32_t _pci_mem_bs_r_4(bus_space_tag_t tag, bus_space_handle_t, bus_size_t);
95164426Ssam
96278727Sianstatic void _pci_mem_bs_w_1(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int8_t);
97278727Sianstatic void _pci_mem_bs_w_2(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int16_t);
98278727Sianstatic void _pci_mem_bs_w_4(bus_space_tag_t tag, bus_space_handle_t, bus_size_t, u_int32_t);
99164426Ssam#endif
100164426Ssam
101164426Ssamstruct bus_space ixp425_pci_io_bs_tag_template = {
102164426Ssam	/* mapping/unmapping */
103164426Ssam	.bs_map		= ixp425_pci_io_bs_map,
104164426Ssam	.bs_unmap	= ixp425_pci_io_bs_unmap,
105164426Ssam	.bs_subregion	= ixp425_pci_bs_subregion,
106164426Ssam
107164426Ssam	.bs_alloc	= ixp425_pci_io_bs_alloc,
108164426Ssam	.bs_free	= ixp425_pci_io_bs_free,
109164426Ssam
110164426Ssam	/* barrier */
111164426Ssam	.bs_barrier	= ixp425_pci_bs_barrier,
112164426Ssam
113164426Ssam	/*
114164426Ssam	 * IXP425 processor does not have PCI I/O windows
115164426Ssam	 */
116164426Ssam	/* read (single) */
117164426Ssam	.bs_r_1		= _pci_io_bs_r_1,
118164426Ssam	.bs_r_2		= _pci_io_bs_r_2,
119164426Ssam	.bs_r_4		= _pci_io_bs_r_4,
120164426Ssam
121164426Ssam	/* write (single) */
122164426Ssam	.bs_w_1		= _pci_io_bs_w_1,
123164426Ssam	.bs_w_2		= _pci_io_bs_w_2,
124164426Ssam	.bs_w_4		= _pci_io_bs_w_4,
125164426Ssam
126164426Ssam#ifdef __ARMEB__
127164426Ssam	.bs_r_1_s	= _pci_io_bs_r_1_s,
128164426Ssam	.bs_r_2_s	= _pci_io_bs_r_2_s,
129164426Ssam	.bs_r_4_s	= _pci_io_bs_r_4_s,
130164426Ssam
131164426Ssam	.bs_w_1_s	= _pci_io_bs_w_1_s,
132164426Ssam	.bs_w_2_s	= _pci_io_bs_w_2_s,
133164426Ssam	.bs_w_4_s	= _pci_io_bs_w_4_s,
134164426Ssam#else
135164426Ssam	.bs_r_1_s	= _pci_io_bs_r_1,
136164426Ssam	.bs_r_2_s	= _pci_io_bs_r_2,
137164426Ssam	.bs_r_4_s	= _pci_io_bs_r_4,
138164426Ssam
139164426Ssam	.bs_w_1_s	= _pci_io_bs_w_1,
140164426Ssam	.bs_w_2_s	= _pci_io_bs_w_2,
141164426Ssam	.bs_w_4_s	= _pci_io_bs_w_4,
142164426Ssam#endif
143164426Ssam};
144164426Ssam
145164426Ssamvoid
146164426Ssamixp425_io_bs_init(bus_space_tag_t bs, void *cookie)
147164426Ssam{
148164426Ssam	*bs = ixp425_pci_io_bs_tag_template;
149278727Sian	bs->bs_privdata = cookie;
150164426Ssam}
151164426Ssam
152164426Ssamstruct bus_space ixp425_pci_mem_bs_tag_template = {
153164426Ssam	/* mapping/unmapping */
154164426Ssam	.bs_map		= ixp425_pci_mem_bs_map,
155164426Ssam	.bs_unmap	= ixp425_pci_mem_bs_unmap,
156164426Ssam	.bs_subregion	= ixp425_pci_bs_subregion,
157164426Ssam
158164426Ssam	.bs_alloc	= ixp425_pci_mem_bs_alloc,
159164426Ssam	.bs_free	= ixp425_pci_mem_bs_free,
160164426Ssam
161164426Ssam	/* barrier */
162164426Ssam	.bs_barrier	= ixp425_pci_bs_barrier,
163164426Ssam
164164426Ssam#ifdef __ARMEB__
165164426Ssam	/* read (single) */
166164426Ssam	.bs_r_1_s	= _pci_mem_bs_r_1,
167164426Ssam	.bs_r_2_s	= _pci_mem_bs_r_2,
168164426Ssam	.bs_r_4_s	= _pci_mem_bs_r_4,
169164426Ssam
170164426Ssam	.bs_r_1	= 	ixp425_pci_mem_bs_r_1,
171164426Ssam	.bs_r_2	= 	ixp425_pci_mem_bs_r_2,
172164426Ssam	.bs_r_4	= 	ixp425_pci_mem_bs_r_4,
173164426Ssam
174164426Ssam	/* write (single) */
175164426Ssam	.bs_w_1_s	= _pci_mem_bs_w_1,
176164426Ssam	.bs_w_2_s	= _pci_mem_bs_w_2,
177164426Ssam	.bs_w_4_s	= _pci_mem_bs_w_4,
178164426Ssam
179164426Ssam	.bs_w_1	=	 ixp425_pci_mem_bs_w_1,
180164426Ssam	.bs_w_2	= 	ixp425_pci_mem_bs_w_2,
181164426Ssam	.bs_w_4	= 	ixp425_pci_mem_bs_w_4,
182164426Ssam#else
183164426Ssam	/* read (single) */
184164426Ssam	.bs_r_1		= ixp425_pci_mem_bs_r_1,
185164426Ssam	.bs_r_2		= ixp425_pci_mem_bs_r_2,
186164426Ssam	.bs_r_4		= ixp425_pci_mem_bs_r_4,
187164426Ssam	.bs_r_1_s	= ixp425_pci_mem_bs_r_1,
188164426Ssam	.bs_r_2_s	= ixp425_pci_mem_bs_r_2,
189164426Ssam	.bs_r_4_s	= ixp425_pci_mem_bs_r_4,
190164426Ssam
191164426Ssam	/* write (single) */
192164426Ssam	.bs_w_1		= ixp425_pci_mem_bs_w_1,
193164426Ssam	.bs_w_2		= ixp425_pci_mem_bs_w_2,
194164426Ssam	.bs_w_4		= ixp425_pci_mem_bs_w_4,
195164426Ssam	.bs_w_1_s	= ixp425_pci_mem_bs_w_1,
196164426Ssam	.bs_w_2_s	= ixp425_pci_mem_bs_w_2,
197164426Ssam	.bs_w_4_s	= ixp425_pci_mem_bs_w_4,
198164426Ssam#endif
199164426Ssam};
200164426Ssam
201164426Ssamvoid
202164426Ssamixp425_mem_bs_init(bus_space_tag_t bs, void *cookie)
203164426Ssam{
204164426Ssam	*bs = ixp425_pci_mem_bs_tag_template;
205278727Sian	bs->bs_privdata = cookie;
206164426Ssam}
207164426Ssam
208164426Ssam/* common routine */
209164426Ssamint
210278727Sianixp425_pci_bs_subregion(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset,
211164426Ssam	bus_size_t size, bus_space_handle_t *nbshp)
212164426Ssam{
213164426Ssam	*nbshp = bsh + offset;
214164426Ssam	return (0);
215164426Ssam}
216164426Ssam
217164426Ssamvoid
218278727Sianixp425_pci_bs_barrier(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset,
219164426Ssam    bus_size_t len, int flags)
220164426Ssam{
221164426Ssam	/* NULL */
222164426Ssam}
223164426Ssam
224164426Ssam/* io bs */
225164426Ssamint
226278727Sianixp425_pci_io_bs_map(bus_space_tag_t tag, bus_addr_t bpa, bus_size_t size,
227164426Ssam	int cacheable, bus_space_handle_t *bshp)
228164426Ssam{
229164426Ssam	*bshp = bpa;
230164426Ssam	return (0);
231164426Ssam}
232164426Ssam
233164426Ssamvoid
234278727Sianixp425_pci_io_bs_unmap(bus_space_tag_t tag, bus_space_handle_t h, bus_size_t size)
235164426Ssam{
236164426Ssam	/* Nothing to do. */
237164426Ssam}
238164426Ssam
239164426Ssamint
240278727Sianixp425_pci_io_bs_alloc(bus_space_tag_t tag, bus_addr_t rstart, bus_addr_t rend,
241164426Ssam	bus_size_t size, bus_size_t alignment, bus_size_t boundary, int cacheable,
242164426Ssam	bus_addr_t *bpap, bus_space_handle_t *bshp)
243164426Ssam{
244164426Ssam	panic("ixp425_pci_io_bs_alloc(): not implemented\n");
245164426Ssam}
246164426Ssam
247164426Ssamvoid
248278727Sianixp425_pci_io_bs_free(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t size)
249164426Ssam{
250164426Ssam	panic("ixp425_pci_io_bs_free(): not implemented\n");
251164426Ssam}
252164426Ssam
253164426Ssam/* special I/O functions */
254164426Ssamstatic __inline u_int32_t
255278727Sian_bs_r(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off, u_int32_t be)
256164426Ssam{
257164426Ssam	u_int32_t data;
258164426Ssam
259164426Ssam	CSR_WRITE_4(PCI_NP_AD, (ioh + off) & ~3);
260164426Ssam	CSR_WRITE_4(PCI_NP_CBE, be | COMMAND_NP_IO_READ);
261164426Ssam	data = CSR_READ_4(PCI_NP_RDATA);
262164426Ssam	if (CSR_READ_4(PCI_ISR) & ISR_PFE)
263164426Ssam		CSR_WRITE_4(PCI_ISR, ISR_PFE);
264164426Ssam
265164426Ssam	return data;
266164426Ssam}
267164426Ssam
268164426Ssamstatic u_int8_t
269278727Sian_pci_io_bs_r_1(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
270164426Ssam{
271164426Ssam	u_int32_t data, n, be;
272164426Ssam
273164426Ssam	n = (ioh + off) % 4;
274164426Ssam	be = (0xf & ~(1U << n)) << NP_CBE_SHIFT;
275278727Sian	data = _bs_r(tag, ioh, off, be);
276164426Ssam
277164426Ssam	return data >> (8 * n);
278164426Ssam}
279164426Ssam
280164426Ssamstatic u_int16_t
281278727Sian_pci_io_bs_r_2(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
282164426Ssam{
283164426Ssam	u_int32_t data, n, be;
284164426Ssam
285164426Ssam	n = (ioh + off) % 4;
286164426Ssam	be = (0xf & ~((1U << n) | (1U << (n + 1)))) << NP_CBE_SHIFT;
287278727Sian	data = _bs_r(tag, ioh, off, be);
288164426Ssam
289164426Ssam	return data >> (8 * n);
290164426Ssam}
291164426Ssam
292164426Ssamstatic u_int32_t
293278727Sian_pci_io_bs_r_4(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
294164426Ssam{
295164426Ssam	u_int32_t data;
296164426Ssam
297278727Sian	data = _bs_r(tag, ioh, off, 0);
298164426Ssam	return data;
299164426Ssam}
300164426Ssam
301164426Ssam#ifdef __ARMEB__
302164426Ssamstatic u_int8_t
303278727Sian_pci_io_bs_r_1_s(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
304164426Ssam{
305164426Ssam	u_int32_t data, n, be;
306164426Ssam
307164426Ssam	n = (ioh + off) % 4;
308164426Ssam	be = (0xf & ~(1U << n)) << NP_CBE_SHIFT;
309278727Sian	data = _bs_r(tag, ioh, off, be);
310164426Ssam
311164426Ssam	return data >> (8 * n);
312164426Ssam}
313164426Ssam
314164426Ssamstatic u_int16_t
315278727Sian_pci_io_bs_r_2_s(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
316164426Ssam{
317164426Ssam	u_int32_t data, n, be;
318164426Ssam
319164426Ssam	n = (ioh + off) % 4;
320164426Ssam	be = (0xf & ~((1U << n) | (1U << (n + 1)))) << NP_CBE_SHIFT;
321278727Sian	data = _bs_r(tag, ioh, off, be);
322164426Ssam
323164426Ssam	return data >> (8 * n);
324164426Ssam}
325164426Ssam
326164426Ssamstatic u_int32_t
327278727Sian_pci_io_bs_r_4_s(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
328164426Ssam{
329164426Ssam	u_int32_t data;
330164426Ssam
331278727Sian	data = _bs_r(tag, ioh, off, 0);
332164426Ssam	return le32toh(data);
333164426Ssam}
334164426Ssam#endif /* __ARMEB__ */
335164426Ssam
336164426Ssamstatic __inline void
337278727Sian_bs_w(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
338164426Ssam	u_int32_t be, u_int32_t data)
339164426Ssam{
340164426Ssam	CSR_WRITE_4(PCI_NP_AD, (ioh + off) & ~3);
341164426Ssam	CSR_WRITE_4(PCI_NP_CBE, be | COMMAND_NP_IO_WRITE);
342164426Ssam	CSR_WRITE_4(PCI_NP_WDATA, data);
343164426Ssam	if (CSR_READ_4(PCI_ISR) & ISR_PFE)
344164426Ssam		CSR_WRITE_4(PCI_ISR, ISR_PFE);
345164426Ssam}
346164426Ssam
347164426Ssamstatic void
348278727Sian_pci_io_bs_w_1(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
349164426Ssam	u_int8_t val)
350164426Ssam{
351164426Ssam	u_int32_t data, n, be;
352164426Ssam
353164426Ssam	n = (ioh + off) % 4;
354164426Ssam	be = (0xf & ~(1U << n)) << NP_CBE_SHIFT;
355164426Ssam	data = val << (8 * n);
356278727Sian	_bs_w(tag, ioh, off, be, data);
357164426Ssam}
358164426Ssam
359164426Ssamstatic void
360278727Sian_pci_io_bs_w_2(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
361164426Ssam	u_int16_t val)
362164426Ssam{
363164426Ssam	u_int32_t data, n, be;
364164426Ssam
365164426Ssam	n = (ioh + off) % 4;
366164426Ssam	be = (0xf & ~((1U << n) | (1U << (n + 1)))) << NP_CBE_SHIFT;
367164426Ssam	data = val << (8 * n);
368278727Sian	_bs_w(tag, ioh, off, be, data);
369164426Ssam}
370164426Ssam
371164426Ssamstatic void
372278727Sian_pci_io_bs_w_4(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
373164426Ssam	u_int32_t val)
374164426Ssam{
375278727Sian	_bs_w(tag, ioh, off, 0, val);
376164426Ssam}
377164426Ssam
378164426Ssam#ifdef __ARMEB__
379164426Ssamstatic void
380278727Sian_pci_io_bs_w_1_s(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
381164426Ssam	u_int8_t val)
382164426Ssam{
383164426Ssam	u_int32_t data, n, be;
384164426Ssam
385164426Ssam	n = (ioh + off) % 4;
386164426Ssam	be = (0xf & ~(1U << n)) << NP_CBE_SHIFT;
387164426Ssam	data = val << (8 * n);
388278727Sian	_bs_w(tag, ioh, off, be, data);
389164426Ssam}
390164426Ssam
391164426Ssamstatic void
392278727Sian_pci_io_bs_w_2_s(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
393164426Ssam	u_int16_t val)
394164426Ssam{
395164426Ssam	u_int32_t data, n, be;
396164426Ssam
397164426Ssam	n = (ioh + off) % 4;
398164426Ssam	be = (0xf & ~((1U << n) | (1U << (n + 1)))) << NP_CBE_SHIFT;
399164426Ssam	data = val << (8 * n);
400278727Sian	_bs_w(tag, ioh, off, be, data);
401164426Ssam}
402164426Ssam
403164426Ssamstatic void
404278727Sian_pci_io_bs_w_4_s(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
405164426Ssam	u_int32_t val)
406164426Ssam{
407278727Sian	_bs_w(tag, ioh, off, 0, htole32(val));
408164426Ssam}
409164426Ssam#endif /* __ARMEB__ */
410164426Ssam
411164426Ssam/* mem bs */
412164426Ssamint
413278727Sianixp425_pci_mem_bs_map(bus_space_tag_t tag, bus_addr_t bpa, bus_size_t size,
414164426Ssam	      int cacheable, bus_space_handle_t *bshp)
415164426Ssam{
416278727Sian	*bshp = (vm_offset_t)pmap_mapdev(bpa, size);
417164426Ssam	return (0);
418164426Ssam}
419164426Ssam
420164426Ssamvoid
421278727Sianixp425_pci_mem_bs_unmap(bus_space_tag_t tag, bus_space_handle_t h, bus_size_t size)
422164426Ssam{
423164426Ssam
424278727Sian	pmap_unmapdev((vm_offset_t)h, size);
425164426Ssam}
426164426Ssam
427164426Ssamint
428278727Sianixp425_pci_mem_bs_alloc(bus_space_tag_t tag, bus_addr_t rstart, bus_addr_t rend,
429164426Ssam	bus_size_t size, bus_size_t alignment, bus_size_t boundary, int cacheable,
430164426Ssam	bus_addr_t *bpap, bus_space_handle_t *bshp)
431164426Ssam{
432164426Ssam	panic("ixp425_mem_bs_alloc(): not implemented\n");
433164426Ssam}
434164426Ssam
435236987Simpvoid
436278727Sianixp425_pci_mem_bs_free(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t size)
437164426Ssam{
438164426Ssam	panic("ixp425_mem_bs_free(): not implemented\n");
439164426Ssam}
440164426Ssam
441164426Ssam#ifdef __ARMEB__
442164426Ssamstatic u_int8_t
443278727Sian_pci_mem_bs_r_1(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
444164426Ssam{
445278727Sian	return ixp425_pci_mem_bs_r_1(tag, ioh, off);
446164426Ssam}
447164426Ssam
448164426Ssamstatic u_int16_t
449278727Sian_pci_mem_bs_r_2(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
450164426Ssam{
451278727Sian	return (ixp425_pci_mem_bs_r_2(tag, ioh, off));
452164426Ssam}
453164426Ssam
454164426Ssamstatic u_int32_t
455278727Sian_pci_mem_bs_r_4(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off)
456164426Ssam{
457164426Ssam	u_int32_t data;
458164426Ssam
459278727Sian	data = ixp425_pci_mem_bs_r_4(tag, ioh, off);
460164426Ssam	return (le32toh(data));
461164426Ssam}
462164426Ssam
463164426Ssamstatic void
464278727Sian_pci_mem_bs_w_1(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
465164426Ssam	u_int8_t val)
466164426Ssam{
467278727Sian	ixp425_pci_mem_bs_w_1(tag, ioh, off, val);
468164426Ssam}
469164426Ssam
470164426Ssamstatic void
471278727Sian_pci_mem_bs_w_2(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
472164426Ssam	u_int16_t val)
473164426Ssam{
474278727Sian	ixp425_pci_mem_bs_w_2(tag, ioh, off, val);
475164426Ssam}
476164426Ssam
477164426Ssamstatic void
478278727Sian_pci_mem_bs_w_4(bus_space_tag_t tag, bus_space_handle_t ioh, bus_size_t off,
479164426Ssam	u_int32_t val)
480164426Ssam{
481278727Sian	ixp425_pci_mem_bs_w_4(tag, ioh, off, htole32(val));
482164426Ssam}
483164426Ssam#endif /* __ARMEB__ */
484164426Ssam
485164426Ssam/* End of ixp425_pci_space.c */
486