root / lab4 / .minix-src / include / minix / bitmap.h @ 13
History | View | Annotate | Download (1.09 KB)
1 |
#ifndef _BITMAP_H
|
---|---|
2 |
#define _BITMAP_H
|
3 |
|
4 |
/* Bit map operations to manipulate bits of a simple mask variable. */
|
5 |
#define bit_set(mask, n) ((mask) |= (1 << (n))) |
6 |
#define bit_unset(mask, n) ((mask) &= ~(1 << (n))) |
7 |
#define bit_isset(mask, n) ((mask) & (1 << (n))) |
8 |
#define bit_empty(mask) ((mask) = 0) |
9 |
#define bit_fill(mask) ((mask) = ~0) |
10 |
|
11 |
/* Definitions previously in kernel/const.h */
|
12 |
#define BITCHUNK_BITS (sizeof(bitchunk_t) * CHAR_BIT) |
13 |
#define BITMAP_CHUNKS(nr_bits) (((nr_bits)+BITCHUNK_BITS-1)/BITCHUNK_BITS) |
14 |
#define MAP_CHUNK(map,bit) (map)[((bit)/BITCHUNK_BITS)]
|
15 |
#define CHUNK_OFFSET(bit) ((bit)%BITCHUNK_BITS)
|
16 |
#define GET_BIT(map,bit) ( MAP_CHUNK(map,bit) & (1 << CHUNK_OFFSET(bit) )) |
17 |
#define SET_BIT(map,bit) ( MAP_CHUNK(map,bit) |= (1 << CHUNK_OFFSET(bit) )) |
18 |
#define UNSET_BIT(map,bit) ( MAP_CHUNK(map,bit) &= ~(1 << CHUNK_OFFSET(bit) )) |
19 |
|
20 |
#if defined(CONFIG_SMP) && defined(__GNUC__)
|
21 |
#ifndef __ASSEMBLY__
|
22 |
static inline void bits_fill(bitchunk_t * chunks, unsigned bits) |
23 |
{ |
24 |
unsigned c, cnt;
|
25 |
|
26 |
cnt = BITMAP_CHUNKS(bits); |
27 |
for (c = 0; c < cnt; c++) |
28 |
bit_fill(chunks[c]); |
29 |
} |
30 |
#endif
|
31 |
#endif
|
32 |
|
33 |
|
34 |
#endif /* _BITMAP_H */ |