Skip to content

Commit

Permalink
brcm80211: smac: removed down-on-watchdog MPC functionality
Browse files Browse the repository at this point in the history
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: Alwin Beukers <alwin@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Roland Vossen <rvossen@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Roland Vossen authored and John W. Linville committed Nov 8, 2011
1 parent 4412953 commit 2823700
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 45 deletions.
3 changes: 1 addition & 2 deletions drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
Original file line number Diff line number Diff line change
Expand Up @@ -1078,8 +1078,7 @@ static struct brcms_info *brcms_attach(u16 vendor, u16 device,

wl->pub->ieee_hw = hw;

/* disable mpc */
brcms_c_set_radio_mpc(wl->wlc);
brcms_c_set_radio_mon(wl->wlc);

/* register our interrupt handler */
if (request_irq(irq, brcms_isr, IRQF_SHARED, KBUILD_MODNAME, wl)) {
Expand Down
45 changes: 7 additions & 38 deletions drivers/net/wireless/brcm80211/brcmsmac/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,6 @@
/* radio monitor timer, in unit of ms */
#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 */
#define BEACON_INTERVAL_DEFAULT 100

Expand Down Expand Up @@ -4330,17 +4320,13 @@ static void brcms_b_watchdog(void *arg)
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
* 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.
* Stop the radio monitor when the radio is going down.
*/
if (!wlc->pub->radio_disabled)
return;
mboolclr(wlc->pub->radio_disabled, WL_RADIO_MPC_DISABLE);
brcms_c_radio_upd(wlc);
if (!wlc->pub->radio_disabled)
brcms_c_radio_monitor_stop(wlc);
Expand All @@ -4366,17 +4352,8 @@ static void brcms_c_watchdog(void *arg)
/* increment second count */
wlc->pub->now++;

/* delay radio disable */
if (wlc->mpc_delay_off) {
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_mon_upd(wlc);
/* radio sync: sw/hw --> radio_disable/radio_enable */
brcms_c_radio_hwdisable_upd(wlc);
brcms_c_radio_upd(wlc);
/* if radio is disable, driver may be down, quit here */
Expand Down Expand Up @@ -4482,9 +4459,6 @@ static void brcms_c_info_init(struct brcms_c_info *wlc, int unit)
/* WME QoS mode is Auto by default */
wlc->pub->_ampdu = AMPDU_AGG_HOST;
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)
Expand Down Expand Up @@ -5455,7 +5429,6 @@ uint brcms_c_down(struct brcms_c_info *wlc)
if (!wlc->pub->up)
return callbacks;

/* in between, mpc could try to bring down again.. */
wlc->going_down = true;

callbacks += brcms_b_bmac_down_prep(wlc->hw);
Expand Down Expand Up @@ -8131,9 +8104,9 @@ int brcms_c_get_tx_power(struct brcms_c_info *wlc)
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 */
Expand Down Expand Up @@ -8442,9 +8415,6 @@ void brcms_c_init(struct brcms_c_info *wlc)
/* enable the RF Disable Delay timer */
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
* mechanism (IOVar, etc) then read them from the hardware.
Expand Down Expand Up @@ -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);
}

/* initialize radio_mpc_disable according to wlc->mpc */
brcms_c_radio_mpc_upd(wlc);
brcms_c_radio_mon_upd(wlc);
brcms_b_antsel_set(wlc->hw, wlc->asi->antsel_avail);

if (perr)
Expand Down
3 changes: 0 additions & 3 deletions drivers/net/wireless/brcm80211/brcmsmac/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,6 @@ struct brcms_txq_info {
* bandinit_pending: track band init in auto band.
* radio_monitor: radio timer is running.
* going_down: down path intermediate variable.
* mpc_delay_off: delay radio disable by # of watchdog cnt.
* wdtimer: timer for watchdog routine.
* radio_timer: timer for hw radio button monitor routine.
* monitor: monitor (MPDU sniffing) mode.
Expand Down Expand Up @@ -518,8 +517,6 @@ struct brcms_c_info {
bool radio_monitor;
bool going_down;

u8 mpc_delay_off;

struct brcms_timer *wdtimer;
struct brcms_timer *radio_timer;

Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/brcm80211/brcmsmac/pub.h
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,7 @@ extern void brcms_c_set_beacon_listen_interval(struct brcms_c_info *wlc,
u8 interval);
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 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);

#endif /* _BRCM_PUB_H_ */
1 change: 0 additions & 1 deletion drivers/net/wireless/brcm80211/include/defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@

#define WL_RADIO_SW_DISABLE (1<<0)
#define WL_RADIO_HW_DISABLE (1<<1)
#define WL_RADIO_MPC_DISABLE (1<<2)
/* some countries don't support any channel */
#define WL_RADIO_COUNTRY_DISABLE (1<<3)

Expand Down

0 comments on commit 2823700

Please sign in to comment.