#include "plat.h" #include "bitutils.h" /* * Bit Helpers */ /* Bit operations routines */ #define GET_BIT_ROUTINE(bit) \ static inline uint## bit ##_t _get_bit## bit(uint32_t offset, uint32_t bit_position, uint32_t bit_mask) \ { \ return (READ_U## bit(offset) >> bit_position) & bit_mask; \ } #define SET_BIT_ROUTINE(bit) \ static inline void _set_bit## bit(uint32_t offset, uint32_t bit_position, uint32_t bit_mask, uint## bit ##_t value) \ { \ WRITE_U## bit(offset, (READ_U## bit(offset) & ~(bit_mask << bit_position)) | ((value & bit_mask) << bit_position)); \ } /* Bit operations functions */ #define GET_BIT_FUNC(bit) \ uint## bit ##_t GET_BIT## bit(uint32_t offset, const bitmask bitmask) \ { \ return _get_bit## bit(offset, bitmask.bit_pos, bitmask.bit_mask); \ } #define SET_BIT_FUNC(bit) \ void SET_BIT## bit(uint32_t offset, const bitmask bitmask, uint## bit ##_t value) \ { \ _set_bit## bit(offset, bitmask.bit_pos, bitmask.bit_mask, value); \ } /* 32 */ GET_BIT_ROUTINE(32) SET_BIT_ROUTINE(32) GET_BIT_FUNC(32) SET_BIT_FUNC(32) /* 16 */ GET_BIT_ROUTINE(16) SET_BIT_ROUTINE(16) GET_BIT_FUNC(16) SET_BIT_FUNC(16) /* 8 */ GET_BIT_ROUTINE(8) SET_BIT_ROUTINE(8) GET_BIT_FUNC(8) SET_BIT_FUNC(8)