162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright 2006, Johannes Berg <johannes@sipsolutions.net>
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <linux/list.h>
762306a36Sopenharmony_ci#include <linux/spinlock.h>
862306a36Sopenharmony_ci#include <linux/leds.h>
962306a36Sopenharmony_ci#include "ieee80211_i.h"
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#define MAC80211_BLINK_DELAY 50 /* ms */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistatic inline void ieee80211_led_rx(struct ieee80211_local *local)
1462306a36Sopenharmony_ci{
1562306a36Sopenharmony_ci#ifdef CONFIG_MAC80211_LEDS
1662306a36Sopenharmony_ci	if (!atomic_read(&local->rx_led_active))
1762306a36Sopenharmony_ci		return;
1862306a36Sopenharmony_ci	led_trigger_blink_oneshot(&local->rx_led, MAC80211_BLINK_DELAY, MAC80211_BLINK_DELAY, 0);
1962306a36Sopenharmony_ci#endif
2062306a36Sopenharmony_ci}
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistatic inline void ieee80211_led_tx(struct ieee80211_local *local)
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci#ifdef CONFIG_MAC80211_LEDS
2562306a36Sopenharmony_ci	if (!atomic_read(&local->tx_led_active))
2662306a36Sopenharmony_ci		return;
2762306a36Sopenharmony_ci	led_trigger_blink_oneshot(&local->tx_led, MAC80211_BLINK_DELAY, MAC80211_BLINK_DELAY, 0);
2862306a36Sopenharmony_ci#endif
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#ifdef CONFIG_MAC80211_LEDS
3262306a36Sopenharmony_civoid ieee80211_led_assoc(struct ieee80211_local *local,
3362306a36Sopenharmony_ci			 bool associated);
3462306a36Sopenharmony_civoid ieee80211_led_radio(struct ieee80211_local *local,
3562306a36Sopenharmony_ci			 bool enabled);
3662306a36Sopenharmony_civoid ieee80211_alloc_led_names(struct ieee80211_local *local);
3762306a36Sopenharmony_civoid ieee80211_free_led_names(struct ieee80211_local *local);
3862306a36Sopenharmony_civoid ieee80211_led_init(struct ieee80211_local *local);
3962306a36Sopenharmony_civoid ieee80211_led_exit(struct ieee80211_local *local);
4062306a36Sopenharmony_civoid ieee80211_mod_tpt_led_trig(struct ieee80211_local *local,
4162306a36Sopenharmony_ci				unsigned int types_on, unsigned int types_off);
4262306a36Sopenharmony_ci#else
4362306a36Sopenharmony_cistatic inline void ieee80211_led_assoc(struct ieee80211_local *local,
4462306a36Sopenharmony_ci				       bool associated)
4562306a36Sopenharmony_ci{
4662306a36Sopenharmony_ci}
4762306a36Sopenharmony_cistatic inline void ieee80211_led_radio(struct ieee80211_local *local,
4862306a36Sopenharmony_ci				       bool enabled)
4962306a36Sopenharmony_ci{
5062306a36Sopenharmony_ci}
5162306a36Sopenharmony_cistatic inline void ieee80211_alloc_led_names(struct ieee80211_local *local)
5262306a36Sopenharmony_ci{
5362306a36Sopenharmony_ci}
5462306a36Sopenharmony_cistatic inline void ieee80211_free_led_names(struct ieee80211_local *local)
5562306a36Sopenharmony_ci{
5662306a36Sopenharmony_ci}
5762306a36Sopenharmony_cistatic inline void ieee80211_led_init(struct ieee80211_local *local)
5862306a36Sopenharmony_ci{
5962306a36Sopenharmony_ci}
6062306a36Sopenharmony_cistatic inline void ieee80211_led_exit(struct ieee80211_local *local)
6162306a36Sopenharmony_ci{
6262306a36Sopenharmony_ci}
6362306a36Sopenharmony_cistatic inline void ieee80211_mod_tpt_led_trig(struct ieee80211_local *local,
6462306a36Sopenharmony_ci					      unsigned int types_on,
6562306a36Sopenharmony_ci					      unsigned int types_off)
6662306a36Sopenharmony_ci{
6762306a36Sopenharmony_ci}
6862306a36Sopenharmony_ci#endif
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_cistatic inline void
7162306a36Sopenharmony_ciieee80211_tpt_led_trig_tx(struct ieee80211_local *local, int bytes)
7262306a36Sopenharmony_ci{
7362306a36Sopenharmony_ci#ifdef CONFIG_MAC80211_LEDS
7462306a36Sopenharmony_ci	if (atomic_read(&local->tpt_led_active))
7562306a36Sopenharmony_ci		local->tpt_led_trigger->tx_bytes += bytes;
7662306a36Sopenharmony_ci#endif
7762306a36Sopenharmony_ci}
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_cistatic inline void
8062306a36Sopenharmony_ciieee80211_tpt_led_trig_rx(struct ieee80211_local *local, int bytes)
8162306a36Sopenharmony_ci{
8262306a36Sopenharmony_ci#ifdef CONFIG_MAC80211_LEDS
8362306a36Sopenharmony_ci	if (atomic_read(&local->tpt_led_active))
8462306a36Sopenharmony_ci		local->tpt_led_trigger->rx_bytes += bytes;
8562306a36Sopenharmony_ci#endif
8662306a36Sopenharmony_ci}
87