According to zxystd from OpenIntelWireless, the following change fixed
fatal firmware errors seen during HT protection updates for them.

I have not seen the issue myself, but I don't think this change can hurt.
If it fixes firmware errors in an edge case, all the better.

This essentially aligns the flags we send to firmware with those used
by Linux iwlwifi. Setting the FAT protection flag while we're using
20 MHz channels doesn't really make a lot of sense to me but apparently
firmware expects it to be set regardless. And since Linux does not use the
CTS_EN flag it might be better to avoid using that flag?

ok?

The corresponding change in OpenIntelWireless is this one:
https://github.com/OpenIntelWireless/itlwm/commit/032a14185a434b7181c0e78a953dc2e1c21a0853
 
diff 97717a5af75b97bcfcce7ae087b98ea37fd88190 
c1fe4cc52d46fbf399a26531f8e540ff96486f00
blob - e33fe39b9784c5bd4f8b28099af9f97c04e49c65
blob + a8629aa87c1373f86ae105bf84ae3c2ce8aca7b3
--- sys/dev/pci/if_iwm.c
+++ sys/dev/pci/if_iwm.c
@@ -7678,10 +7678,8 @@ iwm_mac_ctxt_cmd_common(struct iwm_softc *sc, struct i
                case IEEE80211_HTPROT_NONMEMBER:
                case IEEE80211_HTPROT_NONHT_MIXED:
                        cmd->protection_flags |=
-                           htole32(IWM_MAC_PROT_FLG_HT_PROT);
-                       if (ic->ic_protmode == IEEE80211_PROT_CTSONLY)
-                               cmd->protection_flags |=
-                                   htole32(IWM_MAC_PROT_FLG_SELF_CTS_EN);
+                           htole32(IWM_MAC_PROT_FLG_HT_PROT |
+                           IWM_MAC_PROT_FLG_FAT_PROT);
                        break;
                case IEEE80211_HTPROT_20MHZ:
                        if (ic->ic_htcaps & IEEE80211_HTCAP_CBW20_40) {
@@ -7689,9 +7687,6 @@ iwm_mac_ctxt_cmd_common(struct iwm_softc *sc, struct i
                                cmd->protection_flags |=
                                    htole32(IWM_MAC_PROT_FLG_HT_PROT |
                                    IWM_MAC_PROT_FLG_FAT_PROT);
-                               if (ic->ic_protmode == IEEE80211_PROT_CTSONLY)
-                                       cmd->protection_flags |= htole32(
-                                           IWM_MAC_PROT_FLG_SELF_CTS_EN);
                        }
                        break;
                default:
blob - 21bc8be34500730264ad206513951a32fcb2d702
blob + 95da2db085e4b8b03b21e67a26e4fee5e1dc75f5
--- sys/dev/pci/if_iwx.c
+++ sys/dev/pci/if_iwx.c
@@ -5891,10 +5891,8 @@ iwx_mac_ctxt_cmd_common(struct iwx_softc *sc, struct i
                case IEEE80211_HTPROT_NONMEMBER:
                case IEEE80211_HTPROT_NONHT_MIXED:
                        cmd->protection_flags |=
-                           htole32(IWX_MAC_PROT_FLG_HT_PROT);
-                       if (ic->ic_protmode == IEEE80211_PROT_CTSONLY)
-                               cmd->protection_flags |=
-                                   htole32(IWX_MAC_PROT_FLG_SELF_CTS_EN);
+                           htole32(IWX_MAC_PROT_FLG_HT_PROT |
+                           IWX_MAC_PROT_FLG_FAT_PROT);
                        break;
                case IEEE80211_HTPROT_20MHZ:
                        if (ic->ic_htcaps & IEEE80211_HTCAP_CBW20_40) {
@@ -5902,9 +5900,6 @@ iwx_mac_ctxt_cmd_common(struct iwx_softc *sc, struct i
                                cmd->protection_flags |=
                                    htole32(IWX_MAC_PROT_FLG_HT_PROT |
                                    IWX_MAC_PROT_FLG_FAT_PROT);
-                               if (ic->ic_protmode == IEEE80211_PROT_CTSONLY)
-                                       cmd->protection_flags |= htole32(
-                                           IWX_MAC_PROT_FLG_SELF_CTS_EN);
                        }
                        break;
                default:

Reply via email to