root/arch/alpha/include/asm/io_trivial.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. IO_CONCAT
  2. IO_CONCAT
  3. IO_CONCAT
  4. IO_CONCAT
  5. IO_CONCAT
  6. IO_CONCAT
  7. IO_CONCAT
  8. IO_CONCAT
  9. IO_CONCAT
  10. IO_CONCAT

   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
  10 IO_CONCAT(__IO_PREFIX,ioread8)(void __iomem *a)
  11 {
  12         return __kernel_ldbu(*(volatile u8 __force *)a);
  13 }
  14 
  15 __EXTERN_INLINE unsigned int
  16 IO_CONCAT(__IO_PREFIX,ioread16)(void __iomem *a)
  17 {
  18         return __kernel_ldwu(*(volatile u16 __force *)a);
  19 }
  20 
  21 __EXTERN_INLINE void
  22 IO_CONCAT(__IO_PREFIX,iowrite8)(u8 b, void __iomem *a)
  23 {
  24         __kernel_stb(b, *(volatile u8 __force *)a);
  25 }
  26 
  27 __EXTERN_INLINE void
  28 IO_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
  36 IO_CONCAT(__IO_PREFIX,ioread32)(void __iomem *a)
  37 {
  38         return *(volatile u32 __force *)a;
  39 }
  40 
  41 __EXTERN_INLINE void
  42 IO_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
  50 IO_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
  56 IO_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
  62 IO_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
  68 IO_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
  74 IO_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
  81 IO_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
  88 IO_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
  95 IO_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
 104 IO_CONCAT(__IO_PREFIX,readl)(const volatile void __iomem *a)
 105 {
 106         return *(const volatile u32 __force *)a;
 107 }
 108 
 109 __EXTERN_INLINE u64
 110 IO_CONCAT(__IO_PREFIX,readq)(const volatile void __iomem *a)
 111 {
 112         return *(const volatile u64 __force *)a;
 113 }
 114 
 115 __EXTERN_INLINE void
 116 IO_CONCAT(__IO_PREFIX,writel)(u32 b, volatile void __iomem *a)
 117 {
 118         *(volatile u32 __force *)a = b;
 119 }
 120 
 121 __EXTERN_INLINE void
 122 IO_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

/* [<][>][^][v][top][bottom][index][help] */