xref: /openbmc/linux/fs/ntfs/bitmap.h (revision 09b35b41)
1  /* SPDX-License-Identifier: GPL-2.0-or-later */
2  /*
3   * bitmap.h - Defines for NTFS kernel bitmap handling.  Part of the Linux-NTFS
4   *	      project.
5   *
6   * Copyright (c) 2004 Anton Altaparmakov
7   */
8  
9  #ifndef _LINUX_NTFS_BITMAP_H
10  #define _LINUX_NTFS_BITMAP_H
11  
12  #ifdef NTFS_RW
13  
14  #include <linux/fs.h>
15  
16  #include "types.h"
17  
18  extern int __ntfs_bitmap_set_bits_in_run(struct inode *vi, const s64 start_bit,
19  		const s64 count, const u8 value, const bool is_rollback);
20  
21  /**
22   * ntfs_bitmap_set_bits_in_run - set a run of bits in a bitmap to a value
23   * @vi:			vfs inode describing the bitmap
24   * @start_bit:		first bit to set
25   * @count:		number of bits to set
26   * @value:		value to set the bits to (i.e. 0 or 1)
27   *
28   * Set @count bits starting at bit @start_bit in the bitmap described by the
29   * vfs inode @vi to @value, where @value is either 0 or 1.
30   *
31   * Return 0 on success and -errno on error.
32   */
33  static inline int ntfs_bitmap_set_bits_in_run(struct inode *vi,
34  		const s64 start_bit, const s64 count, const u8 value)
35  {
36  	return __ntfs_bitmap_set_bits_in_run(vi, start_bit, count, value,
37  			false);
38  }
39  
40  /**
41   * ntfs_bitmap_set_run - set a run of bits in a bitmap
42   * @vi:		vfs inode describing the bitmap
43   * @start_bit:	first bit to set
44   * @count:	number of bits to set
45   *
46   * Set @count bits starting at bit @start_bit in the bitmap described by the
47   * vfs inode @vi.
48   *
49   * Return 0 on success and -errno on error.
50   */
51  static inline int ntfs_bitmap_set_run(struct inode *vi, const s64 start_bit,
52  		const s64 count)
53  {
54  	return ntfs_bitmap_set_bits_in_run(vi, start_bit, count, 1);
55  }
56  
57  /**
58   * ntfs_bitmap_clear_run - clear a run of bits in a bitmap
59   * @vi:		vfs inode describing the bitmap
60   * @start_bit:	first bit to clear
61   * @count:	number of bits to clear
62   *
63   * Clear @count bits starting at bit @start_bit in the bitmap described by the
64   * vfs inode @vi.
65   *
66   * Return 0 on success and -errno on error.
67   */
68  static inline int ntfs_bitmap_clear_run(struct inode *vi, const s64 start_bit,
69  		const s64 count)
70  {
71  	return ntfs_bitmap_set_bits_in_run(vi, start_bit, count, 0);
72  }
73  
74  /**
75   * ntfs_bitmap_set_bit - set a bit in a bitmap
76   * @vi:		vfs inode describing the bitmap
77   * @bit:	bit to set
78   *
79   * Set bit @bit in the bitmap described by the vfs inode @vi.
80   *
81   * Return 0 on success and -errno on error.
82   */
83  static inline int ntfs_bitmap_set_bit(struct inode *vi, const s64 bit)
84  {
85  	return ntfs_bitmap_set_run(vi, bit, 1);
86  }
87  
88  /**
89   * ntfs_bitmap_clear_bit - clear a bit in a bitmap
90   * @vi:		vfs inode describing the bitmap
91   * @bit:	bit to clear
92   *
93   * Clear bit @bit in the bitmap described by the vfs inode @vi.
94   *
95   * Return 0 on success and -errno on error.
96   */
97  static inline int ntfs_bitmap_clear_bit(struct inode *vi, const s64 bit)
98  {
99  	return ntfs_bitmap_clear_run(vi, bit, 1);
100  }
101  
102  #endif /* NTFS_RW */
103  
104  #endif /* defined _LINUX_NTFS_BITMAP_H */
105