|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
|
|
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
|
|
|
*
|
|
|
* Permission to use, copy, modify, and/or distribute this software for
|
|
|
* any purpose with or without fee is hereby granted, provided that the
|
|
@@ -109,8 +109,29 @@ static QDF_STATUS send_twt_disable_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
-static QDF_STATUS send_twt_add_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
- struct wmi_twt_add_dialog_param *params)
|
|
|
+#ifdef WLAN_SUPPORT_BCAST_TWT
|
|
|
+static void
|
|
|
+twt_add_dialog_set_bcast_twt_params(struct wmi_twt_add_dialog_param *params,
|
|
|
+ wmi_twt_add_dialog_cmd_fixed_param *cmd)
|
|
|
+{
|
|
|
+ TWT_FLAGS_SET_BTWT_ID0(cmd->flags, params->flag_b_twt_id0);
|
|
|
+ cmd->b_twt_persistence = params->b_twt_persistence;
|
|
|
+ cmd->b_twt_recommendation = params->b_twt_recommendation;
|
|
|
+
|
|
|
+ return;
|
|
|
+}
|
|
|
+#else
|
|
|
+static void
|
|
|
+twt_add_dialog_set_bcast_twt_params(struct wmi_twt_add_dialog_param *params,
|
|
|
+ wmi_twt_add_dialog_cmd_fixed_param *cmd)
|
|
|
+{
|
|
|
+ return;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+static QDF_STATUS
|
|
|
+send_twt_add_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
+ struct wmi_twt_add_dialog_param *params)
|
|
|
{
|
|
|
wmi_twt_add_dialog_cmd_fixed_param *cmd;
|
|
|
wmi_buf_t buf;
|
|
@@ -124,9 +145,9 @@ static QDF_STATUS send_twt_add_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
|
|
|
cmd = (wmi_twt_add_dialog_cmd_fixed_param *) wmi_buf_data(buf);
|
|
|
WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_twt_add_dialog_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN
|
|
|
- (wmi_twt_add_dialog_cmd_fixed_param));
|
|
|
+ WMITLV_TAG_STRUC_wmi_twt_add_dialog_cmd_fixed_param,
|
|
|
+ WMITLV_GET_STRUCT_TLVLEN
|
|
|
+ (wmi_twt_add_dialog_cmd_fixed_param));
|
|
|
|
|
|
cmd->vdev_id = params->vdev_id;
|
|
|
WMI_CHAR_ARRAY_TO_MAC_ADDR(params->peer_macaddr, &cmd->peer_macaddr);
|
|
@@ -141,8 +162,10 @@ static QDF_STATUS send_twt_add_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
TWT_FLAGS_SET_FLOW_TYPE(cmd->flags, params->flag_flow_type);
|
|
|
TWT_FLAGS_SET_PROTECTION(cmd->flags, params->flag_protection);
|
|
|
|
|
|
+ twt_add_dialog_set_bcast_twt_params(params, cmd);
|
|
|
+
|
|
|
status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd),
|
|
|
- WMI_TWT_ADD_DIALOG_CMDID);
|
|
|
+ WMI_TWT_ADD_DIALOG_CMDID);
|
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
WMI_LOGE("Failed to send WMI_TWT_ADD_DIALOG_CMDID");
|
|
|
wmi_buf_free(buf);
|
|
@@ -151,8 +174,26 @@ static QDF_STATUS send_twt_add_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
-static QDF_STATUS send_twt_del_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
- struct wmi_twt_del_dialog_param *params)
|
|
|
+#ifdef WLAN_SUPPORT_BCAST_TWT
|
|
|
+static void
|
|
|
+twt_del_dialog_set_bcast_twt_params(struct wmi_twt_del_dialog_param *params,
|
|
|
+ wmi_twt_del_dialog_cmd_fixed_param *cmd)
|
|
|
+{
|
|
|
+ cmd->b_twt_persistence = params->b_twt_persistence;
|
|
|
+ return;
|
|
|
+}
|
|
|
+#else
|
|
|
+static void
|
|
|
+twt_del_dialog_set_bcast_twt_params(struct wmi_twt_del_dialog_param *params,
|
|
|
+ wmi_twt_del_dialog_cmd_fixed_param *cmd)
|
|
|
+{
|
|
|
+ return;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+static QDF_STATUS
|
|
|
+send_twt_del_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
+ struct wmi_twt_del_dialog_param *params)
|
|
|
{
|
|
|
wmi_twt_del_dialog_cmd_fixed_param *cmd;
|
|
|
wmi_buf_t buf;
|
|
@@ -166,16 +207,18 @@ static QDF_STATUS send_twt_del_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
|
|
|
cmd = (wmi_twt_del_dialog_cmd_fixed_param *) wmi_buf_data(buf);
|
|
|
WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_twt_del_dialog_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN
|
|
|
- (wmi_twt_del_dialog_cmd_fixed_param));
|
|
|
+ WMITLV_TAG_STRUC_wmi_twt_del_dialog_cmd_fixed_param,
|
|
|
+ WMITLV_GET_STRUCT_TLVLEN
|
|
|
+ (wmi_twt_del_dialog_cmd_fixed_param));
|
|
|
|
|
|
cmd->vdev_id = params->vdev_id;
|
|
|
WMI_CHAR_ARRAY_TO_MAC_ADDR(params->peer_macaddr, &cmd->peer_macaddr);
|
|
|
cmd->dialog_id = params->dialog_id;
|
|
|
|
|
|
+ twt_del_dialog_set_bcast_twt_params(params, cmd);
|
|
|
+
|
|
|
status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd),
|
|
|
- WMI_TWT_DEL_DIALOG_CMDID);
|
|
|
+ WMI_TWT_DEL_DIALOG_CMDID);
|
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
WMI_LOGE("Failed to send WMI_TWT_DEL_DIALOG_CMDID");
|
|
|
wmi_buf_free(buf);
|
|
@@ -184,8 +227,9 @@ static QDF_STATUS send_twt_del_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
-static QDF_STATUS send_twt_pause_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
- struct wmi_twt_pause_dialog_cmd_param *params)
|
|
|
+static QDF_STATUS
|
|
|
+send_twt_pause_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
+ struct wmi_twt_pause_dialog_cmd_param *params)
|
|
|
{
|
|
|
wmi_twt_pause_dialog_cmd_fixed_param *cmd;
|
|
|
wmi_buf_t buf;
|
|
@@ -199,16 +243,16 @@ static QDF_STATUS send_twt_pause_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
|
|
|
cmd = (wmi_twt_pause_dialog_cmd_fixed_param *) wmi_buf_data(buf);
|
|
|
WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
- WMITLV_TAG_STRUC_wmi_twt_pause_dialog_cmd_fixed_param,
|
|
|
- WMITLV_GET_STRUCT_TLVLEN
|
|
|
- (wmi_twt_pause_dialog_cmd_fixed_param));
|
|
|
+ WMITLV_TAG_STRUC_wmi_twt_pause_dialog_cmd_fixed_param,
|
|
|
+ WMITLV_GET_STRUCT_TLVLEN
|
|
|
+ (wmi_twt_pause_dialog_cmd_fixed_param));
|
|
|
|
|
|
cmd->vdev_id = params->vdev_id;
|
|
|
WMI_CHAR_ARRAY_TO_MAC_ADDR(params->peer_macaddr, &cmd->peer_macaddr);
|
|
|
cmd->dialog_id = params->dialog_id;
|
|
|
|
|
|
status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd),
|
|
|
- WMI_TWT_PAUSE_DIALOG_CMDID);
|
|
|
+ WMI_TWT_PAUSE_DIALOG_CMDID);
|
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
WMI_LOGE("Failed to send WMI_TWT_PAUSE_DIALOG_CMDID");
|
|
|
wmi_buf_free(buf);
|
|
@@ -252,6 +296,76 @@ static QDF_STATUS send_twt_resume_dialog_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
+#ifdef WLAN_SUPPORT_BCAST_TWT
|
|
|
+static QDF_STATUS
|
|
|
+send_twt_btwt_invite_sta_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
+ struct wmi_twt_btwt_invite_sta_cmd_param
|
|
|
+ *params)
|
|
|
+{
|
|
|
+ wmi_twt_btwt_invite_sta_cmd_fixed_param *cmd;
|
|
|
+ wmi_buf_t buf;
|
|
|
+ QDF_STATUS status;
|
|
|
+
|
|
|
+ buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd));
|
|
|
+ if (!buf) {
|
|
|
+ WMI_LOGE("Failed to allocate memory");
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+
|
|
|
+ cmd = (wmi_twt_btwt_invite_sta_cmd_fixed_param *)wmi_buf_data(buf);
|
|
|
+ WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
+ WMITLV_TAG_STRUC_wmi_twt_btwt_invite_sta_cmd_fixed_param,
|
|
|
+ WMITLV_GET_STRUCT_TLVLEN
|
|
|
+ (wmi_twt_btwt_invite_sta_cmd_fixed_param));
|
|
|
+
|
|
|
+ cmd->vdev_id = params->vdev_id;
|
|
|
+ WMI_CHAR_ARRAY_TO_MAC_ADDR(params->peer_macaddr, &cmd->peer_macaddr);
|
|
|
+ cmd->dialog_id = params->dialog_id;
|
|
|
+
|
|
|
+ status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd),
|
|
|
+ WMI_TWT_BTWT_INVITE_STA_CMDID);
|
|
|
+ if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
+ wmi_buf_free(buf);
|
|
|
+ }
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
+static QDF_STATUS
|
|
|
+send_twt_btwt_remove_sta_cmd_tlv(wmi_unified_t wmi_handle,
|
|
|
+ struct wmi_twt_btwt_remove_sta_cmd_param
|
|
|
+ *params)
|
|
|
+{
|
|
|
+ wmi_twt_btwt_remove_sta_cmd_fixed_param *cmd;
|
|
|
+ wmi_buf_t buf;
|
|
|
+ QDF_STATUS status;
|
|
|
+
|
|
|
+ buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd));
|
|
|
+ if (!buf) {
|
|
|
+ WMI_LOGE("Failed to allocate memory");
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+
|
|
|
+ cmd = (wmi_twt_btwt_remove_sta_cmd_fixed_param *)wmi_buf_data(buf);
|
|
|
+ WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
+ WMITLV_TAG_STRUC_wmi_twt_btwt_remove_sta_cmd_fixed_param,
|
|
|
+ WMITLV_GET_STRUCT_TLVLEN
|
|
|
+ (wmi_twt_btwt_remove_sta_cmd_fixed_param));
|
|
|
+
|
|
|
+ cmd->vdev_id = params->vdev_id;
|
|
|
+ WMI_CHAR_ARRAY_TO_MAC_ADDR(params->peer_macaddr, &cmd->peer_macaddr);
|
|
|
+ cmd->dialog_id = params->dialog_id;
|
|
|
+
|
|
|
+ status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd),
|
|
|
+ WMI_TWT_BTWT_REMOVE_STA_CMDID);
|
|
|
+ if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
+ wmi_buf_free(buf);
|
|
|
+ }
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
static QDF_STATUS extract_twt_enable_comp_event_tlv(wmi_unified_t wmi_handle,
|
|
|
uint8_t *evt_buf,
|
|
|
struct wmi_twt_enable_complete_event_param *params)
|
|
@@ -395,6 +509,85 @@ static QDF_STATUS extract_twt_resume_dialog_comp_event_tlv(
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
|
+#ifdef WLAN_SUPPORT_BCAST_TWT
|
|
|
+static QDF_STATUS
|
|
|
+extract_twt_btwt_invite_sta_comp_event_tlv(
|
|
|
+ wmi_unified_t wmi_handle,
|
|
|
+ uint8_t *evt_buf,
|
|
|
+ struct
|
|
|
+ wmi_twt_btwt_invite_sta_complete_event_param
|
|
|
+ *params)
|
|
|
+{
|
|
|
+ WMI_TWT_BTWT_INVITE_STA_COMPLETE_EVENTID_param_tlvs *param_buf;
|
|
|
+ wmi_twt_btwt_invite_sta_complete_event_fixed_param *ev;
|
|
|
+
|
|
|
+ param_buf =
|
|
|
+ (WMI_TWT_BTWT_INVITE_STA_COMPLETE_EVENTID_param_tlvs *)evt_buf;
|
|
|
+ if (!param_buf) {
|
|
|
+ WMI_LOGE("evt_buf is NULL");
|
|
|
+ return QDF_STATUS_E_INVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ ev = param_buf->fixed_param;
|
|
|
+
|
|
|
+ params->vdev_id = ev->vdev_id;
|
|
|
+ WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->peer_macaddr, params->peer_macaddr);
|
|
|
+ params->status = ev->status;
|
|
|
+ params->dialog_id = ev->dialog_id;
|
|
|
+
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+static QDF_STATUS
|
|
|
+extract_twt_btwt_remove_sta_comp_event_tlv(
|
|
|
+ wmi_unified_t wmi_handle,
|
|
|
+ uint8_t *evt_buf,
|
|
|
+ struct
|
|
|
+ wmi_twt_btwt_remove_sta_complete_event_param
|
|
|
+ *params)
|
|
|
+{
|
|
|
+ WMI_TWT_BTWT_REMOVE_STA_COMPLETE_EVENTID_param_tlvs *param_buf;
|
|
|
+ wmi_twt_btwt_remove_sta_complete_event_fixed_param *ev;
|
|
|
+
|
|
|
+ param_buf =
|
|
|
+ (WMI_TWT_BTWT_REMOVE_STA_COMPLETE_EVENTID_param_tlvs *)evt_buf;
|
|
|
+ if (!param_buf) {
|
|
|
+ WMI_LOGE("evt_buf is NULL");
|
|
|
+ return QDF_STATUS_E_INVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ ev = param_buf->fixed_param;
|
|
|
+
|
|
|
+ params->vdev_id = ev->vdev_id;
|
|
|
+ WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->peer_macaddr, params->peer_macaddr);
|
|
|
+ params->status = ev->status;
|
|
|
+ params->dialog_id = ev->dialog_id;
|
|
|
+
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef WLAN_SUPPORT_BCAST_TWT
|
|
|
+static void
|
|
|
+wmi_twt_attach_bcast_twt_tlv(struct wmi_ops *ops)
|
|
|
+{
|
|
|
+ ops->send_twt_btwt_invite_sta_cmd = send_twt_btwt_invite_sta_cmd_tlv;
|
|
|
+ ops->send_twt_btwt_remove_sta_cmd = send_twt_btwt_remove_sta_cmd_tlv;
|
|
|
+ ops->extract_twt_btwt_invite_sta_comp_event =
|
|
|
+ extract_twt_btwt_invite_sta_comp_event_tlv;
|
|
|
+ ops->extract_twt_btwt_remove_sta_comp_event =
|
|
|
+ extract_twt_btwt_remove_sta_comp_event_tlv;
|
|
|
+
|
|
|
+ return;
|
|
|
+}
|
|
|
+#else
|
|
|
+static void
|
|
|
+wmi_twt_attach_bcast_twt_tlv(struct wmi_ops *ops)
|
|
|
+{
|
|
|
+ return;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
void wmi_twt_attach_tlv(wmi_unified_t wmi_handle)
|
|
|
{
|
|
|
struct wmi_ops *ops = wmi_handle->ops;
|
|
@@ -416,4 +609,6 @@ void wmi_twt_attach_tlv(wmi_unified_t wmi_handle)
|
|
|
extract_twt_pause_dialog_comp_event_tlv;
|
|
|
ops->extract_twt_resume_dialog_comp_event =
|
|
|
extract_twt_resume_dialog_comp_event_tlv;
|
|
|
+
|
|
|
+ wmi_twt_attach_bcast_twt_tlv(ops);
|
|
|
}
|