]> mj.ucw.cz Git - pciutils.git/blob - lib/physmem-access.h
libpci: Move physical memory mapping mmap() code from ecam/mmio-ports to physmem...
[pciutils.git] / lib / physmem-access.h
1 /*
2  *      The PCI Library -- Compiler-specific wrappers for memory mapped I/O
3  *
4  *      Copyright (c) 2023 Pali Rohár <pali@kernel.org>
5  *
6  *      Can be freely distributed and used under the terms of the GNU GPL v2+
7  *
8  *      SPDX-License-Identifier: GPL-2.0-or-later
9  */
10
11 /*
12  * FIXME
13  * Unfortunately gcc does not provide architecture independent way to read from
14  * or write to memory mapped I/O. The best approximation is to use volatile and
15  * for the write operation follow it by the read operation from the same address.
16  */
17
18 static inline void
19 physmem_writeb(unsigned char value, volatile void *ptr)
20 {
21   *(volatile unsigned char *)ptr = value;
22 }
23
24 static inline void
25 physmem_writew(unsigned short value, volatile void *ptr)
26 {
27   *(volatile unsigned short *)ptr = value;
28 }
29
30 static inline void
31 physmem_writel(u32 value, volatile void *ptr)
32 {
33   *(volatile u32 *)ptr = value;
34 }
35
36 static inline unsigned char
37 physmem_readb(volatile void *ptr)
38 {
39   return *(volatile unsigned char *)ptr;
40 }
41
42 static inline unsigned short
43 physmem_readw(volatile void *ptr)
44 {
45   return *(volatile unsigned short *)ptr;
46 }
47
48 static inline u32
49 physmem_readl(volatile void *ptr)
50 {
51   return *(volatile u32 *)ptr;
52 }