There is an off-by-one in bwfm_update_node(). This function reads
the tx_rate field from station information returned by firmware.

According to a comment in the Linux driver, this field is valid
for sta_info command versions >= 3.

linux/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
struct brcmf_sta_info_le {
        __le16 ver;             /* version of this struct */
[...]
        /* Fields valid for ver >= 3 */
[...]
        __le32 tx_rate; /* Rate of last successful tx frame */

However, our driver only reads Tx rate info if the version is >= 4.

On the rpi2 usb wifi adapter (WLU6331) this breaks media mode display.
Firmware on this device uses command version 3, and the media mode
displayed is always "DS1 11g". Diff below fixes this. ifconfig will
now display 11n mode while associated to an 11n AP.

ok?

diff /usr/src
commit - 9badb9ad8932c12f4ece484255eb2703a2518c17
path + /usr/src
blob - 0c9c948115a0c115a43bd365ad4e389ba694c4a8
file + sys/dev/ic/bwfm.c
--- sys/dev/ic/bwfm.c
+++ sys/dev/ic/bwfm.c
@@ -703,7 +703,7 @@ bwfm_update_node(void *arg, struct ieee80211_node *ni)
        if (!IEEE80211_ADDR_EQ(ni->ni_macaddr, sta.ea))
                return;
 
-       if (le16toh(sta.ver) < 4)
+       if (le16toh(sta.ver) < 3)
                return;
 
        flags = le32toh(sta.flags);

Reply via email to