Go to the source code of this file.
Defines | |
| #define | NX_PSEUDO_BIT_STRUCT(_structure) |
| Wrapper structure for pseudo_bit_t structures. | |
| #define | NX_PSEUDO_STRUCT(_ptr) typeof ( *((_ptr)->u.dummy[0]) ) |
| Get pseudo_bit_t structure type from wrapper structure pointer. | |
| #define | NX_BIT_OFFSET(_ptr, _field) offsetof ( NX_PSEUDO_STRUCT ( _ptr ), _field ) |
| Bit offset of a field within a pseudo_bit_t structure. | |
| #define | NX_BIT_WIDTH(_ptr, _field) sizeof ( ( ( NX_PSEUDO_STRUCT ( _ptr ) * ) NULL )->_field ) |
| Bit width of a field within a pseudo_bit_t structure. | |
| #define | NX_QWORD_OFFSET(_ptr, _field) ( NX_BIT_OFFSET ( _ptr, _field ) / 64 ) |
| Qword offset of a field within a pseudo_bit_t structure. | |
| #define | NX_QWORD_BIT_OFFSET(_ptr, _index, _field) ( NX_BIT_OFFSET ( _ptr, _field ) - ( 64 * (_index) ) ) |
| Qword bit offset of a field within a pseudo_bit_t structure. | |
| #define | NX_BIT_MASK(_ptr, _field) |
| Bit mask for a field within a pseudo_bit_t structure. | |
| #define | NX_ASSEMBLE_1(_ptr, _index, _field, _value) |
| #define | NX_ASSEMBLE_2(_ptr, _index, _field, _value,...) |
| #define | NX_ASSEMBLE_3(_ptr, _index, _field, _value,...) |
| #define | NX_ASSEMBLE_4(_ptr, _index, _field, _value,...) |
| #define | NX_ASSEMBLE_5(_ptr, _index, _field, _value,...) |
| #define | NX_ASSEMBLE_6(_ptr, _index, _field, _value,...) |
| #define | NX_ASSEMBLE_7(_ptr, _index, _field, _value,...) |
| #define | NX_MASK_1(_ptr, _index, _field) |
| #define | NX_MASK_2(_ptr, _index, _field,...) |
| #define | NX_MASK_3(_ptr, _index, _field,...) |
| #define | NX_MASK_4(_ptr, _index, _field,...) |
| #define | NX_MASK_5(_ptr, _index, _field,...) |
| #define | NX_MASK_6(_ptr, _index, _field,...) |
| #define | NX_MASK_7(_ptr, _index, _field,...) |
| #define | NX_FILL(_ptr, _index, _assembled) |
| #define | NX_FILL_1(_ptr, _index,...) NX_FILL ( _ptr, _index, NX_ASSEMBLE_1 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define | NX_FILL_2(_ptr, _index,...) NX_FILL ( _ptr, _index, NX_ASSEMBLE_2 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define | NX_FILL_3(_ptr, _index,...) NX_FILL ( _ptr, _index, NX_ASSEMBLE_3 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define | NX_FILL_4(_ptr, _index,...) NX_FILL ( _ptr, _index, NX_ASSEMBLE_4 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define | NX_FILL_5(_ptr, _index,...) NX_FILL ( _ptr, _index, NX_ASSEMBLE_5 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define | NX_FILL_6(_ptr, _index,...) NX_FILL ( _ptr, _index, NX_ASSEMBLE_6 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define | NX_FILL_7(_ptr, _index,...) NX_FILL ( _ptr, _index, NX_ASSEMBLE_7 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define | NX_GET64(_ptr, _field) |
| Extract value of named field. | |
| #define | NX_GET(_ptr, _field) ( ( unsigned long ) NX_GET64 ( _ptr, _field ) ) |
| Extract value of named field (for fields up to the size of a long). | |
Typedefs | |
| typedef unsigned char | pseudo_bit_t |
| Datatype used to represent a bit in the pseudo-structures. | |
Functions | |
| FILE_LICENCE (GPL2_OR_LATER) | |
Definition in file nx_bitops.h.
| #define NX_PSEUDO_BIT_STRUCT | ( | _structure | ) |
Value:
union { \ uint8_t bytes[ sizeof ( _structure ) / 8 ]; \ uint64_t qwords[ sizeof ( _structure ) / 64 ]; \ _structure *dummy[0]; \ } u;
This structure provides a wrapper around pseudo_bit_t structures. It has the correct size, and also encapsulates type information about the underlying pseudo_bit_t-based structure, which allows the NX_FILL etc. macros to work without requiring explicit type information.
Definition at line 43 of file nx_bitops.h.
| #define NX_PSEUDO_STRUCT | ( | _ptr | ) | typeof ( *((_ptr)->u.dummy[0]) ) |
Get pseudo_bit_t structure type from wrapper structure pointer.
Definition at line 51 of file nx_bitops.h.
| #define NX_BIT_OFFSET | ( | _ptr, | |||
| _field | ) | offsetof ( NX_PSEUDO_STRUCT ( _ptr ), _field ) |
| #define NX_BIT_WIDTH | ( | _ptr, | |||
| _field | ) | sizeof ( ( ( NX_PSEUDO_STRUCT ( _ptr ) * ) NULL )->_field ) |
| #define NX_QWORD_OFFSET | ( | _ptr, | |||
| _field | ) | ( NX_BIT_OFFSET ( _ptr, _field ) / 64 ) |
| #define NX_QWORD_BIT_OFFSET | ( | _ptr, | |||
| _index, | |||||
| _field | ) | ( NX_BIT_OFFSET ( _ptr, _field ) - ( 64 * (_index) ) ) |
Qword bit offset of a field within a pseudo_bit_t structure.
Yes, using mod-64 would work, but would lose the check for the error of specifying a mismatched field name and qword index.
Definition at line 71 of file nx_bitops.h.
| #define NX_BIT_MASK | ( | _ptr, | |||
| _field | ) |
Value:
( ( ~( ( uint64_t ) 0 ) ) >> \ ( 64 - NX_BIT_WIDTH ( _ptr, _field ) ) )
Definition at line 75 of file nx_bitops.h.
| #define NX_ASSEMBLE_1 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| _value | ) |
Value:
( ( ( uint64_t) (_value) ) << \ NX_QWORD_BIT_OFFSET ( _ptr, _index, _field ) )
Definition at line 84 of file nx_bitops.h.
| #define NX_ASSEMBLE_2 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| _value, | |||||
| ... | ) |
Value:
( NX_ASSEMBLE_1 ( _ptr, _index, _field, _value ) | \ NX_ASSEMBLE_1 ( _ptr, _index, __VA_ARGS__ ) )
Definition at line 88 of file nx_bitops.h.
| #define NX_ASSEMBLE_3 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| _value, | |||||
| ... | ) |
Value:
( NX_ASSEMBLE_1 ( _ptr, _index, _field, _value ) | \ NX_ASSEMBLE_2 ( _ptr, _index, __VA_ARGS__ ) )
Definition at line 92 of file nx_bitops.h.
| #define NX_ASSEMBLE_4 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| _value, | |||||
| ... | ) |
Value:
( NX_ASSEMBLE_1 ( _ptr, _index, _field, _value ) | \ NX_ASSEMBLE_3 ( _ptr, _index, __VA_ARGS__ ) )
Definition at line 96 of file nx_bitops.h.
| #define NX_ASSEMBLE_5 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| _value, | |||||
| ... | ) |
Value:
( NX_ASSEMBLE_1 ( _ptr, _index, _field, _value ) | \ NX_ASSEMBLE_4 ( _ptr, _index, __VA_ARGS__ ) )
Definition at line 100 of file nx_bitops.h.
| #define NX_ASSEMBLE_6 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| _value, | |||||
| ... | ) |
Value:
( NX_ASSEMBLE_1 ( _ptr, _index, _field, _value ) | \ NX_ASSEMBLE_5 ( _ptr, _index, __VA_ARGS__ ) )
Definition at line 104 of file nx_bitops.h.
| #define NX_ASSEMBLE_7 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| _value, | |||||
| ... | ) |
Value:
( NX_ASSEMBLE_1 ( _ptr, _index, _field, _value ) | \ NX_ASSEMBLE_6 ( _ptr, _index, __VA_ARGS__ ) )
Definition at line 108 of file nx_bitops.h.
| #define NX_MASK_1 | ( | _ptr, | |||
| _index, | |||||
| _field | ) |
Value:
( NX_BIT_MASK ( _ptr, _field ) << \ NX_QWORD_BIT_OFFSET ( _ptr, _index, _field ) )
Definition at line 117 of file nx_bitops.h.
| #define NX_MASK_2 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| ... | ) |
Value:
Definition at line 121 of file nx_bitops.h.
| #define NX_MASK_3 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| ... | ) |
Value:
Definition at line 125 of file nx_bitops.h.
| #define NX_MASK_4 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| ... | ) |
Value:
Definition at line 129 of file nx_bitops.h.
| #define NX_MASK_5 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| ... | ) |
Value:
Definition at line 133 of file nx_bitops.h.
| #define NX_MASK_6 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| ... | ) |
Value:
Definition at line 137 of file nx_bitops.h.
| #define NX_MASK_7 | ( | _ptr, | |||
| _index, | |||||
| _field, | |||||
| ... | ) |
Value:
Definition at line 141 of file nx_bitops.h.
| #define NX_FILL | ( | _ptr, | |||
| _index, | |||||
| _assembled | ) |
Value:
do { \ uint64_t *__ptr = &(_ptr)->u.qwords[(_index)]; \ uint64_t __assembled = (_assembled); \ *__ptr = cpu_to_le64 ( __assembled ); \ } while ( 0 )
Definition at line 150 of file nx_bitops.h.
| #define NX_FILL_1 | ( | _ptr, | |||
| _index, | |||||
| ... | ) | NX_FILL ( _ptr, _index, NX_ASSEMBLE_1 ( _ptr, _index, __VA_ARGS__ ) ) |
Definition at line 157 of file nx_bitops.h.
Referenced by phantom_refill_rx_ring(), phantom_transmit(), and phantom_update_macaddr().
| #define NX_FILL_2 | ( | _ptr, | |||
| _index, | |||||
| ... | ) | NX_FILL ( _ptr, _index, NX_ASSEMBLE_2 ( _ptr, _index, __VA_ARGS__ ) ) |
Definition at line 160 of file nx_bitops.h.
Referenced by phantom_refill_rx_ring(), phantom_transmit(), and phantom_update_macaddr().
| #define NX_FILL_3 | ( | _ptr, | |||
| _index, | |||||
| ... | ) | NX_FILL ( _ptr, _index, NX_ASSEMBLE_3 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define NX_FILL_4 | ( | _ptr, | |||
| _index, | |||||
| ... | ) | NX_FILL ( _ptr, _index, NX_ASSEMBLE_4 ( _ptr, _index, __VA_ARGS__ ) ) |
Definition at line 166 of file nx_bitops.h.
| #define NX_FILL_5 | ( | _ptr, | |||
| _index, | |||||
| ... | ) | NX_FILL ( _ptr, _index, NX_ASSEMBLE_5 ( _ptr, _index, __VA_ARGS__ ) ) |
Definition at line 169 of file nx_bitops.h.
| #define NX_FILL_6 | ( | _ptr, | |||
| _index, | |||||
| ... | ) | NX_FILL ( _ptr, _index, NX_ASSEMBLE_6 ( _ptr, _index, __VA_ARGS__ ) ) |
Definition at line 172 of file nx_bitops.h.
| #define NX_FILL_7 | ( | _ptr, | |||
| _index, | |||||
| ... | ) | NX_FILL ( _ptr, _index, NX_ASSEMBLE_7 ( _ptr, _index, __VA_ARGS__ ) ) |
| #define NX_GET64 | ( | _ptr, | |||
| _field | ) |
Value:
( { \
unsigned int __index = NX_QWORD_OFFSET ( _ptr, _field ); \
uint64_t *__ptr = &(_ptr)->u.qwords[__index]; \
uint64_t __value = le64_to_cpu ( *__ptr ); \
__value >>= \
NX_QWORD_BIT_OFFSET ( _ptr, __index, _field ); \
__value &= NX_BIT_MASK ( _ptr, _field ); \
__value; \
} )
Definition at line 179 of file nx_bitops.h.
| #define NX_GET | ( | _ptr, | |||
| _field | ) | ( ( unsigned long ) NX_GET64 ( _ptr, _field ) ) |
Extract value of named field (for fields up to the size of a long).
Definition at line 191 of file nx_bitops.h.
Referenced by phantom_poll(), and phantom_post_rds().
| typedef unsigned char pseudo_bit_t |
Datatype used to represent a bit in the pseudo-structures.
Definition at line 32 of file nx_bitops.h.
| FILE_LICENCE | ( | GPL2_OR_LATER | ) |
1.5.7.1