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