iPXE
Defines | Typedefs | Functions
pseudobit.h File Reference

Pseudo-bit structures. More...

#include <stdint.h>
#include <byteswap.h>

Go to the source code of this file.

Defines

#define PSEUDO_BIT_STRUCT(_structure)
 Wrapper structure for pseudo_bit_t structures.
#define PSEUDO_BIT_STRUCT_TYPE(_ptr)   typeof ( *((_ptr)->u.dummy[0]) )
 Get pseudo_bit_t structure type from wrapper structure pointer.
#define BIT_OFFSET(_ptr, _field)   offsetof ( PSEUDO_BIT_STRUCT_TYPE ( _ptr ), _field )
 Bit offset of a field within a pseudo_bit_t structure.
#define BIT_WIDTH(_ptr, _field)   sizeof ( ( ( PSEUDO_BIT_STRUCT_TYPE ( _ptr ) * ) NULL )->_field )
 Bit width of a field within a pseudo_bit_t structure.
#define QWORD_OFFSET(_ptr, _field)   ( BIT_OFFSET ( _ptr, _field ) / 64 )
 Qword offset of a field within a pseudo_bit_t structure.
#define QWORD_BIT_OFFSET(_ptr, _index, _field)   ( BIT_OFFSET ( _ptr, _field ) - ( 64 * (_index) ) )
 Qword bit offset of a field within a pseudo_bit_t structure.
#define QWORD_BIT_SHIFT(_ptr, _index, _field)
 Qword bit shift for a field within a pseudo_bit_t structure.
#define BIT_MASK(_ptr, _field)
 Bit mask for a field within a pseudo_bit_t structure.
#define BIT_ASSEMBLE_1(_ptr, _index, _field, _value)
#define BIT_ASSEMBLE_2(_ptr, _index, _field, _value,...)
#define BIT_ASSEMBLE_3(_ptr, _index, _field, _value,...)
#define BIT_ASSEMBLE_4(_ptr, _index, _field, _value,...)
#define BIT_ASSEMBLE_5(_ptr, _index, _field, _value,...)
#define BIT_ASSEMBLE_6(_ptr, _index, _field, _value,...)
#define BIT_ASSEMBLE_7(_ptr, _index, _field, _value,...)
#define BIT_MASK_1(_ptr, _index, _field)
#define BIT_MASK_2(_ptr, _index, _field,...)
#define BIT_MASK_3(_ptr, _index, _field,...)
#define BIT_MASK_4(_ptr, _index, _field,...)
#define BIT_MASK_5(_ptr, _index, _field,...)
#define BIT_MASK_6(_ptr, _index, _field,...)
#define BIT_MASK_7(_ptr, _index, _field,...)
#define BIT_FILL(_ptr, _index, _assembled)
#define BIT_FILL_1(_ptr, _field1,...)
#define BIT_FILL_2(_ptr, _field1,...)
#define BIT_FILL_3(_ptr, _field1,...)
#define BIT_FILL_4(_ptr, _field1,...)
#define BIT_FILL_5(_ptr, _field1,...)
#define BIT_FILL_6(_ptr, _field1,...)
#define BIT_QWORD_PTR(_ptr, _field)
#define BIT_GET64(_ptr, _field)
 Extract value of named field.
#define BIT_GET(_ptr, _field)   ( ( unsigned long ) BIT_GET64 ( _ptr, _field ) )
 Extract value of named field (for fields up to the size of a long)
#define BIT_SET(_ptr, _field, _value)

Typedefs

typedef unsigned char pseudo_bit_t
 Datatype used to represent a bit in the pseudo-structures.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)

Detailed Description

Pseudo-bit structures.

Definition in file pseudobit.h.


Define Documentation

#define PSEUDO_BIT_STRUCT (   _structure)
Value:
union {                                                               \
                uint8_t bytes[ sizeof ( _structure ) / 8 ];                   \
                uint32_t dwords[ sizeof ( _structure ) / 32 ];                \
                uint64_t qwords[ sizeof ( _structure ) / 64 ];                \
                _structure *dummy[0];                                         \
        } __attribute__ (( packed )) u

Wrapper structure for pseudo_bit_t structures.

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 BIT_FILL() etc. macros to work without requiring explicit type information.

Definition at line 70 of file pseudobit.h.

#define PSEUDO_BIT_STRUCT_TYPE (   _ptr)    typeof ( *((_ptr)->u.dummy[0]) )

Get pseudo_bit_t structure type from wrapper structure pointer.

Definition at line 79 of file pseudobit.h.

#define BIT_OFFSET (   _ptr,
  _field 
)    offsetof ( PSEUDO_BIT_STRUCT_TYPE ( _ptr ), _field )

Bit offset of a field within a pseudo_bit_t structure.

Definition at line 83 of file pseudobit.h.

#define BIT_WIDTH (   _ptr,
  _field 
)    sizeof ( ( ( PSEUDO_BIT_STRUCT_TYPE ( _ptr ) * ) NULL )->_field )

Bit width of a field within a pseudo_bit_t structure.

Definition at line 87 of file pseudobit.h.

#define QWORD_OFFSET (   _ptr,
  _field 
)    ( BIT_OFFSET ( _ptr, _field ) / 64 )

Qword offset of a field within a pseudo_bit_t structure.

Definition at line 91 of file pseudobit.h.

#define QWORD_BIT_OFFSET (   _ptr,
  _index,
  _field 
)    ( BIT_OFFSET ( _ptr, _field ) - ( 64 * (_index) ) )

Qword bit offset of a field within a pseudo_bit_t structure.

Definition at line 95 of file pseudobit.h.

#define QWORD_BIT_SHIFT (   _ptr,
  _index,
  _field 
)
Value:
QWORD_SHIFT ( QWORD_BIT_OFFSET ( _ptr, _index, _field ),              \
                      BIT_WIDTH ( _ptr, _field ) )

Qword bit shift for a field within a pseudo_bit_t structure.

Definition at line 99 of file pseudobit.h.

#define BIT_MASK (   _ptr,
  _field 
)
Value:
( ( ~( ( uint64_t ) 0 ) ) >>                                          \
          ( 64 - BIT_WIDTH ( _ptr, _field ) ) )

Bit mask for a field within a pseudo_bit_t structure.

Definition at line 104 of file pseudobit.h.

#define BIT_ASSEMBLE_1 (   _ptr,
  _index,
  _field,
  _value 
)
Value:
( ( ( uint64_t) (_value) ) <<                                         \
          QWORD_BIT_SHIFT ( _ptr, _index, _field ) )

Definition at line 113 of file pseudobit.h.

#define BIT_ASSEMBLE_2 (   _ptr,
  _index,
  _field,
  _value,
  ... 
)
Value:
( BIT_ASSEMBLE_1 ( _ptr, _index, _field, _value ) |                   \
          BIT_ASSEMBLE_1 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 117 of file pseudobit.h.

#define BIT_ASSEMBLE_3 (   _ptr,
  _index,
  _field,
  _value,
  ... 
)
Value:
( BIT_ASSEMBLE_1 ( _ptr, _index, _field, _value ) |                   \
          BIT_ASSEMBLE_2 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 121 of file pseudobit.h.

#define BIT_ASSEMBLE_4 (   _ptr,
  _index,
  _field,
  _value,
  ... 
)
Value:
( BIT_ASSEMBLE_1 ( _ptr, _index, _field, _value ) |                   \
          BIT_ASSEMBLE_3 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 125 of file pseudobit.h.

#define BIT_ASSEMBLE_5 (   _ptr,
  _index,
  _field,
  _value,
  ... 
)
Value:
( BIT_ASSEMBLE_1 ( _ptr, _index, _field, _value ) |                   \
          BIT_ASSEMBLE_4 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 129 of file pseudobit.h.

#define BIT_ASSEMBLE_6 (   _ptr,
  _index,
  _field,
  _value,
  ... 
)
Value:
( BIT_ASSEMBLE_1 ( _ptr, _index, _field, _value ) |                   \
          BIT_ASSEMBLE_5 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 133 of file pseudobit.h.

#define BIT_ASSEMBLE_7 (   _ptr,
  _index,
  _field,
  _value,
  ... 
)
Value:
( BIT_ASSEMBLE_1 ( _ptr, _index, _field, _value ) |                   \
          BIT_ASSEMBLE_6 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 137 of file pseudobit.h.

#define BIT_MASK_1 (   _ptr,
  _index,
  _field 
)
Value:
( BIT_MASK ( _ptr, _field ) <<                                        \
          QWORD_BIT_SHIFT ( _ptr, _index, _field ) )

Definition at line 146 of file pseudobit.h.

#define BIT_MASK_2 (   _ptr,
  _index,
  _field,
  ... 
)
Value:
( BIT_MASK_1 ( _ptr, _index, _field ) |                               \
          BIT_MASK_1 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 150 of file pseudobit.h.

#define BIT_MASK_3 (   _ptr,
  _index,
  _field,
  ... 
)
Value:
( BIT_MASK_1 ( _ptr, _index, _field ) |                               \
          BIT_MASK_2 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 154 of file pseudobit.h.

#define BIT_MASK_4 (   _ptr,
  _index,
  _field,
  ... 
)
Value:
( BIT_MASK_1 ( _ptr, _index, _field ) |                               \
          BIT_MASK_3 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 158 of file pseudobit.h.

#define BIT_MASK_5 (   _ptr,
  _index,
  _field,
  ... 
)
Value:
( BIT_MASK_1 ( _ptr, _index, _field ) |                               \
          BIT_MASK_4 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 162 of file pseudobit.h.

#define BIT_MASK_6 (   _ptr,
  _index,
  _field,
  ... 
)
Value:
( BIT_MASK_1 ( _ptr, _index, _field ) |                               \
          BIT_MASK_5 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 166 of file pseudobit.h.

#define BIT_MASK_7 (   _ptr,
  _index,
  _field,
  ... 
)
Value:
( BIT_MASK_1 ( _ptr, _index, _field ) |                               \
          BIT_MASK_6 ( _ptr, _index, __VA_ARGS__ ) )

Definition at line 170 of file pseudobit.h.

#define BIT_FILL (   _ptr,
  _index,
  _assembled 
)
Value:
do {                          \
                uint64_t *__ptr = &(_ptr)->u.qwords[(_index)];                \
                uint64_t __assembled = (_assembled);                          \
                *__ptr = cpu_to_BIT64 ( __assembled );                        \
        } while ( 0 )

Definition at line 179 of file pseudobit.h.

#define BIT_FILL_1 (   _ptr,
  _field1,
  ... 
)
#define BIT_FILL_2 (   _ptr,
  _field1,
  ... 
)
Value:
BIT_FILL ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),                      \
                   BIT_ASSEMBLE_2 ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),     \
                                    _field1, __VA_ARGS__ ) )

Definition at line 190 of file pseudobit.h.

Referenced by linda_init_send(), linda_poll_recv_wq(), linda_post_recv(), linda_post_send(), qib7322_ahb_read(), qib7322_ahb_request(), qib7322_init_recv(), qib7322_poll_recv_wq(), and qib7322_post_recv().

#define BIT_FILL_3 (   _ptr,
  _field1,
  ... 
)
Value:
BIT_FILL ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),                      \
                   BIT_ASSEMBLE_3 ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),     \
                                    _field1, __VA_ARGS__ ) )

Definition at line 195 of file pseudobit.h.

Referenced by linda_ib_epb_read(), linda_init_recv(), qib7322_ahb_write(), qib7322_init_recv(), and qib7322_post_send().

#define BIT_FILL_4 (   _ptr,
  _field1,
  ... 
)
Value:
BIT_FILL ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),                      \
                   BIT_ASSEMBLE_4 ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),     \
                                    _field1, __VA_ARGS__ ) )

Definition at line 200 of file pseudobit.h.

Referenced by linda_ib_epb_write().

#define BIT_FILL_5 (   _ptr,
  _field1,
  ... 
)
Value:
BIT_FILL ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),                      \
                   BIT_ASSEMBLE_5 ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),     \
                                    _field1, __VA_ARGS__ ) )

Definition at line 205 of file pseudobit.h.

Referenced by qib7322_init_ib_serdes().

#define BIT_FILL_6 (   _ptr,
  _field1,
  ... 
)
Value:
BIT_FILL ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),                      \
                   BIT_ASSEMBLE_6 ( _ptr, QWORD_OFFSET ( _ptr, _field1 ),     \
                                    _field1, __VA_ARGS__ ) )

Definition at line 210 of file pseudobit.h.

Referenced by linda_init_ib_serdes(), and qib7322_init_recv().

#define BIT_QWORD_PTR (   _ptr,
  _field 
)
Value:
( {                                                                   \
                unsigned int __index = QWORD_OFFSET ( _ptr, _field );         \
                uint64_t *__ptr = &(_ptr)->u.qwords[__index];                 \
                __ptr;                                                        \
        } )

Definition at line 215 of file pseudobit.h.

#define BIT_GET64 (   _ptr,
  _field 
)
Value:
( {                                                                   \
                unsigned int __index = QWORD_OFFSET ( _ptr, _field );         \
                uint64_t *__ptr = &(_ptr)->u.qwords[__index];                 \
                uint64_t __value = BIT64_to_cpu ( *__ptr );                   \
                __value >>=                                                   \
                    QWORD_BIT_SHIFT ( _ptr, __index, _field );                \
                __value &= BIT_MASK ( _ptr, _field );                         \
                __value;                                                      \
        } )

Extract value of named field.

Definition at line 223 of file pseudobit.h.

#define BIT_GET (   _ptr,
  _field 
)    ( ( unsigned long ) BIT_GET64 ( _ptr, _field ) )
#define BIT_SET (   _ptr,
  _field,
  _value 
)
Value:
do {                                  \
                unsigned int __index = QWORD_OFFSET ( _ptr, _field );         \
                uint64_t *__ptr = &(_ptr)->u.qwords[__index];                 \
                unsigned int __shift =                                        \
                        QWORD_BIT_SHIFT ( _ptr, __index, _field );            \
                uint64_t __value = (_value);                                  \
                *__ptr &= cpu_to_BIT64 ( ~( BIT_MASK ( _ptr, _field ) <<      \
                                            __shift ) );                      \
                *__ptr |= cpu_to_BIT64 ( __value << __shift );                \
        } while ( 0 )

Definition at line 238 of file pseudobit.h.

Referenced by linda_close(), linda_create_recv_wq(), linda_destroy_recv_wq(), linda_i2c_write_bit(), linda_init_ib_serdes(), linda_link_state_changed(), linda_open(), linda_set_port_info(), linda_trim_ib(), qib7322_close(), qib7322_create_recv_wq(), qib7322_destroy_recv_wq(), qib7322_i2c_write_bit(), qib7322_init_ib_serdes(), qib7322_link_state_changed(), qib7322_open(), and qib7322_set_port_info().


Typedef Documentation

typedef unsigned char pseudo_bit_t

Datatype used to represent a bit in the pseudo-structures.

Definition at line 59 of file pseudobit.h.


Function Documentation

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )