/*
 * Support for Intel Camera Imaging ISP subsystem.
 * Copyright (c) 2015, Intel Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 */

#ifndef _HRT_BITS_H
#define _HRT_BITS_H

#include "defs.h"

#define _hrt_ones(n) HRTCAT(_hrt_ones_, n)
#define _hrt_ones_0x0  0x00000000U
#define _hrt_ones_0x1  0x00000001U
#define _hrt_ones_0x2  0x00000003U
#define _hrt_ones_0x3  0x00000007U
#define _hrt_ones_0x4  0x0000000FU
#define _hrt_ones_0x5  0x0000001FU
#define _hrt_ones_0x6  0x0000003FU
#define _hrt_ones_0x7  0x0000007FU
#define _hrt_ones_0x8  0x000000FFU
#define _hrt_ones_0x9  0x000001FFU
#define _hrt_ones_0xA  0x000003FFU
#define _hrt_ones_0xB  0x000007FFU
#define _hrt_ones_0xC  0x00000FFFU
#define _hrt_ones_0xD  0x00001FFFU
#define _hrt_ones_0xE  0x00003FFFU
#define _hrt_ones_0xF  0x00007FFFU
#define _hrt_ones_0x10 0x0000FFFFU
#define _hrt_ones_0x11 0x0001FFFFU
#define _hrt_ones_0x12 0x0003FFFFU
#define _hrt_ones_0x13 0x0007FFFFU
#define _hrt_ones_0x14 0x000FFFFFU
#define _hrt_ones_0x15 0x001FFFFFU
#define _hrt_ones_0x16 0x003FFFFFU
#define _hrt_ones_0x17 0x007FFFFFU
#define _hrt_ones_0x18 0x00FFFFFFU
#define _hrt_ones_0x19 0x01FFFFFFU
#define _hrt_ones_0x1A 0x03FFFFFFU
#define _hrt_ones_0x1B 0x07FFFFFFU
#define _hrt_ones_0x1C 0x0FFFFFFFU
#define _hrt_ones_0x1D 0x1FFFFFFFU
#define _hrt_ones_0x1E 0x3FFFFFFFU
#define _hrt_ones_0x1F 0x7FFFFFFFU
#define _hrt_ones_0x20 0xFFFFFFFFU

#define _hrt_ones_0  _hrt_ones_0x0
#define _hrt_ones_1  _hrt_ones_0x1
#define _hrt_ones_2  _hrt_ones_0x2
#define _hrt_ones_3  _hrt_ones_0x3
#define _hrt_ones_4  _hrt_ones_0x4
#define _hrt_ones_5  _hrt_ones_0x5
#define _hrt_ones_6  _hrt_ones_0x6
#define _hrt_ones_7  _hrt_ones_0x7
#define _hrt_ones_8  _hrt_ones_0x8
#define _hrt_ones_9  _hrt_ones_0x9
#define _hrt_ones_10 _hrt_ones_0xA
#define _hrt_ones_11 _hrt_ones_0xB
#define _hrt_ones_12 _hrt_ones_0xC
#define _hrt_ones_13 _hrt_ones_0xD
#define _hrt_ones_14 _hrt_ones_0xE
#define _hrt_ones_15 _hrt_ones_0xF
#define _hrt_ones_16 _hrt_ones_0x10
#define _hrt_ones_17 _hrt_ones_0x11
#define _hrt_ones_18 _hrt_ones_0x12
#define _hrt_ones_19 _hrt_ones_0x13
#define _hrt_ones_20 _hrt_ones_0x14
#define _hrt_ones_21 _hrt_ones_0x15
#define _hrt_ones_22 _hrt_ones_0x16
#define _hrt_ones_23 _hrt_ones_0x17
#define _hrt_ones_24 _hrt_ones_0x18
#define _hrt_ones_25 _hrt_ones_0x19
#define _hrt_ones_26 _hrt_ones_0x1A
#define _hrt_ones_27 _hrt_ones_0x1B
#define _hrt_ones_28 _hrt_ones_0x1C
#define _hrt_ones_29 _hrt_ones_0x1D
#define _hrt_ones_30 _hrt_ones_0x1E
#define _hrt_ones_31 _hrt_ones_0x1F
#define _hrt_ones_32 _hrt_ones_0x20

#define _hrt_mask(b, n) \
  (_hrt_ones(n) << (b))
#define _hrt_get_bits(w, b, n) \
  (((w) >> (b)) & _hrt_ones(n))
#define _hrt_set_bits(w, b, n, v) \
  (((w) & ~_hrt_mask(b, n)) | (((v) & _hrt_ones(n)) << (b)))
#define _hrt_get_bit(w, b) \
  (((w) >> (b)) & 1)
#define _hrt_set_bit(w, b, v) \
  (((w) & (~(1 << (b)))) | (((v)&1) << (b)))
#define _hrt_set_lower_half(w, v) \
  _hrt_set_bits(w, 0, 16, v)
#define _hrt_set_upper_half(w, v) \
  _hrt_set_bits(w, 16, 16, v)

#endif /* _HRT_BITS_H */
