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); \
91#define DAO_PAD_BYTES_TO_MATCH(larger, smaller) \
92 uint8_t _pad[sizeof(larger) > sizeof(smaller) ? sizeof(larger) - sizeof(smaller) : 0]
105 return (n & (1 << (pos - 1))) != 0;
133static inline volatile void *
136 const volatile uint8_t *sb;
137 volatile uint8_t *db;
142 db = (
volatile uint8_t *)d;
143 sb = (
const volatile uint8_t *)s;
144 for (i = 0; i < l; i++)
162 volatile uint8_t *db;
167 db = (
volatile uint8_t *)d;
168 for (i = 0; i < l; i++)
183 volatile uint64_t *db;
186 if (!d || !l || (l % 8))
189 db = (
volatile uint64_t *)d;
190 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)