sync with OpenBSD -current

This commit is contained in:
purplerain 2024-03-28 20:44:33 +00:00
parent cc5edceac3
commit 6278c437f5
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
76 changed files with 1108 additions and 2495 deletions

View file

@ -35,6 +35,15 @@ iosys_map_memcpy_to(struct iosys_map *ism, size_t off, const void *src,
memcpy(ism->vaddr + off, src, len);
}
static inline void
iosys_map_memset(struct iosys_map *ism, size_t off, int c, size_t len)
{
if (ism->is_iomem)
memset_io(ism->vaddr_iomem + off, c, len);
else
memset(ism->vaddr + off, c, len);
}
static inline bool
iosys_map_is_null(const struct iosys_map *ism)
{
@ -78,4 +87,53 @@ iosys_map_set_vaddr(struct iosys_map *ism, void *addr)
ism->is_iomem = false;
}
static inline struct iosys_map
IOSYS_MAP_INIT_OFFSET(struct iosys_map *ism, size_t off)
{
struct iosys_map nism = *ism;
iosys_map_incr(&nism, off);
return nism;
}
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112
#define iosys_map_rd(_ism, _o, _t) ({ \
_t v; \
if ((_ism)->is_iomem) { \
void *addr = (_ism)->vaddr_iomem + (_o); \
v = _Generic(v, \
uint8_t : ioread8(addr), \
uint16_t: ioread16(addr), \
uint32_t: ioread32(addr), \
uint64_t: ioread64(addr)); \
} else \
v = READ_ONCE(*(_t *)((_ism)->vaddr + (_o))); \
v; \
})
#define iosys_map_wr(_ism, _o, _t, _v) ({ \
_t v = (_v); \
if ((_ism)->is_iomem) { \
void *addr = (_ism)->vaddr_iomem + (_o); \
_Generic(v, \
uint8_t : iowrite8(v, addr), \
uint16_t: iowrite16(v, addr), \
uint32_t: iowrite32(v, addr), \
uint64_t: iowrite64(v, addr)); \
} else \
WRITE_ONCE(*(_t *)((_ism)->vaddr + (_o)), v); \
})
#define iosys_map_rd_field(_ism, _o, _t, _f) ({ \
_t *t; \
iosys_map_rd(_ism, _o + offsetof(_t, _f), __typeof(t->_f)); \
})
#define iosys_map_wr_field(_ism, _o, _t, _f, _v) ({ \
_t *t; \
iosys_map_wr(_ism, _o + offsetof(_t, _f), __typeof(t->_f), _v); \
})
#endif /* C11 */
#endif