Zephyr Project API  3.1.0
A Scalable Open Source RTOS
bitarray.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_SYS_BITARRAY_H_
8#define ZEPHYR_INCLUDE_SYS_BITARRAY_H_
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14#include <stddef.h>
15#include <stdint.h>
16
17#include <zephyr/kernel.h>
18
20 /* Number of bits */
22
23 /* Number of bundles */
25
26 /* Bundle of bits */
28
29 /* Spinlock guarding access to this bit array */
31};
32
34
44#define _SYS_BITARRAY_DEFINE(name, total_bits, sba_mod) \
45 sba_mod uint32_t _sys_bitarray_bundles_##name \
46 [(((total_bits + 8 - 1) / 8) + sizeof(uint32_t) - 1) \
47 / sizeof(uint32_t)] = {0U}; \
48 sba_mod sys_bitarray_t name = { \
49 .num_bits = total_bits, \
50 .num_bundles = (((total_bits + 8 - 1) / 8) \
51 + sizeof(uint32_t) - 1) \
52 / sizeof(uint32_t), \
53 .bundles = _sys_bitarray_bundles_##name, \
54 }
55
64#define SYS_BITARRAY_DEFINE(name, total_bits) \
65 _SYS_BITARRAY_DEFINE(name, total_bits,)
66
75#define SYS_BITARRAY_DEFINE_STATIC(name, total_bits) \
76 _SYS_BITARRAY_DEFINE(name, total_bits, static)
77
88int sys_bitarray_set_bit(sys_bitarray_t *bitarray, size_t bit);
89
100int sys_bitarray_clear_bit(sys_bitarray_t *bitarray, size_t bit);
101
113int sys_bitarray_test_bit(sys_bitarray_t *bitarray, size_t bit, int *val);
114
126int sys_bitarray_test_and_set_bit(sys_bitarray_t *bitarray, size_t bit, int *prev_val);
127
139int sys_bitarray_test_and_clear_bit(sys_bitarray_t *bitarray, size_t bit, int *prev_val);
140
161 size_t *offset);
162
179 size_t offset);
180
195 size_t offset);
196
211 size_t offset);
212
228 size_t offset);
229
253 size_t offset, bool to_set);
254
270 size_t offset);
271
272#ifdef __cplusplus
273}
274#endif
275
276#endif /* ZEPHYR_INCLUDE_SYS_BITARRAY_H_ */
bool sys_bitarray_is_region_cleared(sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
bool sys_bitarray_is_region_set(sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
int sys_bitarray_test_and_clear_bit(sys_bitarray_t *bitarray, size_t bit, int *prev_val)
int sys_bitarray_set_bit(sys_bitarray_t *bitarray, size_t bit)
int sys_bitarray_clear_bit(sys_bitarray_t *bitarray, size_t bit)
int sys_bitarray_set_region(sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
int sys_bitarray_alloc(sys_bitarray_t *bitarray, size_t num_bits, size_t *offset)
int sys_bitarray_clear_region(sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
int sys_bitarray_test_and_set_bit(sys_bitarray_t *bitarray, size_t bit, int *prev_val)
int sys_bitarray_test_and_set_region(sys_bitarray_t *bitarray, size_t num_bits, size_t offset, bool to_set)
int sys_bitarray_test_bit(sys_bitarray_t *bitarray, size_t bit, int *val)
int sys_bitarray_free(sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
Public kernel APIs.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
Kernel Spin Lock.
Definition: spinlock.h:42
Definition: bitarray.h:19
uint32_t num_bits
Definition: bitarray.h:21
struct k_spinlock lock
Definition: bitarray.h:30
uint32_t * bundles
Definition: bitarray.h:27
uint32_t num_bundles
Definition: bitarray.h:24