2 * Copyright 2006, Johannes Berg <johannes@sipsolutions.net>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
9 /* just for IFNAMSIZ */
11 #include "ieee80211_led.h"
13 void ieee80211_led_rx(struct ieee80211_local
*local
)
15 if (unlikely(!local
->rx_led
))
17 if (local
->rx_led_counter
++ % 2 == 0)
18 led_trigger_event(local
->rx_led
, LED_OFF
);
20 led_trigger_event(local
->rx_led
, LED_FULL
);
23 /* q is 1 if a packet was enqueued, 0 if it has been transmitted */
24 void ieee80211_led_tx(struct ieee80211_local
*local
, int q
)
26 if (unlikely(!local
->tx_led
))
28 /* not sure how this is supposed to work ... */
29 local
->tx_led_counter
+= 2*q
-1;
30 if (local
->tx_led_counter
% 2 == 0)
31 led_trigger_event(local
->tx_led
, LED_OFF
);
33 led_trigger_event(local
->tx_led
, LED_FULL
);
36 void ieee80211_led_assoc(struct ieee80211_local
*local
, bool associated
)
38 if (unlikely(!local
->assoc_led
))
41 led_trigger_event(local
->assoc_led
, LED_FULL
);
43 led_trigger_event(local
->assoc_led
, LED_OFF
);
46 void ieee80211_led_init(struct ieee80211_local
*local
)
48 local
->rx_led
= kzalloc(sizeof(struct led_trigger
), GFP_KERNEL
);
50 snprintf(local
->rx_led_name
, sizeof(local
->rx_led_name
),
51 "%srx", wiphy_name(local
->hw
.wiphy
));
52 local
->rx_led
->name
= local
->rx_led_name
;
53 if (led_trigger_register(local
->rx_led
)) {
59 local
->tx_led
= kzalloc(sizeof(struct led_trigger
), GFP_KERNEL
);
61 snprintf(local
->tx_led_name
, sizeof(local
->tx_led_name
),
62 "%stx", wiphy_name(local
->hw
.wiphy
));
63 local
->tx_led
->name
= local
->tx_led_name
;
64 if (led_trigger_register(local
->tx_led
)) {
70 local
->assoc_led
= kzalloc(sizeof(struct led_trigger
), GFP_KERNEL
);
71 if (local
->assoc_led
) {
72 snprintf(local
->assoc_led_name
, sizeof(local
->assoc_led_name
),
73 "%sassoc", wiphy_name(local
->hw
.wiphy
));
74 local
->assoc_led
->name
= local
->assoc_led_name
;
75 if (led_trigger_register(local
->assoc_led
)) {
76 kfree(local
->assoc_led
);
77 local
->assoc_led
= NULL
;
82 void ieee80211_led_exit(struct ieee80211_local
*local
)
84 if (local
->assoc_led
) {
85 led_trigger_unregister(local
->assoc_led
);
86 kfree(local
->assoc_led
);
89 led_trigger_unregister(local
->tx_led
);
93 led_trigger_unregister(local
->rx_led
);
98 char *__ieee80211_get_assoc_led_name(struct ieee80211_hw
*hw
)
100 struct ieee80211_local
*local
= hw_to_local(hw
);
102 if (local
->assoc_led
)
103 return local
->assoc_led_name
;
106 EXPORT_SYMBOL(__ieee80211_get_assoc_led_name
);
108 char *__ieee80211_get_tx_led_name(struct ieee80211_hw
*hw
)
110 struct ieee80211_local
*local
= hw_to_local(hw
);
113 return local
->tx_led_name
;
116 EXPORT_SYMBOL(__ieee80211_get_tx_led_name
);
118 char *__ieee80211_get_rx_led_name(struct ieee80211_hw
*hw
)
120 struct ieee80211_local
*local
= hw_to_local(hw
);
123 return local
->rx_led_name
;
126 EXPORT_SYMBOL(__ieee80211_get_rx_led_name
);