|
@@ -4129,11 +4129,23 @@ static int ath10k_conf_tx(struct ieee80211_hw *hw,
|
|
|
*/
|
|
|
p->txop = params->txop * 32;
|
|
|
|
|
|
- /* FIXME: FW accepts wmm params per hw, not per vif */
|
|
|
- ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
|
|
|
- if (ret) {
|
|
|
- ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
|
|
|
- goto exit;
|
|
|
+ if (ar->wmi.ops->gen_vdev_wmm_conf) {
|
|
|
+ ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id,
|
|
|
+ &arvif->wmm_params);
|
|
|
+ if (ret) {
|
|
|
+ ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n",
|
|
|
+ arvif->vdev_id, ret);
|
|
|
+ goto exit;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ /* This won't work well with multi-interface cases but it's
|
|
|
+ * better than nothing.
|
|
|
+ */
|
|
|
+ ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
|
|
|
+ if (ret) {
|
|
|
+ ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
|
|
|
+ goto exit;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
|