22#define DAO_FREE(ptr) \
33#define DAO_ROUNDUP(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
40#define DAO_ROUNDDOWN(x, y) ((x / y) * y)
47#define DAO_BIT(nr) (1UL << (nr))
54#define DAO_BIT_ULL(nr) (1ULL << (nr))
61#define DAO_BITS_PER_LONG_LONG (__SIZEOF_LONG_LONG__ * 8)
68#define DAO_GENMASK_ULL(h, l) (((~0ULL) << (l)) & (~0ULL >> (DAO_BITS_PER_LONG_LONG - 1 - (h))))
75#define DAO_STATIC_ASSERT(s) _Static_assert(s, #s)
82#define DAO_TAILQ_FOREACH_SAFE(var, head, field, tvar) \
83 for ((var) = TAILQ_FIRST((head)); (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
97 return (n & (1 << (pos - 1))) != 0;
125static inline volatile void *
128 const volatile uint8_t *sb;
129 volatile uint8_t *db;
134 db = (
volatile uint8_t *)d;
135 sb = (
const volatile uint8_t *)s;
136 for (i = 0; i < l; i++)
154 volatile uint8_t *db;
159 db = (
volatile uint8_t *)d;
160 for (i = 0; i < l; i++)
175 volatile uint64_t *db;
178 if (!d || !l || (l % 8))
181 db = (
volatile uint64_t *)d;
182 for (i = 0; i < l; i++)
static bool dao_check_bit_is_set(int n, int pos)
static void dao_dev_memset(volatile void *d, uint8_t val, size_t l)
static volatile void * dao_dev_memcpy(volatile void *d, const volatile void *s, size_t l)
static void dao_dev_memzero(volatile void *d, size_t l)
int dao_pci_bdf_to_hw_func(const char *pci_bdf)