hc
2024-08-16 62c46c9150c4afde7e5b25436263fddf79d66f0b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/******************************************************************************
 *
 * Copyright(c) 2007 - 2020  Realtek Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that 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.
 *
 * The full GNU General Public License is included in this distribution in the
 * file called LICENSE.
 *
 * Contact Information:
 * wlanfae <wlanfae@realtek.com>
 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
 * Hsinchu 300, Taiwan.
 *
 * Larry Finger <Larry.Finger@lwfinger.net>
 *
 *****************************************************************************/
#ifndef __HALBB_MATH_LIB_H__
#define __HALBB_MATH_LIB_H__
 
/*@--------------------------[Define] ---------------------------------------*/
#define    MASKBYTE0        0xff
#define    MASKBYTE1        0xff00
#define    MASKBYTE2        0xff0000
#define    MASKBYTE3        0xff000000
#define    MASKHWORD        0xffff0000
#define    MASKLWORD        0x0000ffff
#define    MASKDWORD        0xffffffff
#define RFREGOFFSETMASK        0xfffff
 
#define KB_2_MB(val) ((val) >> 10)
 
#define MAX_2(_x_, _y_)    (((_x_) > (_y_)) ? (_x_) : (_y_))
#define MIN_2(_x_, _y_)    (((_x_) < (_y_)) ? (_x_) : (_y_))
#define DIFF_2(_x_, _y_)    (((_x_) >= (_y_)) ? ((_x_) - (_y_)) : ((_y_) - (_x_)))
#define SUBTRACT_TO_0(_x_, _y_)    (((_x_) >= (_y_)) ? ((_x_) - (_y_)) : 0)
 
#define IS_GREATER(_x_, _y_)    (((_x_) >= (_y_)) ? true : false)
#define IS_LESS(_x_, _y_)    (((_x_) < (_y_)) ? true : false)
#define NOT_GREATER(_x_, _y_) (((_x_) > (_y_)) ? (_y_) : (_x_))
 
 
#define BYTE_DUPLICATE_2_DWORD(B0)    \
   (((B0) << 24) | ((B0) << 16) | ((B0) << 8) | (B0))
 
#define BYTE_2_DWORD(B3, B2, B1, B0)    \
   (((B3) << 24) | ((B2) << 16) | ((B1) << 8) | (B0))
#define BYTE_2_WORD(B1, B0)    \
   (((B1) << 8) | (B0))
#define BIT_2_BYTE(B3, B2, B1, B0)    \
   (((B3) << 3) | ((B2) << 2) | ((B1) << 1) | (B0))
 
#define NIBBLE_2_WORD(B3, B2, B1, B0)    \
   ((((B3) & 0xf) << 12) | (((B2) & 0xf) << 8) |\
   (((B1) & 0xf) << 4) | ((B0) & 0xf))
 
#define NIBBLE_2_DWORD(B7, B6, B5, B4, B3, B2, B1, B0)    \
   ((((B7) & 0xf) << 28) | (((B6) & 0xf) << 24) | \
   (((B5) & 0xf) << 20) | (((B4) & 0xf) << 16) | \
   (((B3) & 0xf) << 12) | (((B2) & 0xf) << 8) | \
   (((B1) & 0xf) << 4) | ((B0) & 0xf))
 
#if PLATFOM_IS_LITTLE_ENDIAN
#define SWAP4BYTE(x) ((u32)(x))
#else
#define SWAP4BYTE(x)                                       \
       ((u32)((((u32)(x) & (u32)0x000000ff) << 24) |  \
              (((u32)(x) & (u32)0x0000ff00) << 8) |     \
              (((u32)(x) & (u32)0x00ff0000) >> 8) |     \
              (((u32)(x) & (u32)0xff000000) >> 24)))
#endif
 
#define HALBB_DIV(a, b) ((b) ? ((a) / (b)) : 0)
#define HALBB_CEIL(a, b) ((b) ? ((a) / (b) + (a > (a / b) * b)) : 0)
#define ABS_32(X) (((X) & BIT(31)) ? (0 - (X)) : (X))
#define ABS_16(X) (((X) & BIT(15)) ? (0 - (X)) : (X))
#define ABS_8(X) (((X) & BIT(7)) ? (0 - (X)) : (X))
#define DIVIDED_2(X) ((X) >> 1)
#define DIVIDED_3(X) (((X) + ((X) << 1) + ((X) << 3)) >> 5)
#define DIVIDED_4(X) ((X) >> 2)
 
 
#define WEIGHTING_AVG_2(v1, w1, v2, w2) \
   (((v1) * (w1) + (v2) * (w2)) / ((w2) + (w1)))
#define MA_ACC(old, new_val, ma, ma_max) ((old) - ((old << (ma_max - ma)) >> (ma_max)) + (new_val << (ma_max - ma)))
#define GET_MA_VAL(val, ma) (((val) + (1 << ((ma) - 1))) >> (ma))
 
#define FRAC_BITS 3
 
 
/*@--------------------------[Enum]------------------------------------------*/
 
/*@--------------------------[Structure]-------------------------------------*/
 
/*@--------------------------[Prptotype]-------------------------------------*/
struct bb_info;
s32 halbb_pwdb_conversion(s32 X, u32 total_bit, u32 decimal_bit);
s32 halbb_sign_conversion(s32 val, u32 total_bit);
u8 halbb_find_intrvl(struct bb_info *bb, u16 val, u8 *threshold, u8 len);
void halbb_seq_sorting(struct bb_info *bb, u32 *val, u32 *idx, u32 *idx_out,
              u8 seq_length);
u16 halbb_show_fraction_num(u32 frac_val, u8 bit_num);
u16 halbb_ones_num_in_bitmap(u64 val, u8 size);
u64 halbb_gen_mask_from_0(u8 mask_num);
u64 halbb_gen_mask(u8 up_num, u8 low_num);
u32 halbb_cal_bit_shift(u32 bit_mask);
s32 halbb_cnvrt_2_sign(u32 val, u8 bit_num);
s64 halbb_cnvrt_2_sign_64(u64 val, u8 bit_num);
void halbb_print_sign_frac_digit(struct bb_info *bb, u32 val, u8 total_bit_num,
                u8 frac_bit_num, char *buf, u16 buf_size);
char *halbb_print_sign_frac_digit2(struct bb_info *bb, u32 val, u8 total_bit_num,
                u8 frac_bit_num);
void halbb_print_buff_64(struct bb_info *bb, u8 *addr, u16 length);
void halbb_print_buff_32(struct bb_info *bb, u8 *addr, u16 length);
#endif