yb_arm/osp/inc/ospUtil.h
2023-07-12 14:14:31 +08:00

124 lines
2.0 KiB
C

/* ospUtil.h: OSP utility header file */
#ifndef __OSPUTILH__
#define __OSPUTILH__
#ifdef __cplusplus
extern "C" {
#endif
struct list_head {
struct list_head *next, *prev;
};
struct hlist_head {
struct hlist_node *first;
};
struct hlist_node {
struct hlist_node *next, **pprev;
};
#define OSP_NTOHL(x) (x)
#define OSP_NTOHS(x) (x)
#define OSP_HTONL(x) (x)
#define OSP_HTONS(x) (x)
#define OSP_NTOH64(x) (x)
#define OSP_HTON64(x) (x)
#define OSP_OFFSET(structure, member) \
((uint64_t)&(((structure *)0)->member))
#define __OSP_MEMBEROF(s, f, p) \
((s *)((char *)(p) - OSP_OFFSET(s, f)))
#define OSP_MEMBEROF(s, f, p) \
(((p) ? __OSP_MEMBEROF(s, f, p) : ((s *)0)))
#define OSP_MEMBER_SIZE(structure, member) \
(sizeof (((structure *)0)->member))
#define OSP_NELEMENTS(array) \
((sizeof(array) / sizeof((array)[0])))
#define OSP_ROUND_UP(x, align) \
(((uint64_t) (x) + ((align) - 1)) & ~((align) - 1))
#define OSP_ROUND_DOWN(x, align) \
((uint64_t)(x) & ~((align) - 1))
/*32bit byte reversion */
#define OSP_LONGSWAP(x) \
((((x) & 0xFF000000) >> 24) | \
(((x) & 0x00FF0000) >> 8) | \
(((x) & 0x0000FF00) << 8) | \
(((x) & 0x000000FF) << 24) \
)
#define OSP_IS_POWEOF2(x) ((x & (x-1)) == 0)
/*reversing bit order*/
#define OSP_SETBIT(x, pos) ((x) | (1<<(pos)))
#define OSP_CLEARBIT(x, pos) ((x) & (~(1 << (pos))))
#define OSP_GET_BITS(x, start, len) (((x) >> (start)) & ((1 << (len)) - 1))
#define OSP_SET_BITS(x, start, len, y) \
(x) = (((x) & (~(((1 << (len)) - 1) << (start)))) | ((y) << (start)))
/* reverse one specified bit:
* a: U32/U16/U8
* pos: 0(lsb)~31(msb)
*/
#define OSP_REVERSE_BIT(a,pos) \
(((((~(a)) >> (pos)) & 0x01) << (pos)) | ((a) & (~(1 << (pos)))))
#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
#define ISPOW2(x) ((x & x - 1) == 0)
#ifdef __cplusplus
}
#endif
#endif /* __OSPUTILH__ */