1 /* Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
7 #include <sys/syscall.h>
10 static inline long mmio_writeb(const unsigned long mmio_addr,
13 return syscall(__NR_s390_pci_mmio_write, mmio_addr, &val, sizeof(val));
16 static inline long mmio_writew(const unsigned long mmio_addr,
19 return syscall(__NR_s390_pci_mmio_write, mmio_addr, &val, sizeof(val));
22 static inline long mmio_writel(const unsigned long mmio_addr,
25 return syscall(__NR_s390_pci_mmio_write, mmio_addr, &val, sizeof(val));
28 static inline long mmio_writeq(const unsigned long mmio_addr,
31 return syscall(__NR_s390_pci_mmio_write, mmio_addr, &val, sizeof(val));
34 static inline long mmio_write(const unsigned long mmio_addr,
38 return syscall(__NR_s390_pci_mmio_write, mmio_addr, val, length);
41 static inline long mmio_readb(const unsigned long mmio_addr, uint8_t *val)
43 return syscall(__NR_s390_pci_mmio_read, mmio_addr, val, sizeof(*val));
46 static inline long mmio_readw(const unsigned long mmio_addr, uint16_t *val)
48 return syscall(__NR_s390_pci_mmio_read, mmio_addr, val, sizeof(*val));
51 static inline long mmio_readl(const unsigned long mmio_addr, uint32_t *val)
53 return syscall(__NR_s390_pci_mmio_read, mmio_addr, val, sizeof(*val));
56 static inline long mmio_readq(const unsigned long mmio_addr, uint64_t *val)
58 return syscall(__NR_s390_pci_mmio_read, mmio_addr, val, sizeof(*val));
61 static inline long mmio_read(const unsigned long mmio_addr,
65 return syscall(__NR_s390_pci_mmio_read, mmio_addr, val, length);
68 static inline void mlx4_bf_copy(unsigned long *dst,
72 mmio_write((unsigned long)dst, src, bytecnt);
77 #define mmio_writeb(addr, value) \
78 (*((volatile uint8_t *)addr) = value)
79 #define mmio_writew(addr, value) \
80 (*((volatile uint16_t *)addr) = value)
81 #define mmio_writel(addr, value) \
82 (*((volatile uint32_t *)addr) = value)
83 #define mmio_writeq(addr, value) \
84 (*((volatile uint64_t *)addr) = value)
85 #define mmio_write(addr, value, length) \
86 memcpy(addr, value, length)
88 #define mmio_readb(addr, value) \
89 (value = *((volatile uint8_t *)addr))
90 #define mmio_readw(addr, value) \
91 (value = *((volatile uint16_t *)addr))
92 #define mmio_readl(addr, value) \
93 (value = *((volatile uint32_t *)addr))
94 #define mmio_readq(addr, value) \
95 (value = *((volatile uint64_t *)addr))
96 #define mmio_read(addr, value, length) \
97 memcpy(value, addr, length)
100 * Avoid using memcpy() to copy to BlueFlame page, since memcpy()
101 * implementations may use move-string-buffer assembler instructions,
102 * which do not guarantee order of copying.
104 static inline void mlx4_bf_copy(unsigned long *dst,
108 while (bytecnt > 0) {
111 bytecnt -= 2 * sizeof(long);