Lines Matching full:dim
191 static inline bool net_dim_on_top(struct net_dim *dim) in net_dim_on_top() argument
193 switch (dim->tune_state) { in net_dim_on_top()
198 return (dim->steps_left > 1) && (dim->steps_right == 1); in net_dim_on_top()
200 return (dim->steps_right > 1) && (dim->steps_left == 1); in net_dim_on_top()
204 static inline void net_dim_turn(struct net_dim *dim) in net_dim_turn() argument
206 switch (dim->tune_state) { in net_dim_turn()
211 dim->tune_state = NET_DIM_GOING_LEFT; in net_dim_turn()
212 dim->steps_left = 0; in net_dim_turn()
215 dim->tune_state = NET_DIM_GOING_RIGHT; in net_dim_turn()
216 dim->steps_right = 0; in net_dim_turn()
221 static inline int net_dim_step(struct net_dim *dim) in net_dim_step() argument
223 if (dim->tired == (NET_DIM_PARAMS_NUM_PROFILES * 2)) in net_dim_step()
226 switch (dim->tune_state) { in net_dim_step()
231 if (dim->profile_ix == (NET_DIM_PARAMS_NUM_PROFILES - 1)) in net_dim_step()
233 dim->profile_ix++; in net_dim_step()
234 dim->steps_right++; in net_dim_step()
237 if (dim->profile_ix == 0) in net_dim_step()
239 dim->profile_ix--; in net_dim_step()
240 dim->steps_left++; in net_dim_step()
244 dim->tired++; in net_dim_step()
248 static inline void net_dim_park_on_top(struct net_dim *dim) in net_dim_park_on_top() argument
250 dim->steps_right = 0; in net_dim_park_on_top()
251 dim->steps_left = 0; in net_dim_park_on_top()
252 dim->tired = 0; in net_dim_park_on_top()
253 dim->tune_state = NET_DIM_PARKING_ON_TOP; in net_dim_park_on_top()
256 static inline void net_dim_park_tired(struct net_dim *dim) in net_dim_park_tired() argument
258 dim->steps_right = 0; in net_dim_park_tired()
259 dim->steps_left = 0; in net_dim_park_tired()
260 dim->tune_state = NET_DIM_PARKING_TIRED; in net_dim_park_tired()
263 static inline void net_dim_exit_parking(struct net_dim *dim) in net_dim_exit_parking() argument
265 dim->tune_state = dim->profile_ix ? NET_DIM_GOING_LEFT : in net_dim_exit_parking()
267 net_dim_step(dim); in net_dim_exit_parking()
303 struct net_dim *dim) in net_dim_decision() argument
305 int prev_state = dim->tune_state; in net_dim_decision()
306 int prev_ix = dim->profile_ix; in net_dim_decision()
310 switch (dim->tune_state) { in net_dim_decision()
312 stats_res = net_dim_stats_compare(curr_stats, &dim->prev_stats); in net_dim_decision()
314 net_dim_exit_parking(dim); in net_dim_decision()
318 dim->tired--; in net_dim_decision()
319 if (!dim->tired) in net_dim_decision()
320 net_dim_exit_parking(dim); in net_dim_decision()
325 stats_res = net_dim_stats_compare(curr_stats, &dim->prev_stats); in net_dim_decision()
327 net_dim_turn(dim); in net_dim_decision()
329 if (net_dim_on_top(dim)) { in net_dim_decision()
330 net_dim_park_on_top(dim); in net_dim_decision()
334 step_res = net_dim_step(dim); in net_dim_decision()
337 net_dim_park_on_top(dim); in net_dim_decision()
340 net_dim_park_tired(dim); in net_dim_decision()
348 (dim->tune_state != NET_DIM_PARKING_ON_TOP)) in net_dim_decision()
349 dim->prev_stats = *curr_stats; in net_dim_decision()
351 return dim->profile_ix != prev_ix; in net_dim_decision()
387 static inline void net_dim(struct net_dim *dim, in net_dim() argument
393 switch (dim->state) { in net_dim()
397 dim->start_sample.event_ctr); in net_dim()
400 net_dim_calc_stats(&dim->start_sample, &end_sample, in net_dim()
402 if (net_dim_decision(&curr_stats, dim)) { in net_dim()
403 dim->state = NET_DIM_APPLY_NEW_PROFILE; in net_dim()
404 schedule_work(&dim->work); in net_dim()
410 &dim->start_sample); in net_dim()
411 dim->state = NET_DIM_MEASURE_IN_PROGRESS; in net_dim()