Enable the beaconing in wnc36xx by tweaking the tim offset and
force the use of AP-style beaconing. Otherwise, beaconing is not
working. The tim offset is set to 256. Otherwise, this will
overwrite mesh beacon submitted by mac80211.
Signed-off-by: Chun-Yeow Yeoh <[email protected]>
---
drivers/net/wireless/ath/wcn36xx/smd.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index f8c3a10..19f43de 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -1134,14 +1134,14 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
/* STA */
bss->oper_mode = 1;
bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_MODE;
- } else if (vif->type == NL80211_IFTYPE_AP) {
+ } else if (vif->type == NL80211_IFTYPE_AP ||
+ vif->type == NL80211_IFTYPE_MESH_POINT) {
bss->bss_type = WCN36XX_HAL_INFRA_AP_MODE;
/* AP */
bss->oper_mode = 0;
bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_SAP_MODE;
- } else if (vif->type == NL80211_IFTYPE_ADHOC ||
- vif->type == NL80211_IFTYPE_MESH_POINT) {
+ } else if (vif->type == NL80211_IFTYPE_ADHOC) {
bss->bss_type = WCN36XX_HAL_IBSS_MODE;
/* STA */
@@ -1291,7 +1291,11 @@ int wcn36xx_smd_send_beacon(struct wcn36xx *wcn, struct ieee80211_vif *vif,
memcpy(msg_body.bssid, vif->addr, ETH_ALEN);
/* TODO need to find out why this is needed? */
- msg_body.tim_ie_offset = tim_off+4;
+ if (vif->type == NL80211_IFTYPE_MESH_POINT)
+ /* mesh beacon don't need this, so push further down */
+ msg_body.tim_ie_offset = 256;
+ else
+ msg_body.tim_ie_offset = tim_off+4;
msg_body.p2p_ie_offset = p2p_off;
PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
--
1.7.9.5
> + msg_body.tim_ie_offset = 256;
Does not look like correct value. Why 256?
I do not really remember what was the result of testing when we set
tim_ie_offset to 0. Could you please share what do you observe when
tim_ie_offset? Does FW corrupt beacon?
My concern about 256 is that FW may corrupt some memory. Also assume
the reason why FW sets TIM is because you configure FW as AP instead
of mesh with this line:
bss->bss_type = WCN36XX_HAL_INFRA_AP_MODE;
On Fri, Nov 1, 2013 at 4:33 AM, Yeoh Chun-Yeow <[email protected]> wrote:
>>
>> Also mesh beacon does need the TIM< only it must be generated by
>> mac80211. How do you tell the firmware to ignore the beacon TIM?
>
>
> Hi, Thomas
>
> The HAL send beacon request message requires the tim_ie_offset to be set.
> There is another p2p_ie_offset in the request message. By setting it to 0,
> it seems that the firmware ignores this IE while building the beacon.
> However, I try to set the tim_ie_offset to 0. But this won't work.
>
> Hi, Eugene
>
> Did you ever test the tim_ie_offset set to 0?
>
> ----
> Chun-Yeow
>
--
Best regards,
Eugene
On Thu, Oct 31, 2013 at 1:30 PM, Eugene Krasnikov <[email protected]> wrote:
>> + msg_body.tim_ie_offset = 256;
>
> Does not look like correct value. Why 256?
Also mesh beacon does need the TIM< only it must be generated by
mac80211. How do you tell the firmware to ignore the beacon TIM?
--
Thomas
Looks good to me.
On Fri, Dec 6, 2013 at 3:28 AM, Chun-Yeow Yeoh <[email protected]> wrote:
> Enable the beaconing in wnc36xx by tweaking the tim offset and
> force the use of AP-style beaconing. Otherwise, beaconing is not
> working. The tim offset is set to 256. Otherwise, this will
> overwrite mesh beacon submitted by mac80211.
>
> Signed-off-by: Chun-Yeow Yeoh <[email protected]>
> ---
> drivers/net/wireless/ath/wcn36xx/smd.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
> index f8c3a10..19f43de 100644
> --- a/drivers/net/wireless/ath/wcn36xx/smd.c
> +++ b/drivers/net/wireless/ath/wcn36xx/smd.c
> @@ -1134,14 +1134,14 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
> /* STA */
> bss->oper_mode = 1;
> bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_MODE;
> - } else if (vif->type == NL80211_IFTYPE_AP) {
> + } else if (vif->type == NL80211_IFTYPE_AP ||
> + vif->type == NL80211_IFTYPE_MESH_POINT) {
> bss->bss_type = WCN36XX_HAL_INFRA_AP_MODE;
>
> /* AP */
> bss->oper_mode = 0;
> bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_SAP_MODE;
> - } else if (vif->type == NL80211_IFTYPE_ADHOC ||
> - vif->type == NL80211_IFTYPE_MESH_POINT) {
> + } else if (vif->type == NL80211_IFTYPE_ADHOC) {
> bss->bss_type = WCN36XX_HAL_IBSS_MODE;
>
> /* STA */
> @@ -1291,7 +1291,11 @@ int wcn36xx_smd_send_beacon(struct wcn36xx *wcn, struct ieee80211_vif *vif,
> memcpy(msg_body.bssid, vif->addr, ETH_ALEN);
>
> /* TODO need to find out why this is needed? */
> - msg_body.tim_ie_offset = tim_off+4;
> + if (vif->type == NL80211_IFTYPE_MESH_POINT)
> + /* mesh beacon don't need this, so push further down */
> + msg_body.tim_ie_offset = 256;
> + else
> + msg_body.tim_ie_offset = tim_off+4;
> msg_body.p2p_ie_offset = p2p_off;
> PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
>
> --
> 1.7.9.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Best regards,
Eugene