xref: /OK3568_Linux_fs/kernel/arch/m68k/include/asm/io_mm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * linux/include/asm-m68k/io.h
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * 4/1/00 RZ: - rewritten to avoid clashes between ISA/PCI and other
6*4882a593Smuzhiyun  *              IO access
7*4882a593Smuzhiyun  *            - added Q40 support
8*4882a593Smuzhiyun  *            - added skeleton for GG-II and Amiga PCMCIA
9*4882a593Smuzhiyun  * 2/3/01 RZ: - moved a few more defs into raw_io.h
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * inX/outX should not be used by any driver unless it does
12*4882a593Smuzhiyun  * ISA access. Other drivers should use function defined in raw_io.h
13*4882a593Smuzhiyun  * or define its own macros on top of these.
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  *    inX(),outX()              are for ISA I/O
16*4882a593Smuzhiyun  *    isa_readX(),isa_writeX()  are for ISA memory
17*4882a593Smuzhiyun  */
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #ifndef _M68K_IO_MM_H
20*4882a593Smuzhiyun #define _M68K_IO_MM_H
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #ifdef __KERNEL__
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #include <linux/compiler.h>
25*4882a593Smuzhiyun #include <asm/raw_io.h>
26*4882a593Smuzhiyun #include <asm/virtconvert.h>
27*4882a593Smuzhiyun #include <asm/kmap.h>
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #include <asm-generic/iomap.h>
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #ifdef CONFIG_ATARI
32*4882a593Smuzhiyun #define atari_readb   raw_inb
33*4882a593Smuzhiyun #define atari_writeb  raw_outb
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define atari_inb_p   raw_inb
36*4882a593Smuzhiyun #define atari_outb_p  raw_outb
37*4882a593Smuzhiyun #endif
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /*
41*4882a593Smuzhiyun  * IO/MEM definitions for various ISA bridges
42*4882a593Smuzhiyun  */
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #ifdef CONFIG_Q40
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun #define q40_isa_io_base  0xff400000
48*4882a593Smuzhiyun #define q40_isa_mem_base 0xff800000
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun #define Q40_ISA_IO_B(ioaddr) (q40_isa_io_base+1+4*((unsigned long)(ioaddr)))
51*4882a593Smuzhiyun #define Q40_ISA_IO_W(ioaddr) (q40_isa_io_base+  4*((unsigned long)(ioaddr)))
52*4882a593Smuzhiyun #define Q40_ISA_MEM_B(madr)  (q40_isa_mem_base+1+4*((unsigned long)(madr)))
53*4882a593Smuzhiyun #define Q40_ISA_MEM_W(madr)  (q40_isa_mem_base+  4*((unsigned long)(madr)))
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun #define MULTI_ISA 0
56*4882a593Smuzhiyun #endif /* Q40 */
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #ifdef CONFIG_AMIGA_PCMCIA
59*4882a593Smuzhiyun #include <asm/amigayle.h>
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #define AG_ISA_IO_B(ioaddr) ( GAYLE_IO+(ioaddr)+(((ioaddr)&1)*GAYLE_ODD) )
62*4882a593Smuzhiyun #define AG_ISA_IO_W(ioaddr) ( GAYLE_IO+(ioaddr) )
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun #ifndef MULTI_ISA
65*4882a593Smuzhiyun #define MULTI_ISA 0
66*4882a593Smuzhiyun #else
67*4882a593Smuzhiyun #undef MULTI_ISA
68*4882a593Smuzhiyun #define MULTI_ISA 1
69*4882a593Smuzhiyun #endif
70*4882a593Smuzhiyun #endif /* AMIGA_PCMCIA */
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #define enec_isa_read_base  0xfffa0000
75*4882a593Smuzhiyun #define enec_isa_write_base 0xfffb0000
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #define ENEC_ISA_IO_B(ioaddr)	(enec_isa_read_base+((((unsigned long)(ioaddr))&0x7F)<<9))
78*4882a593Smuzhiyun #define ENEC_ISA_IO_W(ioaddr)	(enec_isa_read_base+((((unsigned long)(ioaddr))&0x7F)<<9))
79*4882a593Smuzhiyun #define ENEC_ISA_MEM_B(madr)	(enec_isa_read_base+((((unsigned long)(madr))&0x7F)<<9))
80*4882a593Smuzhiyun #define ENEC_ISA_MEM_W(madr)	(enec_isa_read_base+((((unsigned long)(madr))&0x7F)<<9))
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun #ifndef MULTI_ISA
83*4882a593Smuzhiyun #define MULTI_ISA 0
84*4882a593Smuzhiyun #else
85*4882a593Smuzhiyun #undef MULTI_ISA
86*4882a593Smuzhiyun #define MULTI_ISA 1
87*4882a593Smuzhiyun #endif
88*4882a593Smuzhiyun #endif /* ATARI_ROM_ISA */
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun #if defined(CONFIG_ISA) || defined(CONFIG_ATARI_ROM_ISA)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #if MULTI_ISA == 0
94*4882a593Smuzhiyun #undef MULTI_ISA
95*4882a593Smuzhiyun #endif
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #define ISA_TYPE_Q40  (1)
98*4882a593Smuzhiyun #define ISA_TYPE_AG   (2)
99*4882a593Smuzhiyun #define ISA_TYPE_ENEC (3)
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun #if defined(CONFIG_Q40) && !defined(MULTI_ISA)
102*4882a593Smuzhiyun #define ISA_TYPE ISA_TYPE_Q40
103*4882a593Smuzhiyun #define ISA_SEX  0
104*4882a593Smuzhiyun #endif
105*4882a593Smuzhiyun #if defined(CONFIG_AMIGA_PCMCIA) && !defined(MULTI_ISA)
106*4882a593Smuzhiyun #define ISA_TYPE ISA_TYPE_AG
107*4882a593Smuzhiyun #define ISA_SEX  1
108*4882a593Smuzhiyun #endif
109*4882a593Smuzhiyun #if defined(CONFIG_ATARI_ROM_ISA) && !defined(MULTI_ISA)
110*4882a593Smuzhiyun #define ISA_TYPE ISA_TYPE_ENEC
111*4882a593Smuzhiyun #define ISA_SEX  0
112*4882a593Smuzhiyun #endif
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun #ifdef MULTI_ISA
115*4882a593Smuzhiyun extern int isa_type;
116*4882a593Smuzhiyun extern int isa_sex;
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun #define ISA_TYPE isa_type
119*4882a593Smuzhiyun #define ISA_SEX  isa_sex
120*4882a593Smuzhiyun #endif
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun /*
123*4882a593Smuzhiyun  * define inline addr translation functions. Normally only one variant will
124*4882a593Smuzhiyun  * be compiled in so the case statement will be optimised away
125*4882a593Smuzhiyun  */
126*4882a593Smuzhiyun 
isa_itb(unsigned long addr)127*4882a593Smuzhiyun static inline u8 __iomem *isa_itb(unsigned long addr)
128*4882a593Smuzhiyun {
129*4882a593Smuzhiyun   switch(ISA_TYPE)
130*4882a593Smuzhiyun     {
131*4882a593Smuzhiyun #ifdef CONFIG_Q40
132*4882a593Smuzhiyun     case ISA_TYPE_Q40: return (u8 __iomem *)Q40_ISA_IO_B(addr);
133*4882a593Smuzhiyun #endif
134*4882a593Smuzhiyun #ifdef CONFIG_AMIGA_PCMCIA
135*4882a593Smuzhiyun     case ISA_TYPE_AG: return (u8 __iomem *)AG_ISA_IO_B(addr);
136*4882a593Smuzhiyun #endif
137*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
138*4882a593Smuzhiyun     case ISA_TYPE_ENEC: return (u8 __iomem *)ENEC_ISA_IO_B(addr);
139*4882a593Smuzhiyun #endif
140*4882a593Smuzhiyun     default: return NULL; /* avoid warnings, just in case */
141*4882a593Smuzhiyun     }
142*4882a593Smuzhiyun }
isa_itw(unsigned long addr)143*4882a593Smuzhiyun static inline u16 __iomem *isa_itw(unsigned long addr)
144*4882a593Smuzhiyun {
145*4882a593Smuzhiyun   switch(ISA_TYPE)
146*4882a593Smuzhiyun     {
147*4882a593Smuzhiyun #ifdef CONFIG_Q40
148*4882a593Smuzhiyun     case ISA_TYPE_Q40: return (u16 __iomem *)Q40_ISA_IO_W(addr);
149*4882a593Smuzhiyun #endif
150*4882a593Smuzhiyun #ifdef CONFIG_AMIGA_PCMCIA
151*4882a593Smuzhiyun     case ISA_TYPE_AG: return (u16 __iomem *)AG_ISA_IO_W(addr);
152*4882a593Smuzhiyun #endif
153*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
154*4882a593Smuzhiyun     case ISA_TYPE_ENEC: return (u16 __iomem *)ENEC_ISA_IO_W(addr);
155*4882a593Smuzhiyun #endif
156*4882a593Smuzhiyun     default: return NULL; /* avoid warnings, just in case */
157*4882a593Smuzhiyun     }
158*4882a593Smuzhiyun }
isa_itl(unsigned long addr)159*4882a593Smuzhiyun static inline u32 __iomem *isa_itl(unsigned long addr)
160*4882a593Smuzhiyun {
161*4882a593Smuzhiyun   switch(ISA_TYPE)
162*4882a593Smuzhiyun     {
163*4882a593Smuzhiyun #ifdef CONFIG_AMIGA_PCMCIA
164*4882a593Smuzhiyun     case ISA_TYPE_AG: return (u32 __iomem *)AG_ISA_IO_W(addr);
165*4882a593Smuzhiyun #endif
166*4882a593Smuzhiyun     default: return 0; /* avoid warnings, just in case */
167*4882a593Smuzhiyun     }
168*4882a593Smuzhiyun }
isa_mtb(unsigned long addr)169*4882a593Smuzhiyun static inline u8 __iomem *isa_mtb(unsigned long addr)
170*4882a593Smuzhiyun {
171*4882a593Smuzhiyun   switch(ISA_TYPE)
172*4882a593Smuzhiyun     {
173*4882a593Smuzhiyun #ifdef CONFIG_Q40
174*4882a593Smuzhiyun     case ISA_TYPE_Q40: return (u8 __iomem *)Q40_ISA_MEM_B(addr);
175*4882a593Smuzhiyun #endif
176*4882a593Smuzhiyun #ifdef CONFIG_AMIGA_PCMCIA
177*4882a593Smuzhiyun     case ISA_TYPE_AG: return (u8 __iomem *)addr;
178*4882a593Smuzhiyun #endif
179*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
180*4882a593Smuzhiyun     case ISA_TYPE_ENEC: return (u8 __iomem *)ENEC_ISA_MEM_B(addr);
181*4882a593Smuzhiyun #endif
182*4882a593Smuzhiyun     default: return NULL; /* avoid warnings, just in case */
183*4882a593Smuzhiyun     }
184*4882a593Smuzhiyun }
isa_mtw(unsigned long addr)185*4882a593Smuzhiyun static inline u16 __iomem *isa_mtw(unsigned long addr)
186*4882a593Smuzhiyun {
187*4882a593Smuzhiyun   switch(ISA_TYPE)
188*4882a593Smuzhiyun     {
189*4882a593Smuzhiyun #ifdef CONFIG_Q40
190*4882a593Smuzhiyun     case ISA_TYPE_Q40: return (u16 __iomem *)Q40_ISA_MEM_W(addr);
191*4882a593Smuzhiyun #endif
192*4882a593Smuzhiyun #ifdef CONFIG_AMIGA_PCMCIA
193*4882a593Smuzhiyun     case ISA_TYPE_AG: return (u16 __iomem *)addr;
194*4882a593Smuzhiyun #endif
195*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
196*4882a593Smuzhiyun     case ISA_TYPE_ENEC: return (u16 __iomem *)ENEC_ISA_MEM_W(addr);
197*4882a593Smuzhiyun #endif
198*4882a593Smuzhiyun     default: return NULL; /* avoid warnings, just in case */
199*4882a593Smuzhiyun     }
200*4882a593Smuzhiyun }
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun #define isa_inb(port)      in_8(isa_itb(port))
204*4882a593Smuzhiyun #define isa_inw(port)      (ISA_SEX ? in_be16(isa_itw(port)) : in_le16(isa_itw(port)))
205*4882a593Smuzhiyun #define isa_inl(port)      (ISA_SEX ? in_be32(isa_itl(port)) : in_le32(isa_itl(port)))
206*4882a593Smuzhiyun #define isa_outb(val,port) out_8(isa_itb(port),(val))
207*4882a593Smuzhiyun #define isa_outw(val,port) (ISA_SEX ? out_be16(isa_itw(port),(val)) : out_le16(isa_itw(port),(val)))
208*4882a593Smuzhiyun #define isa_outl(val,port) (ISA_SEX ? out_be32(isa_itl(port),(val)) : out_le32(isa_itl(port),(val)))
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun #define isa_readb(p)       in_8(isa_mtb((unsigned long)(p)))
211*4882a593Smuzhiyun #define isa_readw(p)       \
212*4882a593Smuzhiyun 	(ISA_SEX ? in_be16(isa_mtw((unsigned long)(p)))	\
213*4882a593Smuzhiyun 		 : in_le16(isa_mtw((unsigned long)(p))))
214*4882a593Smuzhiyun #define isa_writeb(val,p)  out_8(isa_mtb((unsigned long)(p)),(val))
215*4882a593Smuzhiyun #define isa_writew(val,p)  \
216*4882a593Smuzhiyun 	(ISA_SEX ? out_be16(isa_mtw((unsigned long)(p)),(val))	\
217*4882a593Smuzhiyun 		 : out_le16(isa_mtw((unsigned long)(p)),(val)))
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
220*4882a593Smuzhiyun #define isa_rom_inb(port)      rom_in_8(isa_itb(port))
221*4882a593Smuzhiyun #define isa_rom_inw(port)	\
222*4882a593Smuzhiyun 	(ISA_SEX ? rom_in_be16(isa_itw(port))	\
223*4882a593Smuzhiyun 		 : rom_in_le16(isa_itw(port)))
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun #define isa_rom_outb(val, port) rom_out_8(isa_itb(port), (val))
226*4882a593Smuzhiyun #define isa_rom_outw(val, port)	\
227*4882a593Smuzhiyun 	(ISA_SEX ? rom_out_be16(isa_itw(port), (val))	\
228*4882a593Smuzhiyun 		 : rom_out_le16(isa_itw(port), (val)))
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun #define isa_rom_readb(p)       rom_in_8(isa_mtb((unsigned long)(p)))
231*4882a593Smuzhiyun #define isa_rom_readw(p)       \
232*4882a593Smuzhiyun 	(ISA_SEX ? rom_in_be16(isa_mtw((unsigned long)(p)))	\
233*4882a593Smuzhiyun 		 : rom_in_le16(isa_mtw((unsigned long)(p))))
234*4882a593Smuzhiyun #define isa_rom_readw_swap(p)       \
235*4882a593Smuzhiyun 	(ISA_SEX ? rom_in_le16(isa_mtw((unsigned long)(p)))	\
236*4882a593Smuzhiyun 		 : rom_in_be16(isa_mtw((unsigned long)(p))))
237*4882a593Smuzhiyun #define isa_rom_readw_raw(p)   rom_in_be16(isa_mtw((unsigned long)(p)))
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun #define isa_rom_writeb(val, p)  rom_out_8(isa_mtb((unsigned long)(p)), (val))
240*4882a593Smuzhiyun #define isa_rom_writew(val, p)  \
241*4882a593Smuzhiyun 	(ISA_SEX ? rom_out_be16(isa_mtw((unsigned long)(p)), (val))	\
242*4882a593Smuzhiyun 		 : rom_out_le16(isa_mtw((unsigned long)(p)), (val)))
243*4882a593Smuzhiyun #define isa_rom_writew_swap(val, p)  \
244*4882a593Smuzhiyun 	(ISA_SEX ? rom_out_le16(isa_mtw((unsigned long)(p)), (val))	\
245*4882a593Smuzhiyun 		 : rom_out_be16(isa_mtw((unsigned long)(p)), (val)))
246*4882a593Smuzhiyun #define isa_rom_writew_raw(val, p)  rom_out_be16(isa_mtw((unsigned long)(p)), (val))
247*4882a593Smuzhiyun #endif /* CONFIG_ATARI_ROM_ISA */
248*4882a593Smuzhiyun 
isa_delay(void)249*4882a593Smuzhiyun static inline void isa_delay(void)
250*4882a593Smuzhiyun {
251*4882a593Smuzhiyun   switch(ISA_TYPE)
252*4882a593Smuzhiyun     {
253*4882a593Smuzhiyun #ifdef CONFIG_Q40
254*4882a593Smuzhiyun     case ISA_TYPE_Q40: isa_outb(0,0x80); break;
255*4882a593Smuzhiyun #endif
256*4882a593Smuzhiyun #ifdef CONFIG_AMIGA_PCMCIA
257*4882a593Smuzhiyun     case ISA_TYPE_AG: break;
258*4882a593Smuzhiyun #endif
259*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
260*4882a593Smuzhiyun     case ISA_TYPE_ENEC: break;
261*4882a593Smuzhiyun #endif
262*4882a593Smuzhiyun     default: break; /* avoid warnings */
263*4882a593Smuzhiyun     }
264*4882a593Smuzhiyun }
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun #define isa_inb_p(p)      ({u8 v=isa_inb(p);isa_delay();v;})
267*4882a593Smuzhiyun #define isa_outb_p(v,p)   ({isa_outb((v),(p));isa_delay();})
268*4882a593Smuzhiyun #define isa_inw_p(p)      ({u16 v=isa_inw(p);isa_delay();v;})
269*4882a593Smuzhiyun #define isa_outw_p(v,p)   ({isa_outw((v),(p));isa_delay();})
270*4882a593Smuzhiyun #define isa_inl_p(p)      ({u32 v=isa_inl(p);isa_delay();v;})
271*4882a593Smuzhiyun #define isa_outl_p(v,p)   ({isa_outl((v),(p));isa_delay();})
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun #define isa_insb(port, buf, nr) raw_insb(isa_itb(port), (u8 *)(buf), (nr))
274*4882a593Smuzhiyun #define isa_outsb(port, buf, nr) raw_outsb(isa_itb(port), (u8 *)(buf), (nr))
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun #define isa_insw(port, buf, nr)     \
277*4882a593Smuzhiyun        (ISA_SEX ? raw_insw(isa_itw(port), (u16 *)(buf), (nr)) :    \
278*4882a593Smuzhiyun                   raw_insw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun #define isa_outsw(port, buf, nr)    \
281*4882a593Smuzhiyun        (ISA_SEX ? raw_outsw(isa_itw(port), (u16 *)(buf), (nr)) :  \
282*4882a593Smuzhiyun                   raw_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun #define isa_insl(port, buf, nr)     \
285*4882a593Smuzhiyun        (ISA_SEX ? raw_insl(isa_itl(port), (u32 *)(buf), (nr)) :    \
286*4882a593Smuzhiyun                   raw_insw_swapw(isa_itw(port), (u16 *)(buf), (nr)<<1))
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun #define isa_outsl(port, buf, nr)    \
289*4882a593Smuzhiyun        (ISA_SEX ? raw_outsl(isa_itl(port), (u32 *)(buf), (nr)) :  \
290*4882a593Smuzhiyun                   raw_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)<<1))
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
294*4882a593Smuzhiyun #define isa_rom_inb_p(p)	({ u8 _v = isa_rom_inb(p); isa_delay(); _v; })
295*4882a593Smuzhiyun #define isa_rom_inw_p(p)	({ u16 _v = isa_rom_inw(p); isa_delay(); _v; })
296*4882a593Smuzhiyun #define isa_rom_outb_p(v, p)	({ isa_rom_outb((v), (p)); isa_delay(); })
297*4882a593Smuzhiyun #define isa_rom_outw_p(v, p)	({ isa_rom_outw((v), (p)); isa_delay(); })
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun #define isa_rom_insb(port, buf, nr) raw_rom_insb(isa_itb(port), (u8 *)(buf), (nr))
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun #define isa_rom_insw(port, buf, nr)     \
302*4882a593Smuzhiyun        (ISA_SEX ? raw_rom_insw(isa_itw(port), (u16 *)(buf), (nr)) :    \
303*4882a593Smuzhiyun 		  raw_rom_insw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun #define isa_rom_outsb(port, buf, nr) raw_rom_outsb(isa_itb(port), (u8 *)(buf), (nr))
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun #define isa_rom_outsw(port, buf, nr)    \
308*4882a593Smuzhiyun        (ISA_SEX ? raw_rom_outsw(isa_itw(port), (u16 *)(buf), (nr)) :  \
309*4882a593Smuzhiyun 		  raw_rom_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
310*4882a593Smuzhiyun #endif /* CONFIG_ATARI_ROM_ISA */
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun #endif  /* CONFIG_ISA || CONFIG_ATARI_ROM_ISA */
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun #if defined(CONFIG_ISA) && !defined(CONFIG_ATARI_ROM_ISA)
316*4882a593Smuzhiyun #define inb     isa_inb
317*4882a593Smuzhiyun #define inb_p   isa_inb_p
318*4882a593Smuzhiyun #define outb    isa_outb
319*4882a593Smuzhiyun #define outb_p  isa_outb_p
320*4882a593Smuzhiyun #define inw     isa_inw
321*4882a593Smuzhiyun #define inw_p   isa_inw_p
322*4882a593Smuzhiyun #define outw    isa_outw
323*4882a593Smuzhiyun #define outw_p  isa_outw_p
324*4882a593Smuzhiyun #define inl     isa_inl
325*4882a593Smuzhiyun #define inl_p   isa_inl_p
326*4882a593Smuzhiyun #define outl    isa_outl
327*4882a593Smuzhiyun #define outl_p  isa_outl_p
328*4882a593Smuzhiyun #define insb    isa_insb
329*4882a593Smuzhiyun #define insw    isa_insw
330*4882a593Smuzhiyun #define insl    isa_insl
331*4882a593Smuzhiyun #define outsb   isa_outsb
332*4882a593Smuzhiyun #define outsw   isa_outsw
333*4882a593Smuzhiyun #define outsl   isa_outsl
334*4882a593Smuzhiyun #define readb   isa_readb
335*4882a593Smuzhiyun #define readw   isa_readw
336*4882a593Smuzhiyun #define writeb  isa_writeb
337*4882a593Smuzhiyun #define writew  isa_writew
338*4882a593Smuzhiyun #endif  /* CONFIG_ISA && !CONFIG_ATARI_ROM_ISA */
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun #ifdef CONFIG_ATARI_ROM_ISA
341*4882a593Smuzhiyun /*
342*4882a593Smuzhiyun  * kernel with both ROM port ISA and IDE compiled in, those have
343*4882a593Smuzhiyun  * conflicting defs for in/out. Simply consider port < 1024
344*4882a593Smuzhiyun  * ROM port ISA and everything else regular ISA for IDE. read,write defined
345*4882a593Smuzhiyun  * below.
346*4882a593Smuzhiyun  */
347*4882a593Smuzhiyun #define inb(port)	((port) < 1024 ? isa_rom_inb(port) : in_8(port))
348*4882a593Smuzhiyun #define inb_p(port)	((port) < 1024 ? isa_rom_inb_p(port) : in_8(port))
349*4882a593Smuzhiyun #define inw(port)	((port) < 1024 ? isa_rom_inw(port) : in_le16(port))
350*4882a593Smuzhiyun #define inw_p(port)	((port) < 1024 ? isa_rom_inw_p(port) : in_le16(port))
351*4882a593Smuzhiyun #define inl		isa_inl
352*4882a593Smuzhiyun #define inl_p		isa_inl_p
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun #define outb(val, port)	((port) < 1024 ? isa_rom_outb((val), (port)) : out_8((port), (val)))
355*4882a593Smuzhiyun #define outb_p(val, port) ((port) < 1024 ? isa_rom_outb_p((val), (port)) : out_8((port), (val)))
356*4882a593Smuzhiyun #define outw(val, port)	((port) < 1024 ? isa_rom_outw((val), (port)) : out_le16((port), (val)))
357*4882a593Smuzhiyun #define outw_p(val, port) ((port) < 1024 ? isa_rom_outw_p((val), (port)) : out_le16((port), (val)))
358*4882a593Smuzhiyun #define outl		isa_outl
359*4882a593Smuzhiyun #define outl_p		isa_outl_p
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun #define insb(port, buf, nr)	((port) < 1024 ? isa_rom_insb((port), (buf), (nr)) : isa_insb((port), (buf), (nr)))
362*4882a593Smuzhiyun #define insw(port, buf, nr)	((port) < 1024 ? isa_rom_insw((port), (buf), (nr)) : isa_insw((port), (buf), (nr)))
363*4882a593Smuzhiyun #define insl			isa_insl
364*4882a593Smuzhiyun #define outsb(port, buf, nr)	((port) < 1024 ? isa_rom_outsb((port), (buf), (nr)) : isa_outsb((port), (buf), (nr)))
365*4882a593Smuzhiyun #define outsw(port, buf, nr)	((port) < 1024 ? isa_rom_outsw((port), (buf), (nr)) : isa_outsw((port), (buf), (nr)))
366*4882a593Smuzhiyun #define outsl			isa_outsl
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun #define readb(addr)		in_8(addr)
369*4882a593Smuzhiyun #define writeb(val, addr)	out_8((addr), (val))
370*4882a593Smuzhiyun #define readw(addr)		in_le16(addr)
371*4882a593Smuzhiyun #define writew(val, addr)	out_le16((addr), (val))
372*4882a593Smuzhiyun #endif /* CONFIG_ATARI_ROM_ISA */
373*4882a593Smuzhiyun 
374*4882a593Smuzhiyun #define readl(addr)      in_le32(addr)
375*4882a593Smuzhiyun #define writel(val,addr) out_le32((addr),(val))
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun #define readsb(port, buf, nr)     raw_insb((port), (u8 *)(buf), (nr))
378*4882a593Smuzhiyun #define readsw(port, buf, nr)     raw_insw((port), (u16 *)(buf), (nr))
379*4882a593Smuzhiyun #define readsl(port, buf, nr)     raw_insl((port), (u32 *)(buf), (nr))
380*4882a593Smuzhiyun #define writesb(port, buf, nr)    raw_outsb((port), (u8 *)(buf), (nr))
381*4882a593Smuzhiyun #define writesw(port, buf, nr)    raw_outsw((port), (u16 *)(buf), (nr))
382*4882a593Smuzhiyun #define writesl(port, buf, nr)    raw_outsl((port), (u32 *)(buf), (nr))
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun #ifndef CONFIG_SUN3
385*4882a593Smuzhiyun #define IO_SPACE_LIMIT 0xffff
386*4882a593Smuzhiyun #else
387*4882a593Smuzhiyun #define IO_SPACE_LIMIT 0x0fffffff
388*4882a593Smuzhiyun #endif
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun #endif /* __KERNEL__ */
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun #define __ARCH_HAS_NO_PAGE_ZERO_MAPPED		1
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun /*
395*4882a593Smuzhiyun  * Convert a physical pointer to a virtual kernel pointer for /dev/mem
396*4882a593Smuzhiyun  * access
397*4882a593Smuzhiyun  */
398*4882a593Smuzhiyun #define xlate_dev_mem_ptr(p)	__va(p)
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun /*
401*4882a593Smuzhiyun  * Convert a virtual cached pointer to an uncached pointer
402*4882a593Smuzhiyun  */
403*4882a593Smuzhiyun #define xlate_dev_kmem_ptr(p)	p
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun #define readb_relaxed(addr)	readb(addr)
406*4882a593Smuzhiyun #define readw_relaxed(addr)	readw(addr)
407*4882a593Smuzhiyun #define readl_relaxed(addr)	readl(addr)
408*4882a593Smuzhiyun 
409*4882a593Smuzhiyun #define writeb_relaxed(b, addr)	writeb(b, addr)
410*4882a593Smuzhiyun #define writew_relaxed(b, addr)	writew(b, addr)
411*4882a593Smuzhiyun #define writel_relaxed(b, addr)	writel(b, addr)
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun #endif /* _M68K_IO_MM_H */
414