Changeset 24182


Ignore:
Timestamp:
2010-11-28T19:28:12+01:00 (5 years ago)
Author:
nbd
Message:

mac80211: merge the new version of the throughput led trigger patch

Location:
trunk/package/mac80211/patches
Files:
2 deleted
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/patches/562-throughput_trigger.patch

    r24159 r24182  
    1515--- 
    1616v2: turn off LED when turning off radio 
    17  
    18  include/net/mac80211.h     |   42 +++++++++++++++ 
    19  net/mac80211/ieee80211_i.h |   14 +++++ 
     17v3: - use only data frames 
     18    - fix update frequency to 1 second 
     19    - use DIV_ROUND_UP 
     20 
     21 include/net/mac80211.h     |   38 ++++++++++++++ 
     22 net/mac80211/ieee80211_i.h |   13 ++++ 
    2023 net/mac80211/iface.c       |    1  
    21  net/mac80211/led.c         |  120 +++++++++++++++++++++++++++++++++++++++++++++ 
     24 net/mac80211/led.c         |  119 +++++++++++++++++++++++++++++++++++++++++++++ 
    2225 net/mac80211/led.h         |   44 +++++++++++++--- 
    23  net/mac80211/rx.c          |    1  
    24  net/mac80211/tx.c          |    1  
     26 net/mac80211/rx.c          |    3 + 
     27 net/mac80211/tx.c          |    3 + 
    2528 net/mac80211/util.c        |    2  
    26  8 files changed, 216 insertions(+), 9 deletions(-) 
     29 8 files changed, 214 insertions(+), 9 deletions(-) 
    2730 
    2831--- a/include/net/mac80211.h 
    2932+++ b/include/net/mac80211.h 
    30 @@ -1849,11 +1849,27 @@ struct ieee80211_hw *ieee80211_alloc_hw( 
     33@@ -1849,11 +1849,26 @@ struct ieee80211_hw *ieee80211_alloc_hw( 
    3134  */ 
    3235 int ieee80211_register_hw(struct ieee80211_hw *hw); 
     
    5053+extern char *__ieee80211_create_tpt_led_trigger( 
    5154+                               struct ieee80211_hw *hw, 
    52 +                               unsigned long update_timeout, 
    5355+                               const struct ieee80211_tpt_blink *blink_table, 
    5456+                               unsigned int blink_table_len); 
     
    5658 /** 
    5759  * ieee80211_get_tx_led_name - get name of TX LED 
    58 @@ -1932,6 +1948,32 @@ static inline char *ieee80211_get_radio_ 
     60@@ -1932,6 +1947,29 @@ static inline char *ieee80211_get_radio_ 
    5961 } 
    6062  
     
    6264+ * ieee80211_create_tpt_led_trigger - create throughput LED trigger 
    6365+ * @hw: the hardware to create the trigger for 
    64 + * @update_timeout: the update timeout (in jiffies) 
    6566+ * @blink_table: the blink table -- needs to be ordered by throughput 
    6667+ * @blink_table_len: size of the blink table 
     
    7273+static inline char * 
    7374+ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw, 
    74 +                                unsigned long update_timeout, 
    7575+                                const struct ieee80211_tpt_blink *blink_table, 
    7676+                                unsigned int blink_table_len) 
    7777+{ 
    7878+#ifdef CONFIG_MAC80211_LEDS 
    79 +       return __ieee80211_create_tpt_led_trigger(hw, update_timeout, 
    80 +                                                 blink_table, 
     79+       return __ieee80211_create_tpt_led_trigger(hw, blink_table, 
    8180+                                                 blink_table_len); 
    8281+#else 
     
    9998 #include <net/cfg80211.h> 
    10099 #include <net/mac80211.h> 
    101 @@ -636,6 +637,18 @@ enum queue_stop_reason { 
     100@@ -636,6 +637,17 @@ enum queue_stop_reason { 
    102101        IEEE80211_QUEUE_STOP_REASON_SKB_ADD, 
    103102 }; 
     
    108107+       const struct ieee80211_tpt_blink *blink_table; 
    109108+       unsigned int blink_table_len; 
    110 +       unsigned long update_timeout; 
    111109+       struct timer_list timer; 
    112110+       bool running; 
     
    118116  * mac80211 scan flags - currently active scan mode 
    119117  * 
    120 @@ -849,6 +862,7 @@ struct ieee80211_local { 
     118@@ -849,6 +861,7 @@ struct ieee80211_local { 
    121119 #ifdef CONFIG_MAC80211_LEDS 
    122120        int tx_led_counter, rx_led_counter; 
     
    154152  
    155153 char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw) 
    156 @@ -156,3 +168,111 @@ char *__ieee80211_get_rx_led_name(struct 
     154@@ -156,3 +168,110 @@ char *__ieee80211_get_rx_led_name(struct 
    157155        return local->rx_led_name; 
    158156 } 
     
    168166+       delta = traffic - tpt_trig->prev_traffic; 
    169167+       tpt_trig->prev_traffic = traffic; 
    170 +       return delta / (1024 / 8); 
     168+       return DIV_ROUND_UP(delta, 1024 / 8); 
    171169+} 
    172170+ 
     
    182180+               return; 
    183181+ 
    184 +       mod_timer(&tpt_trig->timer, jiffies + tpt_trig->update_timeout); 
     182+       mod_timer(&tpt_trig->timer, round_jiffies(jiffies + HZ)); 
    185183+ 
    186184+       tpt = tpt_trig_traffic(local, tpt_trig); 
     
    191189+ 
    192190+       for (i = tpt_trig->blink_table_len - 1; i >= 0; i--) { 
    193 +               if (tpt >= tpt_trig->blink_table[i].throughput) { 
     191+               if (tpt > tpt_trig->blink_table[i].throughput) { 
    194192+                       off = tpt_trig->blink_table[i].blink_time / 2; 
    195193+                       on = tpt_trig->blink_table[i].blink_time - off; 
     
    206204+extern char *__ieee80211_create_tpt_led_trigger( 
    207205+                               struct ieee80211_hw *hw, 
    208 +                               unsigned long update_timeout, 
    209206+                               const struct ieee80211_tpt_blink *blink_table, 
    210207+                               unsigned int blink_table_len) 
     
    225222+       tpt_trig->trig.name = tpt_trig->name; 
    226223+ 
    227 +       tpt_trig->update_timeout = update_timeout; 
    228224+       tpt_trig->blink_table = blink_table; 
    229225+       tpt_trig->blink_table_len = blink_table_len; 
     
    247243+       tpt_trig_traffic(local, tpt_trig); 
    248244+       tpt_trig->running = true; 
    249 +       mod_timer(&tpt_trig->timer, jiffies + tpt_trig->update_timeout); 
     245+ 
     246+       mod_timer(&tpt_trig->timer, round_jiffies(jiffies + HZ)); 
    250247+} 
    251248+ 
     
    308305+ 
    309306+static inline void 
    310 +ieee80211_tpt_led_trig_tx(struct ieee80211_local *local, int bytes) 
     307+ieee80211_tpt_led_trig_tx(struct ieee80211_local *local, __le16 fc, int bytes) 
    311308+{ 
    312309+#ifdef CONFIG_MAC80211_LEDS 
    313 +       if (local->tpt_led_trigger) 
     310+       if (local->tpt_led_trigger && ieee80211_is_data(fc)) 
    314311+               local->tpt_led_trigger->tx_bytes += bytes; 
    315312 #endif 
     
    317314+ 
    318315+static inline void 
    319 +ieee80211_tpt_led_trig_rx(struct ieee80211_local *local, int bytes) 
     316+ieee80211_tpt_led_trig_rx(struct ieee80211_local *local, __le16 fc, int bytes) 
    320317+{ 
    321318+#ifdef CONFIG_MAC80211_LEDS 
    322 +       if (local->tpt_led_trigger) 
     319+       if (local->tpt_led_trigger && ieee80211_is_data(fc)) 
    323320+               local->tpt_led_trigger->rx_bytes += bytes; 
    324321+#endif 
     
    354351--- a/net/mac80211/rx.c 
    355352+++ b/net/mac80211/rx.c 
    356 @@ -2873,6 +2873,7 @@ void ieee80211_rx(struct ieee80211_hw *h 
     353@@ -2873,6 +2873,9 @@ void ieee80211_rx(struct ieee80211_hw *h 
    357354                return; 
    358355        } 
    359356  
    360 +       ieee80211_tpt_led_trig_rx(local, skb->len); 
     357+       ieee80211_tpt_led_trig_rx(local, 
     358+                       ((struct ieee80211_hdr *)skb->data)->frame_control, 
     359+                       skb->len); 
    361360        __ieee80211_rx_handle_packet(hw, skb); 
    362361  
     
    364363--- a/net/mac80211/tx.c 
    365364+++ b/net/mac80211/tx.c 
    366 @@ -1344,6 +1344,7 @@ static int __ieee80211_tx(struct ieee802 
     365@@ -1292,6 +1292,7 @@ static int __ieee80211_tx(struct ieee802 
     366  
     367        while (skb) { 
     368                int q = skb_get_queue_mapping(skb); 
     369+               __le16 fc; 
     370  
     371                spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 
     372                ret = IEEE80211_TX_OK; 
     373@@ -1334,6 +1335,7 @@ static int __ieee80211_tx(struct ieee802 
     374                else 
     375                        info->control.sta = NULL; 
     376  
     377+               fc = ((struct ieee80211_hdr *)skb->data)->frame_control; 
     378                ret = drv_tx(local, skb); 
     379                if (WARN_ON(ret != NETDEV_TX_OK && skb->len != len)) { 
     380                        dev_kfree_skb(skb); 
     381@@ -1344,6 +1346,7 @@ static int __ieee80211_tx(struct ieee802 
    367382                        return IEEE80211_TX_AGAIN; 
    368383                } 
    369384  
    370 +               ieee80211_tpt_led_trig_tx(local, len); 
     385+               ieee80211_tpt_led_trig_tx(local, fc, len); 
    371386                *skbp = skb = next; 
    372387                ieee80211_led_tx(local, 1); 
  • trunk/package/mac80211/patches/563-ath9k_cleanup_led_blink.patch

    r24181 r24182  
    6262--- a/drivers/net/wireless/ath/ath9k/gpio.c 
    6363+++ b/drivers/net/wireless/ath/ath9k/gpio.c 
    64 @@ -20,115 +20,34 @@ 
     64@@ -20,120 +20,25 @@ 
    6565 /*      LED functions          */ 
    6666 /********************************/ 
     
    9999-               sc->sc_flags |= SC_OP_LED_ON; 
    100100-} 
     101- 
    101102+#ifdef CONFIG_MAC80211_LEDS 
    102 +static const struct ieee80211_tpt_blink ath9k_blink[] = { 
    103 +       { .throughput = 0 * 1024, .blink_time = 334 }, 
    104 +       { .throughput = 1 * 1024, .blink_time = 260 }, 
    105 +       { .throughput = 5 * 1024, .blink_time = 220 }, 
    106 +       { .throughput = 10 * 1024, .blink_time = 190 }, 
    107 +       { .throughput = 20 * 1024, .blink_time = 170 }, 
    108 +       { .throughput = 50 * 1024, .blink_time = 150 }, 
    109 +       { .throughput = 70 * 1024, .blink_time = 130 }, 
    110 +       { .throughput = 100 * 1024, .blink_time = 110 }, 
    111 +       { .throughput = 200 * 1024, .blink_time = 80 }, 
    112 +       { .throughput = 300 * 1024, .blink_time = 50 }, 
    113 +}; 
    114   
    115103 static void ath_led_brightness(struct led_classdev *led_cdev, 
    116104                               enum led_brightness brightness) 
     
    196184  
    197185 void ath_init_leds(struct ath_softc *sc) 
    198 @@ -152,48 +71,28 @@ void ath_init_leds(struct ath_softc *sc) 
     186 { 
     187-       char *trigger; 
     188        int ret; 
     189  
     190        if (AR_SREV_9100(sc->sc_ah)) 
     191@@ -152,48 +57,22 @@ void ath_init_leds(struct ath_softc *sc) 
    199192        /* LED off, active low */ 
    200193        ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1); 
     
    202195-       if (led_blink) 
    203196-               INIT_DELAYED_WORK(&sc->ath_led_blink_work, ath_led_blink_work); 
    204 +       /* 
    205 +        * create the tpt trigger even if led_blink is disabled, so that 
    206 +        * user space can still make use of it 
    207 +        */ 
    208 +       trigger = ieee80211_create_tpt_led_trigger(sc->hw, HZ, ath9k_blink, 
    209 +                                                  ARRAY_SIZE(ath9k_blink)); 
    210197+       if (!led_blink) 
    211 +               trigger = ieee80211_get_radio_led_name(sc->hw); 
     198+               sc->led_cdev.default_trigger = 
     199+                       ieee80211_get_radio_led_name(sc->hw); 
    212200+ 
    213201+       snprintf(sc->led_name, sizeof(sc->led_name), 
    214202+               "ath9k-%s", wiphy_name(sc->hw->wiphy)); 
    215203+       sc->led_cdev.name = sc->led_name; 
    216 +       sc->led_cdev.default_trigger = trigger; 
    217204+       sc->led_cdev.brightness_set = ath_led_brightness; 
    218205+ 
     
    277264        cancel_work_sync(&sc->paprd_work); 
    278265        cancel_work_sync(&sc->hw_check_work); 
     266--- a/drivers/net/wireless/ath/ath9k/init.c 
     267+++ b/drivers/net/wireless/ath/ath9k/init.c 
     268@@ -136,6 +136,20 @@ static struct ieee80211_rate ath9k_legac 
     269        RATE(540, 0x0c, 0), 
     270 }; 
     271  
     272+static const struct ieee80211_tpt_blink ath9k_tpt_blink[] = { 
     273+       { .throughput = 0 * 1024, .blink_time = 334 }, 
     274+       { .throughput = 1 * 1024, .blink_time = 260 }, 
     275+       { .throughput = 5 * 1024, .blink_time = 220 }, 
     276+       { .throughput = 10 * 1024, .blink_time = 190 }, 
     277+       { .throughput = 20 * 1024, .blink_time = 170 }, 
     278+       { .throughput = 50 * 1024, .blink_time = 150 }, 
     279+       { .throughput = 70 * 1024, .blink_time = 130 }, 
     280+       { .throughput = 100 * 1024, .blink_time = 110 }, 
     281+       { .throughput = 200 * 1024, .blink_time = 80 }, 
     282+       { .throughput = 300 * 1024, .blink_time = 50 }, 
     283+}; 
     284+ 
     285+ 
     286 static void ath9k_deinit_softc(struct ath_softc *sc); 
     287  
     288 /* 
     289@@ -746,6 +760,10 @@ int ath9k_init_device(u16 devid, struct  
     290  
     291        ath9k_init_txpower_limits(sc); 
     292  
     293+       /* must be initialized before ieee80211_register_hw */ 
     294+       sc->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(sc->hw, 
     295+               ath9k_tpt_blink, ARRAY_SIZE(ath9k_tpt_blink)); 
     296+ 
     297        /* Register with mac80211 */ 
     298        error = ieee80211_register_hw(hw); 
     299        if (error) 
Note: See TracChangeset for help on using the changeset viewer.