win_minmax.h 832 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /**
  3. * lib/minmax.c: windowed min/max tracker by Kathleen Nichols.
  4. *
  5. */
  6. #ifndef MINMAX_H
  7. #define MINMAX_H
  8. #include <linux/types.h>
  9. /* A single data point for our parameterized min-max tracker */
  10. struct minmax_sample {
  11. u32 t; /* time measurement was taken */
  12. u32 v; /* value measured */
  13. };
  14. /* State for the parameterized min-max tracker */
  15. struct minmax {
  16. struct minmax_sample s[3];
  17. };
  18. static inline u32 minmax_get(const struct minmax *m)
  19. {
  20. return m->s[0].v;
  21. }
  22. static inline u32 minmax_reset(struct minmax *m, u32 t, u32 meas)
  23. {
  24. struct minmax_sample val = { .t = t, .v = meas };
  25. m->s[2] = m->s[1] = m->s[0] = val;
  26. return m->s[0].v;
  27. }
  28. u32 minmax_running_max(struct minmax *m, u32 win, u32 t, u32 meas);
  29. u32 minmax_running_min(struct minmax *m, u32 win, u32 t, u32 meas);
  30. #endif