| /** | 
 |  * ============================================================================ | 
 |  * = COPYRIGHT | 
 |  *  | 
 |  * @par | 
 |  * IXP400 SW Release version 2.0 | 
 |  *  | 
 |  * -- Copyright Notice -- | 
 |  *  | 
 |  * @par | 
 |  * Copyright 2001-2005, Intel Corporation. | 
 |  * All rights reserved. | 
 |  *  | 
 |  * @par | 
 |  * Redistribution and use in source and binary forms, with or without | 
 |  * modification, are permitted provided that the following conditions | 
 |  * are met: | 
 |  * 1. Redistributions of source code must retain the above copyright | 
 |  *    notice, this list of conditions and the following disclaimer. | 
 |  * 2. Redistributions in binary form must reproduce the above copyright | 
 |  *    notice, this list of conditions and the following disclaimer in the | 
 |  *    documentation and/or other materials provided with the distribution. | 
 |  * 3. Neither the name of the Intel Corporation nor the names of its contributors | 
 |  *    may be used to endorse or promote products derived from this software | 
 |  *    without specific prior written permission. | 
 |  *  | 
 |  * @par | 
 |  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' | 
 |  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
 |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
 |  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE | 
 |  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
 |  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
 |  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
 |  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
 |  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
 |  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
 |  * SUCH DAMAGE. | 
 |  *  | 
 |  * @par | 
 |  * -- End of Copyright Notice -- | 
 |  * = PRODUCT | 
 |  *      Intel(r) IXP425 Software Release | 
 |  * | 
 |  * = FILENAME | 
 |  *      ix_macros.h | 
 |  * | 
 |  * = DESCRIPTION | 
 |  *      This file will define the basic preprocessor macros that are going to be used | 
 |  *      the IXA SDK Framework API. | 
 |  * | 
 |  * = AUTHOR | 
 |  *      Intel Corporation | 
 |  * | 
 |  * = CHANGE HISTORY | 
 |  *      4/22/2002 4:41:05 PM - creation time  | 
 |  * ============================================================================ | 
 |  */ | 
 |  | 
 | #if !defined(__IX_MACROS_H__) | 
 | #define __IX_MACROS_H__ | 
 |  | 
 |  | 
 | #if defined(__cplusplus) | 
 | extern "C" | 
 | { | 
 | #endif /* end defined(__cplusplus) */ | 
 |  | 
 |  | 
 | /** | 
 |  * MACRO NAME: IX_BIT_FIELD_MASK16 | 
 |  * | 
 |  * DESCRIPTION: Builds the mask required to extract the bit field from a 16 bit unsigned integer value. | 
 |  * | 
 |  * @Param:  - IN arg_FieldLSBBit an unsigned integer value representing the position of the least significant | 
 |  *          bit of the bit field. | 
 |  * @Param:  - IN arg_FieldMSBBit an unsigned integer value representing the position of the most significant | 
 |  *          bit of the bit field. | 
 |  * | 
 |  * @Return: Returns a 16 bit mask that will extract the bit field from a 16 bit unsigned integer value. | 
 |  */ | 
 | #define IX_BIT_FIELD_MASK16( \ | 
 |                              arg_FieldLSBBit, \ | 
 |                              arg_FieldMSBBit \ | 
 |                             ) \ | 
 |                             ((ix_bit_mask16)((((ix_uint16)1 << (arg_FieldMSBBit + 1 - arg_FieldLSBBit)) - \ | 
 |                             (ix_uint16)1) << arg_FieldLSBBit)) | 
 |  | 
 |  | 
 |  | 
 | /** | 
 |  * MACRO NAME: IX_GET_BIT_FIELD16 | 
 |  * | 
 |  * DESCRIPTION: Extracts a bit field from 16 bit unsigned integer. The returned value is normalized in | 
 |  *          in the sense that will be right aligned. | 
 |  * | 
 |  * @Param:  - IN arg_PackedData16 a 16 bit unsigned integer that contains the bit field of interest. | 
 |  * @Param:  - IN arg_FieldLSBBit an unsigned integer value representing the position of the least significant | 
 |  *          bit of the bit field. | 
 |  * @Param:  - IN arg_FieldMSBBit an unsigned integer value representing the position of the most significant | 
 |  *          bit of the bit field. | 
 |  * | 
 |  * @Return: Returns the value of the bit field. The value can be from 0 to (1 << (arg_FieldMSBBit + 1 - | 
 |  *          arg_FieldLSBBit)) - 1. | 
 |  */ | 
 | #define IX_GET_BIT_FIELD16( \ | 
 |                             arg_PackedData16, \ | 
 |                             arg_FieldLSBBit, \ | 
 |                             arg_FieldMSBBit \ | 
 |                           ) \ | 
 |                           (((ix_uint16)(arg_PackedData16) & IX_BIT_FIELD_MASK16(arg_FieldLSBBit, arg_FieldMSBBit)) >> \ | 
 |                              arg_FieldLSBBit) | 
 |  | 
 |  | 
 | /** | 
 |  * MACRO NAME: IX_MAKE_BIT_FIELD16 | 
 |  * | 
 |  * DESCRIPTION: This macro will create a temporary 16 bit value with the bit field | 
 |  *          desired set to the desired value. | 
 |  * | 
 |  * @Param:  - IN arg_BitFieldValue is the new value of the bit field. The value can be from 0 to  | 
 |  *          (1 << (arg_FieldMSBBit + 1 - arg_FieldLSBBit)) - 1. | 
 |  * @Param:  - IN arg_FieldLSBBit an unsigned integer value representing the position of the least significant | 
 |  *          bit of the bit field. | 
 |  * @Param:  - IN arg_FieldMSBBit an unsigned integer value representing the position of the most significant | 
 |  *          bit of the bit field. | 
 |  *  | 
 |  * @Return: Returns a temporary ix_uint16 value that has the bit field set to the appropriate value. | 
 |  */ | 
 | #define IX_MAKE_BIT_FIELD16( \ | 
 |                              arg_BitFieldValue, \ | 
 |                              arg_FieldLSBBit, \ | 
 |                              arg_FieldMSBBit \ | 
 |                            ) \ | 
 |                            (((ix_uint16)(arg_BitFieldValue) << arg_FieldLSBBit) & \ | 
 |                            IX_BIT_FIELD_MASK16(arg_FieldLSBBit, arg_FieldMSBBit)) | 
 |                                   | 
 | /** | 
 |  * MACRO NAME: IX_SET_BIT_FIELD16 | 
 |  * | 
 |  * DESCRIPTION: Sets a new value for a bit field from a 16 bit unsigned integer. | 
 |  * | 
 |  * @Param:  - IN arg_PackedData16 a 16 bit unsigned integer that contains the bit field of interest. | 
 |  * @Param:  - IN arg_BitFieldValue is the new vale of the bit field. The value can be from 0 to  | 
 |  *          (1 << (arg_FieldMSBBit + 1 - arg_FieldLSBBit)) - 1. | 
 |  * @Param:  - IN arg_FieldLSBBit an unsigned integer value representing the position of the least significant | 
 |  *          bit of the bit field. | 
 |  * @Param:  - IN arg_FieldMSBBit an unsigned integer value representing the position of the most significant | 
 |  *          bit of the bit field. | 
 |  * | 
 |  * @Return: Returns the updated value of arg_PackedData16. | 
 |  */ | 
 | #define IX_SET_BIT_FIELD16( \ | 
 |                             arg_PackedData16, \ | 
 |                             arg_BitFieldValue, \ | 
 |                             arg_FieldLSBBit, \ | 
 |                             arg_FieldMSBBit \ | 
 |                           ) \ | 
 |                           (arg_PackedData16 = (((ix_uint16)(arg_PackedData16) & \ | 
 |                           ~(IX_BIT_FIELD_MASK16(arg_FieldLSBBit, arg_FieldMSBBit))) | \ | 
 |                           IX_MAKE_BIT_FIELD16(arg_BitFieldValue, arg_FieldLSBBit, arg_FieldMSBBit)))  | 
 |  | 
 |  | 
 | /** | 
 |  * MACRO NAME: IX_BIT_FIELD_MASK32 | 
 |  * | 
 |  * DESCRIPTION: Builds the mask required to extract the bit field from a 32 bit unsigned integer value. | 
 |  * | 
 |  * @Param:  - IN arg_FieldLSBBit an unsigned integer value representing the position of the least significant | 
 |  *          bit of the bit field. | 
 |  * @Param:  - IN arg_FieldMSBBit an unsigned integer value representing the position of the most significant | 
 |  *          bit of the bit field. | 
 |  * | 
 |  * @Return: Returns a 32 bit mask that will extract the bit field from a 32 bit unsigned integer value. | 
 |  */ | 
 | #define IX_BIT_FIELD_MASK32( \ | 
 |                              arg_FieldLSBBit, \ | 
 |                              arg_FieldMSBBit \ | 
 |                            ) \ | 
 |                            ((ix_bit_mask32)((((ix_uint32)1 << (arg_FieldMSBBit + 1 - arg_FieldLSBBit)) - \ | 
 |                            (ix_uint32)1) << arg_FieldLSBBit)) | 
 |  | 
 |  | 
 |  | 
 | /** | 
 |  * MACRO NAME: IX_GET_BIT_FIELD32 | 
 |  * | 
 |  * DESCRIPTION: Extracts a bit field from 32 bit unsigned integer. The returned value is normalized in | 
 |  *          in the sense that will be right aligned. | 
 |  * | 
 |  * @Param:  - IN arg_PackedData32 a 32 bit unsigned integer that contains the bit field of interest. | 
 |  * @Param:  - IN arg_FieldLSBBit an unsigned integer value representing the position of the least significant | 
 |  *          bit of the bit field. | 
 |  * @Param:  - IN arg_FieldMSBBit an unsigned integer value representing the position of the most significant | 
 |  *          bit of the bit field. | 
 |  * | 
 |  * @Return: Returns the value of the bit field. The value can be from 0 to (1 << (arg_FieldMSBBit + 1 - | 
 |  *          arg_FieldLSBBit)) - 1. | 
 |  */ | 
 | #define IX_GET_BIT_FIELD32( \ | 
 |                             arg_PackedData32, \ | 
 |                             arg_FieldLSBBit, \ | 
 |                             arg_FieldMSBBit \ | 
 |                           ) \ | 
 |                           (((ix_uint32)(arg_PackedData32) & IX_BIT_FIELD_MASK32(arg_FieldLSBBit, arg_FieldMSBBit)) >> \ | 
 |                              arg_FieldLSBBit) | 
 |  | 
 |  | 
 |  | 
 |  | 
 | /** | 
 |  * MACRO NAME: IX_MAKE_BIT_FIELD32 | 
 |  * | 
 |  * DESCRIPTION: This macro will create a temporary 32 bit value with the bit field | 
 |  *          desired set to the desired value. | 
 |  * | 
 |  * @Param:  - IN arg_BitFieldValue is the new value of the bit field. The value can be from 0 to  | 
 |  *          (1 << (arg_FieldMSBBit + 1 - arg_FieldLSBBit)) - 1. | 
 |  * @Param:  - IN arg_FieldLSBBit an unsigned integer value representing the position of the least significant | 
 |  *          bit of the bit field. | 
 |  * @Param:  - IN arg_FieldMSBBit an unsigned integer value representing the position of the most significant | 
 |  *          bit of the bit field. | 
 |  *  | 
 |  * @Return: Returns a temporary ix_uint32 value that has the bit field set to the appropriate value. | 
 |  */ | 
 | #define IX_MAKE_BIT_FIELD32( \ | 
 |                              arg_BitFieldValue, \ | 
 |                              arg_FieldLSBBit, \ | 
 |                              arg_FieldMSBBit \ | 
 |                            ) \ | 
 |                            (((ix_uint32)(arg_BitFieldValue) << arg_FieldLSBBit) & \ | 
 |                            IX_BIT_FIELD_MASK32(arg_FieldLSBBit, arg_FieldMSBBit)) | 
 |                              | 
 |                                  | 
 | /** | 
 |  * MACRO NAME: IX_SET_BIT_FIELD32 | 
 |  * | 
 |  * DESCRIPTION: Sets a new value for a bit field from a 32 bit unsigned integer. | 
 |  * | 
 |  * @Param:  - IN arg_PackedData32 a 32 bit unsigned integer that contains the bit field of interest. | 
 |  * @Param:  - IN arg_BitFieldValue is the new value of the bit field. The value can be from 0 to  | 
 |  *          (1 << (arg_FieldMSBBit + 1 - arg_FieldLSBBit)) - 1. | 
 |  * @Param:  - IN arg_FieldLSBBit an unsigned integer value representing the position of the least significant | 
 |  *          bit of the bit field. | 
 |  * @Param:  - IN arg_FieldMSBBit an unsigned integer value representing the position of the most significant | 
 |  *          bit of the bit field. | 
 |  * | 
 |  * @Return: Returns the updated value of arg_PackedData32. | 
 |  */ | 
 | #define IX_SET_BIT_FIELD32( \ | 
 |                             arg_PackedData32, \ | 
 |                             arg_BitFieldValue, \ | 
 |                             arg_FieldLSBBit, \ | 
 |                             arg_FieldMSBBit \ | 
 |                           ) \ | 
 |                           (arg_PackedData32 = (((ix_uint32)(arg_PackedData32) & \ | 
 |                           ~(IX_BIT_FIELD_MASK32(arg_FieldLSBBit, arg_FieldMSBBit))) | \ | 
 |                           IX_MAKE_BIT_FIELD32(arg_BitFieldValue, arg_FieldLSBBit, arg_FieldMSBBit)))  | 
 |  | 
 |  | 
 |  | 
 | #if defined(__cplusplus) | 
 | } | 
 | #endif /* end defined(__cplusplus) */ | 
 |  | 
 | #endif /* end !defined(__IX_MACROS_H__) */ |