home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-arm / arch-pxa / bitfield.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.8 KB  |  114 lines

  1. /*
  2.  *    FILE        bitfield.h
  3.  *
  4.  *    Version     1.1
  5.  *    Author      Copyright (c) Marc A. Viredaz, 1998
  6.  *                DEC Western Research Laboratory, Palo Alto, CA
  7.  *    Date        April 1998 (April 1997)
  8.  *    System      Advanced RISC Machine (ARM)
  9.  *    Language    C or ARM Assembly
  10.  *    Purpose     Definition of macros to operate on bit fields.
  11.  */
  12.  
  13.  
  14.  
  15. #ifndef __BITFIELD_H
  16. #define __BITFIELD_H
  17.  
  18. #ifndef __ASSEMBLY__
  19. #define UData(Data)    ((unsigned long) (Data))
  20. #else
  21. #define UData(Data)    (Data)
  22. #endif
  23.  
  24.  
  25. /*
  26.  * MACRO: Fld
  27.  *
  28.  * Purpose
  29.  *    The macro "Fld" encodes a bit field, given its size and its shift value
  30.  *    with respect to bit 0.
  31.  *
  32.  * Note
  33.  *    A more intuitive way to encode bit fields would have been to use their
  34.  *    mask. However, extracting size and shift value information from a bit
  35.  *    field's mask is cumbersome and might break the assembler (255-character
  36.  *    line-size limit).
  37.  *
  38.  * Input
  39.  *    Size          Size of the bit field, in number of bits.
  40.  *    Shft          Shift value of the bit field with respect to bit 0.
  41.  *
  42.  * Output
  43.  *    Fld           Encoded bit field.
  44.  */
  45.  
  46. #define Fld(Size, Shft)    (((Size) << 16) + (Shft))
  47.  
  48.  
  49. /*
  50.  * MACROS: FSize, FShft, FMsk, FAlnMsk, F1stBit
  51.  *
  52.  * Purpose
  53.  *    The macros "FSize", "FShft", "FMsk", "FAlnMsk", and "F1stBit" return
  54.  *    the size, shift value, mask, aligned mask, and first bit of a
  55.  *    bit field.
  56.  *
  57.  * Input
  58.  *    Field         Encoded bit field (using the macro "Fld").
  59.  *
  60.  * Output
  61.  *    FSize         Size of the bit field, in number of bits.
  62.  *    FShft         Shift value of the bit field with respect to bit 0.
  63.  *    FMsk          Mask for the bit field.
  64.  *    FAlnMsk       Mask for the bit field, aligned on bit 0.
  65.  *    F1stBit       First bit of the bit field.
  66.  */
  67.  
  68. #define FSize(Field)    ((Field) >> 16)
  69. #define FShft(Field)    ((Field) & 0x0000FFFF)
  70. #define FMsk(Field)    (((UData (1) << FSize (Field)) - 1) << FShft (Field))
  71. #define FAlnMsk(Field)    ((UData (1) << FSize (Field)) - 1)
  72. #define F1stBit(Field)    (UData (1) << FShft (Field))
  73.  
  74.  
  75. /*
  76.  * MACRO: FInsrt
  77.  *
  78.  * Purpose
  79.  *    The macro "FInsrt" inserts a value into a bit field by shifting the
  80.  *    former appropriately.
  81.  *
  82.  * Input
  83.  *    Value         Bit-field value.
  84.  *    Field         Encoded bit field (using the macro "Fld").
  85.  *
  86.  * Output
  87.  *    FInsrt        Bit-field value positioned appropriately.
  88.  */
  89.  
  90. #define FInsrt(Value, Field) \
  91.                     (UData (Value) << FShft (Field))
  92.  
  93.  
  94. /*
  95.  * MACRO: FExtr
  96.  *
  97.  * Purpose
  98.  *    The macro "FExtr" extracts the value of a bit field by masking and
  99.  *    shifting it appropriately.
  100.  *
  101.  * Input
  102.  *    Data          Data containing the bit-field to be extracted.
  103.  *    Field         Encoded bit field (using the macro "Fld").
  104.  *
  105.  * Output
  106.  *    FExtr         Bit-field value.
  107.  */
  108.  
  109. #define FExtr(Data, Field) \
  110.                     ((UData (Data) >> FShft (Field)) & FAlnMsk (Field))
  111.  
  112.  
  113. #endif /* __BITFIELD_H */
  114.