����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) 2014 Felix Fietkau <nbd@nbd.name>
* Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
*/
#ifndef _LINUX_BITFIELD_H
#define _LINUX_BITFIELD_H
#include <linux/build_bug.h>
#include <asm/byteorder.h>
/*
* Bitfield access macros
*
* FIELD_{GET,PREP} macros take as first parameter shifted mask
* from which they extract the base mask and shift amount.
* Mask must be a compilation time constant.
*
* Example:
*
* #define REG_FIELD_A GENMASK(6, 0)
* #define REG_FIELD_B BIT(7)
* #define REG_FIELD_C GENMASK(15, 8)
* #define REG_FIELD_D GENMASK(31, 16)
*
* Get:
* a = FIELD_GET(REG_FIELD_A, reg);
* b = FIELD_GET(REG_FIELD_B, reg);
*
* Set:
* reg = FIELD_PREP(REG_FIELD_A, 1) |
* FIELD_PREP(REG_FIELD_B, 0) |
* FIELD_PREP(REG_FIELD_C, c) |
* FIELD_PREP(REG_FIELD_D, 0x40);
*
* Modify:
* reg &= ~REG_FIELD_C;
* reg |= FIELD_PREP(REG_FIELD_C, c);
*/
#define __bf_shf(x) (__builtin_ffsll(x) - 1)
#define __scalar_type_to_unsigned_cases(type) \
unsigned type: (unsigned type)0, \
signed type: (unsigned type)0
#define __unsigned_scalar_typeof(x) typeof( \
_Generic((x), \
char: (unsigned char)0, \
__scalar_type_to_unsigned_cases(char), \
__scalar_type_to_unsigned_cases(short), \
__scalar_type_to_unsigned_cases(int), \
__scalar_type_to_unsigned_cases(long), \
__scalar_type_to_unsigned_cases(long long), \
default: (x)))
#define __bf_cast_unsigned(type, x) ((__unsigned_scalar_typeof(type))(x))
#define __BF_FIELD_CHECK(_mask, _reg, _val, _pfx) \
({ \
BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \
_pfx "mask is not constant"); \
BUILD_BUG_ON_MSG((_mask) == 0, _pfx "mask is zero"); \
BUILD_BUG_ON_MSG(__builtin_constant_p(_val) ? \
~((_mask) >> __bf_shf(_mask)) & (_val) : 0, \
_pfx "value too large for the field"); \
BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) > \
__bf_cast_unsigned(_reg, ~0ull), \
_pfx "type of reg too small for mask"); \
__BUILD_BUG_ON_NOT_POWER_OF_2((_mask) + \
(1ULL << __bf_shf(_mask))); \
})
/**
* FIELD_MAX() - produce the maximum value representable by a field
* @_mask: shifted mask defining the field's length and position
*
* FIELD_MAX() returns the maximum value that can be held in the field
* specified by @_mask.
*/
#define FIELD_MAX(_mask) \
({ \
__BF_FIELD_CHECK(_mask, 0ULL, 0ULL, "FIELD_MAX: "); \
(typeof(_mask))((_mask) >> __bf_shf(_mask)); \
})
/**
* FIELD_FIT() - check if value fits in the field
* @_mask: shifted mask defining the field's length and position
* @_val: value to test against the field
*
* Return: true if @_val can fit inside @_mask, false if @_val is too big.
*/
#define FIELD_FIT(_mask, _val) \
({ \
__BF_FIELD_CHECK(_mask, 0ULL, 0ULL, "FIELD_FIT: "); \
!((((typeof(_mask))_val) << __bf_shf(_mask)) & ~(_mask)); \
})
/**
* FIELD_PREP() - prepare a bitfield element
* @_mask: shifted mask defining the field's length and position
* @_val: value to put in the field
*
* FIELD_PREP() masks and shifts up the value. The result should
* be combined with other fields of the bitfield using logical OR.
*/
#define FIELD_PREP(_mask, _val) \
({ \
__BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \
((typeof(_mask))(_val) << __bf_shf(_mask)) & (_mask); \
})
/**
* FIELD_GET() - extract a bitfield element
* @_mask: shifted mask defining the field's length and position
* @_reg: value of entire bitfield
*
* FIELD_GET() extracts the field specified by @_mask from the
* bitfield passed in as @_reg by masking and shifting it down.
*/
#define FIELD_GET(_mask, _reg) \
({ \
__BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \
(typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \
})
extern void __compiletime_error("value doesn't fit into mask")
__field_overflow(void);
extern void __compiletime_error("bad bitfield mask")
__bad_mask(void);
static __always_inline u64 field_multiplier(u64 field)
{
if ((field | (field - 1)) & ((field | (field - 1)) + 1))
__bad_mask();
return field & -field;
}
static __always_inline u64 field_mask(u64 field)
{
return field / field_multiplier(field);
}
#define field_max(field) ((typeof(field))field_mask(field))
#define ____MAKE_OP(type,base,to,from) \
static __always_inline __##type type##_encode_bits(base v, base field) \
{ \
if (__builtin_constant_p(v) && (v & ~field_mask(field))) \
__field_overflow(); \
return to((v & field_mask(field)) * field_multiplier(field)); \
} \
static __always_inline __##type type##_replace_bits(__##type old, \
base val, base field) \
{ \
return (old & ~to(field)) | type##_encode_bits(val, field); \
} \
static __always_inline void type##p_replace_bits(__##type *p, \
base val, base field) \
{ \
*p = (*p & ~to(field)) | type##_encode_bits(val, field); \
} \
static __always_inline base type##_get_bits(__##type v, base field) \
{ \
return (from(v) & field)/field_multiplier(field); \
}
#define __MAKE_OP(size) \
____MAKE_OP(le##size,u##size,cpu_to_le##size,le##size##_to_cpu) \
____MAKE_OP(be##size,u##size,cpu_to_be##size,be##size##_to_cpu) \
____MAKE_OP(u##size,u##size,,)
____MAKE_OP(u8,u8,,)
__MAKE_OP(16)
__MAKE_OP(32)
__MAKE_OP(64)
#undef __MAKE_OP
#undef ____MAKE_OP
#endif
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| sched | Folder | 0755 |
|
|
| unaligned | Folder | 0755 |
|
|
| align.h | File | 339 B | 0644 |
|
| arm-smccc.h | File | 5.63 KB | 0644 |
|
| atomic.h | File | 363 B | 0644 |
|
| bitfield.h | File | 5.33 KB | 0644 |
|
| bitmap.h | File | 4.82 KB | 0644 |
|
| bitops.h | File | 2.15 KB | 0644 |
|
| bits.h | File | 1.17 KB | 0644 |
|
| btf_ids.h | File | 5.97 KB | 0644 |
|
| bug.h | File | 442 B | 0644 |
|
| build_bug.h | File | 3.04 KB | 0644 |
|
| compiler-gcc.h | File | 1.24 KB | 0644 |
|
| compiler.h | File | 5.82 KB | 0644 |
|
| compiler_types.h | File | 1.09 KB | 0644 |
|
| const.h | File | 421 B | 0644 |
|
| coresight-pmu.h | File | 2.32 KB | 0644 |
|
| ctype.h | File | 1.9 KB | 0644 |
|
| debug_locks.h | File | 288 B | 0644 |
|
| delay.h | File | 117 B | 0644 |
|
| err.h | File | 1.99 KB | 0644 |
|
| export.h | File | 129 B | 0644 |
|
| filter.h | File | 9.59 KB | 0644 |
|
| find.h | File | 5.77 KB | 0644 |
|
| ftrace.h | File | 120 B | 0644 |
|
| gfp.h | File | 322 B | 0644 |
|
| gfp_types.h | File | 46 B | 0644 |
|
| hardirq.h | File | 280 B | 0644 |
|
| hash.h | File | 2.93 KB | 0644 |
|
| hashtable.h | File | 4.44 KB | 0644 |
|
| interrupt.h | File | 129 B | 0644 |
|
| interval_tree_generic.h | File | 6.7 KB | 0644 |
|
| irqflags.h | File | 1.37 KB | 0644 |
|
| jhash.h | File | 4.46 KB | 0644 |
|
| kallsyms.h | File | 646 B | 0644 |
|
| kconfig.h | File | 2.39 KB | 0644 |
|
| kern_levels.h | File | 954 B | 0644 |
|
| kernel.h | File | 2.64 KB | 0644 |
|
| linkage.h | File | 123 B | 0644 |
|
| list.h | File | 22.48 KB | 0644 |
|
| list_sort.h | File | 374 B | 0644 |
|
| lockdep.h | File | 1.43 KB | 0644 |
|
| log2.h | File | 4.46 KB | 0644 |
|
| math.h | File | 764 B | 0644 |
|
| math64.h | File | 1.22 KB | 0644 |
|
| module.h | File | 270 B | 0644 |
|
| mutex.h | File | 117 B | 0644 |
|
| nmi.h | File | 0 B | 0644 |
|
| numa.h | File | 292 B | 0644 |
|
| objtool_types.h | File | 1.8 KB | 0644 |
|
| overflow.h | File | 4.11 KB | 0644 |
|
| poison.h | File | 2.5 KB | 0644 |
|
| proc_fs.h | File | 123 B | 0644 |
|
| rbtree.h | File | 9.32 KB | 0644 |
|
| rbtree_augmented.h | File | 9.34 KB | 0644 |
|
| rcu.h | File | 437 B | 0644 |
|
| refcount.h | File | 4.11 KB | 0644 |
|
| ring_buffer.h | File | 2.4 KB | 0644 |
|
| rwsem.h | File | 920 B | 0644 |
|
| seq_file.h | File | 126 B | 0644 |
|
| sizes.h | File | 1.12 KB | 0644 |
|
| slab.h | File | 1.17 KB | 0644 |
|
| spinlock.h | File | 1.24 KB | 0644 |
|
| stacktrace.h | File | 678 B | 0644 |
|
| static_call_types.h | File | 2.74 KB | 0644 |
|
| string.h | File | 1.4 KB | 0644 |
|
| stringify.h | File | 380 B | 0644 |
|
| time64.h | File | 347 B | 0644 |
|
| types.h | File | 1.72 KB | 0644 |
|
| zalloc.h | File | 252 B | 0644 |
|