Linux Audio

Check our new training course

Open-source upstreaming

Need help get the support for your hardware in upstream Linux?
Loading...
v3.1
 
  1/* Trivial implementations of basic i/o routines.  Assumes that all
  2   of the hard work has been done by ioremap and ioportmap, and that
  3   access to i/o space is linear.  */
  4
  5/* This file may be included multiple times.  */
  6
  7#if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
  8__EXTERN_INLINE unsigned int
  9IO_CONCAT(__IO_PREFIX,ioread8)(void __iomem *a)
 10{
 11	return __kernel_ldbu(*(volatile u8 __force *)a);
 12}
 13
 14__EXTERN_INLINE unsigned int
 15IO_CONCAT(__IO_PREFIX,ioread16)(void __iomem *a)
 16{
 17	return __kernel_ldwu(*(volatile u16 __force *)a);
 18}
 19
 20__EXTERN_INLINE void
 21IO_CONCAT(__IO_PREFIX,iowrite8)(u8 b, void __iomem *a)
 22{
 23	__kernel_stb(b, *(volatile u8 __force *)a);
 24}
 25
 26__EXTERN_INLINE void
 27IO_CONCAT(__IO_PREFIX,iowrite16)(u16 b, void __iomem *a)
 28{
 29	__kernel_stw(b, *(volatile u16 __force *)a);
 30}
 31#endif
 32
 33#if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
 34__EXTERN_INLINE unsigned int
 35IO_CONCAT(__IO_PREFIX,ioread32)(void __iomem *a)
 36{
 37	return *(volatile u32 __force *)a;
 38}
 39
 40__EXTERN_INLINE void
 41IO_CONCAT(__IO_PREFIX,iowrite32)(u32 b, void __iomem *a)
 42{
 43	*(volatile u32 __force *)a = b;
 44}
 45#endif
 46
 47#if IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 1
 48__EXTERN_INLINE u8
 49IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
 50{
 51	return __kernel_ldbu(*(const volatile u8 __force *)a);
 52}
 53
 54__EXTERN_INLINE u16
 55IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
 56{
 57	return __kernel_ldwu(*(const volatile u16 __force *)a);
 58}
 59
 60__EXTERN_INLINE void
 61IO_CONCAT(__IO_PREFIX,writeb)(u8 b, volatile void __iomem *a)
 62{
 63	__kernel_stb(b, *(volatile u8 __force *)a);
 64}
 65
 66__EXTERN_INLINE void
 67IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
 68{
 69	__kernel_stw(b, *(volatile u16 __force *)a);
 70}
 71#elif IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 2
 72__EXTERN_INLINE u8
 73IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
 74{
 75	void __iomem *addr = (void __iomem *)a;
 76	return IO_CONCAT(__IO_PREFIX,ioread8)(addr);
 77}
 78
 79__EXTERN_INLINE u16
 80IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
 81{
 82	void __iomem *addr = (void __iomem *)a;
 83	return IO_CONCAT(__IO_PREFIX,ioread16)(addr);
 84}
 85
 86__EXTERN_INLINE void
 87IO_CONCAT(__IO_PREFIX,writeb)(u8 b, volatile void __iomem *a)
 88{
 89	void __iomem *addr = (void __iomem *)a;
 90	IO_CONCAT(__IO_PREFIX,iowrite8)(b, addr);
 91}
 92
 93__EXTERN_INLINE void
 94IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
 95{
 96	void __iomem *addr = (void __iomem *)a;
 97	IO_CONCAT(__IO_PREFIX,iowrite16)(b, addr);
 98}
 99#endif
100
101#if IO_CONCAT(__IO_PREFIX,trivial_rw_lq) == 1
102__EXTERN_INLINE u32
103IO_CONCAT(__IO_PREFIX,readl)(const volatile void __iomem *a)
104{
105	return *(const volatile u32 __force *)a;
106}
107
108__EXTERN_INLINE u64
109IO_CONCAT(__IO_PREFIX,readq)(const volatile void __iomem *a)
110{
111	return *(const volatile u64 __force *)a;
112}
113
114__EXTERN_INLINE void
115IO_CONCAT(__IO_PREFIX,writel)(u32 b, volatile void __iomem *a)
116{
117	*(volatile u32 __force *)a = b;
118}
119
120__EXTERN_INLINE void
121IO_CONCAT(__IO_PREFIX,writeq)(u64 b, volatile void __iomem *a)
122{
123	*(volatile u64 __force *)a = b;
124}
125#endif
126
127#if IO_CONCAT(__IO_PREFIX,trivial_iounmap)
128__EXTERN_INLINE void IO_CONCAT(__IO_PREFIX,iounmap)(volatile void __iomem *a)
129{
130}
131#endif
v5.4
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/* Trivial implementations of basic i/o routines.  Assumes that all
  3   of the hard work has been done by ioremap and ioportmap, and that
  4   access to i/o space is linear.  */
  5
  6/* This file may be included multiple times.  */
  7
  8#if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
  9__EXTERN_INLINE unsigned int
 10IO_CONCAT(__IO_PREFIX,ioread8)(void __iomem *a)
 11{
 12	return __kernel_ldbu(*(volatile u8 __force *)a);
 13}
 14
 15__EXTERN_INLINE unsigned int
 16IO_CONCAT(__IO_PREFIX,ioread16)(void __iomem *a)
 17{
 18	return __kernel_ldwu(*(volatile u16 __force *)a);
 19}
 20
 21__EXTERN_INLINE void
 22IO_CONCAT(__IO_PREFIX,iowrite8)(u8 b, void __iomem *a)
 23{
 24	__kernel_stb(b, *(volatile u8 __force *)a);
 25}
 26
 27__EXTERN_INLINE void
 28IO_CONCAT(__IO_PREFIX,iowrite16)(u16 b, void __iomem *a)
 29{
 30	__kernel_stw(b, *(volatile u16 __force *)a);
 31}
 32#endif
 33
 34#if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
 35__EXTERN_INLINE unsigned int
 36IO_CONCAT(__IO_PREFIX,ioread32)(void __iomem *a)
 37{
 38	return *(volatile u32 __force *)a;
 39}
 40
 41__EXTERN_INLINE void
 42IO_CONCAT(__IO_PREFIX,iowrite32)(u32 b, void __iomem *a)
 43{
 44	*(volatile u32 __force *)a = b;
 45}
 46#endif
 47
 48#if IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 1
 49__EXTERN_INLINE u8
 50IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
 51{
 52	return __kernel_ldbu(*(const volatile u8 __force *)a);
 53}
 54
 55__EXTERN_INLINE u16
 56IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
 57{
 58	return __kernel_ldwu(*(const volatile u16 __force *)a);
 59}
 60
 61__EXTERN_INLINE void
 62IO_CONCAT(__IO_PREFIX,writeb)(u8 b, volatile void __iomem *a)
 63{
 64	__kernel_stb(b, *(volatile u8 __force *)a);
 65}
 66
 67__EXTERN_INLINE void
 68IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
 69{
 70	__kernel_stw(b, *(volatile u16 __force *)a);
 71}
 72#elif IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 2
 73__EXTERN_INLINE u8
 74IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
 75{
 76	void __iomem *addr = (void __iomem *)a;
 77	return IO_CONCAT(__IO_PREFIX,ioread8)(addr);
 78}
 79
 80__EXTERN_INLINE u16
 81IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
 82{
 83	void __iomem *addr = (void __iomem *)a;
 84	return IO_CONCAT(__IO_PREFIX,ioread16)(addr);
 85}
 86
 87__EXTERN_INLINE void
 88IO_CONCAT(__IO_PREFIX,writeb)(u8 b, volatile void __iomem *a)
 89{
 90	void __iomem *addr = (void __iomem *)a;
 91	IO_CONCAT(__IO_PREFIX,iowrite8)(b, addr);
 92}
 93
 94__EXTERN_INLINE void
 95IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
 96{
 97	void __iomem *addr = (void __iomem *)a;
 98	IO_CONCAT(__IO_PREFIX,iowrite16)(b, addr);
 99}
100#endif
101
102#if IO_CONCAT(__IO_PREFIX,trivial_rw_lq) == 1
103__EXTERN_INLINE u32
104IO_CONCAT(__IO_PREFIX,readl)(const volatile void __iomem *a)
105{
106	return *(const volatile u32 __force *)a;
107}
108
109__EXTERN_INLINE u64
110IO_CONCAT(__IO_PREFIX,readq)(const volatile void __iomem *a)
111{
112	return *(const volatile u64 __force *)a;
113}
114
115__EXTERN_INLINE void
116IO_CONCAT(__IO_PREFIX,writel)(u32 b, volatile void __iomem *a)
117{
118	*(volatile u32 __force *)a = b;
119}
120
121__EXTERN_INLINE void
122IO_CONCAT(__IO_PREFIX,writeq)(u64 b, volatile void __iomem *a)
123{
124	*(volatile u64 __force *)a = b;
125}
126#endif
127
128#if IO_CONCAT(__IO_PREFIX,trivial_iounmap)
129__EXTERN_INLINE void IO_CONCAT(__IO_PREFIX,iounmap)(volatile void __iomem *a)
130{
131}
132#endif