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);