LCOV - code coverage report
Current view: top level - include - bitmap.h (source / functions) Coverage Total Hit
Test: skiboot.info Lines: 100.0 % 8 8
Test Date: 2025-01-24 18:40:10 Functions: 100.0 % 3 3
Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
       2                 :             : /* Copyright 2016-2017 IBM Corp. */
       3                 :             : 
       4                 :             : #ifndef __BITMAP_H
       5                 :             : #define __BITMAP_H
       6                 :             : 
       7                 :             : #include <stdint.h>
       8                 :             : #include <stdbool.h>
       9                 :             : 
      10                 :             : typedef unsigned long bitmap_elem_t;
      11                 :             : typedef bitmap_elem_t bitmap_t[];
      12                 :             : 
      13                 :             : #define BITMAP_ELSZ     (sizeof(bitmap_elem_t) << 3)
      14                 :             : 
      15                 :             : /* Number of elements for _n bits (rounded up) */
      16                 :             : #define BITMAP_ELEMS(_n)        (((_n) + (BITMAP_ELSZ - 1)) / BITMAP_ELSZ)
      17                 :             : /* Number of bytes for _n bits (rounded up) */
      18                 :             : #define BITMAP_BYTES(_n)        (BITMAP_ELEMS(_n) * sizeof(bitmap_elem_t))
      19                 :             : /* Bit number within an elemnt for bit _n */
      20                 :             : #define BITMAP_BIT(_n)          ((_n) & (BITMAP_ELSZ - 1))
      21                 :             : /* Corresponding mask */
      22                 :             : #define BITMAP_MASK(_n)         (1ul << BITMAP_BIT(_n))
      23                 :             : /* Element number for bit _n */
      24                 :             : #define BITMAP_ELEM(_n)         ((_n) / BITMAP_ELSZ)
      25                 :             : 
      26                 :          35 : static inline void bitmap_set_bit(bitmap_t map, unsigned int bit)
      27                 :             : {
      28                 :          35 :         map[BITMAP_ELEM(bit)] |= BITMAP_MASK(bit);
      29                 :          35 : }
      30                 :             : 
      31                 :          29 : static inline void bitmap_clr_bit(bitmap_t map, unsigned int bit)
      32                 :             : {
      33                 :          29 :         map[BITMAP_ELEM(bit)] &= ~BITMAP_MASK(bit);
      34                 :          29 : }
      35                 :             : 
      36                 :        2186 : static inline bool bitmap_tst_bit(bitmap_t map, unsigned int bit)
      37                 :             : {
      38                 :        2186 :         return map[BITMAP_ELEM(bit)] & BITMAP_MASK(bit);
      39                 :             : }
      40                 :             : 
      41                 :             : extern int bitmap_find_zero_bit(bitmap_t map, unsigned int start,
      42                 :             :                                 unsigned int count);
      43                 :             : extern int bitmap_find_one_bit(bitmap_t map, unsigned int start,
      44                 :             :                                 unsigned int count);
      45                 :             : 
      46                 :             : #define bitmap_for_each_zero(map, size, bit)                   \
      47                 :             :         for (bit = bitmap_find_zero_bit(map, 0, size);         \
      48                 :             :              bit >= 0;                                              \
      49                 :             :              bit = bitmap_find_zero_bit(map, (bit) + 1, (size) - (bit) - 1))
      50                 :             : 
      51                 :             : #define bitmap_for_each_one(map, size, bit)                    \
      52                 :             :         for (bit = bitmap_find_one_bit(map, 0, size);          \
      53                 :             :              bit >= 0;                                              \
      54                 :             :              bit = bitmap_find_one_bit(map, (bit) + 1, (size) - (bit) - 1))
      55                 :             : 
      56                 :             : #endif /* __BITMAP_H */
        

Generated by: LCOV version 2.0-1