31#ifndef LIBSWITCHTEC_MMAP_GAS_H
32#define LIBSWITCHTEC_MMAP_GAS_H
39#define __force __attribute__((force))
44#include "../switchtec_priv.h"
46static 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);
52static 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);
58static 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"); \
82create_gas_read(uint8_t, 8);
83create_gas_read(uint16_t, 16);
84create_gas_read(uint32_t, 32);
85create_gas_read(uint64_t, 64);
87create_gas_write(uint8_t, 8);
88create_gas_write(uint16_t, 16);
89create_gas_write(uint32_t, 32);
90create_gas_write(uint64_t, 64);