net: Move && and || to end of previous line
[safe/jmp/linux-2.6] / net / mac80211 / rc80211_pid.h
index 425eb70..1a873f0 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright 2007, Mattias Nissler <mattias.nissler@gmx.de>
+ * Copyright 2007, Stefano Brivio <stefano.brivio@polimi.it>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
 #ifndef RC80211_PID_H
 #define RC80211_PID_H
 
-/* Sampling period for measuring percentage of failed frames. */
-#define RC_PID_INTERVAL (HZ / 8)
+/* Sampling period for measuring percentage of failed frames in ms. */
+#define RC_PID_INTERVAL                        125
 
 /* Exponential averaging smoothness (used for I part of PID controller) */
-#define RC_PID_SMOOTHING_SHIFT 3
-#define RC_PID_SMOOTHING (1 << RC_PID_SMOOTHING_SHIFT)
+#define RC_PID_SMOOTHING_SHIFT         3
+#define RC_PID_SMOOTHING               (1 << RC_PID_SMOOTHING_SHIFT)
 
 /* Sharpening factor (used for D part of PID controller) */
-#define RC_PID_SHARPENING_FACTOR 0
-#define RC_PID_SHARPENING_DURATION 0
+#define RC_PID_SHARPENING_FACTOR       0
+#define RC_PID_SHARPENING_DURATION     0
 
 /* Fixed point arithmetic shifting amount. */
-#define RC_PID_ARITH_SHIFT 8
+#define RC_PID_ARITH_SHIFT             8
 
 /* Fixed point arithmetic factor. */
-#define RC_PID_ARITH_FACTOR (1 << RC_PID_ARITH_SHIFT)
+#define RC_PID_ARITH_FACTOR            (1 << RC_PID_ARITH_SHIFT)
 
 /* Proportional PID component coefficient. */
-#define RC_PID_COEFF_P 15
+#define RC_PID_COEFF_P                 15
 /* Integral PID component coefficient. */
-#define RC_PID_COEFF_I 9
+#define RC_PID_COEFF_I                 9
 /* Derivative PID component coefficient. */
-#define RC_PID_COEFF_D 15
+#define RC_PID_COEFF_D                 15
 
 /* Target failed frames rate for the PID controller. NB: This effectively gives
  * maximum failed frames percentage we're willing to accept. If the wireless
  * link quality is good, the controller will fail to adjust failed frames
  * percentage to the target. This is intentional.
  */
-#define RC_PID_TARGET_PF (11 << RC_PID_ARITH_SHIFT)
+#define RC_PID_TARGET_PF               14
 
 /* Rate behaviour normalization quantity over time. */
-#define RC_PID_NORM_OFFSET 3
+#define RC_PID_NORM_OFFSET             3
 
 /* Push high rates right after loading. */
-#define RC_PID_FAST_START 0
+#define RC_PID_FAST_START              0
 
 /* Arithmetic right shift for positive and negative values for ISO C. */
 #define RC_PID_DO_ARITH_RIGHT_SHIFT(x, y) \
-       (x) < 0 ? -((-(x)) >> (y)) : (x) >> (y)
+       ((x) < 0 ? -((-(x)) >> (y)) : (x) >> (y))
 
 enum rc_pid_event_type {
        RC_PID_EVENT_TYPE_TX_STATUS,
@@ -60,7 +61,8 @@ enum rc_pid_event_type {
 union rc_pid_event_data {
        /* RC_PID_EVENT_TX_STATUS */
        struct {
-               struct ieee80211_tx_status tx_status;
+               u32 flags;
+               struct ieee80211_tx_info tx_status;
        };
        /* RC_PID_EVENT_TYPE_RATE_CHANGE */
        /* RC_PID_EVENT_TYPE_TX_RATE */
@@ -119,8 +121,28 @@ struct rc_pid_events_file_info {
        unsigned int next_entry;
 };
 
+/**
+ * struct rc_pid_debugfs_entries - tunable parameters
+ *
+ * Algorithm parameters, tunable via debugfs.
+ * @target: target percentage for failed frames
+ * @sampling_period: error sampling interval in milliseconds
+ * @coeff_p: absolute value of the proportional coefficient
+ * @coeff_i: absolute value of the integral coefficient
+ * @coeff_d: absolute value of the derivative coefficient
+ * @smoothing_shift: absolute value of the integral smoothing factor (i.e.
+ *     amount of smoothing introduced by the exponential moving average)
+ * @sharpen_factor: absolute value of the derivative sharpening factor (i.e.
+ *     amount of emphasis given to the derivative term after low activity
+ *     events)
+ * @sharpen_duration: duration of the sharpening effect after the detected low
+ *     activity event, relative to sampling_period
+ * @norm_offset: amount of normalization periodically performed on the learnt
+ *     rate behaviour values (lower means we should trust more what we learnt
+ *     about behaviour of rates, higher means we should trust more the natural
+ *     ordering of rates)
+ */
 struct rc_pid_debugfs_entries {
-       struct dentry *dir;
        struct dentry *target;
        struct dentry *sampling_period;
        struct dentry *coeff_p;
@@ -130,11 +152,10 @@ struct rc_pid_debugfs_entries {
        struct dentry *sharpen_factor;
        struct dentry *sharpen_duration;
        struct dentry *norm_offset;
-       struct dentry *fast_start;
 };
 
 void rate_control_pid_event_tx_status(struct rc_pid_event_buffer *buf,
-                                            struct ieee80211_tx_status *stat);
+                                     struct ieee80211_tx_info *stat);
 
 void rate_control_pid_event_rate_change(struct rc_pid_event_buffer *buf,
                                               int index, int rate);
@@ -158,6 +179,8 @@ struct rc_pid_sta_info {
        u32 tx_num_failed;
        u32 tx_num_xmit;
 
+       int txrate_idx;
+
        /* Average failed frames percentage error (i.e. actual vs. target
         * percentage), scaled by RC_PID_SMOOTHING. This value is computed
         * using using an exponential weighted average technique:
@@ -243,9 +266,6 @@ struct rc_pid_info {
        /* Normalization offset. */
        unsigned int norm_offset;
 
-       /* Fast starst parameter. */
-       unsigned int fast_start;
-
        /* Rates information. */
        struct rc_pid_rateinfo *rinfo;