00001 #ifndef __RSD_H__ 00002 #define __RSD_H__ 00003 00004 #include <linux/aquosa/qmgr_base.h> 00005 #include <linux/aquosa/qos_queue.h> 00006 #include <linux/aquosa/qos_l.h> 00007 00018 typedef long int fir_coeff_t; 00019 00021 #define FIR_COEFF_BITS 16 00022 00024 #define FIR_COEFF_ONE (1 << (FIR_COEFF_BITS)) 00025 00026 typedef struct { 00027 fir_coeff_t *sum_prods; 00028 fir_coeff_t sum_prod; 00029 } rsd_partial_t; 00030 00031 static inline fir_coeff_t fir_coeff_mul(fir_coeff_t x, fir_coeff_t y) { 00032 return l_mul_shr(x, y, FIR_COEFF_BITS); 00033 } 00034 00035 static inline fir_coeff_t fir_coeff_div(fir_coeff_t x, fir_coeff_t y) { 00036 return l_shl_div(x, FIR_COEFF_BITS, y); 00037 } 00038 00040 typedef struct rsd_params_struct { 00041 qmgr_pred_params_t base; 00042 int sample_size; 00043 int fir_size; 00044 fir_coeff_t mu; 00045 } rsd_params_t; 00046 00048 typedef struct rsd_struct { 00049 qmgr_pred_t base; 00050 qos_queue_t queue; 00051 int sample_size; 00052 int fir_size; 00053 fir_coeff_t *fir; 00054 fir_coeff_t *dfir; 00055 fir_coeff_t mu2; 00056 rsd_partial_t *partials; 00057 fir_coeff_t norm2; 00058 } rsd_t; 00059 00061 qos_rv rsd_register(void); 00062 00070 qos_rv rsd_init(void *self, void *params); 00071 00073 qos_rv rsd_final(qmgr_pred_t *self); 00074 00082 qos_rv rsd_add_sample(qmgr_pred_t *pred, qres_time_t new_sample); 00083 00084 qres_time_t rsd_get_exp_value(qmgr_pred_t *pred); 00085 00088 #endif