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 */
75164426Ssamstatic u_int8_t  _pci_io_bs_r_1(void *, bus_space_handle_t, bus_size_t);
76164426Ssamstatic u_int16_t _pci_io_bs_r_2(void *, bus_space_handle_t, bus_size_t);
77164426Ssamstatic u_int32_t _pci_io_bs_r_4(void *, bus_space_handle_t, bus_size_t);
78164426Ssam
79164426Ssamstatic void _pci_io_bs_w_1(void *, bus_space_handle_t, bus_size_t, u_int8_t);
80164426Ssamstatic void _pci_io_bs_w_2(void *, bus_space_handle_t, bus_size_t, u_int16_t);
81164426Ssamstatic void _pci_io_bs_w_4(void *, bus_space_handle_t, bus_size_t, u_int32_t);
82164426Ssam
83164426Ssam#ifdef __ARMEB__
84164426Ssamstatic u_int8_t  _pci_io_bs_r_1_s(void *, bus_space_handle_t, bus_size_t);
85164426Ssamstatic u_int16_t _pci_io_bs_r_2_s(void *, bus_space_handle_t, bus_size_t);
86164426Ssamstatic u_int32_t _pci_io_bs_r_4_s(void *, bus_space_handle_t, bus_size_t);
87164426Ssam
88164426Ssamstatic void _pci_io_bs_w_1_s(void *, bus_space_handle_t, bus_size_t, u_int8_t);
89164426Ssamstatic void _pci_io_bs_w_2_s(void *, bus_space_handle_t, bus_size_t, u_int16_t);
90164426Ssamstatic void _pci_io_bs_w_4_s(void *, bus_space_handle_t, bus_size_t, u_int32_t);
91164426Ssam
92164426Ssamstatic u_int8_t  _pci_mem_bs_r_1(void *, bus_space_handle_t, bus_size_t);
93164426Ssamstatic u_int16_t _pci_mem_bs_r_2(void *, bus_space_handle_t, bus_size_t);
94164426Ssamstatic u_int32_t _pci_mem_bs_r_4(void *, bus_space_handle_t, bus_size_t);
95164426Ssam
96164426Ssamstatic void _pci_mem_bs_w_1(void *, bus_space_handle_t, bus_size_t, u_int8_t);
97164426Ssamstatic void _pci_mem_bs_w_2(void *, bus_space_handle_t, bus_size_t, u_int16_t);
98164426Ssamstatic void _pci_mem_bs_w_4(void *, 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;
149164426Ssam	bs->bs_cookie = 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;
205164426Ssam	bs->bs_cookie = cookie;
206164426Ssam}
207164426Ssam
208164426Ssam/* common routine */
209164426Ssamint
210164426Ssamixp425_pci_bs_subregion(void *t, 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
218164426Ssamixp425_pci_bs_barrier(void *t, 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
226164426Ssamixp425_pci_io_bs_map(void *t, 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
234164426Ssamixp425_pci_io_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size)
235164426Ssam{
236164426Ssam	/* Nothing to do. */
237164426Ssam}
238164426Ssam
239164426Ssamint
240164426Ssamixp425_pci_io_bs_alloc(void *t, 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
248164426Ssamixp425_pci_io_bs_free(void *t, 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
255164426Ssam_bs_r(void *v, 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
269164426Ssam_pci_io_bs_r_1(void *v, 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;
275164426Ssam	data = _bs_r(v, ioh, off, be);
276164426Ssam
277164426Ssam	return data >> (8 * n);
278164426Ssam}
279164426Ssam
280164426Ssamstatic u_int16_t
281164426Ssam_pci_io_bs_r_2(void *v, 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;
287164426Ssam	data = _bs_r(v, ioh, off, be);
288164426Ssam
289164426Ssam	return data >> (8 * n);
290164426Ssam}
291164426Ssam
292164426Ssamstatic u_int32_t
293164426Ssam_pci_io_bs_r_4(void *v, bus_space_handle_t ioh, bus_size_t off)
294164426Ssam{
295164426Ssam	u_int32_t data;
296164426Ssam
297164426Ssam	data = _bs_r(v, ioh, off, 0);
298164426Ssam	return data;
299164426Ssam}
300164426Ssam
301164426Ssam#ifdef __ARMEB__
302164426Ssamstatic u_int8_t
303164426Ssam_pci_io_bs_r_1_s(void *v, 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;
309164426Ssam	data = _bs_r(v, ioh, off, be);
310164426Ssam
311164426Ssam	return data >> (8 * n);
312164426Ssam}
313164426Ssam
314164426Ssamstatic u_int16_t
315164426Ssam_pci_io_bs_r_2_s(void *v, 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;
321164426Ssam	data = _bs_r(v, ioh, off, be);
322164426Ssam
323164426Ssam	return data >> (8 * n);
324164426Ssam}
325164426Ssam
326164426Ssamstatic u_int32_t
327164426Ssam_pci_io_bs_r_4_s(void *v, bus_space_handle_t ioh, bus_size_t off)
328164426Ssam{
329164426Ssam	u_int32_t data;
330164426Ssam
331164426Ssam	data = _bs_r(v, ioh, off, 0);
332164426Ssam	return le32toh(data);
333164426Ssam}
334164426Ssam#endif /* __ARMEB__ */
335164426Ssam
336164426Ssamstatic __inline void
337164426Ssam_bs_w(void *v, 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
348164426Ssam_pci_io_bs_w_1(void *v, 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);
356164426Ssam	_bs_w(v, ioh, off, be, data);
357164426Ssam}
358164426Ssam
359164426Ssamstatic void
360164426Ssam_pci_io_bs_w_2(void *v, 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);
368164426Ssam	_bs_w(v, ioh, off, be, data);
369164426Ssam}
370164426Ssam
371164426Ssamstatic void
372164426Ssam_pci_io_bs_w_4(void *v, bus_space_handle_t ioh, bus_size_t off,
373164426Ssam	u_int32_t val)
374164426Ssam{
375164426Ssam	_bs_w(v, ioh, off, 0, val);
376164426Ssam}
377164426Ssam
378164426Ssam#ifdef __ARMEB__
379164426Ssamstatic void
380164426Ssam_pci_io_bs_w_1_s(void *v, 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);
388164426Ssam	_bs_w(v, ioh, off, be, data);
389164426Ssam}
390164426Ssam
391164426Ssamstatic void
392164426Ssam_pci_io_bs_w_2_s(void *v, 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);
400164426Ssam	_bs_w(v, ioh, off, be, data);
401164426Ssam}
402164426Ssam
403164426Ssamstatic void
404164426Ssam_pci_io_bs_w_4_s(void *v, bus_space_handle_t ioh, bus_size_t off,
405164426Ssam	u_int32_t val)
406164426Ssam{
407164426Ssam	_bs_w(v, ioh, off, 0, htole32(val));
408164426Ssam}
409164426Ssam#endif /* __ARMEB__ */
410164426Ssam
411164426Ssam/* mem bs */
412164426Ssamint
413164426Ssamixp425_pci_mem_bs_map(void *t, bus_addr_t bpa, bus_size_t size,
414164426Ssam	      int cacheable, bus_space_handle_t *bshp)
415164426Ssam{
416164426Ssam	vm_paddr_t pa, endpa;
417164426Ssam
418164426Ssam	pa = trunc_page(bpa);
419164426Ssam	endpa = round_page(bpa + size);
420164426Ssam
421164426Ssam	*bshp = (vm_offset_t)pmap_mapdev(pa, endpa - pa);
422164426Ssam
423164426Ssam	return (0);
424164426Ssam}
425164426Ssam
426164426Ssamvoid
427164426Ssamixp425_pci_mem_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size)
428164426Ssam{
429164426Ssam	vm_offset_t va, endva;
430164426Ssam
431164426Ssam	va = trunc_page((vm_offset_t)t);
432164426Ssam	endva = va + round_page(size);
433164426Ssam
434164426Ssam	/* Free the kernel virtual mapping. */
435164426Ssam	kmem_free(kernel_map, va, endva - va);
436164426Ssam}
437164426Ssam
438164426Ssamint
439164426Ssamixp425_pci_mem_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend,
440164426Ssam	bus_size_t size, bus_size_t alignment, bus_size_t boundary, int cacheable,
441164426Ssam	bus_addr_t *bpap, bus_space_handle_t *bshp)
442164426Ssam{
443164426Ssam	panic("ixp425_mem_bs_alloc(): not implemented\n");
444164426Ssam}
445164426Ssam
446164426Ssamvoid
447164426Ssamixp425_pci_mem_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size)
448164426Ssam{
449164426Ssam	panic("ixp425_mem_bs_free(): not implemented\n");
450164426Ssam}
451164426Ssam
452164426Ssam#ifdef __ARMEB__
453164426Ssamstatic u_int8_t
454164426Ssam_pci_mem_bs_r_1(void *v, bus_space_handle_t ioh, bus_size_t off)
455164426Ssam{
456164426Ssam	return ixp425_pci_mem_bs_r_1(v, ioh, off);
457164426Ssam}
458164426Ssam
459164426Ssamstatic u_int16_t
460164426Ssam_pci_mem_bs_r_2(void *v, bus_space_handle_t ioh, bus_size_t off)
461164426Ssam{
462164426Ssam	return (ixp425_pci_mem_bs_r_2(v, ioh, off));
463164426Ssam}
464164426Ssam
465164426Ssamstatic u_int32_t
466164426Ssam_pci_mem_bs_r_4(void *v, bus_space_handle_t ioh, bus_size_t off)
467164426Ssam{
468164426Ssam	u_int32_t data;
469164426Ssam
470164426Ssam	data = ixp425_pci_mem_bs_r_4(v, ioh, off);
471164426Ssam	return (le32toh(data));
472164426Ssam}
473164426Ssam
474164426Ssamstatic void
475164426Ssam_pci_mem_bs_w_1(void *v, bus_space_handle_t ioh, bus_size_t off,
476164426Ssam	u_int8_t val)
477164426Ssam{
478164426Ssam	ixp425_pci_mem_bs_w_1(v, ioh, off, val);
479164426Ssam}
480164426Ssam
481164426Ssamstatic void
482164426Ssam_pci_mem_bs_w_2(void *v, bus_space_handle_t ioh, bus_size_t off,
483164426Ssam	u_int16_t val)
484164426Ssam{
485164426Ssam	ixp425_pci_mem_bs_w_2(v, ioh, off, val);
486164426Ssam}
487164426Ssam
488164426Ssamstatic void
489164426Ssam_pci_mem_bs_w_4(void *v, bus_space_handle_t ioh, bus_size_t off,
490164426Ssam	u_int32_t val)
491164426Ssam{
492164426Ssam	ixp425_pci_mem_bs_w_4(v, ioh, off, htole32(val));
493164426Ssam}
494164426Ssam#endif /* __ARMEB__ */
495164426Ssam
496164426Ssam/* End of ixp425_pci_space.c */
497