cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

io_trivial.h (3206B)


      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)(const void __iomem *a)
     11{
     12	return __kernel_ldbu(*(const volatile u8 __force *)a);
     13}
     14
     15__EXTERN_INLINE unsigned int
     16IO_CONCAT(__IO_PREFIX,ioread16)(const void __iomem *a)
     17{
     18	return __kernel_ldwu(*(const 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)(const void __iomem *a)
     37{
     38	return *(const 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	const void __iomem *addr = (const 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	const void __iomem *addr = (const 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