Merge tag 'pull-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-block.git] / include / linux / wordpart.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2
3 #ifndef _LINUX_WORDPART_H
4 #define _LINUX_WORDPART_H
5
6 /**
7  * upper_32_bits - return bits 32-63 of a number
8  * @n: the number we're accessing
9  *
10  * A basic shift-right of a 64- or 32-bit quantity.  Use this to suppress
11  * the "right shift count >= width of type" warning when that quantity is
12  * 32-bits.
13  */
14 #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
15
16 /**
17  * lower_32_bits - return bits 0-31 of a number
18  * @n: the number we're accessing
19  */
20 #define lower_32_bits(n) ((u32)((n) & 0xffffffff))
21
22 /**
23  * upper_16_bits - return bits 16-31 of a number
24  * @n: the number we're accessing
25  */
26 #define upper_16_bits(n) ((u16)((n) >> 16))
27
28 /**
29  * lower_16_bits - return bits 0-15 of a number
30  * @n: the number we're accessing
31  */
32 #define lower_16_bits(n) ((u16)((n) & 0xffff))
33
34 /**
35  * REPEAT_BYTE - repeat the value @x multiple times as an unsigned long value
36  * @x: value to repeat
37  *
38  * NOTE: @x is not checked for > 0xff; larger values produce odd results.
39  */
40 #define REPEAT_BYTE(x)  ((~0ul / 0xff) * (x))
41
42 #endif // _LINUX_WORDPART_H