184615Snyan/* $FreeBSD$ */
284615Snyan/*	$NecBSD: busio.s,v 1.16.4.1 1999/08/16 09:06:08 kmatsuda Exp $	*/
384615Snyan/*	$NetBSD$	*/
484615Snyan
5139825Simp/*-
684615Snyan * [NetBSD for NEC PC-98 series]
784615Snyan *  Copyright (c) 1996, 1997, 1998
884615Snyan *	NetBSD/pc98 porting staff. All rights reserved.
984615Snyan *
1084615Snyan * [Ported for FreeBSD]
1184615Snyan *  Copyright (c) 2001
1284615Snyan *	TAKAHASHI Yoshihiro. All rights reserved.
1384615Snyan *
1484615Snyan *  Redistribution and use in source and binary forms, with or without
1584615Snyan *  modification, are permitted provided that the following conditions
1684615Snyan *  are met:
1784615Snyan *  1. Redistributions of source code must retain the above copyright
1884615Snyan *     notice, this list of conditions and the following disclaimer.
1984615Snyan *  2. Redistributions in binary form must reproduce the above copyright
2084615Snyan *     notice, this list of conditions and the following disclaimer in the
2184615Snyan *     documentation and/or other materials provided with the distribution.
2284615Snyan *  3. The name of the author may not be used to endorse or promote products
2384615Snyan *     derived from this software without specific prior written permission.
2484615Snyan *
2584615Snyan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2684615Snyan * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
2784615Snyan * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2884615Snyan * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
2984615Snyan * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
3084615Snyan * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
3184615Snyan * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3284615Snyan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3384615Snyan * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
3484615Snyan * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3584615Snyan * POSSIBILITY OF SUCH DAMAGE.
3684615Snyan */
3784615Snyan
3884615Snyan/*
3984615Snyan * Copyright (c) 1997, 1998
4084615Snyan *	Naofumi HONDA.  All rights reserved.
4184615Snyan */
4284615Snyan
43122127Snyan#include <machine/asmacros.h>
4484615Snyan
4584615Snyan#include "assym.s"
4684615Snyan
4784615Snyan/***********************************************************
4884615Snyan * Bus IO access methods (Direct Access)
4984615Snyan ***********************************************************/
5084615Snyan#define	BUS_ACCESS_ADDR(BSHREG,ADDRREG) \
5184615Snyan	addl BUS_SPACE_HANDLE_BASE/**/(%/**/BSHREG/**/),%/**/ADDRREG
5284615Snyan
5384615Snyan/*
5484615Snyan *	read_N
5584615Snyan *	IN:  edx port
5684615Snyan *	OUT: eax data
5784615Snyan */
5884615SnyanENTRY(SBUS_DA_io_space_read_1)
5984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
6084615Snyan	inb	%dx,%al
6184615Snyan	ret
6284615Snyan
6384615SnyanENTRY(SBUS_DA_io_space_read_2)
6484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
6584615Snyan	inw	%dx,%ax
6684615Snyan	ret
6784615Snyan
6884615SnyanENTRY(SBUS_DA_io_space_read_4)
6984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
7084615Snyan	inl	%dx,%eax
7184615Snyan	ret
7284615Snyan
7384615Snyan/*
7484615Snyan *	write_N
7584615Snyan *	IN:eax DATA
7684615Snyan *	   edx PORT
7784615Snyan */
7884615SnyanENTRY(SBUS_DA_io_space_write_1)
7984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
8084615Snyan	outb	%al,%dx
8184615Snyan	ret
8284615Snyan
8384615SnyanENTRY(SBUS_DA_io_space_write_2)
8484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
8584615Snyan	outw	%ax,%dx
8684615Snyan	ret
8784615Snyan
8884615SnyanENTRY(SBUS_DA_io_space_write_4)
8984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
9084615Snyan	outl	%eax,%dx
9184615Snyan	ret
9284615Snyan
9384615Snyan/*
9484615Snyan *	read_multi_N
9584615Snyan *	IN: ecx COUNT
9684615Snyan *	    edx PORT
9784615Snyan *	    edi BUFP
9884615Snyan */
9984615SnyanENTRY(SBUS_DA_io_space_read_multi_1)
10084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
10184615Snyan	cld
10284615Snyan	rep
10384615Snyan	insb
10484615Snyan	ret
10584615Snyan
10684615SnyanENTRY(SBUS_DA_io_space_read_multi_2)
10784615Snyan	BUS_ACCESS_ADDR(ebx,edx)
10884615Snyan	cld
10984615Snyan	rep
11084615Snyan	insw
11184615Snyan	ret
11284615Snyan
11384615SnyanENTRY(SBUS_DA_io_space_read_multi_4)
11484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
11584615Snyan	cld
11684615Snyan	rep
11784615Snyan	insl
11884615Snyan	ret
11984615Snyan
12084615Snyan/*
12184615Snyan *	write_multi_N
12284615Snyan *	IN: ecx COUNT
12384615Snyan *	    edx PORT
12484615Snyan *	    esi BUFP
12584615Snyan */
12684615SnyanENTRY(SBUS_DA_io_space_write_multi_1)
12784615Snyan	BUS_ACCESS_ADDR(ebx,edx)
12884615Snyan	cld
12984615Snyan	rep
13084615Snyan	outsb
13184615Snyan	ret
13284615Snyan
13384615SnyanENTRY(SBUS_DA_io_space_write_multi_2)
13484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
13584615Snyan	cld
13684615Snyan	rep
13784615Snyan	outsw
13884615Snyan	ret
13984615Snyan
14084615SnyanENTRY(SBUS_DA_io_space_write_multi_4)
14184615Snyan	BUS_ACCESS_ADDR(ebx,edx)
14284615Snyan	cld
14384615Snyan	rep
14484615Snyan	outsl
14584615Snyan	ret
14684615Snyan
14784615Snyan/*
14884615Snyan *	read_region_N
14984615Snyan *	IN: ecx COUNT
15084615Snyan *	    edx PORT
15184615Snyan *	    edi BUFP
15284615Snyan */
15384615SnyanENTRY(SBUS_DA_io_space_read_region_1)
15484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
15584615Snyan	cld
15684615Snyan	pushl	%eax
15784615Snyan	orl	%ecx,%ecx
15884615Snyan	jz	2f
15984615Snyan1:
16084615Snyan	inb	%dx,%al
16184615Snyan	stosb
16284615Snyan	incl	%edx
16384615Snyan	decl	%ecx
16484615Snyan	jnz	1b
16584615Snyan2:
16684615Snyan	popl	%eax
16784615Snyan	ret
16884615Snyan
16984615SnyanENTRY(SBUS_DA_io_space_read_region_2)
17084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
17184615Snyan	cld
17284615Snyan	pushl	%eax
17384615Snyan	orl	%ecx,%ecx
17484615Snyan	jz	2f
17584615Snyan1:
17684615Snyan	inw	%dx,%ax
17784615Snyan	stosw
17884615Snyan	addl	$2,%edx
17984615Snyan	decl	%ecx
18084615Snyan	jnz	1b
18184615Snyan2:
18284615Snyan	popl	%eax
18384615Snyan	ret
18484615Snyan
18584615SnyanENTRY(SBUS_DA_io_space_read_region_4)
18684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
18784615Snyan	cld
18884615Snyan	pushl	%eax
18984615Snyan	orl	%ecx,%ecx
19084615Snyan	jz	2f
19184615Snyan1:
19284615Snyan	inl	%dx,%eax
19384615Snyan	stosl
19484615Snyan	addl	$4,%edx
19584615Snyan	decl	%ecx
19684615Snyan	jnz	1b
19784615Snyan2:
19884615Snyan	popl	%eax
19984615Snyan	ret
20084615Snyan
20184615Snyan/*
20284615Snyan *	write_region_N
20384615Snyan *	IN: ecx COUNT
20484615Snyan *	    edx PORT
20584615Snyan *	    esi BUFP
20684615Snyan */
20784615SnyanENTRY(SBUS_DA_io_space_write_region_1)
20884615Snyan	BUS_ACCESS_ADDR(ebx,edx)
20984615Snyan	cld
21084615Snyan	pushl	%eax
21184615Snyan	orl	%ecx,%ecx
21284615Snyan	jz	2f
21384615Snyan1:
21484615Snyan	lodsb
21584615Snyan	outb	%al,%dx
21684615Snyan	incl	%edx
21784615Snyan	decl	%ecx
21884615Snyan	jnz	1b
21984615Snyan2:
22084615Snyan	popl	%eax
22184615Snyan	ret
22284615Snyan
22384615SnyanENTRY(SBUS_DA_io_space_write_region_2)
22484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
22584615Snyan	cld
22684615Snyan	pushl	%eax
22784615Snyan	orl	%ecx,%ecx
22884615Snyan	jz	2f
22984615Snyan1:
23084615Snyan	lodsw
23184615Snyan	outw	%ax,%dx
23284615Snyan	addl	$2,%edx
23384615Snyan	decl	%ecx
23484615Snyan	jnz	1b
23584615Snyan2:
23684615Snyan	popl	%eax
23784615Snyan	ret
23884615Snyan
23984615SnyanENTRY(SBUS_DA_io_space_write_region_4)
24084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
24184615Snyan	cld
24284615Snyan	pushl	%eax
24384615Snyan	orl	%ecx,%ecx
24484615Snyan	jz	2f
24584615Snyan1:
24684615Snyan	lodsl
24784615Snyan	outl	%eax,%dx
24884615Snyan	addl	$4,%edx
24984615Snyan	decl	%ecx
25084615Snyan	jnz	1b
25184615Snyan2:
25284615Snyan	popl	%eax
25384615Snyan	ret
25484615Snyan
25584615Snyan/*
25684615Snyan *	set_multi_N
25784615Snyan *	IN: eax DATA
25884615Snyan *	    ecx COUNT
25984615Snyan *	    edx PORT
26084615Snyan */
26184615SnyanENTRY(SBUS_DA_io_space_set_multi_1)
26284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
26384615Snyan	orl	%ecx,%ecx
26484615Snyan	jz	2f
26584615Snyan1:
26684615Snyan	outb	%al,%dx
26784615Snyan	decl	%ecx
26884615Snyan	jnz	1b
26984615Snyan2:
27084615Snyan	ret
27184615Snyan
27284615SnyanENTRY(SBUS_DA_io_space_set_multi_2)
27384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
27484615Snyan	orl	%ecx,%ecx
27584615Snyan	jz	2f
27684615Snyan1:
27784615Snyan	outw	%ax,%dx
27884615Snyan	decl	%ecx
27984615Snyan	jnz	1b
28084615Snyan2:
28184615Snyan	ret
28284615Snyan
28384615SnyanENTRY(SBUS_DA_io_space_set_multi_4)
28484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
28584615Snyan	orl	%ecx,%ecx
28684615Snyan	jz	2f
28784615Snyan1:
28884615Snyan	outl	%eax,%dx
28984615Snyan	decl	%ecx
29084615Snyan	jnz	1b
29184615Snyan2:
29284615Snyan	ret
29384615Snyan
29484615Snyan/*
29584615Snyan *	set_region_N
29684615Snyan *	IN: eax DATA
29784615Snyan *	    ecx COUNT
29884615Snyan *	    edx PORT
29984615Snyan */
30084615SnyanENTRY(SBUS_DA_io_space_set_region_1)
30184615Snyan	BUS_ACCESS_ADDR(ebx,edx)
30284615Snyan	orl	%ecx,%ecx
30384615Snyan	jz	2f
30484615Snyan1:
30584615Snyan	outb	%al,%dx
30684615Snyan	incl	%edx
30784615Snyan	decl	%ecx
30884615Snyan	jnz	1b
30984615Snyan2:
31084615Snyan	ret
31184615Snyan
31284615SnyanENTRY(SBUS_DA_io_space_set_region_2)
31384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
31484615Snyan	orl	%ecx,%ecx
31584615Snyan	jz	2f
31684615Snyan1:
31784615Snyan	outw	%ax,%dx
31884615Snyan	addl	$2,%edx
31984615Snyan	decl	%ecx
32084615Snyan	jnz	1b
32184615Snyan2:
32284615Snyan	ret
32384615Snyan
32484615SnyanENTRY(SBUS_DA_io_space_set_region_4)
32584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
32684615Snyan	orl	%ecx,%ecx
32784615Snyan	jz	2f
32884615Snyan1:
32984615Snyan	outl	%eax,%dx
33084615Snyan	addl	$4,%edx
33184615Snyan	decl	%ecx
33284615Snyan	jnz	1b
33384615Snyan2:
33484615Snyan	ret
33584615Snyan
33684615Snyan/*
33784615Snyan *	copy_region_N
33884615Snyan *	IN: ecx COUNT
33984615Snyan *	    esi SPORT
34084615Snyan *	    edi	DPORT
34184615Snyan */
34284615SnyanENTRY(SBUS_DA_io_space_copy_region_1)
34384615Snyan	BUS_ACCESS_ADDR(eax,esi)
34484615Snyan	BUS_ACCESS_ADDR(ebx,edi)
34584615Snyan	pushl	%eax
34684615Snyan	pushl	%edx
34784615Snyan	orl	%ecx,%ecx
34884615Snyan	jz	2f
34984615Snyan1:
35084615Snyan	movl	%esi,%edx
35184615Snyan	inb	%dx,%al
35284615Snyan	incl	%esi
35384615Snyan
35484615Snyan	movl	%edi,%edx
35584615Snyan	outb	%al,%dx
35684615Snyan	incl	%edi
35784615Snyan
35884615Snyan	decl	%ecx
35984615Snyan	jnz	1b
36084615Snyan2:
36184615Snyan	popl	%edx
36284615Snyan	popl	%eax
36384615Snyan	ret
36484615Snyan
36584615SnyanENTRY(SBUS_DA_io_space_copy_region_2)
36684615Snyan	BUS_ACCESS_ADDR(eax,esi)
36784615Snyan	BUS_ACCESS_ADDR(ebx,edi)
36884615Snyan	pushl	%eax
36984615Snyan	pushl	%edx
37084615Snyan	orl	%ecx,%ecx
37184615Snyan	jz	2f
37284615Snyan1:
37384615Snyan	movl	%esi,%edx
37484615Snyan	inw	%dx,%ax
37584615Snyan	addl	$2,%esi
37684615Snyan
37784615Snyan	movl	%edi,%edx
37884615Snyan	outw	%ax,%dx
37984615Snyan	addl	$2,%edi
38084615Snyan
38184615Snyan	decl	%ecx
38284615Snyan	jnz	1b
38384615Snyan2:
38484615Snyan	popl	%edx
38584615Snyan	popl	%eax
38684615Snyan	ret
38784615Snyan
38884615SnyanENTRY(SBUS_DA_io_space_copy_region_4)
38984615Snyan	BUS_ACCESS_ADDR(eax,esi)
39084615Snyan	BUS_ACCESS_ADDR(ebx,edi)
39184615Snyan	pushl	%eax
39284615Snyan	pushl	%edx
39384615Snyan	orl	%ecx,%ecx
39484615Snyan	jz	2f
39584615Snyan1:
39684615Snyan	movl	%esi,%edx
39784615Snyan	inl	%dx,%eax
39884615Snyan	addl	$4,%esi
39984615Snyan
40084615Snyan	movl	%edi,%edx
40184615Snyan	outl	%eax,%dx
40284615Snyan	addl	$4,%edi
40384615Snyan
40484615Snyan	decl	%ecx
40584615Snyan	jnz	1b
40684615Snyan2:
40784615Snyan	popl	%edx
40884615Snyan	popl	%eax
40984615Snyan	ret
41084615Snyan
41184615Snyan/***********************************************************
41284615Snyan * Bus Memory access methods (Direct Access)
41384615Snyan ***********************************************************/
41484615Snyan/*
41584615Snyan *	read_N
41684615Snyan */
41784615SnyanENTRY(SBUS_DA_mem_space_read_1)
41884615Snyan	BUS_ACCESS_ADDR(ebx,edx)
41984615Snyan	movb	(%edx),%al
42084615Snyan	ret
42184615Snyan
42284615SnyanENTRY(SBUS_DA_mem_space_read_2)
42384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
42484615Snyan	movw	(%edx),%ax
42584615Snyan	ret
42684615Snyan
42784615SnyanENTRY(SBUS_DA_mem_space_read_4)
42884615Snyan	BUS_ACCESS_ADDR(ebx,edx)
42984615Snyan	movl	(%edx),%eax
43084615Snyan	ret
43184615Snyan
43284615Snyan/*
43384615Snyan *	write_N
43484615Snyan */
43584615SnyanENTRY(SBUS_DA_mem_space_write_1)
43684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
43784615Snyan	movb	%al,(%edx)
43884615Snyan	ret
43984615Snyan
44084615SnyanENTRY(SBUS_DA_mem_space_write_2)
44184615Snyan	BUS_ACCESS_ADDR(ebx,edx)
44284615Snyan	movw	%ax,(%edx)
44384615Snyan	ret
44484615Snyan
44584615SnyanENTRY(SBUS_DA_mem_space_write_4)
44684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
44784615Snyan	movl	%eax,(%edx)
44884615Snyan	ret
44984615Snyan
45084615Snyan/*
45184615Snyan *	read_multi_N
45284615Snyan */
45384615SnyanENTRY(SBUS_DA_mem_space_read_multi_1)
45484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
45584615Snyan	cld
45684615Snyan	pushl	%eax
45784615Snyan	orl	%ecx,%ecx
45884615Snyan	jz	2f
45984615Snyan1:
46084615Snyan	movb	(%edx),%al
46184615Snyan	stosb
46284615Snyan	decl	%ecx
46384615Snyan	jnz	1b
46484615Snyan2:
46584615Snyan	popl	%eax
46684615Snyan	ret
46784615Snyan
46884615SnyanENTRY(SBUS_DA_mem_space_read_multi_2)
46984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
47084615Snyan	cld
47184615Snyan	pushl	%eax
47284615Snyan	orl	%ecx,%ecx
47384615Snyan	jz	2f
47484615Snyan1:
47584615Snyan	movw	(%edx),%ax
47684615Snyan	stosw
47784615Snyan	decl	%ecx
47884615Snyan	jnz	1b
47984615Snyan2:
48084615Snyan	popl	%eax
48184615Snyan	ret
48284615Snyan
48384615SnyanENTRY(SBUS_DA_mem_space_read_multi_4)
48484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
48584615Snyan	cld
48684615Snyan	pushl	%eax
48784615Snyan	orl	%ecx,%ecx
48884615Snyan	jz	2f
48984615Snyan1:
49084615Snyan	movl	(%edx),%eax
49184615Snyan	stosl
49284615Snyan	decl	%ecx
49384615Snyan	jnz	1b
49484615Snyan2:
49584615Snyan	popl	%eax
49684615Snyan	ret
49784615Snyan
49884615Snyan/*
49984615Snyan *	write_multi_N
50084615Snyan */
50184615SnyanENTRY(SBUS_DA_mem_space_write_multi_1)
50284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
50384615Snyan	cld
50484615Snyan	pushl	%eax
50584615Snyan	orl	%ecx,%ecx
50684615Snyan	jz	2f
50784615Snyan1:
50884615Snyan	lodsb
50984615Snyan	movb	%al,(%edx)
51084615Snyan	decl	%ecx
51184615Snyan	jnz	1b
51284615Snyan2:
51384615Snyan	popl	%eax
51484615Snyan	ret
51584615Snyan
51684615SnyanENTRY(SBUS_DA_mem_space_write_multi_2)
51784615Snyan	BUS_ACCESS_ADDR(ebx,edx)
51884615Snyan	cld
51984615Snyan	pushl	%eax
52084615Snyan	orl	%ecx,%ecx
52184615Snyan	jz	2f
52284615Snyan1:
52384615Snyan	lodsw
52484615Snyan	movw	%ax,(%edx)
52584615Snyan	decl	%ecx
52684615Snyan	jnz	1b
52784615Snyan2:
52884615Snyan	popl	%eax
52984615Snyan	ret
53084615Snyan
53184615SnyanENTRY(SBUS_DA_mem_space_write_multi_4)
53284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
53384615Snyan	cld
53484615Snyan	pushl	%eax
53584615Snyan	orl	%ecx,%ecx
53684615Snyan	jz	2f
53784615Snyan1:
53884615Snyan	lodsl
53984615Snyan	movl	%eax,(%edx)
54084615Snyan	decl	%ecx
54184615Snyan	jnz	1b
54284615Snyan2:
54384615Snyan	popl	%eax
54484615Snyan	ret
54584615Snyan
54684615Snyan/*
54784615Snyan *	read_region_N
54884615Snyan */
54984615SnyanENTRY(SBUS_DA_mem_space_read_region_1)
55084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
55184615Snyan	cld
55284615Snyan	pushl	%esi
55384615Snyan	movl	%edx,%esi
55484615Snyan	rep
55584615Snyan	movsb
55684615Snyan	popl	%esi
55784615Snyan	ret
55884615Snyan
55984615SnyanENTRY(SBUS_DA_mem_space_read_region_2)
56084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
56184615Snyan	cld
56284615Snyan	pushl	%esi
56384615Snyan	movl	%edx,%esi
56484615Snyan	rep
56584615Snyan	movsw
56684615Snyan	popl	%esi
56784615Snyan	ret
56884615Snyan
56984615SnyanENTRY(SBUS_DA_mem_space_read_region_4)
57084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
57184615Snyan	cld
57284615Snyan	pushl	%esi
57384615Snyan	movl	%edx,%esi
57484615Snyan	rep
57584615Snyan	movsl
57684615Snyan	popl	%esi
57784615Snyan	ret
57884615Snyan
57984615Snyan/*
58084615Snyan *	write_region_N
58184615Snyan */
58284615SnyanENTRY(SBUS_DA_mem_space_write_region_1)
58384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
58484615Snyan	cld
58584615Snyan	pushl	%edi
58684615Snyan	movl	%edx,%edi
58784615Snyan	rep
58884615Snyan	movsb
58984615Snyan	popl	%edi
59084615Snyan	ret
59184615Snyan
59284615SnyanENTRY(SBUS_DA_mem_space_write_region_2)
59384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
59484615Snyan	cld
59584615Snyan	pushl	%edi
59684615Snyan	movl	%edx,%edi
59784615Snyan	rep
59884615Snyan	movsw
59984615Snyan	popl	%edi
60084615Snyan	ret
60184615Snyan
60284615SnyanENTRY(SBUS_DA_mem_space_write_region_4)
60384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
60484615Snyan	cld
60584615Snyan	pushl	%edi
60684615Snyan	movl	%edx,%edi
60784615Snyan	rep
60884615Snyan	movsl
60984615Snyan	popl	%edi
61084615Snyan	ret
61184615Snyan
61284615Snyan/*
61384615Snyan *	set_multi_N
61484615Snyan */
61584615SnyanENTRY(SBUS_DA_mem_space_set_multi_1)
61684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
61784615Snyan	orl	%ecx,%ecx
61884615Snyan	jz	2f
61984615Snyan1:
62084615Snyan	movb	%al,(%edx)
62184615Snyan	decl	%ecx
62284615Snyan	jnz	1b
62384615Snyan2:
62484615Snyan	ret
62584615Snyan
62684615SnyanENTRY(SBUS_DA_mem_space_set_multi_2)
62784615Snyan	BUS_ACCESS_ADDR(ebx,edx)
62884615Snyan	orl	%ecx,%ecx
62984615Snyan	jz	2f
63084615Snyan1:
63184615Snyan	movw	%ax,(%edx)
63284615Snyan	decl	%ecx
63384615Snyan	jnz	1b
63484615Snyan2:
63584615Snyan	ret
63684615Snyan
63784615SnyanENTRY(SBUS_DA_mem_space_set_multi_4)
63884615Snyan	BUS_ACCESS_ADDR(ebx,edx)
63984615Snyan	orl	%ecx,%ecx
64084615Snyan	jz	2f
64184615Snyan1:
64284615Snyan	movl	%eax,(%edx)
64384615Snyan	decl	%ecx
64484615Snyan	jnz	1b
64584615Snyan2:
64684615Snyan	ret
64784615Snyan
64884615Snyan/*
64984615Snyan *	set_region_N
65084615Snyan */
65184615SnyanENTRY(SBUS_DA_mem_space_set_region_1)
65284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
65384615Snyan	cld
65484615Snyan	pushl	%edi
65584615Snyan	movl	%edx,%edi
65684615Snyan	rep
65784615Snyan	stosb
65884615Snyan	popl	%edi
65984615Snyan	ret
66084615Snyan
66184615SnyanENTRY(SBUS_DA_mem_space_set_region_2)
66284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
66384615Snyan	cld
66484615Snyan	pushl	%edi
66584615Snyan	movl	%edx,%edi
66684615Snyan	rep
66784615Snyan	stosw
66884615Snyan	popl	%edi
66984615Snyan	ret
67084615Snyan
67184615SnyanENTRY(SBUS_DA_mem_space_set_region_4)
67284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
67384615Snyan	cld
67484615Snyan	pushl	%edi
67584615Snyan	movl	%edx,%edi
67684615Snyan	rep
67784615Snyan	stosl
67884615Snyan	popl	%edi
67984615Snyan	ret
68084615Snyan
68184615Snyan/*
68284615Snyan *	copy_region_N
68384615Snyan */
68484615SnyanENTRY(SBUS_DA_mem_space_copy_region_1)
68584615Snyan	BUS_ACCESS_ADDR(eax,esi)
68684615Snyan	BUS_ACCESS_ADDR(ebx,edi)
68784615Snyan	cld
68884615Snyan	rep
68984615Snyan	movsb
69084615Snyan	ret
69184615Snyan
69284615SnyanENTRY(SBUS_DA_mem_space_copy_region_2)
69384615Snyan	BUS_ACCESS_ADDR(eax,esi)
69484615Snyan	BUS_ACCESS_ADDR(ebx,edi)
69584615Snyan	cld
69684615Snyan	rep
69784615Snyan	movsw
69884615Snyan	ret
69984615Snyan
70084615SnyanENTRY(SBUS_DA_mem_space_copy_region_4)
70184615Snyan	BUS_ACCESS_ADDR(eax,esi)
70284615Snyan	BUS_ACCESS_ADDR(ebx,edi)
70384615Snyan	cld
70484615Snyan	rep
70584615Snyan	movsl
70684615Snyan	ret
70784615Snyan
70884615Snyan#undef	BUS_ACCESS_ADDR
70984615Snyan
71084615Snyan/***********************************************************
71184615Snyan * Bus IO access methods (Relocate Access)
71284615Snyan ***********************************************************/
71384615Snyan#define	BUS_ACCESS_ADDR(BSHREG,ADDRREG)	\
71484615Snyan	movl BUS_SPACE_HANDLE_IAT/**/(%/**/BSHREG/**/, %/**/ADDRREG/**/, 4), \
71584615Snyan	     %/**/ADDRREG
716104775Snyan#define	BUS_ACCESS_ADDR2(BSHREG,ADDRREG,DSTREG)	\
717104775Snyan	movl BUS_SPACE_HANDLE_IAT/**/(%/**/BSHREG/**/, %/**/ADDRREG/**/, 4), \
718104775Snyan	     %/**/DSTREG
71984615Snyan/*
72084615Snyan *	read_N
72184615Snyan *	IN:  edx port
72284615Snyan *	OUT: eax data
72384615Snyan */
72484615SnyanENTRY(SBUS_RA_io_space_read_1)
72584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
72684615Snyan	inb	%dx,%al
72784615Snyan	ret
72884615Snyan
72984615SnyanENTRY(SBUS_RA_io_space_read_2)
73084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
73184615Snyan	inw	%dx,%ax
73284615Snyan	ret
73384615Snyan
73484615SnyanENTRY(SBUS_RA_io_space_read_4)
73584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
73684615Snyan	inl	%dx,%eax
73784615Snyan	ret
73884615Snyan
73984615Snyan/*
74084615Snyan *	write_N
74184615Snyan *	IN:eax DATA
74284615Snyan *	   edx PORT
74384615Snyan */
74484615SnyanENTRY(SBUS_RA_io_space_write_1)
74584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
74684615Snyan	outb	%al,%dx
74784615Snyan	ret
74884615Snyan
74984615SnyanENTRY(SBUS_RA_io_space_write_2)
75084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
75184615Snyan	outw	%ax,%dx
75284615Snyan	ret
75384615Snyan
75484615SnyanENTRY(SBUS_RA_io_space_write_4)
75584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
75684615Snyan	outl	%eax,%dx
75784615Snyan	ret
75884615Snyan
75984615Snyan/*
76084615Snyan *	read_multi_N
76184615Snyan *	IN: ecx COUNT
76284615Snyan *	    edx PORT
76384615Snyan *	    edi BUFP
76484615Snyan */
76584615SnyanENTRY(SBUS_RA_io_space_read_multi_1)
76684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
76784615Snyan	cld
76884615Snyan	rep
76984615Snyan	insb
77084615Snyan	ret
77184615Snyan
77284615SnyanENTRY(SBUS_RA_io_space_read_multi_2)
77384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
77484615Snyan	cld
77584615Snyan	rep
77684615Snyan	insw
77784615Snyan	ret
77884615Snyan
77984615SnyanENTRY(SBUS_RA_io_space_read_multi_4)
78084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
78184615Snyan	cld
78284615Snyan	rep
78384615Snyan	insl
78484615Snyan	ret
78584615Snyan
78684615Snyan/*
78784615Snyan *	write_multi_N
78884615Snyan *	IN: ecx COUNT
78984615Snyan *	    edx PORT
79084615Snyan *	    esi BUFP
79184615Snyan */
79284615SnyanENTRY(SBUS_RA_io_space_write_multi_1)
79384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
79484615Snyan	cld
79584615Snyan	rep
79684615Snyan	outsb
79784615Snyan	ret
79884615Snyan
79984615SnyanENTRY(SBUS_RA_io_space_write_multi_2)
80084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
80184615Snyan	cld
80284615Snyan	rep
80384615Snyan	outsw
80484615Snyan	ret
80584615Snyan
80684615SnyanENTRY(SBUS_RA_io_space_write_multi_4)
80784615Snyan	BUS_ACCESS_ADDR(ebx,edx)
80884615Snyan	cld
80984615Snyan	rep
81084615Snyan	outsl
81184615Snyan	ret
81284615Snyan
81384615Snyan/*
81484615Snyan *	read_region_N
81584615Snyan *	IN: ecx COUNT
81684615Snyan *	    edx PORT
81784615Snyan *	    edi BUFP
81884615Snyan */
81984615SnyanENTRY(SBUS_RA_io_space_read_region_1)
82084615Snyan	cld
82184615Snyan	pushl	%eax
822104775Snyan	pushl	%esi
82384615Snyan	orl	%ecx,%ecx
82484615Snyan	jz	2f
825104775Snyan	movl	%edx,%esi
82684615Snyan1:
827104775Snyan	BUS_ACCESS_ADDR2(ebx,esi,edx)
82884615Snyan	inb	%dx,%al
82984615Snyan	stosb
830104775Snyan	incl	%esi
83184615Snyan	decl	%ecx
83284615Snyan	jnz	1b
83384615Snyan2:
834104775Snyan	popl	%esi
83584615Snyan	popl	%eax
83684615Snyan	ret
83784615Snyan
83884615SnyanENTRY(SBUS_RA_io_space_read_region_2)
83984615Snyan	cld
84084615Snyan	pushl	%eax
841104775Snyan	pushl	%esi
84284615Snyan	orl	%ecx,%ecx
84384615Snyan	jz	2f
844104775Snyan	movl	%edx,%esi
84584615Snyan1:
846104775Snyan	BUS_ACCESS_ADDR2(ebx,esi,edx)
84784615Snyan	inw	%dx,%ax
84884615Snyan	stosw
849104775Snyan	addl	$2,%esi
85084615Snyan	decl	%ecx
85184615Snyan	jnz	1b
85284615Snyan2:
853104775Snyan	popl	%esi
85484615Snyan	popl	%eax
85584615Snyan	ret
85684615Snyan
85784615SnyanENTRY(SBUS_RA_io_space_read_region_4)
85884615Snyan	cld
85984615Snyan	pushl	%eax
860104775Snyan	pushl	%esi
86184615Snyan	orl	%ecx,%ecx
86284615Snyan	jz	2f
863104775Snyan	movl	%edx,%esi
86484615Snyan1:
865104775Snyan	BUS_ACCESS_ADDR2(ebx,esi,edx)
86684615Snyan	inl	%dx,%eax
86784615Snyan	stosl
868104775Snyan	addl	$4,%esi
86984615Snyan	decl	%ecx
87084615Snyan	jnz	1b
87184615Snyan2:
872104775Snyan	popl	%esi
87384615Snyan	popl	%eax
87484615Snyan	ret
87584615Snyan
87684615Snyan/*
87784615Snyan *	write_region_N
87884615Snyan *	IN: ecx COUNT
87984615Snyan *	    edx PORT
88084615Snyan *	    esi BUFP
88184615Snyan */
88284615SnyanENTRY(SBUS_RA_io_space_write_region_1)
88384615Snyan	cld
88484615Snyan	pushl	%eax
885104775Snyan	pushl	%edi
88684615Snyan	orl	%ecx,%ecx
88784615Snyan	jz	2f
888104775Snyan	movl	%edx,%edi
88984615Snyan1:
890104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
89184615Snyan	lodsb
89284615Snyan	outb	%al,%dx
893104775Snyan	incl	%edi
89484615Snyan	decl	%ecx
89584615Snyan	jnz	1b
89684615Snyan2:
897104775Snyan	popl	%edi
89884615Snyan	popl	%eax
89984615Snyan	ret
90084615Snyan
90184615SnyanENTRY(SBUS_RA_io_space_write_region_2)
90284615Snyan	cld
90384615Snyan	pushl	%eax
904104775Snyan	pushl	%edi
90584615Snyan	orl	%ecx,%ecx
90684615Snyan	jz	2f
907104775Snyan	movl	%edx,%edi
90884615Snyan1:
909104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
91084615Snyan	lodsw
91184615Snyan	outw	%ax,%dx
912104775Snyan	addl	$2,%edi
91384615Snyan	decl	%ecx
91484615Snyan	jnz	1b
91584615Snyan2:
916104775Snyan	popl	%edi
91784615Snyan	popl	%eax
91884615Snyan	ret
91984615Snyan
92084615SnyanENTRY(SBUS_RA_io_space_write_region_4)
92184615Snyan	cld
92284615Snyan	pushl	%eax
923104775Snyan	pushl	%edi
92484615Snyan	orl	%ecx,%ecx
92584615Snyan	jz	2f
926104775Snyan	movl	%edx,%edi
92784615Snyan1:
928104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
92984615Snyan	lodsl
93084615Snyan	outl	%eax,%dx
931104775Snyan	addl	$4,%edi
93284615Snyan	decl	%ecx
93384615Snyan	jnz	1b
93484615Snyan2:
935104775Snyan	popl	%edi
93684615Snyan	popl	%eax
93784615Snyan	ret
93884615Snyan
93984615Snyan/*
94084615Snyan *	set_multi_N
94184615Snyan *	IN: eax DATA
94284615Snyan *	    ecx COUNT
94384615Snyan *	    edx PORT
94484615Snyan */
94584615SnyanENTRY(SBUS_RA_io_space_set_multi_1)
94684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
94784615Snyan	orl	%ecx,%ecx
94884615Snyan	jz	2f
94984615Snyan1:
95084615Snyan	outb	%al,%dx
95184615Snyan	decl	%ecx
95284615Snyan	jnz	1b
95384615Snyan2:
95484615Snyan	ret
95584615Snyan
95684615SnyanENTRY(SBUS_RA_io_space_set_multi_2)
95784615Snyan	BUS_ACCESS_ADDR(ebx,edx)
95884615Snyan	orl	%ecx,%ecx
95984615Snyan	jz	2f
96084615Snyan1:
96184615Snyan	outw	%ax,%dx
96284615Snyan	decl	%ecx
96384615Snyan	jnz	1b
96484615Snyan2:
96584615Snyan	ret
96684615Snyan
96784615SnyanENTRY(SBUS_RA_io_space_set_multi_4)
96884615Snyan	BUS_ACCESS_ADDR(ebx,edx)
96984615Snyan	orl	%ecx,%ecx
97084615Snyan	jz	2f
97184615Snyan1:
97284615Snyan	outl	%eax,%dx
97384615Snyan	decl	%ecx
97484615Snyan	jnz	1b
97584615Snyan2:
97684615Snyan	ret
97784615Snyan
97884615Snyan/*
97984615Snyan *	set_region_N
98084615Snyan *	IN: eax DATA
98184615Snyan *	    ecx COUNT
98284615Snyan *	    edx PORT
98384615Snyan */
98484615SnyanENTRY(SBUS_RA_io_space_set_region_1)
985104775Snyan	pushl	%edi
98684615Snyan	orl	%ecx,%ecx
98784615Snyan	jz	2f
988104775Snyan	movl	%edx,%edi
98984615Snyan1:
990104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
99184615Snyan	outb	%al,%dx
992104775Snyan	incl	%edi
99384615Snyan	decl	%ecx
99484615Snyan	jnz	1b
99584615Snyan2:
996104775Snyan	popl	%edi
99784615Snyan	ret
99884615Snyan
99984615SnyanENTRY(SBUS_RA_io_space_set_region_2)
1000104775Snyan	pushl	%edi
100184615Snyan	orl	%ecx,%ecx
100284615Snyan	jz	2f
1003104775Snyan	movl	%edx,%edi
100484615Snyan1:
1005104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
100684615Snyan	outw	%ax,%dx
1007104775Snyan	addl	$2,%edi
100884615Snyan	decl	%ecx
100984615Snyan	jnz	1b
101084615Snyan2:
1011104775Snyan	popl	%edi
101284615Snyan	ret
101384615Snyan
101484615SnyanENTRY(SBUS_RA_io_space_set_region_4)
1015104775Snyan	pushl	%edi
101684615Snyan	orl	%ecx,%ecx
101784615Snyan	jz	2f
1018104775Snyan	movl	%edx,%edi
101984615Snyan1:
1020104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
102184615Snyan	outl	%eax,%dx
1022104775Snyan	addl	$4,%edi
102384615Snyan	decl	%ecx
102484615Snyan	jnz	1b
102584615Snyan2:
1026104775Snyan	popl	%edi
102784615Snyan	ret
102884615Snyan
102984615Snyan/*
103084615Snyan *	copy_region_N
103184615Snyan *	IN: ecx COUNT
103284615Snyan *	    esi SPORT
103384615Snyan *	    edi	DPORT
103484615Snyan */
103584615SnyanENTRY(SBUS_RA_io_space_copy_region_1)
103684615Snyan	pushl	%eax
103784615Snyan	pushl	%edx
103884615Snyan	orl	%ecx,%ecx
103984615Snyan	jz	2f
104084615Snyan1:
1041104775Snyan	BUS_ACCESS_ADDR2(ebx,esi,edx)
104284615Snyan	inb	%dx,%al
104384615Snyan	incl	%esi
104484615Snyan
1045104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
104684615Snyan	outb	%al,%dx
104784615Snyan	incl	%edi
104884615Snyan
104984615Snyan	decl	%ecx
105084615Snyan	jnz	1b
105184615Snyan2:
105284615Snyan	popl	%edx
105384615Snyan	popl	%eax
105484615Snyan	ret
105584615Snyan
105684615SnyanENTRY(SBUS_RA_io_space_copy_region_2)
105784615Snyan	pushl	%eax
105884615Snyan	pushl	%edx
105984615Snyan	orl	%ecx,%ecx
106084615Snyan	jz	2f
106184615Snyan1:
1062104775Snyan	BUS_ACCESS_ADDR2(ebx,esi,edx)
106384615Snyan	inw	%dx,%ax
106484615Snyan	addl	$2,%esi
106584615Snyan
1066104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
106784615Snyan	outw	%ax,%dx
106884615Snyan	addl	$2,%edi
106984615Snyan
107084615Snyan	decl	%ecx
107184615Snyan	jnz	1b
107284615Snyan2:
107384615Snyan	popl	%edx
107484615Snyan	popl	%eax
107584615Snyan	ret
107684615Snyan
107784615SnyanENTRY(SBUS_RA_io_space_copy_region_4)
107884615Snyan	pushl	%eax
107984615Snyan	pushl	%edx
108084615Snyan	orl	%ecx,%ecx
108184615Snyan	jz	2f
108284615Snyan1:
1083104775Snyan	BUS_ACCESS_ADDR2(ebx,esi,edx)
108484615Snyan	inl	%dx,%eax
108584615Snyan	addl	$4,%esi
108684615Snyan
1087104775Snyan	BUS_ACCESS_ADDR2(ebx,edi,edx)
108884615Snyan	outl	%eax,%dx
108984615Snyan	addl	$4,%edi
109084615Snyan
109184615Snyan	decl	%ecx
109284615Snyan	jnz	1b
109384615Snyan2:
109484615Snyan	popl	%edx
109584615Snyan	popl	%eax
109684615Snyan	ret
109784615Snyan
109884615Snyan/***********************************************************
109984615Snyan * Bus Memory access methods
110084615Snyan ***********************************************************/
110184615Snyan/*
110284615Snyan *	read_N
110384615Snyan */
110484615SnyanENTRY(SBUS_RA_mem_space_read_1)
110584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
110684615Snyan	movb	(%edx),%al
110784615Snyan	ret
110884615Snyan
110984615SnyanENTRY(SBUS_RA_mem_space_read_2)
111084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
111184615Snyan	movw	(%edx),%ax
111284615Snyan	ret
111384615Snyan
111484615SnyanENTRY(SBUS_RA_mem_space_read_4)
111584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
111684615Snyan	movl	(%edx),%eax
111784615Snyan	ret
111884615Snyan
111984615Snyan/*
112084615Snyan *	write_N
112184615Snyan */
112284615SnyanENTRY(SBUS_RA_mem_space_write_1)
112384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
112484615Snyan	movb	%al,(%edx)
112584615Snyan	ret
112684615Snyan
112784615SnyanENTRY(SBUS_RA_mem_space_write_2)
112884615Snyan	BUS_ACCESS_ADDR(ebx,edx)
112984615Snyan	movw	%ax,(%edx)
113084615Snyan	ret
113184615Snyan
113284615SnyanENTRY(SBUS_RA_mem_space_write_4)
113384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
113484615Snyan	movl	%eax,(%edx)
113584615Snyan	ret
113684615Snyan
113784615Snyan/*
113884615Snyan *	read_multi_N
113984615Snyan */
114084615SnyanENTRY(SBUS_RA_mem_space_read_multi_1)
114184615Snyan	BUS_ACCESS_ADDR(ebx,edx)
114284615Snyan	cld
114384615Snyan	pushl	%eax
114484615Snyan	orl	%ecx,%ecx
114584615Snyan	jz	2f
114684615Snyan1:
114784615Snyan	movb	(%edx),%al
114884615Snyan	stosb
114984615Snyan	decl	%ecx
115084615Snyan	jnz	1b
115184615Snyan2:
115284615Snyan	popl	%eax
115384615Snyan	ret
115484615Snyan
115584615SnyanENTRY(SBUS_RA_mem_space_read_multi_2)
115684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
115784615Snyan	cld
115884615Snyan	pushl	%eax
115984615Snyan	orl	%ecx,%ecx
116084615Snyan	jz	2f
116184615Snyan1:
116284615Snyan	movw	(%edx),%ax
116384615Snyan	stosw
116484615Snyan	decl	%ecx
116584615Snyan	jnz	1b
116684615Snyan2:
116784615Snyan	popl	%eax
116884615Snyan	ret
116984615Snyan
117084615SnyanENTRY(SBUS_RA_mem_space_read_multi_4)
117184615Snyan	BUS_ACCESS_ADDR(ebx,edx)
117284615Snyan	cld
117384615Snyan	pushl	%eax
117484615Snyan	orl	%ecx,%ecx
117584615Snyan	jz	2f
117684615Snyan1:
117784615Snyan	movl	(%edx),%eax
117884615Snyan	stosl
117984615Snyan	decl	%ecx
118084615Snyan	jnz	1b
118184615Snyan2:
118284615Snyan	popl	%eax
118384615Snyan	ret
118484615Snyan
118584615Snyan/*
118684615Snyan *	write_multi_N
118784615Snyan */
118884615SnyanENTRY(SBUS_RA_mem_space_write_multi_1)
118984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
119084615Snyan	cld
119184615Snyan	pushl	%eax
119284615Snyan	orl	%ecx,%ecx
119384615Snyan	jz	2f
119484615Snyan1:
119584615Snyan	lodsb
119684615Snyan	movb	%al,(%edx)
119784615Snyan	decl	%ecx
119884615Snyan	jnz	1b
119984615Snyan2:
120084615Snyan	popl	%eax
120184615Snyan	ret
120284615Snyan
120384615SnyanENTRY(SBUS_RA_mem_space_write_multi_2)
120484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
120584615Snyan	cld
120684615Snyan	pushl	%eax
120784615Snyan	orl	%ecx,%ecx
120884615Snyan	jz	2f
120984615Snyan1:
121084615Snyan	lodsw
121184615Snyan	movw	%ax,(%edx)
121284615Snyan	decl	%ecx
121384615Snyan	jnz	1b
121484615Snyan2:
121584615Snyan	popl	%eax
121684615Snyan	ret
121784615Snyan
121884615SnyanENTRY(SBUS_RA_mem_space_write_multi_4)
121984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
122084615Snyan	cld
122184615Snyan	pushl	%eax
122284615Snyan	orl	%ecx,%ecx
122384615Snyan	jz	2f
122484615Snyan1:
122584615Snyan	lodsl
122684615Snyan	movl	%eax,(%edx)
122784615Snyan	decl	%ecx
122884615Snyan	jnz	1b
122984615Snyan2:
123084615Snyan	popl	%eax
123184615Snyan	ret
123284615Snyan
123384615Snyan/*
123484615Snyan *	read_region_N
123584615Snyan */
123684615SnyanENTRY(SBUS_RA_mem_space_read_region_1)
123784615Snyan	cld
123884615Snyan	pushl	%esi
1239104775Snyan	orl	%ecx,%ecx
1240104775Snyan	jz	2f
1241104775Snyan1:
1242104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,esi)
124384615Snyan	movsb
1244104775Snyan	incl	%edx
1245104775Snyan	decl	%ecx
1246104775Snyan	jnz	1b
1247104775Snyan2:
124884615Snyan	popl	%esi
124984615Snyan	ret
125084615Snyan
125184615SnyanENTRY(SBUS_RA_mem_space_read_region_2)
125284615Snyan	cld
125384615Snyan	pushl	%esi
1254104775Snyan	orl	%ecx,%ecx
1255104775Snyan	jz	2f
1256104775Snyan1:
1257104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,esi)
125884615Snyan	movsw
1259104775Snyan	addl	$2,%edx
1260104775Snyan	decl	%ecx
1261104775Snyan	jnz	1b
1262104775Snyan2:
126384615Snyan	popl	%esi
126484615Snyan	ret
126584615Snyan
126684615SnyanENTRY(SBUS_RA_mem_space_read_region_4)
126784615Snyan	cld
126884615Snyan	pushl	%esi
1269104775Snyan	orl	%ecx,%ecx
1270104775Snyan	jz	2f
1271104775Snyan1:
1272104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,esi)
127384615Snyan	movsl
1274104775Snyan	addl	$4,%edx
1275104775Snyan	decl	%ecx
1276104775Snyan	jnz	1b
1277104775Snyan2:
127884615Snyan	popl	%esi
127984615Snyan	ret
128084615Snyan
128184615Snyan/*
128284615Snyan *	write_region_N
128384615Snyan */
128484615SnyanENTRY(SBUS_RA_mem_space_write_region_1)
128584615Snyan	cld
128684615Snyan	pushl	%edi
1287104775Snyan	orl	%ecx,%ecx
1288104775Snyan	jz	2f
1289104775Snyan1:
1290104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,edi)
129184615Snyan	movsb
1292104775Snyan	incl	%edx
1293104775Snyan	decl	%ecx
1294104775Snyan	jnz	1b
1295104775Snyan2:
129684615Snyan	popl	%edi
129784615Snyan	ret
129884615Snyan
129984615SnyanENTRY(SBUS_RA_mem_space_write_region_2)
130084615Snyan	cld
130184615Snyan	pushl	%edi
1302104775Snyan	orl	%ecx,%ecx
1303104775Snyan	jz	2f
1304104775Snyan1:
1305104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,edi)
130684615Snyan	movsw
1307104775Snyan	addl	$2,%edx
1308104775Snyan	decl	%ecx
1309104775Snyan	jnz	1b
1310104775Snyan2:
131184615Snyan	popl	%edi
131284615Snyan	ret
131384615Snyan
131484615SnyanENTRY(SBUS_RA_mem_space_write_region_4)
131584615Snyan	cld
131684615Snyan	pushl	%edi
1317104775Snyan	orl	%ecx,%ecx
1318104775Snyan	jz	2f
1319104775Snyan1:
1320104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,edi)
132184615Snyan	movsl
1322104775Snyan	addl	$4,%edx
1323104775Snyan	decl	%ecx
1324104775Snyan	jnz	1b
1325104775Snyan2:
132684615Snyan	popl	%edi
132784615Snyan	ret
132884615Snyan
132984615Snyan/*
133084615Snyan *	set_multi_N
133184615Snyan */
133284615SnyanENTRY(SBUS_RA_mem_space_set_multi_1)
133384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
133484615Snyan	orl	%ecx,%ecx
133584615Snyan	jz	2f
133684615Snyan1:
133784615Snyan	movb	%al,(%edx)
133884615Snyan	decl	%ecx
133984615Snyan	jnz	1b
134084615Snyan2:
134184615Snyan	ret
134284615Snyan
134384615SnyanENTRY(SBUS_RA_mem_space_set_multi_2)
134484615Snyan	BUS_ACCESS_ADDR(ebx,edx)
134584615Snyan	orl	%ecx,%ecx
134684615Snyan	jz	2f
134784615Snyan1:
134884615Snyan	movw	%ax,(%edx)
134984615Snyan	decl	%ecx
135084615Snyan	jnz	1b
135184615Snyan2:
135284615Snyan	ret
135384615Snyan
135484615SnyanENTRY(SBUS_RA_mem_space_set_multi_4)
135584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
135684615Snyan	orl	%ecx,%ecx
135784615Snyan	jz	2f
135884615Snyan1:
135984615Snyan	movl	%eax,(%edx)
136084615Snyan	decl	%ecx
136184615Snyan	jnz	1b
136284615Snyan2:
136384615Snyan	ret
136484615Snyan
136584615Snyan/*
136684615Snyan *	set_region_N
136784615Snyan */
136884615SnyanENTRY(SBUS_RA_mem_space_set_region_1)
136984615Snyan	cld
137084615Snyan	pushl	%edi
1371104775Snyan	orl	%ecx,%ecx
1372104775Snyan	jz	2f
1373104775Snyan1:
1374104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,edi)
137584615Snyan	stosb
1376104775Snyan	incl	%edx
1377104775Snyan	decl	%ecx
1378104775Snyan	jnz	1b
1379104775Snyan2:
138084615Snyan	popl	%edi
138184615Snyan	ret
138284615Snyan
138384615SnyanENTRY(SBUS_RA_mem_space_set_region_2)
138484615Snyan	cld
138584615Snyan	pushl	%edi
1386104775Snyan	orl	%ecx,%ecx
1387104775Snyan	jz	2f
1388104775Snyan1:
1389104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,edi)
139084615Snyan	stosw
1391104775Snyan	addl	$2,%edx
1392104775Snyan	decl	%ecx
1393104775Snyan	jnz	1b
1394104775Snyan2:
139584615Snyan	popl	%edi
139684615Snyan	ret
139784615Snyan
139884615SnyanENTRY(SBUS_RA_mem_space_set_region_4)
139984615Snyan	cld
140084615Snyan	pushl	%edi
1401104775Snyan	orl	%ecx,%ecx
1402104775Snyan	jz	2f
1403104775Snyan1:
1404104775Snyan	BUS_ACCESS_ADDR2(ebx,edx,edi)
140584615Snyan	stosl
1406104775Snyan	addl	$4,%edx
1407104775Snyan	decl	%ecx
1408104775Snyan	jnz	1b
1409104775Snyan2:
141084615Snyan	popl	%edi
141184615Snyan	ret
141284615Snyan
141384615Snyan/*
141484615Snyan *	copy_region_N
141584615Snyan */
141684615SnyanENTRY(SBUS_RA_mem_space_copy_region_1)
1417104775Snyan	cld
1418104775Snyan	orl	%ecx,%ecx
1419104775Snyan	jz	2f
1420104775Snyan1:
1421104775Snyan	pushl	%esi
1422104775Snyan	pushl	%edi
142384615Snyan	BUS_ACCESS_ADDR(eax,esi)
142484615Snyan	BUS_ACCESS_ADDR(ebx,edi)
142584615Snyan	movsb
1426104775Snyan	popl	%edi
1427104775Snyan	popl	%esi
1428104775Snyan	incl	%esi
1429104775Snyan	incl	%edi
1430104775Snyan	decl	%ecx
1431104775Snyan	jnz	1b
1432104775Snyan2:
143384615Snyan	ret
1434104775Snyan
143584615SnyanENTRY(SBUS_RA_mem_space_copy_region_2)
1436104775Snyan	cld
1437104775Snyan	orl	%ecx,%ecx
1438104775Snyan	jz	2f
1439104775Snyan1:
1440104775Snyan	pushl	%esi
1441104775Snyan	pushl	%edi
144284615Snyan	BUS_ACCESS_ADDR(eax,esi)
144384615Snyan	BUS_ACCESS_ADDR(ebx,edi)
144484615Snyan	movsw
1445104775Snyan	popl	%edi
1446104775Snyan	popl	%esi
1447104775Snyan	addl	$2,%esi
1448104775Snyan	addl	$2,%edi
1449104775Snyan	decl	%ecx
1450104775Snyan	jnz	1b
1451104775Snyan2:
145284615Snyan	ret
145384615Snyan
145484615SnyanENTRY(SBUS_RA_mem_space_copy_region_4)
1455104775Snyan	cld
1456104775Snyan	orl	%ecx,%ecx
1457104775Snyan	jz	2f
1458104775Snyan1:
1459104775Snyan	pushl	%esi
1460104775Snyan	pushl	%edi
146184615Snyan	BUS_ACCESS_ADDR(eax,esi)
146284615Snyan	BUS_ACCESS_ADDR(ebx,edi)
146384615Snyan	movsl
1464104775Snyan	popl	%edi
1465104775Snyan	popl	%esi
1466104775Snyan	addl	$4,%esi
1467104775Snyan	addl	$4,%edi
1468104775Snyan	decl	%ecx
1469104775Snyan	jnz	1b
1470104775Snyan2:
147184615Snyan	ret
147284615Snyan
147384615Snyan#undef	BUS_ACCESS_ADDR
1474104775Snyan#undef	BUS_ACCESS_ADDR2
147584615Snyan
147684615Snyan
147784615Snyan#include "opt_mecia.h"
147884615Snyan#ifdef DEV_MECIA
147984615Snyan
148084615Snyan/***********************************************************
148184615Snyan * NEPC pcmcia 16 bits bus access
148284615Snyan ***********************************************************/
148384615Snyan#define	NEPC_SWITCH_BUS16	\
148484615Snyan	pushl	%ebp		;\
148584615Snyan	pushl	%eax		;\
148684615Snyan	pushl	%edx		;\
148784615Snyan	movl	$0x2a8e,%edx	;\
148884615Snyan	inb	%dx,%al		;\
148984615Snyan	movl	%eax,%ebp	;\
149084615Snyan	andl	$~0x20,%eax	;\
149184615Snyan	outb	%al,%dx		;\
149284615Snyan	popl	%edx		;\
149384615Snyan	popl	%eax
149484615Snyan
149584615Snyan#define	NEPC_BUS_RESTORE	\
149684615Snyan	pushl	%eax		;\
149784615Snyan	movl	%ebp,%eax	;\
149884615Snyan	xchgl	%edx,%ebp	;\
149984615Snyan	movl	$0x2a8e,%edx	;\
150084615Snyan	outb	%al,%dx		;\
150184615Snyan	xchgl	%ebp,%edx	;\
150284615Snyan	popl	%eax		;\
150384615Snyan	popl	%ebp
150484615Snyan
150584615Snyan/***********************************************************
150684615Snyan * NEPC pcmcia 16 bits bus acces (Direct Access)
150784615Snyan ***********************************************************/
150884615Snyan#define	BUS_ACCESS_ADDR(BSHREG,ADDRREG) \
150984615Snyan	addl BUS_SPACE_HANDLE_BASE/**/(%/**/BSHREG/**/),%/**/ADDRREG
151084615Snyan
151184615SnyanENTRY(NEPC_DA_io_space_read_2)
151284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
151384615Snyan	NEPC_SWITCH_BUS16
151484615Snyan	inw	%dx,%ax
151584615Snyan	NEPC_BUS_RESTORE
151684615Snyan	ret
151784615Snyan
151884615Snyan
151984615SnyanENTRY(NEPC_DA_io_space_write_2)
152084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
152184615Snyan	NEPC_SWITCH_BUS16
152284615Snyan	outw	%ax,%dx
152384615Snyan	NEPC_BUS_RESTORE
152484615Snyan	ret
152584615Snyan
152684615SnyanENTRY(NEPC_DA_io_space_read_multi_2)
152784615Snyan	BUS_ACCESS_ADDR(ebx,edx)
152884615Snyan	NEPC_SWITCH_BUS16
152984615Snyan	cld
153084615Snyan	rep
153184615Snyan	insw
153284615Snyan	NEPC_BUS_RESTORE
153384615Snyan	ret
153484615Snyan
153584615SnyanENTRY(NEPC_DA_io_space_write_multi_2)
153684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
153784615Snyan	NEPC_SWITCH_BUS16
153884615Snyan	cld
153984615Snyan	rep
154084615Snyan	outsw
154184615Snyan	NEPC_BUS_RESTORE
154284615Snyan	ret
154384615Snyan
154484615SnyanENTRY(NEPC_DA_io_space_read_region_2)
154584615Snyan	NEPC_SWITCH_BUS16
154684615Snyan	call SBUS_DA_io_space_read_region_2
154784615Snyan	NEPC_BUS_RESTORE
154884615Snyan	ret
154984615Snyan
155084615SnyanENTRY(NEPC_DA_io_space_write_region_2)
155184615Snyan	NEPC_SWITCH_BUS16
155284615Snyan	call SBUS_DA_io_space_write_region_2
155384615Snyan	NEPC_BUS_RESTORE
155484615Snyan	ret
155584615Snyan
155684615SnyanENTRY(NEPC_DA_io_space_set_multi_2)
155784615Snyan	NEPC_SWITCH_BUS16
155884615Snyan	call SBUS_DA_io_space_set_multi_2
155984615Snyan	NEPC_BUS_RESTORE
156084615Snyan	ret
156184615Snyan
156284615Snyan
156384615SnyanENTRY(NEPC_DA_io_space_set_region_2)
156484615Snyan	NEPC_SWITCH_BUS16
156584615Snyan	call SBUS_DA_io_space_set_region_2
156684615Snyan	NEPC_BUS_RESTORE
156784615Snyan	ret
156884615Snyan
156984615SnyanENTRY(NEPC_DA_io_space_copy_region_2)
157084615Snyan	NEPC_SWITCH_BUS16
157184615Snyan	call SBUS_DA_io_space_copy_region_2
157284615Snyan	NEPC_BUS_RESTORE
157384615Snyan	ret
157484615Snyan
157584615SnyanENTRY(NEPC_DA_io_space_read_4)
157684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
157784615Snyan	NEPC_SWITCH_BUS16
157884615Snyan	inl	%dx,%eax
157984615Snyan	NEPC_BUS_RESTORE
158084615Snyan	ret
158184615Snyan
158284615SnyanENTRY(NEPC_DA_io_space_write_4)
158384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
158484615Snyan	NEPC_SWITCH_BUS16
158584615Snyan	outl	%eax,%dx
158684615Snyan	NEPC_BUS_RESTORE
158784615Snyan	ret
158884615Snyan
158984615SnyanENTRY(NEPC_DA_io_space_read_multi_4)
159084615Snyan	BUS_ACCESS_ADDR(ebx,edx)
159184615Snyan	NEPC_SWITCH_BUS16
159284615Snyan	cld
159384615Snyan	rep
159484615Snyan	insl
159584615Snyan	NEPC_BUS_RESTORE
159684615Snyan	ret
159784615Snyan
159884615SnyanENTRY(NEPC_DA_io_space_write_multi_4)
159984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
160084615Snyan	NEPC_SWITCH_BUS16
160184615Snyan	cld
160284615Snyan	rep
160384615Snyan	outsl
160484615Snyan	NEPC_BUS_RESTORE
160584615Snyan	ret
160684615Snyan
160784615SnyanENTRY(NEPC_DA_io_space_read_region_4)
160884615Snyan	NEPC_SWITCH_BUS16
160984615Snyan	call SBUS_DA_io_space_read_region_4
161084615Snyan	NEPC_BUS_RESTORE
161184615Snyan	ret
161284615Snyan
161384615SnyanENTRY(NEPC_DA_io_space_write_region_4)
161484615Snyan	NEPC_SWITCH_BUS16
161584615Snyan	call SBUS_DA_io_space_write_region_4
161684615Snyan	NEPC_BUS_RESTORE
161784615Snyan	ret
161884615Snyan
161984615SnyanENTRY(NEPC_DA_io_space_set_multi_4)
162084615Snyan	NEPC_SWITCH_BUS16
162184615Snyan	call SBUS_DA_io_space_set_multi_4
162284615Snyan	NEPC_BUS_RESTORE
162384615Snyan	ret
162484615Snyan
162584615Snyan
162684615SnyanENTRY(NEPC_DA_io_space_set_region_4)
162784615Snyan	NEPC_SWITCH_BUS16
162884615Snyan	call SBUS_DA_io_space_set_region_4
162984615Snyan	NEPC_BUS_RESTORE
163084615Snyan	ret
163184615Snyan
163284615SnyanENTRY(NEPC_DA_io_space_copy_region_4)
163384615Snyan	NEPC_SWITCH_BUS16
163484615Snyan	call SBUS_DA_io_space_copy_region_4
163584615Snyan	NEPC_BUS_RESTORE
163684615Snyan	ret
163784615Snyan
163884615Snyan#undef	BUS_ACCESS_ADDR
163984615Snyan
164084615Snyan/***********************************************************
164184615Snyan * NEPC pcmcia 16 bits bus acces (Relocate Access)
164284615Snyan ***********************************************************/
164384615Snyan#define	BUS_ACCESS_ADDR(BSHREG,ADDRREG)	\
164484615Snyan	movl BUS_SPACE_HANDLE_IAT/**/(%/**/BSHREG/**/, %/**/ADDRREG/**/, 4), \
164584615Snyan	     %/**/ADDRREG
164684615Snyan
164784615SnyanENTRY(NEPC_RA_io_space_read_2)
164884615Snyan	BUS_ACCESS_ADDR(ebx,edx)
164984615Snyan	NEPC_SWITCH_BUS16
165084615Snyan	inw	%dx,%ax
165184615Snyan	NEPC_BUS_RESTORE
165284615Snyan	ret
165384615Snyan
165484615Snyan
165584615SnyanENTRY(NEPC_RA_io_space_write_2)
165684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
165784615Snyan	NEPC_SWITCH_BUS16
165884615Snyan	outw	%ax,%dx
165984615Snyan	NEPC_BUS_RESTORE
166084615Snyan	ret
166184615Snyan
166284615SnyanENTRY(NEPC_RA_io_space_read_multi_2)
166384615Snyan	BUS_ACCESS_ADDR(ebx,edx)
166484615Snyan	NEPC_SWITCH_BUS16
166584615Snyan	cld
166684615Snyan	rep
166784615Snyan	insw
166884615Snyan	NEPC_BUS_RESTORE
166984615Snyan	ret
167084615Snyan
167184615SnyanENTRY(NEPC_RA_io_space_write_multi_2)
167284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
167384615Snyan	NEPC_SWITCH_BUS16
167484615Snyan	cld
167584615Snyan	rep
167684615Snyan	outsw
167784615Snyan	NEPC_BUS_RESTORE
167884615Snyan	ret
167984615Snyan
168084615SnyanENTRY(NEPC_RA_io_space_read_region_2)
168184615Snyan	NEPC_SWITCH_BUS16
168284615Snyan	call SBUS_RA_io_space_read_region_2
168384615Snyan	NEPC_BUS_RESTORE
168484615Snyan	ret
168584615Snyan
168684615SnyanENTRY(NEPC_RA_io_space_write_region_2)
168784615Snyan	NEPC_SWITCH_BUS16
168884615Snyan	call SBUS_RA_io_space_write_region_2
168984615Snyan	NEPC_BUS_RESTORE
169084615Snyan	ret
169184615Snyan
169284615SnyanENTRY(NEPC_RA_io_space_set_multi_2)
169384615Snyan	NEPC_SWITCH_BUS16
169484615Snyan	call SBUS_RA_io_space_set_multi_2
169584615Snyan	NEPC_BUS_RESTORE
169684615Snyan	ret
169784615Snyan
169884615Snyan
169984615SnyanENTRY(NEPC_RA_io_space_set_region_2)
170084615Snyan	NEPC_SWITCH_BUS16
170184615Snyan	call SBUS_RA_io_space_set_region_2
170284615Snyan	NEPC_BUS_RESTORE
170384615Snyan	ret
170484615Snyan
170584615SnyanENTRY(NEPC_RA_io_space_copy_region_2)
170684615Snyan	NEPC_SWITCH_BUS16
170784615Snyan	call SBUS_RA_io_space_copy_region_2
170884615Snyan	NEPC_BUS_RESTORE
170984615Snyan	ret
171084615Snyan
171184615SnyanENTRY(NEPC_RA_io_space_read_4)
171284615Snyan	BUS_ACCESS_ADDR(ebx,edx)
171384615Snyan	NEPC_SWITCH_BUS16
171484615Snyan	inl	%dx,%eax
171584615Snyan	NEPC_BUS_RESTORE
171684615Snyan	ret
171784615Snyan
171884615SnyanENTRY(NEPC_RA_io_space_write_4)
171984615Snyan	BUS_ACCESS_ADDR(ebx,edx)
172084615Snyan	NEPC_SWITCH_BUS16
172184615Snyan	outl	%eax,%dx
172284615Snyan	NEPC_BUS_RESTORE
172384615Snyan	ret
172484615Snyan
172584615SnyanENTRY(NEPC_RA_io_space_read_multi_4)
172684615Snyan	BUS_ACCESS_ADDR(ebx,edx)
172784615Snyan	NEPC_SWITCH_BUS16
172884615Snyan	cld
172984615Snyan	rep
173084615Snyan	insl
173184615Snyan	NEPC_BUS_RESTORE
173284615Snyan	ret
173384615Snyan
173484615SnyanENTRY(NEPC_RA_io_space_write_multi_4)
173584615Snyan	BUS_ACCESS_ADDR(ebx,edx)
173684615Snyan	NEPC_SWITCH_BUS16
173784615Snyan	cld
173884615Snyan	rep
173984615Snyan	outsl
174084615Snyan	NEPC_BUS_RESTORE
174184615Snyan	ret
174284615Snyan
174384615SnyanENTRY(NEPC_RA_io_space_read_region_4)
174484615Snyan	NEPC_SWITCH_BUS16
174584615Snyan	call SBUS_RA_io_space_read_region_4
174684615Snyan	NEPC_BUS_RESTORE
174784615Snyan	ret
174884615Snyan
174984615SnyanENTRY(NEPC_RA_io_space_write_region_4)
175084615Snyan	NEPC_SWITCH_BUS16
175184615Snyan	call SBUS_RA_io_space_write_region_4
175284615Snyan	NEPC_BUS_RESTORE
175384615Snyan	ret
175484615Snyan
175584615SnyanENTRY(NEPC_RA_io_space_set_multi_4)
175684615Snyan	NEPC_SWITCH_BUS16
175784615Snyan	call SBUS_RA_io_space_set_multi_4
175884615Snyan	NEPC_BUS_RESTORE
175984615Snyan	ret
176084615Snyan
176184615Snyan
176284615SnyanENTRY(NEPC_RA_io_space_set_region_4)
176384615Snyan	NEPC_SWITCH_BUS16
176484615Snyan	call SBUS_RA_io_space_set_region_4
176584615Snyan	NEPC_BUS_RESTORE
176684615Snyan	ret
176784615Snyan
176884615SnyanENTRY(NEPC_RA_io_space_copy_region_4)
176984615Snyan	NEPC_SWITCH_BUS16
177084615Snyan	call SBUS_RA_io_space_copy_region_4
177184615Snyan	NEPC_BUS_RESTORE
177284615Snyan	ret
177384615Snyan
177484615Snyan#endif /* DEV_MECIA */
1775