xref: /openbmc/linux/include/linux/polynomial.h (revision cd705ea8)
1*cd705ea8SMichael Walle /* SPDX-License-Identifier: GPL-2.0-only */
2*cd705ea8SMichael Walle /*
3*cd705ea8SMichael Walle  * Copyright (C) 2020 BAIKAL ELECTRONICS, JSC
4*cd705ea8SMichael Walle  */
5*cd705ea8SMichael Walle 
6*cd705ea8SMichael Walle #ifndef _POLYNOMIAL_H
7*cd705ea8SMichael Walle #define _POLYNOMIAL_H
8*cd705ea8SMichael Walle 
9*cd705ea8SMichael Walle /*
10*cd705ea8SMichael Walle  * struct polynomial_term - one term descriptor of a polynomial
11*cd705ea8SMichael Walle  * @deg: degree of the term.
12*cd705ea8SMichael Walle  * @coef: multiplication factor of the term.
13*cd705ea8SMichael Walle  * @divider: distributed divider per each degree.
14*cd705ea8SMichael Walle  * @divider_leftover: divider leftover, which couldn't be redistributed.
15*cd705ea8SMichael Walle  */
16*cd705ea8SMichael Walle struct polynomial_term {
17*cd705ea8SMichael Walle 	unsigned int deg;
18*cd705ea8SMichael Walle 	long coef;
19*cd705ea8SMichael Walle 	long divider;
20*cd705ea8SMichael Walle 	long divider_leftover;
21*cd705ea8SMichael Walle };
22*cd705ea8SMichael Walle 
23*cd705ea8SMichael Walle /*
24*cd705ea8SMichael Walle  * struct polynomial - a polynomial descriptor
25*cd705ea8SMichael Walle  * @total_divider: total data divider.
26*cd705ea8SMichael Walle  * @terms: polynomial terms, last term must have degree of 0
27*cd705ea8SMichael Walle  */
28*cd705ea8SMichael Walle struct polynomial {
29*cd705ea8SMichael Walle 	long total_divider;
30*cd705ea8SMichael Walle 	struct polynomial_term terms[];
31*cd705ea8SMichael Walle };
32*cd705ea8SMichael Walle 
33*cd705ea8SMichael Walle long polynomial_calc(const struct polynomial *poly, long data);
34*cd705ea8SMichael Walle 
35*cd705ea8SMichael Walle #endif
36