Commit 28237002 authored by Roland Vossen's avatar Roland Vossen Committed by John W. Linville

brcm80211: smac: removed down-on-watchdog MPC functionality

Softmac would bring its interface down on a certain Minimum Power Save
related condition, without Mac80211 intervention. Because Mac80211 should
be the only party initiating interfaces going up and down, this functionality
has been removed. All notions of 'MPC' have been removed in the code as
well.
Reviewed-by: default avatarAlwin Beukers <alwin@broadcom.com>
Reviewed-by: default avatarArend van Spriel <arend@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: default avatarRoland Vossen <rvossen@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 44129530
...@@ -1078,8 +1078,7 @@ static struct brcms_info *brcms_attach(u16 vendor, u16 device, ...@@ -1078,8 +1078,7 @@ static struct brcms_info *brcms_attach(u16 vendor, u16 device,
wl->pub->ieee_hw = hw; wl->pub->ieee_hw = hw;
/* disable mpc */ brcms_c_set_radio_mon(wl->wlc);
brcms_c_set_radio_mpc(wl->wlc);
/* register our interrupt handler */ /* register our interrupt handler */
if (request_irq(irq, brcms_isr, IRQF_SHARED, KBUILD_MODNAME, wl)) { if (request_irq(irq, brcms_isr, IRQF_SHARED, KBUILD_MODNAME, wl)) {
......
...@@ -43,16 +43,6 @@ ...@@ -43,16 +43,6 @@
/* radio monitor timer, in unit of ms */ /* radio monitor timer, in unit of ms */
#define TIMER_INTERVAL_RADIOCHK 800 #define TIMER_INTERVAL_RADIOCHK 800
/* Max MPC timeout, in unit of watchdog */
#ifndef BRCMS_MPC_MAX_DELAYCNT
#define BRCMS_MPC_MAX_DELAYCNT 10
#endif
/* Min MPC timeout, in unit of watchdog */
#define BRCMS_MPC_MIN_DELAYCNT 1
/* MPC count threshold level */
#define BRCMS_MPC_THRESHOLD 3
/* beacon interval, in unit of 1024TU */ /* beacon interval, in unit of 1024TU */
#define BEACON_INTERVAL_DEFAULT 100 #define BEACON_INTERVAL_DEFAULT 100
...@@ -4330,17 +4320,13 @@ static void brcms_b_watchdog(void *arg) ...@@ -4330,17 +4320,13 @@ static void brcms_b_watchdog(void *arg)
wlc_phy_watchdog(wlc_hw->band->pi); wlc_phy_watchdog(wlc_hw->band->pi);
} }
static void brcms_c_radio_mpc_upd(struct brcms_c_info *wlc) static void brcms_c_radio_mon_upd(struct brcms_c_info *wlc)
{ {
/* /*
* Clear the WL_RADIO_MPC_DISABLE bit when mpc feature is disabled * Stop the radio monitor when the radio is going down.
* in case the WL_RADIO_MPC_DISABLE bit was set. Stop the radio
* monitor also when WL_RADIO_MPC_DISABLE is the only reason that
* the radio is going down.
*/ */
if (!wlc->pub->radio_disabled) if (!wlc->pub->radio_disabled)
return; return;
mboolclr(wlc->pub->radio_disabled, WL_RADIO_MPC_DISABLE);
brcms_c_radio_upd(wlc); brcms_c_radio_upd(wlc);
if (!wlc->pub->radio_disabled) if (!wlc->pub->radio_disabled)
brcms_c_radio_monitor_stop(wlc); brcms_c_radio_monitor_stop(wlc);
...@@ -4366,17 +4352,8 @@ static void brcms_c_watchdog(void *arg) ...@@ -4366,17 +4352,8 @@ static void brcms_c_watchdog(void *arg)
/* increment second count */ /* increment second count */
wlc->pub->now++; wlc->pub->now++;
/* delay radio disable */ brcms_c_radio_mon_upd(wlc);
if (wlc->mpc_delay_off) { /* radio sync: sw/hw --> radio_disable/radio_enable */
if (--wlc->mpc_delay_off == 0) {
mboolset(wlc->pub->radio_disabled,
WL_RADIO_MPC_DISABLE);
}
}
/* mpc sync */
brcms_c_radio_mpc_upd(wlc);
/* radio sync: sw/hw/mpc --> radio_disable/radio_enable */
brcms_c_radio_hwdisable_upd(wlc); brcms_c_radio_hwdisable_upd(wlc);
brcms_c_radio_upd(wlc); brcms_c_radio_upd(wlc);
/* if radio is disable, driver may be down, quit here */ /* if radio is disable, driver may be down, quit here */
...@@ -4482,9 +4459,6 @@ static void brcms_c_info_init(struct brcms_c_info *wlc, int unit) ...@@ -4482,9 +4459,6 @@ static void brcms_c_info_init(struct brcms_c_info *wlc, int unit)
/* WME QoS mode is Auto by default */ /* WME QoS mode is Auto by default */
wlc->pub->_ampdu = AMPDU_AGG_HOST; wlc->pub->_ampdu = AMPDU_AGG_HOST;
wlc->pub->bcmerror = 0; wlc->pub->bcmerror = 0;
/* initialize mpc delay */
wlc->mpc_delay_off = BRCMS_MPC_MIN_DELAYCNT;
} }
static uint brcms_c_attach_module(struct brcms_c_info *wlc) static uint brcms_c_attach_module(struct brcms_c_info *wlc)
...@@ -5455,7 +5429,6 @@ uint brcms_c_down(struct brcms_c_info *wlc) ...@@ -5455,7 +5429,6 @@ uint brcms_c_down(struct brcms_c_info *wlc)
if (!wlc->pub->up) if (!wlc->pub->up)
return callbacks; return callbacks;
/* in between, mpc could try to bring down again.. */
wlc->going_down = true; wlc->going_down = true;
callbacks += brcms_b_bmac_down_prep(wlc->hw); callbacks += brcms_b_bmac_down_prep(wlc->hw);
...@@ -8131,9 +8104,9 @@ int brcms_c_get_tx_power(struct brcms_c_info *wlc) ...@@ -8131,9 +8104,9 @@ int brcms_c_get_tx_power(struct brcms_c_info *wlc)
return (int)(qdbm / BRCMS_TXPWR_DB_FACTOR); return (int)(qdbm / BRCMS_TXPWR_DB_FACTOR);
} }
void brcms_c_set_radio_mpc(struct brcms_c_info *wlc) void brcms_c_set_radio_mon(struct brcms_c_info *wlc)
{ {
brcms_c_radio_mpc_upd(wlc); brcms_c_radio_mon_upd(wlc);
} }
/* Process received frames */ /* Process received frames */
...@@ -8442,9 +8415,6 @@ void brcms_c_init(struct brcms_c_info *wlc) ...@@ -8442,9 +8415,6 @@ void brcms_c_init(struct brcms_c_info *wlc)
/* enable the RF Disable Delay timer */ /* enable the RF Disable Delay timer */
W_REG(&wlc->regs->rfdisabledly, RFDISABLE_DEFAULT); W_REG(&wlc->regs->rfdisabledly, RFDISABLE_DEFAULT);
/* initialize mpc delay */
wlc->mpc_delay_off = BRCMS_MPC_MIN_DELAYCNT;
/* /*
* Initialize WME parameters; if they haven't been set by some other * Initialize WME parameters; if they haven't been set by some other
* mechanism (IOVar, etc) then read them from the hardware. * mechanism (IOVar, etc) then read them from the hardware.
...@@ -8630,8 +8600,7 @@ brcms_c_attach(struct brcms_info *wl, u16 vendor, u16 device, uint unit, ...@@ -8630,8 +8600,7 @@ brcms_c_attach(struct brcms_info *wl, u16 vendor, u16 device, uint unit,
brcms_c_ht_update_sgi_rx(wlc, 0); brcms_c_ht_update_sgi_rx(wlc, 0);
} }
/* initialize radio_mpc_disable according to wlc->mpc */ brcms_c_radio_mon_upd(wlc);
brcms_c_radio_mpc_upd(wlc);
brcms_b_antsel_set(wlc->hw, wlc->asi->antsel_avail); brcms_b_antsel_set(wlc->hw, wlc->asi->antsel_avail);
if (perr) if (perr)
......
...@@ -427,7 +427,6 @@ struct brcms_txq_info { ...@@ -427,7 +427,6 @@ struct brcms_txq_info {
* bandinit_pending: track band init in auto band. * bandinit_pending: track band init in auto band.
* radio_monitor: radio timer is running. * radio_monitor: radio timer is running.
* going_down: down path intermediate variable. * going_down: down path intermediate variable.
* mpc_delay_off: delay radio disable by # of watchdog cnt.
* wdtimer: timer for watchdog routine. * wdtimer: timer for watchdog routine.
* radio_timer: timer for hw radio button monitor routine. * radio_timer: timer for hw radio button monitor routine.
* monitor: monitor (MPDU sniffing) mode. * monitor: monitor (MPDU sniffing) mode.
...@@ -518,8 +517,6 @@ struct brcms_c_info { ...@@ -518,8 +517,6 @@ struct brcms_c_info {
bool radio_monitor; bool radio_monitor;
bool going_down; bool going_down;
u8 mpc_delay_off;
struct brcms_timer *wdtimer; struct brcms_timer *wdtimer;
struct brcms_timer *radio_timer; struct brcms_timer *radio_timer;
......
...@@ -596,7 +596,7 @@ extern void brcms_c_set_beacon_listen_interval(struct brcms_c_info *wlc, ...@@ -596,7 +596,7 @@ extern void brcms_c_set_beacon_listen_interval(struct brcms_c_info *wlc,
u8 interval); u8 interval);
extern int brcms_c_set_tx_power(struct brcms_c_info *wlc, int txpwr); extern int brcms_c_set_tx_power(struct brcms_c_info *wlc, int txpwr);
extern int brcms_c_get_tx_power(struct brcms_c_info *wlc); extern int brcms_c_get_tx_power(struct brcms_c_info *wlc);
extern void brcms_c_set_radio_mpc(struct brcms_c_info *wlc); extern void brcms_c_set_radio_mon(struct brcms_c_info *wlc);
extern bool brcms_c_check_radio_disabled(struct brcms_c_info *wlc); extern bool brcms_c_check_radio_disabled(struct brcms_c_info *wlc);
#endif /* _BRCM_PUB_H_ */ #endif /* _BRCM_PUB_H_ */
...@@ -62,7 +62,6 @@ ...@@ -62,7 +62,6 @@
#define WL_RADIO_SW_DISABLE (1<<0) #define WL_RADIO_SW_DISABLE (1<<0)
#define WL_RADIO_HW_DISABLE (1<<1) #define WL_RADIO_HW_DISABLE (1<<1)
#define WL_RADIO_MPC_DISABLE (1<<2)
/* some countries don't support any channel */ /* some countries don't support any channel */
#define WL_RADIO_COUNTRY_DISABLE (1<<3) #define WL_RADIO_COUNTRY_DISABLE (1<<3)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment