blob: b4cf7602ae67fd426ff5577714170e3dc8de2a89 [file] [log] [blame]
/**
* ============================================================================
* = COPYRIGHT
*
* @par
* IXP400 SW Release version 2.0
*
* -- Copyright Notice --
*
* @par
* Copyright 2001-2005, Intel Corporation.
* All rights reserved.
*
* @par
* SPDX-License-Identifier: BSD-3-Clause
* @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__) */