Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 277625
b: refs/heads/master
c: 0bf1f88
h: refs/heads/master
i:
  277623: e3310e1
v: v3
  • Loading branch information
Roland Vossen authored and John W. Linville committed Nov 8, 2011
1 parent f3ca867 commit fe29d91
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 69 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: dfded557d8c0ff9f66c6d6c4959596148db05c8e
refs/heads/master: 0bf1f883fd0ad0b6f55974aad6682de43f7305dd
Original file line number Diff line number Diff line change
Expand Up @@ -1079,7 +1079,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, false);
brcms_c_set_radio_mpc(wl->wlc);

/* register our interrupt handler */
if (request_irq(irq, brcms_isr, IRQF_SHARED, KBUILD_MODNAME, wl)) {
Expand Down
70 changes: 6 additions & 64 deletions trunk/drivers/net/wireless/brcm80211/brcmsmac/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -419,20 +419,6 @@ static int brcms_chspec_bw(u16 chanspec)
return BRCMS_10_MHZ;
}

/*
* return true if Minimum Power Consumption should
* be entered, false otherwise
*/
static bool brcms_c_is_non_delay_mpc(struct brcms_c_info *wlc)
{
return false;
}

static bool brcms_c_ismpc(struct brcms_c_info *wlc)
{
return (wlc->mpc_delay_off == 0) && (brcms_c_is_non_delay_mpc(wlc));
}

static void brcms_c_bsscfg_mfree(struct brcms_bss_cfg *cfg)
{
if (cfg == NULL)
Expand Down Expand Up @@ -4350,56 +4336,18 @@ static void brcms_b_watchdog(void *arg)

static void brcms_c_radio_mpc_upd(struct brcms_c_info *wlc)
{
bool mpc_radio, radio_state;

/*
* 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.
*/
if (!wlc->mpc) {
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);
if (!wlc->pub->radio_disabled)
return;
}

/*
* sync ismpc logic with WL_RADIO_MPC_DISABLE bit in
* wlc->pub->radio_disabled to go ON, always call radio_upd
* synchronously to go OFF, postpone radio_upd to later when
* context is safe(e.g. watchdog)
*/
radio_state =
(mboolisset(wlc->pub->radio_disabled, WL_RADIO_MPC_DISABLE) ? OFF :
ON);
mpc_radio = (brcms_c_ismpc(wlc) == true) ? OFF : ON;

if (radio_state == ON && mpc_radio == OFF)
wlc->mpc_delay_off = wlc->mpc_dlycnt;
else if (radio_state == OFF && mpc_radio == ON) {
mboolclr(wlc->pub->radio_disabled, WL_RADIO_MPC_DISABLE);
brcms_c_radio_upd(wlc);
if (wlc->mpc_offcnt < BRCMS_MPC_THRESHOLD)
wlc->mpc_dlycnt = BRCMS_MPC_MAX_DELAYCNT;
else
wlc->mpc_dlycnt = BRCMS_MPC_MIN_DELAYCNT;
}
/*
* Below logic is meant to capture the transition from mpc off
* to mpc on for reasons other than wlc->mpc_delay_off keeping
* the mpc off. In that case reset wlc->mpc_delay_off to
* wlc->mpc_dlycnt, so that we restart the countdown of mpc_delay_off
*/
if ((wlc->prev_non_delay_mpc == false) &&
(brcms_c_is_non_delay_mpc(wlc) == true) && wlc->mpc_delay_off)
wlc->mpc_delay_off = wlc->mpc_dlycnt;

wlc->prev_non_delay_mpc = brcms_c_is_non_delay_mpc(wlc);
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);
}

/* common watchdog code */
Expand Down Expand Up @@ -4427,8 +4375,6 @@ static void brcms_c_watchdog(void *arg)
if (--wlc->mpc_delay_off == 0) {
mboolset(wlc->pub->radio_disabled,
WL_RADIO_MPC_DISABLE);
if (wlc->mpc && brcms_c_ismpc(wlc))
wlc->mpc_offcnt = 0;
}
}

Expand Down Expand Up @@ -5200,9 +5146,6 @@ static void brcms_c_ap_upd(struct brcms_c_info *wlc)
{
/* STA-BSS; short capable */
wlc->PLCPHdr_override = BRCMS_PLCP_SHORT;

/* fixup mpc */
wlc->mpc = true;
}

/* Initialize just the hardware when coming out of POR or S3/S5 system states */
Expand Down Expand Up @@ -8192,9 +8135,8 @@ 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, bool mpc)
void brcms_c_set_radio_mpc(struct brcms_c_info *wlc)
{
wlc->mpc = mpc;
brcms_c_radio_mpc_upd(wlc);
}

Expand Down
2 changes: 0 additions & 2 deletions trunk/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: enable minimum power consumption.
* mpc_dlycnt: # of watchdog cnt before turn disable radio.
* mpc_offcnt: # of watchdog cnt that radio is disabled.
* mpc_delay_off: delay radio disable by # of watchdog cnt.
Expand Down Expand Up @@ -522,7 +521,6 @@ struct brcms_c_info {
bool radio_monitor;
bool going_down;

bool mpc;
u8 mpc_dlycnt;
u8 mpc_offcnt;
u8 mpc_delay_off;
Expand Down
2 changes: 1 addition & 1 deletion trunk/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, bool mpc);
extern void brcms_c_set_radio_mpc(struct brcms_c_info *wlc);
extern bool brcms_c_check_radio_disabled(struct brcms_c_info *wlc);

#endif /* _BRCM_PUB_H_ */

0 comments on commit fe29d91

Please sign in to comment.