Initial cut of the open ath9k htc firmware.
[open-ath9k-htc-firmware.git] / target_firmware / magpie_fw_dev / target / inc / asf_bitmap.h
1 /*
2  * Copyright (c) 2007-2008 Atheros Communications, Inc.
3  * All rights reserved.
4  */
5 #ifndef _ASF_BITMAP_H_
6 #define _ASF_BITMAP_H_
7
8 #include "adf_os_types.h"
9 #include "adf_os_mem.h"
10
11 #define ASF_BYTESZ   8
12
13 typedef a_uint8_t * asf_bitmap_t;
14
15 /* Bit map related macros. */
16 // setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
17 // clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
18 // isset(a,i)  ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
19 // isclr(a,i)  (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
20
21 #define asf_howmany(x, y)   (((x)+((y)-1))/(y))
22 #define asf_roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
23
24
25 static inline a_uint8_t *
26 asf_bitmap_alloc(int sz_bits)
27 {
28     a_uint8_t * bm;
29     int sz_bytes = sz_bits / ASF_BYTESZ;
30
31     bm = adf_os_mem_alloc(sz_bytes);
32     if (bm == NULL)
33         return NULL;
34
35     adf_os_mem_zero(bm, sz_bytes);
36     return bm;
37 }
38
39 static inline void
40 asf_bitmap_free(a_uint8_t *bm)
41 {
42     adf_os_mem_free(bm);
43 }
44
45 static inline void
46 asf_bitmap_setbit(a_uint8_t *bm, int pos)
47 {
48     bm[pos / ASF_BYTESZ] |= 1 << (pos % ASF_BYTESZ);
49 }
50
51
52 static inline void
53 asf_bitmap_clrbit(a_uint8_t *bm, int pos)
54 {
55     bm[pos / ASF_BYTESZ] &= ~(1 << (pos % ASF_BYTESZ));
56 }
57
58 static inline a_bool_t
59 asf_bitmap_isset(a_uint8_t *bm, int pos)
60 {
61     return bm[pos / ASF_BYTESZ] & (1 << (pos % ASF_BYTESZ));
62 }
63
64 static inline a_bool_t
65 asf_bitmap_isclr(a_uint8_t *bm, int pos)
66 {
67     return ((bm[pos / ASF_BYTESZ] & (1 << (pos % ASF_BYTESZ))) == 0);
68 }
69
70 #endif /* _ASF_BITMAP_H */