use minimal unmasked rate for multicast frames. 119/head
authorOleksij Rempel <linux@rempel-privat.de>
Fri, 16 Dec 2016 09:05:24 +0000 (10:05 +0100)
committerOleksij Rempel <linux@rempel-privat.de>
Fri, 16 Dec 2016 11:15:45 +0000 (12:15 +0100)
Current FW has ratemask interface and use it to set
minmal unmasked rate for beacons and mgmt frames.

This patch will allow to do the same with mcast.

Fallowing command will force mcast frames to be send with
54Mbit:
iw wlan0 set bitrates legacy-2.4 54

If multiple rate are set, then minimal rate will be used,
for example in this case 6Mbit:
iw wlan0 set bitrates legacy-2.4 6 54

This patch also should affect rate of injected frames.

Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
target_firmware/wlan/if_ath.c
target_firmware/wlan/if_athvar.h
target_firmware/wlan/if_owl.c

index b31fbdb67e866d883732f14ca4171515015bbfbd..cf92262b10210ef2645b8e716d7ef65331e0877d 100755 (executable)
@@ -759,6 +759,7 @@ static void tgt_HTCRecvMessageHandler(HTC_ENDPOINT_ID EndPt,
 
        bf->bf_endpt = EndPt;
        bf->bf_cookie = dh->cookie;
+       bf->vap_index = dh->vap_index;
 
        if (tid->flag & TID_AGGR_ENABLED)
                ath_tgt_handle_aggr(sc, bf);
index 40f9ffe239b45cd79ec5d9a0fa47b058df99c480..782686967dbc88baf27e629301a5db881cb45126 100755 (executable)
@@ -225,6 +225,7 @@ struct ath_tx_buf
        HTC_ENDPOINT_ID       bf_endpt;
        a_uint16_t            al_delta;
        a_uint8_t             bf_cookie;
+       a_uint8_t                       vap_index;
 };
 
 struct ath_rx_buf
index f2280691efc9ee538b075457ab4d4ccbb604f5b8..6dda78cef6b11c340fada4b4b900a118bed2ee50 100755 (executable)
@@ -969,9 +969,13 @@ ath_tgt_tx_send_normal(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
                                      rcs, &isProbe);
                ath_hal_memcpy(bf->bf_rcs, rcs, sizeof(rcs));
        } else {
+               struct ath_vap_target *avp;
+
+               avp = &sc->sc_vap[bf->vap_index];
+
                mrcs[1].tries = mrcs[2].tries = mrcs[3].tries = 0;
                mrcs[1].rix = mrcs[2].rix = mrcs[3].rix = 0;
-               mrcs[0].rix   = 0;
+               mrcs[0].rix = ath_get_minrateidx(sc, avp);
                mrcs[0].tries = 1;
                mrcs[0].flags = 0;
                ath_hal_memcpy(bf->bf_rcs, mrcs, sizeof(mrcs));