const struct wmi_wmm_params_all_arg *arg)
 {
        struct wmi_tlv_vdev_set_wmm_cmd *cmd;
-       struct wmi_wmm_params *wmm;
        struct wmi_tlv *tlv;
        struct sk_buff *skb;
        size_t len;
        void *ptr;
 
-       len = (sizeof(*tlv) + sizeof(*cmd)) +
-             (4 * (sizeof(*tlv) + sizeof(*wmm)));
+       len = sizeof(*tlv) + sizeof(*cmd);
        skb = ath10k_wmi_alloc_skb(ar, len);
        if (!skb)
                return ERR_PTR(-ENOMEM);
        cmd = (void *)tlv->value;
        cmd->vdev_id = __cpu_to_le32(vdev_id);
 
-       ptr += sizeof(*tlv);
-       ptr += sizeof(*cmd);
-
-       ptr = ath10k_wmi_tlv_put_wmm(ptr, &arg->ac_be);
-       ptr = ath10k_wmi_tlv_put_wmm(ptr, &arg->ac_bk);
-       ptr = ath10k_wmi_tlv_put_wmm(ptr, &arg->ac_vi);
-       ptr = ath10k_wmi_tlv_put_wmm(ptr, &arg->ac_vo);
+       ath10k_wmi_set_wmm_param(&cmd->vdev_wmm_params[0].params, &arg->ac_be);
+       ath10k_wmi_set_wmm_param(&cmd->vdev_wmm_params[1].params, &arg->ac_bk);
+       ath10k_wmi_set_wmm_param(&cmd->vdev_wmm_params[2].params, &arg->ac_vi);
+       ath10k_wmi_set_wmm_param(&cmd->vdev_wmm_params[3].params, &arg->ac_vo);
 
        ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi tlv vdev wmm conf\n");
        return skb;
 
        __le32 dg_type; /* no idea.. */
 } __packed;
 
+struct wmi_tlv_vdev_wmm_params {
+       __le32 dummy;
+       struct wmi_wmm_params params;
+} __packed;
+
 struct wmi_tlv_vdev_set_wmm_cmd {
        __le32 vdev_id;
+       struct wmi_tlv_vdev_wmm_params vdev_wmm_params[4];
 } __packed;
 
 struct wmi_tlv_phyerr_ev {