121#define IOSYS_MAP_INIT_VADDR(vaddr_) \
131#define IOSYS_MAP_INIT_VADDR_IOMEM(vaddr_iomem_) \
133 .vaddr_iomem = (vaddr_iomem_), \
170#define IOSYS_MAP_INIT_OFFSET(map_, offset_) ({ \
171 struct iosys_map copy_ = *map_; \
172 iosys_map_incr(©_, offset_); \
183static inline void iosys_map_set_vaddr(
struct iosys_map *
map,
void *vaddr)
186 map->is_iomem =
false;
196static inline void iosys_map_set_vaddr_iomem(
struct iosys_map *
map,
199 map->vaddr_iomem = vaddr_iomem;
200 map->is_iomem =
true;
214static inline bool iosys_map_is_equal(
const struct iosys_map *lhs,
235static inline bool iosys_map_is_null(
const struct iosys_map *
map)
238 return !
map->vaddr_iomem;
252static inline bool iosys_map_is_set(
const struct iosys_map *
map)
254 return !iosys_map_is_null(
map);
265static inline void iosys_map_clear(
struct iosys_map *
map)
281static inline void iosys_map_memcpy_to(
struct iosys_map *dst,
size_t dst_offset,
282 const void *src,
size_t len)
301static inline void iosys_map_memcpy_from(
void *dst,
const struct iosys_map *src,
302 size_t src_offset,
size_t len)
318static inline void iosys_map_incr(
struct iosys_map *
map,
size_t incr)
321 map->vaddr_iomem += incr;
336static inline void iosys_map_memset(
struct iosys_map *dst,
size_t offset,
337 int value,
size_t len)
346#define __iosys_map_rd_io_u64_case(val_, vaddr_iomem_) \
347 u64: val_ = readq(vaddr_iomem_)
348#define __iosys_map_wr_io_u64_case(val_, vaddr_iomem_) \
349 u64: writeq(val_, vaddr_iomem_)
351#define __iosys_map_rd_io_u64_case(val_, vaddr_iomem_) \
352 u64: memcpy_fromio(&(val_), vaddr_iomem_, sizeof(u64))
353#define __iosys_map_wr_io_u64_case(val_, vaddr_iomem_) \
354 u64: memcpy_toio(vaddr_iomem_, &(val_), sizeof(u64))
357#define __iosys_map_rd_io(val__, vaddr_iomem__, type__) _Generic(val__, \
358 u8: val__ = readb(vaddr_iomem__), \
359 u16: val__ = readw(vaddr_iomem__), \
360 u32: val__ = readl(vaddr_iomem__), \
361 __iosys_map_rd_io_u64_case(val__, vaddr_iomem__))
363#define __iosys_map_rd_sys(val__, vaddr__, type__) \
364 val__ = READ_ONCE(*(type__ *)(vaddr__))
366#define __iosys_map_wr_io(val__, vaddr_iomem__, type__) _Generic(val__, \
367 u8: writeb(val__, vaddr_iomem__), \
368 u16: writew(val__, vaddr_iomem__), \
369 u32: writel(val__, vaddr_iomem__), \
370 __iosys_map_wr_io_u64_case(val__, vaddr_iomem__))
372#define __iosys_map_wr_sys(val__, vaddr__, type__) \
373 WRITE_ONCE(*(type__ *)(vaddr__), val__)
389#define iosys_map_rd(map__, offset__, type__) ({ \
391 if ((map__)->is_iomem) { \
392 __iosys_map_rd_io(val_, (map__)->vaddr_iomem + (offset__), type__); \
394 __iosys_map_rd_sys(val_, (map__)->vaddr + (offset__), type__); \
411#define iosys_map_wr(map__, offset__, type__, val__) ({ \
412 type__ val_ = (val__); \
413 if ((map__)->is_iomem) { \
414 __iosys_map_wr_io(val_, (map__)->vaddr_iomem + (offset__), type__); \
416 __iosys_map_wr_sys(val_, (map__)->vaddr + (offset__), type__); \
482#define iosys_map_rd_field(map__, struct_offset__, struct_type__, field__) ({ \
484 iosys_map_rd(map__, struct_offset__ + offsetof(struct_type__, field__), \
485 typeof(s_->field__)); \
505#define iosys_map_wr_field(map__, struct_offset__, struct_type__, field__, val__) ({ \
507 iosys_map_wr(map__, struct_offset__ + offsetof(struct_type__, field__), \
508 typeof(s_->field__), val__); \
#define __iomem
Definition aclinux.h:312
int map
Definition d_mode.c:31
size_t size_t offset
Definition drm_bridge.h:1299
size_t len
Definition initial.c:23
Definition iosys-map.h:109
void * vaddr
Definition iosys-map.h:112
void __iomem * vaddr_iomem
Definition iosys-map.h:111
bool is_iomem
Definition iosys-map.h:114