From 2694f2ff0f4222b01cccaab18e9486d77547c512 Mon Sep 17 00:00:00 2001 From: Dmitry Tarnyagin Date: Wed, 29 Feb 2012 15:15:13 +0100 Subject: cw1200: Set p2p mode info in p2p STA and GO modes. p2p powersave configuration request is called ar early stage, before p2p STA is associated with a GO. p2p mode info MIB was not set in firmware due to that. The change sets p2p MIB after successful association and inGO mode. ST-Ericsson ID: 400498 Change-Id: Ibee23637899a4e80fd99765aaa04454ce44339f9 Signed-off-by: Dmitry Tarnyagin Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/42154 Reviewed-by: Bartosz MARKOWSKI Tested-by: Bartosz MARKOWSKI --- drivers/staging/cw1200/ap.c | 14 ++++++++++++++ drivers/staging/cw1200/sta.c | 24 ++++++++++++++++++------ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/drivers/staging/cw1200/ap.c b/drivers/staging/cw1200/ap.c index ca2abbe93b8..e26529dc528 100644 --- a/drivers/staging/cw1200/ap.c +++ b/drivers/staging/cw1200/ap.c @@ -500,6 +500,13 @@ void cw1200_bss_info_changed(struct ieee80211_hw *dev, } cw1200_set_pm(priv, &priv->powersave_mode); + if (priv->vif->p2p) { + ap_printk(KERN_DEBUG + "[STA] Setting p2p powersave " + "configuration.\n"); + WARN_ON(wsm_set_p2p_ps_modeinfo(priv, + &priv->p2p_ps_modeinfo)); + } if (priv->is_BT_Present) WARN_ON(cw1200_set_btcoexinfo(priv)); @@ -864,6 +871,13 @@ static int cw1200_start_ap(struct cw1200_common *priv) ret = WARN_ON(wsm_start(priv, &start)); if (!ret) ret = WARN_ON(cw1200_upload_keys(priv)); + if (!ret && priv->vif->p2p) { + ap_printk(KERN_DEBUG + "[AP] Setting p2p powersave " + "configuration.\n"); + WARN_ON(wsm_set_p2p_ps_modeinfo(priv, + &priv->p2p_ps_modeinfo)); + } if (!ret) { WARN_ON(wsm_set_block_ack_policy(priv, 0, 0)); diff --git a/drivers/staging/cw1200/sta.c b/drivers/staging/cw1200/sta.c index 6c5ff577e32..ad85f29008a 100644 --- a/drivers/staging/cw1200/sta.c +++ b/drivers/staging/cw1200/sta.c @@ -322,6 +322,9 @@ int cw1200_config(struct ieee80211_hw *dev, u32 changed) struct wsm_p2p_ps_modeinfo *modeinfo; modeinfo = &priv->p2p_ps_modeinfo; sta_printk(KERN_DEBUG "[STA] IEEE80211_CONF_CHANGE_P2P_PS\n"); + sta_printk(KERN_DEBUG "[STA] Legacy PS: %d for AID %d " + "in %d mode.\n", conf->p2p_ps.legacy_ps, + priv->bss_params.aid, priv->join_status); if (conf->p2p_ps.legacy_ps >= 0) { if (conf->p2p_ps.legacy_ps > 0) @@ -333,11 +336,15 @@ int cw1200_config(struct ieee80211_hw *dev, u32 changed) cw1200_set_pm(priv, &priv->powersave_mode); } + sta_printk(KERN_DEBUG "[STA] CTWindow: %d\n", + conf->p2p_ps.ctwindow); if (conf->p2p_ps.ctwindow >= 128) modeinfo->oppPsCTWindow = 127; else if (conf->p2p_ps.ctwindow >= 0) modeinfo->oppPsCTWindow = conf->p2p_ps.ctwindow; + sta_printk(KERN_DEBUG "[STA] Opportunistic: %d\n", + conf->p2p_ps.opp_ps); switch (conf->p2p_ps.opp_ps) { case 0: modeinfo->oppPsCTWindow &= ~(BIT(7)); @@ -349,6 +356,11 @@ int cw1200_config(struct ieee80211_hw *dev, u32 changed) break; } + sta_printk(KERN_DEBUG "[STA] NOA: %d, %d, %d, %d\n", + conf->p2p_ps.count, + conf->p2p_ps.start, + conf->p2p_ps.duration, + conf->p2p_ps.interval); /* Notice of Absence */ modeinfo->count = conf->p2p_ps.count; modeinfo->startTime = __cpu_to_le32(conf->p2p_ps.start); @@ -360,14 +372,14 @@ int cw1200_config(struct ieee80211_hw *dev, u32 changed) else modeinfo->dtimCount = 0; - if (priv->join_status == CW1200_JOIN_STATUS_STA || - priv->join_status == CW1200_JOIN_STATUS_AP) { #if defined(CONFIG_CW1200_STA_DEBUG) - print_hex_dump_bytes("p2p_ps_modeinfo: ", - DUMP_PREFIX_NONE, - (u8 *)modeinfo, - sizeof(*modeinfo)); + print_hex_dump_bytes("p2p_ps_modeinfo: ", + DUMP_PREFIX_NONE, + (u8 *)modeinfo, + sizeof(*modeinfo)); #endif /* CONFIG_CW1200_STA_DEBUG */ + if (priv->join_status == CW1200_JOIN_STATUS_STA || + priv->join_status == CW1200_JOIN_STATUS_AP) { WARN_ON(wsm_set_p2p_ps_modeinfo(priv, modeinfo)); } } -- cgit v1.2.3