31 #ifndef LIBSWITCHTEC_MMAP_GAS_H 32 #define LIBSWITCHTEC_MMAP_GAS_H 39 #define __force __attribute__((force)) 44 #include "../switchtec_priv.h" 46 static void mmap_memcpy_to_gas(
struct switchtec_dev *dev,
void __gas *dest,
47 const void *src,
size_t n)
49 memcpy((
void __force *)dest, src, n);
52 static void mmap_memcpy_from_gas(
struct switchtec_dev *dev,
void *dest,
53 const void __gas *src,
size_t n)
55 memcpy(dest, (
void __force *)src, n);
58 static ssize_t mmap_write_from_gas(
struct switchtec_dev *dev,
int fd,
59 const void __gas *src,
size_t n)
61 return write(fd, (
void __force *)src, n);
64 #define create_gas_read(type, suffix) \ 65 static type mmap_gas_read ## suffix(struct switchtec_dev *dev, \ 68 type *safe_addr = (type __force *)addr; \ 69 asm volatile("": : :"memory"); \ 73 #define create_gas_write(type, suffix) \ 74 static void mmap_gas_write ## suffix(struct switchtec_dev *dev, \ 75 type val, type __gas *addr) \ 77 type *safe_addr = (type __force *)addr; \ 78 asm volatile("": : :"memory"); \ 82 create_gas_read(uint8_t, 8);
83 create_gas_read(uint16_t, 16);
84 create_gas_read(uint32_t, 32);
85 create_gas_read(uint64_t, 64);
87 create_gas_write(uint8_t, 8);
88 create_gas_write(uint16_t, 16);
89 create_gas_write(uint32_t, 32);
90 create_gas_write(uint64_t, 64);