asf_bitmap.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * Copyright (c) 2013 Qualcomm Atheros, Inc.
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted (subject to the limitations in the
  7. * disclaimer below) provided that the following conditions are met:
  8. *
  9. * * Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. *
  12. * * Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the
  15. * distribution.
  16. *
  17. * * Neither the name of Qualcomm Atheros nor the names of its
  18. * contributors may be used to endorse or promote products derived
  19. * from this software without specific prior written permission.
  20. *
  21. * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
  22. * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
  23. * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
  24. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  25. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  26. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  27. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  28. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  29. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  30. * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  31. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  32. * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  33. * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. */
  35. #ifndef _ASF_BITMAP_H_
  36. #define _ASF_BITMAP_H_
  37. #include "adf_os_types.h"
  38. #include "adf_os_mem.h"
  39. #define ASF_BYTESZ 8
  40. typedef a_uint8_t * asf_bitmap_t;
  41. /* Bit map related macros. */
  42. // setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
  43. // clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
  44. // isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
  45. // isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
  46. #define asf_howmany(x, y) (((x)+((y)-1))/(y))
  47. #define asf_roundup(x, y) ((((x)+((y)-1))/(y))*(y))
  48. static inline a_uint8_t *
  49. asf_bitmap_alloc(int sz_bits)
  50. {
  51. a_uint8_t * bm;
  52. int sz_bytes = sz_bits / ASF_BYTESZ;
  53. bm = adf_os_mem_alloc(sz_bytes);
  54. if (bm == NULL)
  55. return NULL;
  56. adf_os_mem_zero(bm, sz_bytes);
  57. return bm;
  58. }
  59. static inline void
  60. asf_bitmap_free(a_uint8_t *bm)
  61. {
  62. adf_os_mem_free(bm);
  63. }
  64. static inline void
  65. asf_bitmap_setbit(a_uint8_t *bm, int pos)
  66. {
  67. bm[pos / ASF_BYTESZ] |= 1 << (pos % ASF_BYTESZ);
  68. }
  69. static inline void
  70. asf_bitmap_clrbit(a_uint8_t *bm, int pos)
  71. {
  72. bm[pos / ASF_BYTESZ] &= ~(1 << (pos % ASF_BYTESZ));
  73. }
  74. static inline a_bool_t
  75. asf_bitmap_isset(a_uint8_t *bm, int pos)
  76. {
  77. return bm[pos / ASF_BYTESZ] & (1 << (pos % ASF_BYTESZ));
  78. }
  79. static inline a_bool_t
  80. asf_bitmap_isclr(a_uint8_t *bm, int pos)
  81. {
  82. return ((bm[pos / ASF_BYTESZ] & (1 << (pos % ASF_BYTESZ))) == 0);
  83. }
  84. #endif /* _ASF_BITMAP_H */