0001
0002
0003
0004
0005
0006
0007
0008 #if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
0009 __EXTERN_INLINE unsigned int
0010 IO_CONCAT(__IO_PREFIX,ioread8)(const void __iomem *a)
0011 {
0012 return __kernel_ldbu(*(const volatile u8 __force *)a);
0013 }
0014
0015 __EXTERN_INLINE unsigned int
0016 IO_CONCAT(__IO_PREFIX,ioread16)(const void __iomem *a)
0017 {
0018 return __kernel_ldwu(*(const volatile u16 __force *)a);
0019 }
0020
0021 __EXTERN_INLINE void
0022 IO_CONCAT(__IO_PREFIX,iowrite8)(u8 b, void __iomem *a)
0023 {
0024 __kernel_stb(b, *(volatile u8 __force *)a);
0025 }
0026
0027 __EXTERN_INLINE void
0028 IO_CONCAT(__IO_PREFIX,iowrite16)(u16 b, void __iomem *a)
0029 {
0030 __kernel_stw(b, *(volatile u16 __force *)a);
0031 }
0032 #endif
0033
0034 #if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
0035 __EXTERN_INLINE unsigned int
0036 IO_CONCAT(__IO_PREFIX,ioread32)(const void __iomem *a)
0037 {
0038 return *(const volatile u32 __force *)a;
0039 }
0040
0041 __EXTERN_INLINE void
0042 IO_CONCAT(__IO_PREFIX,iowrite32)(u32 b, void __iomem *a)
0043 {
0044 *(volatile u32 __force *)a = b;
0045 }
0046 #endif
0047
0048 #if IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 1
0049 __EXTERN_INLINE u8
0050 IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
0051 {
0052 return __kernel_ldbu(*(const volatile u8 __force *)a);
0053 }
0054
0055 __EXTERN_INLINE u16
0056 IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
0057 {
0058 return __kernel_ldwu(*(const volatile u16 __force *)a);
0059 }
0060
0061 __EXTERN_INLINE void
0062 IO_CONCAT(__IO_PREFIX,writeb)(u8 b, volatile void __iomem *a)
0063 {
0064 __kernel_stb(b, *(volatile u8 __force *)a);
0065 }
0066
0067 __EXTERN_INLINE void
0068 IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
0069 {
0070 __kernel_stw(b, *(volatile u16 __force *)a);
0071 }
0072 #elif IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 2
0073 __EXTERN_INLINE u8
0074 IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
0075 {
0076 const void __iomem *addr = (const void __iomem *)a;
0077 return IO_CONCAT(__IO_PREFIX,ioread8)(addr);
0078 }
0079
0080 __EXTERN_INLINE u16
0081 IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
0082 {
0083 const void __iomem *addr = (const void __iomem *)a;
0084 return IO_CONCAT(__IO_PREFIX,ioread16)(addr);
0085 }
0086
0087 __EXTERN_INLINE void
0088 IO_CONCAT(__IO_PREFIX,writeb)(u8 b, volatile void __iomem *a)
0089 {
0090 void __iomem *addr = (void __iomem *)a;
0091 IO_CONCAT(__IO_PREFIX,iowrite8)(b, addr);
0092 }
0093
0094 __EXTERN_INLINE void
0095 IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
0096 {
0097 void __iomem *addr = (void __iomem *)a;
0098 IO_CONCAT(__IO_PREFIX,iowrite16)(b, addr);
0099 }
0100 #endif
0101
0102 #if IO_CONCAT(__IO_PREFIX,trivial_rw_lq) == 1
0103 __EXTERN_INLINE u32
0104 IO_CONCAT(__IO_PREFIX,readl)(const volatile void __iomem *a)
0105 {
0106 return *(const volatile u32 __force *)a;
0107 }
0108
0109 __EXTERN_INLINE u64
0110 IO_CONCAT(__IO_PREFIX,readq)(const volatile void __iomem *a)
0111 {
0112 return *(const volatile u64 __force *)a;
0113 }
0114
0115 __EXTERN_INLINE void
0116 IO_CONCAT(__IO_PREFIX,writel)(u32 b, volatile void __iomem *a)
0117 {
0118 *(volatile u32 __force *)a = b;
0119 }
0120
0121 __EXTERN_INLINE void
0122 IO_CONCAT(__IO_PREFIX,writeq)(u64 b, volatile void __iomem *a)
0123 {
0124 *(volatile u64 __force *)a = b;
0125 }
0126 #endif
0127
0128 #if IO_CONCAT(__IO_PREFIX,trivial_iounmap)
0129 __EXTERN_INLINE void IO_CONCAT(__IO_PREFIX,iounmap)(volatile void __iomem *a)
0130 {
0131 }
0132 #endif