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 75*30f6cf96SFelix Fietkau ieee80211_tpt_led_trig_tx(struct ieee80211_local *local, int bytes) 76e1e54068SJohannes Berg { 77e1e54068SJohannes Berg #ifdef CONFIG_MAC80211_LEDS 78*30f6cf96SFelix Fietkau if (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 84*30f6cf96SFelix Fietkau ieee80211_tpt_led_trig_rx(struct ieee80211_local *local, int bytes) 85e1e54068SJohannes Berg { 86e1e54068SJohannes Berg #ifdef CONFIG_MAC80211_LEDS 87*30f6cf96SFelix Fietkau if (atomic_read(&local->tpt_led_active)) 88e1e54068SJohannes Berg local->tpt_led_trigger->rx_bytes += bytes; 89e1e54068SJohannes Berg #endif 90e1e54068SJohannes Berg } 91