1178784Skmacy/* 2178784Skmacy * $FreeBSD$ 3178784Skmacy */ 4178784Skmacy#ifndef __RDMA_TYPES_H_ 5178784Skmacy#define __RDMA_TYPES_H_ 6178784Skmacy#include <sys/types.h> 7178784Skmacy#include <sys/malloc.h> 8178784Skmacy 9178784Skmacy 10178784Skmacytypedef uint8_t u8; 11178784Skmacytypedef uint16_t u16; 12178784Skmacytypedef uint32_t u32; 13178784Skmacytypedef uint64_t u64; 14178784Skmacy 15178784Skmacytypedef uint8_t __u8; 16178784Skmacytypedef uint16_t __u16; 17178784Skmacytypedef uint32_t __u32; 18178784Skmacytypedef uint64_t __u64; 19178784Skmacytypedef uint8_t __be8; 20178784Skmacytypedef uint16_t __be16; 21178784Skmacytypedef uint32_t __be32; 22178784Skmacytypedef uint64_t __be64; 23178784Skmacy 24178784Skmacytypedef int32_t __s32; 25178784Skmacy 26178784Skmacy 27178784Skmacy#define LINUX_TYPES_DEFINED 28178784Skmacy#define ERR_PTR(err) ((void *)((long)(err))) 29178784Skmacy#define IS_ERR(ptr) ((unsigned long)(ptr) > (unsigned long)(-1000)) 30178784Skmacy#define PTR_ERR(ptr) ((long)(ptr)) 31178784Skmacy 32178791Skmacy#ifndef PANIC_IF 33178784Skmacy#define PANIC_IF(exp) do { \ 34178784Skmacy if (exp) \ 35178784Skmacy panic("BUG func %s line %u: %s", __FUNCTION__, __LINE__, #exp); \ 36178784Skmacy} while (0) 37178791Skmacy#endif 38178784Skmacy 39178784Skmacy#define container_of(p, stype, field) ((stype *)(((uint8_t *)(p)) - offsetof(stype, field))) 40178784Skmacy 41178784Skmacystatic __inline int 42178784Skmacyfind_first_zero_bit(volatile void *p, int max) 43178784Skmacy{ 44178784Skmacy int b; 45178784Skmacy volatile int *ptr = (volatile int *)p; 46178784Skmacy 47178784Skmacy for (b = 0; b < max; b += 32) { 48178784Skmacy if (ptr[b >> 5] != ~0) { 49178784Skmacy for (;;) { 50178784Skmacy if ((ptr[b >> 5] & (1 << (b & 0x1f))) == 0) 51178784Skmacy return (b); 52178784Skmacy b++; 53178784Skmacy } 54178784Skmacy } 55178784Skmacy } 56178784Skmacy 57178784Skmacy return (max); 58178784Skmacy} 59178784Skmacy 60178784Skmacystruct kvl { 61178784Skmacy struct kvl *next; 62178784Skmacy unsigned int key; 63178784Skmacy void *value; 64178784Skmacy}; 65178784Skmacy 66178784Skmacy#define DEFINE_KVL(x) struct kvl x; 67178784Skmacy 68178784Skmacystatic __inline void * 69178784Skmacykvl_lookup(struct kvl *x, uint32_t key) 70178784Skmacy{ 71178784Skmacy struct kvl *i; 72178784Skmacy for (i=x->next;i;i=i->next) if (i->key==key) return(i->value); 73178784Skmacy return(0); 74178784Skmacy} 75178784Skmacy 76178784Skmacystatic __inline int 77178784Skmacykvl_alloc_above(struct kvl *idp, void *ptr, int starting_id, int *id) 78178784Skmacy{ 79178784Skmacy int newid = starting_id; 80178784Skmacy struct kvl *i; 81178784Skmacy 82178784Skmacy for (i=idp->next;i;i=i->next) 83178784Skmacy if (i->key == newid) 84178784Skmacy return -EEXIST; 85178784Skmacy 86178784Skmacy i=malloc(sizeof(struct kvl),M_TEMP,M_NOWAIT); 87178784Skmacy i->key=newid; 88178784Skmacy i->value=ptr; 89178784Skmacy i->next=idp->next; 90178784Skmacy idp->next=i; 91178784Skmacy *id = newid; 92178784Skmacy return(0); 93178784Skmacy} 94178784Skmacy 95178784Skmacystatic __inline void 96178784Skmacykvl_delete(struct kvl *idp, int id) 97178784Skmacy{ 98178784Skmacy /* leak */ 99178784Skmacy struct kvl *i, *prev=NULL; 100178784Skmacy for (i=idp->next;i;prev=i,i=i->next) 101178784Skmacy if ((i)->key==id) { 102178784Skmacy if (!prev) 103178784Skmacy idp->next = i->next; 104178784Skmacy else 105178784Skmacy prev->next = i->next; 106178784Skmacy free(i, M_TEMP); 107178784Skmacy return; 108178784Skmacy } 109178784Skmacy} 110178784Skmacy 111178784Skmacystatic __inline void 112178784Skmacykvl_free(struct kvl *idp) 113178784Skmacy{ 114178784Skmacy struct kvl *i, *tmp; 115178784Skmacy for (i=idp->next;i;i=tmp) { 116178784Skmacy tmp=i->next; 117178784Skmacy free(i, M_TEMP); 118178784Skmacy } 119178784Skmacy idp->next = NULL; 120178784Skmacy} 121178784Skmacy 122178784Skmacy 123178784Skmacy#endif 124