18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * linux/include/asm-m68k/io.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * 4/1/00 RZ: - rewritten to avoid clashes between ISA/PCI and other
68c2ecf20Sopenharmony_ci *              IO access
78c2ecf20Sopenharmony_ci *            - added Q40 support
88c2ecf20Sopenharmony_ci *            - added skeleton for GG-II and Amiga PCMCIA
98c2ecf20Sopenharmony_ci * 2/3/01 RZ: - moved a few more defs into raw_io.h
108c2ecf20Sopenharmony_ci *
118c2ecf20Sopenharmony_ci * inX/outX should not be used by any driver unless it does
128c2ecf20Sopenharmony_ci * ISA access. Other drivers should use function defined in raw_io.h
138c2ecf20Sopenharmony_ci * or define its own macros on top of these.
148c2ecf20Sopenharmony_ci *
158c2ecf20Sopenharmony_ci *    inX(),outX()              are for ISA I/O
168c2ecf20Sopenharmony_ci *    isa_readX(),isa_writeX()  are for ISA memory
178c2ecf20Sopenharmony_ci */
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#ifndef _M68K_IO_MM_H
208c2ecf20Sopenharmony_ci#define _M68K_IO_MM_H
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#ifdef __KERNEL__
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci#include <linux/compiler.h>
258c2ecf20Sopenharmony_ci#include <asm/raw_io.h>
268c2ecf20Sopenharmony_ci#include <asm/virtconvert.h>
278c2ecf20Sopenharmony_ci#include <asm/kmap.h>
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci#include <asm-generic/iomap.h>
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI
328c2ecf20Sopenharmony_ci#define atari_readb   raw_inb
338c2ecf20Sopenharmony_ci#define atari_writeb  raw_outb
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci#define atari_inb_p   raw_inb
368c2ecf20Sopenharmony_ci#define atari_outb_p  raw_outb
378c2ecf20Sopenharmony_ci#endif
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci/*
418c2ecf20Sopenharmony_ci * IO/MEM definitions for various ISA bridges
428c2ecf20Sopenharmony_ci */
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci#ifdef CONFIG_Q40
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci#define q40_isa_io_base  0xff400000
488c2ecf20Sopenharmony_ci#define q40_isa_mem_base 0xff800000
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci#define Q40_ISA_IO_B(ioaddr) (q40_isa_io_base+1+4*((unsigned long)(ioaddr)))
518c2ecf20Sopenharmony_ci#define Q40_ISA_IO_W(ioaddr) (q40_isa_io_base+  4*((unsigned long)(ioaddr)))
528c2ecf20Sopenharmony_ci#define Q40_ISA_MEM_B(madr)  (q40_isa_mem_base+1+4*((unsigned long)(madr)))
538c2ecf20Sopenharmony_ci#define Q40_ISA_MEM_W(madr)  (q40_isa_mem_base+  4*((unsigned long)(madr)))
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci#define MULTI_ISA 0
568c2ecf20Sopenharmony_ci#endif /* Q40 */
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci#ifdef CONFIG_AMIGA_PCMCIA
598c2ecf20Sopenharmony_ci#include <asm/amigayle.h>
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci#define AG_ISA_IO_B(ioaddr) ( GAYLE_IO+(ioaddr)+(((ioaddr)&1)*GAYLE_ODD) )
628c2ecf20Sopenharmony_ci#define AG_ISA_IO_W(ioaddr) ( GAYLE_IO+(ioaddr) )
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci#ifndef MULTI_ISA
658c2ecf20Sopenharmony_ci#define MULTI_ISA 0
668c2ecf20Sopenharmony_ci#else
678c2ecf20Sopenharmony_ci#undef MULTI_ISA
688c2ecf20Sopenharmony_ci#define MULTI_ISA 1
698c2ecf20Sopenharmony_ci#endif
708c2ecf20Sopenharmony_ci#endif /* AMIGA_PCMCIA */
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci#define enec_isa_read_base  0xfffa0000
758c2ecf20Sopenharmony_ci#define enec_isa_write_base 0xfffb0000
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci#define ENEC_ISA_IO_B(ioaddr)	(enec_isa_read_base+((((unsigned long)(ioaddr))&0x7F)<<9))
788c2ecf20Sopenharmony_ci#define ENEC_ISA_IO_W(ioaddr)	(enec_isa_read_base+((((unsigned long)(ioaddr))&0x7F)<<9))
798c2ecf20Sopenharmony_ci#define ENEC_ISA_MEM_B(madr)	(enec_isa_read_base+((((unsigned long)(madr))&0x7F)<<9))
808c2ecf20Sopenharmony_ci#define ENEC_ISA_MEM_W(madr)	(enec_isa_read_base+((((unsigned long)(madr))&0x7F)<<9))
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ci#ifndef MULTI_ISA
838c2ecf20Sopenharmony_ci#define MULTI_ISA 0
848c2ecf20Sopenharmony_ci#else
858c2ecf20Sopenharmony_ci#undef MULTI_ISA
868c2ecf20Sopenharmony_ci#define MULTI_ISA 1
878c2ecf20Sopenharmony_ci#endif
888c2ecf20Sopenharmony_ci#endif /* ATARI_ROM_ISA */
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ci#if defined(CONFIG_ISA) || defined(CONFIG_ATARI_ROM_ISA)
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci#if MULTI_ISA == 0
948c2ecf20Sopenharmony_ci#undef MULTI_ISA
958c2ecf20Sopenharmony_ci#endif
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci#define ISA_TYPE_Q40  (1)
988c2ecf20Sopenharmony_ci#define ISA_TYPE_AG   (2)
998c2ecf20Sopenharmony_ci#define ISA_TYPE_ENEC (3)
1008c2ecf20Sopenharmony_ci
1018c2ecf20Sopenharmony_ci#if defined(CONFIG_Q40) && !defined(MULTI_ISA)
1028c2ecf20Sopenharmony_ci#define ISA_TYPE ISA_TYPE_Q40
1038c2ecf20Sopenharmony_ci#define ISA_SEX  0
1048c2ecf20Sopenharmony_ci#endif
1058c2ecf20Sopenharmony_ci#if defined(CONFIG_AMIGA_PCMCIA) && !defined(MULTI_ISA)
1068c2ecf20Sopenharmony_ci#define ISA_TYPE ISA_TYPE_AG
1078c2ecf20Sopenharmony_ci#define ISA_SEX  1
1088c2ecf20Sopenharmony_ci#endif
1098c2ecf20Sopenharmony_ci#if defined(CONFIG_ATARI_ROM_ISA) && !defined(MULTI_ISA)
1108c2ecf20Sopenharmony_ci#define ISA_TYPE ISA_TYPE_ENEC
1118c2ecf20Sopenharmony_ci#define ISA_SEX  0
1128c2ecf20Sopenharmony_ci#endif
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci#ifdef MULTI_ISA
1158c2ecf20Sopenharmony_ciextern int isa_type;
1168c2ecf20Sopenharmony_ciextern int isa_sex;
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci#define ISA_TYPE isa_type
1198c2ecf20Sopenharmony_ci#define ISA_SEX  isa_sex
1208c2ecf20Sopenharmony_ci#endif
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ci/*
1238c2ecf20Sopenharmony_ci * define inline addr translation functions. Normally only one variant will
1248c2ecf20Sopenharmony_ci * be compiled in so the case statement will be optimised away
1258c2ecf20Sopenharmony_ci */
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_cistatic inline u8 __iomem *isa_itb(unsigned long addr)
1288c2ecf20Sopenharmony_ci{
1298c2ecf20Sopenharmony_ci  switch(ISA_TYPE)
1308c2ecf20Sopenharmony_ci    {
1318c2ecf20Sopenharmony_ci#ifdef CONFIG_Q40
1328c2ecf20Sopenharmony_ci    case ISA_TYPE_Q40: return (u8 __iomem *)Q40_ISA_IO_B(addr);
1338c2ecf20Sopenharmony_ci#endif
1348c2ecf20Sopenharmony_ci#ifdef CONFIG_AMIGA_PCMCIA
1358c2ecf20Sopenharmony_ci    case ISA_TYPE_AG: return (u8 __iomem *)AG_ISA_IO_B(addr);
1368c2ecf20Sopenharmony_ci#endif
1378c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
1388c2ecf20Sopenharmony_ci    case ISA_TYPE_ENEC: return (u8 __iomem *)ENEC_ISA_IO_B(addr);
1398c2ecf20Sopenharmony_ci#endif
1408c2ecf20Sopenharmony_ci    default: return NULL; /* avoid warnings, just in case */
1418c2ecf20Sopenharmony_ci    }
1428c2ecf20Sopenharmony_ci}
1438c2ecf20Sopenharmony_cistatic inline u16 __iomem *isa_itw(unsigned long addr)
1448c2ecf20Sopenharmony_ci{
1458c2ecf20Sopenharmony_ci  switch(ISA_TYPE)
1468c2ecf20Sopenharmony_ci    {
1478c2ecf20Sopenharmony_ci#ifdef CONFIG_Q40
1488c2ecf20Sopenharmony_ci    case ISA_TYPE_Q40: return (u16 __iomem *)Q40_ISA_IO_W(addr);
1498c2ecf20Sopenharmony_ci#endif
1508c2ecf20Sopenharmony_ci#ifdef CONFIG_AMIGA_PCMCIA
1518c2ecf20Sopenharmony_ci    case ISA_TYPE_AG: return (u16 __iomem *)AG_ISA_IO_W(addr);
1528c2ecf20Sopenharmony_ci#endif
1538c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
1548c2ecf20Sopenharmony_ci    case ISA_TYPE_ENEC: return (u16 __iomem *)ENEC_ISA_IO_W(addr);
1558c2ecf20Sopenharmony_ci#endif
1568c2ecf20Sopenharmony_ci    default: return NULL; /* avoid warnings, just in case */
1578c2ecf20Sopenharmony_ci    }
1588c2ecf20Sopenharmony_ci}
1598c2ecf20Sopenharmony_cistatic inline u32 __iomem *isa_itl(unsigned long addr)
1608c2ecf20Sopenharmony_ci{
1618c2ecf20Sopenharmony_ci  switch(ISA_TYPE)
1628c2ecf20Sopenharmony_ci    {
1638c2ecf20Sopenharmony_ci#ifdef CONFIG_AMIGA_PCMCIA
1648c2ecf20Sopenharmony_ci    case ISA_TYPE_AG: return (u32 __iomem *)AG_ISA_IO_W(addr);
1658c2ecf20Sopenharmony_ci#endif
1668c2ecf20Sopenharmony_ci    default: return 0; /* avoid warnings, just in case */
1678c2ecf20Sopenharmony_ci    }
1688c2ecf20Sopenharmony_ci}
1698c2ecf20Sopenharmony_cistatic inline u8 __iomem *isa_mtb(unsigned long addr)
1708c2ecf20Sopenharmony_ci{
1718c2ecf20Sopenharmony_ci  switch(ISA_TYPE)
1728c2ecf20Sopenharmony_ci    {
1738c2ecf20Sopenharmony_ci#ifdef CONFIG_Q40
1748c2ecf20Sopenharmony_ci    case ISA_TYPE_Q40: return (u8 __iomem *)Q40_ISA_MEM_B(addr);
1758c2ecf20Sopenharmony_ci#endif
1768c2ecf20Sopenharmony_ci#ifdef CONFIG_AMIGA_PCMCIA
1778c2ecf20Sopenharmony_ci    case ISA_TYPE_AG: return (u8 __iomem *)addr;
1788c2ecf20Sopenharmony_ci#endif
1798c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
1808c2ecf20Sopenharmony_ci    case ISA_TYPE_ENEC: return (u8 __iomem *)ENEC_ISA_MEM_B(addr);
1818c2ecf20Sopenharmony_ci#endif
1828c2ecf20Sopenharmony_ci    default: return NULL; /* avoid warnings, just in case */
1838c2ecf20Sopenharmony_ci    }
1848c2ecf20Sopenharmony_ci}
1858c2ecf20Sopenharmony_cistatic inline u16 __iomem *isa_mtw(unsigned long addr)
1868c2ecf20Sopenharmony_ci{
1878c2ecf20Sopenharmony_ci  switch(ISA_TYPE)
1888c2ecf20Sopenharmony_ci    {
1898c2ecf20Sopenharmony_ci#ifdef CONFIG_Q40
1908c2ecf20Sopenharmony_ci    case ISA_TYPE_Q40: return (u16 __iomem *)Q40_ISA_MEM_W(addr);
1918c2ecf20Sopenharmony_ci#endif
1928c2ecf20Sopenharmony_ci#ifdef CONFIG_AMIGA_PCMCIA
1938c2ecf20Sopenharmony_ci    case ISA_TYPE_AG: return (u16 __iomem *)addr;
1948c2ecf20Sopenharmony_ci#endif
1958c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
1968c2ecf20Sopenharmony_ci    case ISA_TYPE_ENEC: return (u16 __iomem *)ENEC_ISA_MEM_W(addr);
1978c2ecf20Sopenharmony_ci#endif
1988c2ecf20Sopenharmony_ci    default: return NULL; /* avoid warnings, just in case */
1998c2ecf20Sopenharmony_ci    }
2008c2ecf20Sopenharmony_ci}
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_ci
2038c2ecf20Sopenharmony_ci#define isa_inb(port)      in_8(isa_itb(port))
2048c2ecf20Sopenharmony_ci#define isa_inw(port)      (ISA_SEX ? in_be16(isa_itw(port)) : in_le16(isa_itw(port)))
2058c2ecf20Sopenharmony_ci#define isa_inl(port)      (ISA_SEX ? in_be32(isa_itl(port)) : in_le32(isa_itl(port)))
2068c2ecf20Sopenharmony_ci#define isa_outb(val,port) out_8(isa_itb(port),(val))
2078c2ecf20Sopenharmony_ci#define isa_outw(val,port) (ISA_SEX ? out_be16(isa_itw(port),(val)) : out_le16(isa_itw(port),(val)))
2088c2ecf20Sopenharmony_ci#define isa_outl(val,port) (ISA_SEX ? out_be32(isa_itl(port),(val)) : out_le32(isa_itl(port),(val)))
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci#define isa_readb(p)       in_8(isa_mtb((unsigned long)(p)))
2118c2ecf20Sopenharmony_ci#define isa_readw(p)       \
2128c2ecf20Sopenharmony_ci	(ISA_SEX ? in_be16(isa_mtw((unsigned long)(p)))	\
2138c2ecf20Sopenharmony_ci		 : in_le16(isa_mtw((unsigned long)(p))))
2148c2ecf20Sopenharmony_ci#define isa_writeb(val,p)  out_8(isa_mtb((unsigned long)(p)),(val))
2158c2ecf20Sopenharmony_ci#define isa_writew(val,p)  \
2168c2ecf20Sopenharmony_ci	(ISA_SEX ? out_be16(isa_mtw((unsigned long)(p)),(val))	\
2178c2ecf20Sopenharmony_ci		 : out_le16(isa_mtw((unsigned long)(p)),(val)))
2188c2ecf20Sopenharmony_ci
2198c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
2208c2ecf20Sopenharmony_ci#define isa_rom_inb(port)      rom_in_8(isa_itb(port))
2218c2ecf20Sopenharmony_ci#define isa_rom_inw(port)	\
2228c2ecf20Sopenharmony_ci	(ISA_SEX ? rom_in_be16(isa_itw(port))	\
2238c2ecf20Sopenharmony_ci		 : rom_in_le16(isa_itw(port)))
2248c2ecf20Sopenharmony_ci
2258c2ecf20Sopenharmony_ci#define isa_rom_outb(val, port) rom_out_8(isa_itb(port), (val))
2268c2ecf20Sopenharmony_ci#define isa_rom_outw(val, port)	\
2278c2ecf20Sopenharmony_ci	(ISA_SEX ? rom_out_be16(isa_itw(port), (val))	\
2288c2ecf20Sopenharmony_ci		 : rom_out_le16(isa_itw(port), (val)))
2298c2ecf20Sopenharmony_ci
2308c2ecf20Sopenharmony_ci#define isa_rom_readb(p)       rom_in_8(isa_mtb((unsigned long)(p)))
2318c2ecf20Sopenharmony_ci#define isa_rom_readw(p)       \
2328c2ecf20Sopenharmony_ci	(ISA_SEX ? rom_in_be16(isa_mtw((unsigned long)(p)))	\
2338c2ecf20Sopenharmony_ci		 : rom_in_le16(isa_mtw((unsigned long)(p))))
2348c2ecf20Sopenharmony_ci#define isa_rom_readw_swap(p)       \
2358c2ecf20Sopenharmony_ci	(ISA_SEX ? rom_in_le16(isa_mtw((unsigned long)(p)))	\
2368c2ecf20Sopenharmony_ci		 : rom_in_be16(isa_mtw((unsigned long)(p))))
2378c2ecf20Sopenharmony_ci#define isa_rom_readw_raw(p)   rom_in_be16(isa_mtw((unsigned long)(p)))
2388c2ecf20Sopenharmony_ci
2398c2ecf20Sopenharmony_ci#define isa_rom_writeb(val, p)  rom_out_8(isa_mtb((unsigned long)(p)), (val))
2408c2ecf20Sopenharmony_ci#define isa_rom_writew(val, p)  \
2418c2ecf20Sopenharmony_ci	(ISA_SEX ? rom_out_be16(isa_mtw((unsigned long)(p)), (val))	\
2428c2ecf20Sopenharmony_ci		 : rom_out_le16(isa_mtw((unsigned long)(p)), (val)))
2438c2ecf20Sopenharmony_ci#define isa_rom_writew_swap(val, p)  \
2448c2ecf20Sopenharmony_ci	(ISA_SEX ? rom_out_le16(isa_mtw((unsigned long)(p)), (val))	\
2458c2ecf20Sopenharmony_ci		 : rom_out_be16(isa_mtw((unsigned long)(p)), (val)))
2468c2ecf20Sopenharmony_ci#define isa_rom_writew_raw(val, p)  rom_out_be16(isa_mtw((unsigned long)(p)), (val))
2478c2ecf20Sopenharmony_ci#endif /* CONFIG_ATARI_ROM_ISA */
2488c2ecf20Sopenharmony_ci
2498c2ecf20Sopenharmony_cistatic inline void isa_delay(void)
2508c2ecf20Sopenharmony_ci{
2518c2ecf20Sopenharmony_ci  switch(ISA_TYPE)
2528c2ecf20Sopenharmony_ci    {
2538c2ecf20Sopenharmony_ci#ifdef CONFIG_Q40
2548c2ecf20Sopenharmony_ci    case ISA_TYPE_Q40: isa_outb(0,0x80); break;
2558c2ecf20Sopenharmony_ci#endif
2568c2ecf20Sopenharmony_ci#ifdef CONFIG_AMIGA_PCMCIA
2578c2ecf20Sopenharmony_ci    case ISA_TYPE_AG: break;
2588c2ecf20Sopenharmony_ci#endif
2598c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
2608c2ecf20Sopenharmony_ci    case ISA_TYPE_ENEC: break;
2618c2ecf20Sopenharmony_ci#endif
2628c2ecf20Sopenharmony_ci    default: break; /* avoid warnings */
2638c2ecf20Sopenharmony_ci    }
2648c2ecf20Sopenharmony_ci}
2658c2ecf20Sopenharmony_ci
2668c2ecf20Sopenharmony_ci#define isa_inb_p(p)      ({u8 v=isa_inb(p);isa_delay();v;})
2678c2ecf20Sopenharmony_ci#define isa_outb_p(v,p)   ({isa_outb((v),(p));isa_delay();})
2688c2ecf20Sopenharmony_ci#define isa_inw_p(p)      ({u16 v=isa_inw(p);isa_delay();v;})
2698c2ecf20Sopenharmony_ci#define isa_outw_p(v,p)   ({isa_outw((v),(p));isa_delay();})
2708c2ecf20Sopenharmony_ci#define isa_inl_p(p)      ({u32 v=isa_inl(p);isa_delay();v;})
2718c2ecf20Sopenharmony_ci#define isa_outl_p(v,p)   ({isa_outl((v),(p));isa_delay();})
2728c2ecf20Sopenharmony_ci
2738c2ecf20Sopenharmony_ci#define isa_insb(port, buf, nr) raw_insb(isa_itb(port), (u8 *)(buf), (nr))
2748c2ecf20Sopenharmony_ci#define isa_outsb(port, buf, nr) raw_outsb(isa_itb(port), (u8 *)(buf), (nr))
2758c2ecf20Sopenharmony_ci
2768c2ecf20Sopenharmony_ci#define isa_insw(port, buf, nr)     \
2778c2ecf20Sopenharmony_ci       (ISA_SEX ? raw_insw(isa_itw(port), (u16 *)(buf), (nr)) :    \
2788c2ecf20Sopenharmony_ci                  raw_insw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
2798c2ecf20Sopenharmony_ci
2808c2ecf20Sopenharmony_ci#define isa_outsw(port, buf, nr)    \
2818c2ecf20Sopenharmony_ci       (ISA_SEX ? raw_outsw(isa_itw(port), (u16 *)(buf), (nr)) :  \
2828c2ecf20Sopenharmony_ci                  raw_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_ci#define isa_insl(port, buf, nr)     \
2858c2ecf20Sopenharmony_ci       (ISA_SEX ? raw_insl(isa_itl(port), (u32 *)(buf), (nr)) :    \
2868c2ecf20Sopenharmony_ci                  raw_insw_swapw(isa_itw(port), (u16 *)(buf), (nr)<<1))
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_ci#define isa_outsl(port, buf, nr)    \
2898c2ecf20Sopenharmony_ci       (ISA_SEX ? raw_outsl(isa_itl(port), (u32 *)(buf), (nr)) :  \
2908c2ecf20Sopenharmony_ci                  raw_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)<<1))
2918c2ecf20Sopenharmony_ci
2928c2ecf20Sopenharmony_ci
2938c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
2948c2ecf20Sopenharmony_ci#define isa_rom_inb_p(p)	({ u8 _v = isa_rom_inb(p); isa_delay(); _v; })
2958c2ecf20Sopenharmony_ci#define isa_rom_inw_p(p)	({ u16 _v = isa_rom_inw(p); isa_delay(); _v; })
2968c2ecf20Sopenharmony_ci#define isa_rom_outb_p(v, p)	({ isa_rom_outb((v), (p)); isa_delay(); })
2978c2ecf20Sopenharmony_ci#define isa_rom_outw_p(v, p)	({ isa_rom_outw((v), (p)); isa_delay(); })
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_ci#define isa_rom_insb(port, buf, nr) raw_rom_insb(isa_itb(port), (u8 *)(buf), (nr))
3008c2ecf20Sopenharmony_ci
3018c2ecf20Sopenharmony_ci#define isa_rom_insw(port, buf, nr)     \
3028c2ecf20Sopenharmony_ci       (ISA_SEX ? raw_rom_insw(isa_itw(port), (u16 *)(buf), (nr)) :    \
3038c2ecf20Sopenharmony_ci		  raw_rom_insw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
3048c2ecf20Sopenharmony_ci
3058c2ecf20Sopenharmony_ci#define isa_rom_outsb(port, buf, nr) raw_rom_outsb(isa_itb(port), (u8 *)(buf), (nr))
3068c2ecf20Sopenharmony_ci
3078c2ecf20Sopenharmony_ci#define isa_rom_outsw(port, buf, nr)    \
3088c2ecf20Sopenharmony_ci       (ISA_SEX ? raw_rom_outsw(isa_itw(port), (u16 *)(buf), (nr)) :  \
3098c2ecf20Sopenharmony_ci		  raw_rom_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
3108c2ecf20Sopenharmony_ci#endif /* CONFIG_ATARI_ROM_ISA */
3118c2ecf20Sopenharmony_ci
3128c2ecf20Sopenharmony_ci#endif  /* CONFIG_ISA || CONFIG_ATARI_ROM_ISA */
3138c2ecf20Sopenharmony_ci
3148c2ecf20Sopenharmony_ci
3158c2ecf20Sopenharmony_ci#if defined(CONFIG_ISA) && !defined(CONFIG_ATARI_ROM_ISA)
3168c2ecf20Sopenharmony_ci#define inb     isa_inb
3178c2ecf20Sopenharmony_ci#define inb_p   isa_inb_p
3188c2ecf20Sopenharmony_ci#define outb    isa_outb
3198c2ecf20Sopenharmony_ci#define outb_p  isa_outb_p
3208c2ecf20Sopenharmony_ci#define inw     isa_inw
3218c2ecf20Sopenharmony_ci#define inw_p   isa_inw_p
3228c2ecf20Sopenharmony_ci#define outw    isa_outw
3238c2ecf20Sopenharmony_ci#define outw_p  isa_outw_p
3248c2ecf20Sopenharmony_ci#define inl     isa_inl
3258c2ecf20Sopenharmony_ci#define inl_p   isa_inl_p
3268c2ecf20Sopenharmony_ci#define outl    isa_outl
3278c2ecf20Sopenharmony_ci#define outl_p  isa_outl_p
3288c2ecf20Sopenharmony_ci#define insb    isa_insb
3298c2ecf20Sopenharmony_ci#define insw    isa_insw
3308c2ecf20Sopenharmony_ci#define insl    isa_insl
3318c2ecf20Sopenharmony_ci#define outsb   isa_outsb
3328c2ecf20Sopenharmony_ci#define outsw   isa_outsw
3338c2ecf20Sopenharmony_ci#define outsl   isa_outsl
3348c2ecf20Sopenharmony_ci#define readb   isa_readb
3358c2ecf20Sopenharmony_ci#define readw   isa_readw
3368c2ecf20Sopenharmony_ci#define writeb  isa_writeb
3378c2ecf20Sopenharmony_ci#define writew  isa_writew
3388c2ecf20Sopenharmony_ci#endif  /* CONFIG_ISA && !CONFIG_ATARI_ROM_ISA */
3398c2ecf20Sopenharmony_ci
3408c2ecf20Sopenharmony_ci#ifdef CONFIG_ATARI_ROM_ISA
3418c2ecf20Sopenharmony_ci/*
3428c2ecf20Sopenharmony_ci * kernel with both ROM port ISA and IDE compiled in, those have
3438c2ecf20Sopenharmony_ci * conflicting defs for in/out. Simply consider port < 1024
3448c2ecf20Sopenharmony_ci * ROM port ISA and everything else regular ISA for IDE. read,write defined
3458c2ecf20Sopenharmony_ci * below.
3468c2ecf20Sopenharmony_ci */
3478c2ecf20Sopenharmony_ci#define inb(port)	((port) < 1024 ? isa_rom_inb(port) : in_8(port))
3488c2ecf20Sopenharmony_ci#define inb_p(port)	((port) < 1024 ? isa_rom_inb_p(port) : in_8(port))
3498c2ecf20Sopenharmony_ci#define inw(port)	((port) < 1024 ? isa_rom_inw(port) : in_le16(port))
3508c2ecf20Sopenharmony_ci#define inw_p(port)	((port) < 1024 ? isa_rom_inw_p(port) : in_le16(port))
3518c2ecf20Sopenharmony_ci#define inl		isa_inl
3528c2ecf20Sopenharmony_ci#define inl_p		isa_inl_p
3538c2ecf20Sopenharmony_ci
3548c2ecf20Sopenharmony_ci#define outb(val, port)	((port) < 1024 ? isa_rom_outb((val), (port)) : out_8((port), (val)))
3558c2ecf20Sopenharmony_ci#define outb_p(val, port) ((port) < 1024 ? isa_rom_outb_p((val), (port)) : out_8((port), (val)))
3568c2ecf20Sopenharmony_ci#define outw(val, port)	((port) < 1024 ? isa_rom_outw((val), (port)) : out_le16((port), (val)))
3578c2ecf20Sopenharmony_ci#define outw_p(val, port) ((port) < 1024 ? isa_rom_outw_p((val), (port)) : out_le16((port), (val)))
3588c2ecf20Sopenharmony_ci#define outl		isa_outl
3598c2ecf20Sopenharmony_ci#define outl_p		isa_outl_p
3608c2ecf20Sopenharmony_ci
3618c2ecf20Sopenharmony_ci#define insb(port, buf, nr)	((port) < 1024 ? isa_rom_insb((port), (buf), (nr)) : isa_insb((port), (buf), (nr)))
3628c2ecf20Sopenharmony_ci#define insw(port, buf, nr)	((port) < 1024 ? isa_rom_insw((port), (buf), (nr)) : isa_insw((port), (buf), (nr)))
3638c2ecf20Sopenharmony_ci#define insl			isa_insl
3648c2ecf20Sopenharmony_ci#define outsb(port, buf, nr)	((port) < 1024 ? isa_rom_outsb((port), (buf), (nr)) : isa_outsb((port), (buf), (nr)))
3658c2ecf20Sopenharmony_ci#define outsw(port, buf, nr)	((port) < 1024 ? isa_rom_outsw((port), (buf), (nr)) : isa_outsw((port), (buf), (nr)))
3668c2ecf20Sopenharmony_ci#define outsl			isa_outsl
3678c2ecf20Sopenharmony_ci
3688c2ecf20Sopenharmony_ci#define readb(addr)		in_8(addr)
3698c2ecf20Sopenharmony_ci#define writeb(val, addr)	out_8((addr), (val))
3708c2ecf20Sopenharmony_ci#define readw(addr)		in_le16(addr)
3718c2ecf20Sopenharmony_ci#define writew(val, addr)	out_le16((addr), (val))
3728c2ecf20Sopenharmony_ci#endif /* CONFIG_ATARI_ROM_ISA */
3738c2ecf20Sopenharmony_ci
3748c2ecf20Sopenharmony_ci#define readl(addr)      in_le32(addr)
3758c2ecf20Sopenharmony_ci#define writel(val,addr) out_le32((addr),(val))
3768c2ecf20Sopenharmony_ci
3778c2ecf20Sopenharmony_ci#define readsb(port, buf, nr)     raw_insb((port), (u8 *)(buf), (nr))
3788c2ecf20Sopenharmony_ci#define readsw(port, buf, nr)     raw_insw((port), (u16 *)(buf), (nr))
3798c2ecf20Sopenharmony_ci#define readsl(port, buf, nr)     raw_insl((port), (u32 *)(buf), (nr))
3808c2ecf20Sopenharmony_ci#define writesb(port, buf, nr)    raw_outsb((port), (u8 *)(buf), (nr))
3818c2ecf20Sopenharmony_ci#define writesw(port, buf, nr)    raw_outsw((port), (u16 *)(buf), (nr))
3828c2ecf20Sopenharmony_ci#define writesl(port, buf, nr)    raw_outsl((port), (u32 *)(buf), (nr))
3838c2ecf20Sopenharmony_ci
3848c2ecf20Sopenharmony_ci#ifndef CONFIG_SUN3
3858c2ecf20Sopenharmony_ci#define IO_SPACE_LIMIT 0xffff
3868c2ecf20Sopenharmony_ci#else
3878c2ecf20Sopenharmony_ci#define IO_SPACE_LIMIT 0x0fffffff
3888c2ecf20Sopenharmony_ci#endif
3898c2ecf20Sopenharmony_ci
3908c2ecf20Sopenharmony_ci#endif /* __KERNEL__ */
3918c2ecf20Sopenharmony_ci
3928c2ecf20Sopenharmony_ci#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED		1
3938c2ecf20Sopenharmony_ci
3948c2ecf20Sopenharmony_ci/*
3958c2ecf20Sopenharmony_ci * Convert a physical pointer to a virtual kernel pointer for /dev/mem
3968c2ecf20Sopenharmony_ci * access
3978c2ecf20Sopenharmony_ci */
3988c2ecf20Sopenharmony_ci#define xlate_dev_mem_ptr(p)	__va(p)
3998c2ecf20Sopenharmony_ci
4008c2ecf20Sopenharmony_ci/*
4018c2ecf20Sopenharmony_ci * Convert a virtual cached pointer to an uncached pointer
4028c2ecf20Sopenharmony_ci */
4038c2ecf20Sopenharmony_ci#define xlate_dev_kmem_ptr(p)	p
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ci#define readb_relaxed(addr)	readb(addr)
4068c2ecf20Sopenharmony_ci#define readw_relaxed(addr)	readw(addr)
4078c2ecf20Sopenharmony_ci#define readl_relaxed(addr)	readl(addr)
4088c2ecf20Sopenharmony_ci
4098c2ecf20Sopenharmony_ci#define writeb_relaxed(b, addr)	writeb(b, addr)
4108c2ecf20Sopenharmony_ci#define writew_relaxed(b, addr)	writew(b, addr)
4118c2ecf20Sopenharmony_ci#define writel_relaxed(b, addr)	writel(b, addr)
4128c2ecf20Sopenharmony_ci
4138c2ecf20Sopenharmony_ci#endif /* _M68K_IO_MM_H */
414