|
@@ -3135,6 +3135,37 @@ ath10k_wmi_tlv_op_gen_tdls_peer_update(struct ath10k *ar,
|
|
|
return skb;
|
|
|
}
|
|
|
|
|
|
+static struct sk_buff *
|
|
|
+ath10k_wmi_tlv_op_gen_pdev_set_quiet_mode(struct ath10k *ar, u32 period,
|
|
|
+ u32 duration, u32 next_offset,
|
|
|
+ u32 enabled)
|
|
|
+{
|
|
|
+ struct wmi_tlv_set_quiet_cmd *cmd;
|
|
|
+ struct wmi_tlv *tlv;
|
|
|
+ struct sk_buff *skb;
|
|
|
+
|
|
|
+ skb = ath10k_wmi_alloc_skb(ar, sizeof(*tlv) + sizeof(*cmd));
|
|
|
+ if (!skb)
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
+
|
|
|
+ tlv = (void *)skb->data;
|
|
|
+ tlv->tag = __cpu_to_le16(WMI_TLV_TAG_STRUCT_PDEV_SET_QUIET_CMD);
|
|
|
+ tlv->len = __cpu_to_le16(sizeof(*cmd));
|
|
|
+ cmd = (void *)tlv->value;
|
|
|
+
|
|
|
+ /* vdev_id is not in use, set to 0 */
|
|
|
+ cmd->vdev_id = __cpu_to_le32(0);
|
|
|
+ cmd->period = __cpu_to_le32(period);
|
|
|
+ cmd->duration = __cpu_to_le32(duration);
|
|
|
+ cmd->next_start = __cpu_to_le32(next_offset);
|
|
|
+ cmd->enabled = __cpu_to_le32(enabled);
|
|
|
+
|
|
|
+ ath10k_dbg(ar, ATH10K_DBG_WMI,
|
|
|
+ "wmi tlv quiet param: period %u duration %u enabled %d\n",
|
|
|
+ period, duration, enabled);
|
|
|
+ return skb;
|
|
|
+}
|
|
|
+
|
|
|
static struct sk_buff *
|
|
|
ath10k_wmi_tlv_op_gen_wow_enable(struct ath10k *ar)
|
|
|
{
|
|
@@ -3854,7 +3885,7 @@ static const struct wmi_ops wmi_tlv_ops = {
|
|
|
.gen_dbglog_cfg = ath10k_wmi_tlv_op_gen_dbglog_cfg,
|
|
|
.gen_pktlog_enable = ath10k_wmi_tlv_op_gen_pktlog_enable,
|
|
|
.gen_pktlog_disable = ath10k_wmi_tlv_op_gen_pktlog_disable,
|
|
|
- /* .gen_pdev_set_quiet_mode not implemented */
|
|
|
+ .gen_pdev_set_quiet_mode = ath10k_wmi_tlv_op_gen_pdev_set_quiet_mode,
|
|
|
.gen_pdev_get_temperature = ath10k_wmi_tlv_op_gen_pdev_get_temperature,
|
|
|
/* .gen_addba_clear_resp not implemented */
|
|
|
/* .gen_addba_send not implemented */
|