xref: /openbmc/linux/net/mac80211/led.h (revision d2912cb1)
1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
22c8dccc7SJohannes Berg /*
32c8dccc7SJohannes Berg  * Copyright 2006, Johannes Berg <johannes@sipsolutions.net>
42c8dccc7SJohannes Berg  */
52c8dccc7SJohannes Berg 
62c8dccc7SJohannes Berg #include <linux/list.h>
72c8dccc7SJohannes Berg #include <linux/spinlock.h>
82c8dccc7SJohannes Berg #include <linux/leds.h>
92c8dccc7SJohannes Berg #include "ieee80211_i.h"
102c8dccc7SJohannes Berg 
118d5c2585SJohannes Berg #define MAC80211_BLINK_DELAY 50 /* ms */
128d5c2585SJohannes Berg 
138d5c2585SJohannes Berg static inline void ieee80211_led_rx(struct ieee80211_local *local)
148d5c2585SJohannes Berg {
152c8dccc7SJohannes Berg #ifdef CONFIG_MAC80211_LEDS
168d5c2585SJohannes Berg 	unsigned long led_delay = MAC80211_BLINK_DELAY;
178d5c2585SJohannes Berg 
188d5c2585SJohannes Berg 	if (!atomic_read(&local->rx_led_active))
198d5c2585SJohannes Berg 		return;
208d5c2585SJohannes Berg 	led_trigger_blink_oneshot(&local->rx_led, &led_delay, &led_delay, 0);
218d5c2585SJohannes Berg #endif
228d5c2585SJohannes Berg }
238d5c2585SJohannes Berg 
248d5c2585SJohannes Berg static inline void ieee80211_led_tx(struct ieee80211_local *local)
258d5c2585SJohannes Berg {
268d5c2585SJohannes Berg #ifdef CONFIG_MAC80211_LEDS
278d5c2585SJohannes Berg 	unsigned long led_delay = MAC80211_BLINK_DELAY;
288d5c2585SJohannes Berg 
298d5c2585SJohannes Berg 	if (!atomic_read(&local->tx_led_active))
308d5c2585SJohannes Berg 		return;
318d5c2585SJohannes Berg 	led_trigger_blink_oneshot(&local->tx_led, &led_delay, &led_delay, 0);
328d5c2585SJohannes Berg #endif
338d5c2585SJohannes Berg }
348d5c2585SJohannes Berg 
358d5c2585SJohannes Berg #ifdef CONFIG_MAC80211_LEDS
36e1e54068SJohannes Berg void ieee80211_led_assoc(struct ieee80211_local *local,
372c8dccc7SJohannes Berg 			 bool associated);
38e1e54068SJohannes Berg void ieee80211_led_radio(struct ieee80211_local *local,
392c8dccc7SJohannes Berg 			 bool enabled);
408d5c2585SJohannes Berg void ieee80211_alloc_led_names(struct ieee80211_local *local);
418d5c2585SJohannes Berg void ieee80211_free_led_names(struct ieee80211_local *local);
42e1e54068SJohannes Berg void ieee80211_led_init(struct ieee80211_local *local);
43e1e54068SJohannes Berg void ieee80211_led_exit(struct ieee80211_local *local);
4467408c8cSJohannes Berg void ieee80211_mod_tpt_led_trig(struct ieee80211_local *local,
4567408c8cSJohannes Berg 				unsigned int types_on, unsigned int types_off);
462c8dccc7SJohannes Berg #else
472c8dccc7SJohannes Berg static inline void ieee80211_led_assoc(struct ieee80211_local *local,
482c8dccc7SJohannes Berg 				       bool associated)
492c8dccc7SJohannes Berg {
502c8dccc7SJohannes Berg }
512c8dccc7SJohannes Berg static inline void ieee80211_led_radio(struct ieee80211_local *local,
522c8dccc7SJohannes Berg 				       bool enabled)
532c8dccc7SJohannes Berg {
542c8dccc7SJohannes Berg }
558d5c2585SJohannes Berg static inline void ieee80211_alloc_led_names(struct ieee80211_local *local)
568d5c2585SJohannes Berg {
578d5c2585SJohannes Berg }
588d5c2585SJohannes Berg static inline void ieee80211_free_led_names(struct ieee80211_local *local)
59fe67c913SJohannes Berg {
60fe67c913SJohannes Berg }
612c8dccc7SJohannes Berg static inline void ieee80211_led_init(struct ieee80211_local *local)
622c8dccc7SJohannes Berg {
632c8dccc7SJohannes Berg }
642c8dccc7SJohannes Berg static inline void ieee80211_led_exit(struct ieee80211_local *local)
652c8dccc7SJohannes Berg {
662c8dccc7SJohannes Berg }
6767408c8cSJohannes Berg static inline void ieee80211_mod_tpt_led_trig(struct ieee80211_local *local,
6867408c8cSJohannes Berg 					      unsigned int types_on,
6967408c8cSJohannes Berg 					      unsigned int types_off)
70e1e54068SJohannes Berg {
71e1e54068SJohannes Berg }
722c8dccc7SJohannes Berg #endif
73e1e54068SJohannes Berg 
74e1e54068SJohannes Berg static inline void
75e1e54068SJohannes Berg ieee80211_tpt_led_trig_tx(struct ieee80211_local *local, __le16 fc, int bytes)
76e1e54068SJohannes Berg {
77e1e54068SJohannes Berg #ifdef CONFIG_MAC80211_LEDS
788d5c2585SJohannes Berg 	if (ieee80211_is_data(fc) && atomic_read(&local->tpt_led_active))
79e1e54068SJohannes Berg 		local->tpt_led_trigger->tx_bytes += bytes;
80e1e54068SJohannes Berg #endif
81e1e54068SJohannes Berg }
82e1e54068SJohannes Berg 
83e1e54068SJohannes Berg static inline void
84e1e54068SJohannes Berg ieee80211_tpt_led_trig_rx(struct ieee80211_local *local, __le16 fc, int bytes)
85e1e54068SJohannes Berg {
86e1e54068SJohannes Berg #ifdef CONFIG_MAC80211_LEDS
878d5c2585SJohannes Berg 	if (ieee80211_is_data(fc) && atomic_read(&local->tpt_led_active))
88e1e54068SJohannes Berg 		local->tpt_led_trigger->rx_bytes += bytes;
89e1e54068SJohannes Berg #endif
90e1e54068SJohannes Berg }
91