1 #ifndef _LINUX_AVERAGE_H 2 #define _LINUX_AVERAGE_H 3 4 /* Exponentially weighted moving average (EWMA) */ 5 6 /* For more documentation see lib/average.c */ 7 8 struct ewma { 9 unsigned long internal; 10 unsigned long factor; 11 unsigned long weight; 12 }; 13 14 extern void ewma_init(struct ewma *avg, unsigned long factor, 15 unsigned long weight); 16 17 extern struct ewma *ewma_add(struct ewma *avg, unsigned long val); 18 19 /** 20 * ewma_read() - Get average value 21 * @avg: Average structure 22 * 23 * Returns the average value held in @avg. 24 */ ewma_read(const struct ewma * avg)25static inline unsigned long ewma_read(const struct ewma *avg) 26 { 27 return avg->internal >> avg->factor; 28 } 29 30 #endif /* _LINUX_AVERAGE_H */ 31