qcacmn: Add support to offload igmp feature to fw

Send command with required params to offload igmp
feature to fw.

Change-Id: I8b34b3f465c85db6b6cccd5fba439bee1c5640f4
CRs-Fixed: 2908041
This commit is contained in:
sheenam monga
2021-03-25 11:47:04 +05:30
committed by snandini
parent a5e6565dd6
commit 9b74a6bc2a
4 changed files with 107 additions and 3 deletions

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2017-2019, 2021 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -387,4 +387,16 @@ QDF_STATUS wmi_unified_app_type1_params_in_fw_cmd(
struct app_type1_params *app_type1_params); struct app_type1_params *app_type1_params);
#endif /* WLAN_FEATURE_EXTWOW_SUPPORT */ #endif /* WLAN_FEATURE_EXTWOW_SUPPORT */
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
/**
* wmi_unified_send_igmp_offload_cmd() - send igmp offload cmd to fw
* @wmi_hdl: wmi handle
* @pmo_igmp_req: igmp params
*
* Return: Success or failure
*/
QDF_STATUS
wmi_unified_send_igmp_offload_cmd(wmi_unified_t wmi_handle,
struct pmo_igmp_offload_req *pmo_igmp_req);
#endif
#endif /* _WMI_UNIFIED_PMO_API_H_ */ #endif /* _WMI_UNIFIED_PMO_API_H_ */

View File

@@ -868,6 +868,10 @@ QDF_STATUS (*send_gtk_offload_cmd)(wmi_unified_t wmi_handle, uint8_t vdev_id,
struct pmo_gtk_req *params, struct pmo_gtk_req *params,
bool enable_offload, bool enable_offload,
uint32_t gtk_offload_opcode); uint32_t gtk_offload_opcode);
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
QDF_STATUS (*send_igmp_offload_cmd)(wmi_unified_t wmi_handle,
struct pmo_igmp_offload_req *pmo_igmp_req);
#endif
QDF_STATUS (*send_process_gtk_offload_getinfo_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_process_gtk_offload_getinfo_cmd)(wmi_unified_t wmi_handle,
uint8_t vdev_id, uint8_t vdev_id,

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2017-2019, 2021 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -138,6 +138,19 @@ QDF_STATUS wmi_unified_send_gtk_offload_cmd(wmi_unified_t wmi_handle,
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
QDF_STATUS
wmi_unified_send_igmp_offload_cmd(wmi_unified_t wmi_handle,
struct pmo_igmp_offload_req *pmo_igmp_req)
{
if (wmi_handle->ops->send_igmp_offload_cmd)
return wmi_handle->ops->send_igmp_offload_cmd(wmi_handle,
pmo_igmp_req);
return QDF_STATUS_E_FAILURE;
}
#endif
QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd( QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd(
wmi_unified_t wmi_handle, wmi_unified_t wmi_handle,
uint8_t vdev_id, uint8_t vdev_id,

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -762,6 +762,78 @@ fill_fils_tlv_params(WMI_GTK_OFFLOAD_CMD_fixed_param *cmd,
GTK_REPLAY_COUNTER_BYTES); GTK_REPLAY_COUNTER_BYTES);
} }
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
/**
* send_igmp_offload_cmd_tlv() - send IGMP offload command to fw
* @wmi_handle: wmi handle
* @params: IGMP offload parameters
*
* Return: CDF status
*/
static
QDF_STATUS send_igmp_offload_cmd_tlv(wmi_unified_t wmi_handle,
struct pmo_igmp_offload_req *pmo_igmp_req)
{
wmi_buf_t buf;
uint8_t *buf_ptr;
int len;
int i = 0;
WMI_IPV4_ADDR *ipv4_list;
wmi_igmp_offload_fixed_param *cmd;
QDF_STATUS status = QDF_STATUS_SUCCESS;
len = sizeof(wmi_igmp_offload_fixed_param) + WMI_TLV_HDR_SIZE +
(pmo_igmp_req->num_grp_ip_address) * sizeof(WMI_IPV4_ADDR);
/* alloc wmi buffer */
buf = wmi_buf_alloc(wmi_handle, len);
if (!buf) {
status = QDF_STATUS_E_NOMEM;
goto out;
}
buf_ptr = (uint8_t *)wmi_buf_data(buf);
cmd = (wmi_igmp_offload_fixed_param *)wmi_buf_data(buf);
WMITLV_SET_HDR(&cmd->tlv_header,
WMITLV_TAG_STRUC_wmi_igmp_offload_fixed_param,
WMITLV_GET_STRUCT_TLVLEN(wmi_igmp_offload_fixed_param));
cmd->vdev_id = pmo_igmp_req->vdev_id;
cmd->enable = pmo_igmp_req->enable;
cmd->version_support_bitmask =
pmo_igmp_req->version_support;
buf_ptr += sizeof(*cmd);
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_FIXED_STRUC,
sizeof(WMI_IPV4_ADDR) *
pmo_igmp_req->num_grp_ip_address);
ipv4_list = (WMI_IPV4_ADDR *)(buf_ptr + WMI_TLV_HDR_SIZE);
while (i < pmo_igmp_req->num_grp_ip_address) {
qdf_mem_copy((void *)((*(ipv4_list + i)).address),
(void *)&(pmo_igmp_req->grp_ip_address[i]),
WMI_IPV4_ADDR_LEN);
wmi_debug("piv4[%d]:%x", i, *(uint32_t *)(ipv4_list + i));
i++;
}
wmi_debug("VDEVID:%d, FLAG:x%x version support:%d",
cmd->vdev_id, cmd->enable,
cmd->version_support_bitmask);
/* send the wmi command */
wmi_mtrace(WMI_VDEV_IGMP_OFFLOAD_CMDID, cmd->vdev_id, 0);
if (wmi_unified_cmd_send(wmi_handle, buf, len,
WMI_VDEV_IGMP_OFFLOAD_CMDID)) {
wmi_err("Failed to send WMI_VDEV_IGMP_OFFLOAD_CMDID");
wmi_buf_free(buf);
status = QDF_STATUS_E_FAILURE;
}
out:
return status;
}
#endif
/** /**
* send_gtk_offload_cmd_tlv() - send GTK offload command to fw * send_gtk_offload_cmd_tlv() - send GTK offload command to fw
* @wmi_handle: wmi handle * @wmi_handle: wmi handle
@@ -1953,6 +2025,9 @@ void wmi_pmo_attach_tlv(wmi_unified_t wmi_handle)
send_multiple_add_clear_mcbc_filter_cmd_tlv; send_multiple_add_clear_mcbc_filter_cmd_tlv;
ops->send_conf_hw_filter_cmd = send_conf_hw_filter_cmd_tlv; ops->send_conf_hw_filter_cmd = send_conf_hw_filter_cmd_tlv;
ops->send_gtk_offload_cmd = send_gtk_offload_cmd_tlv; ops->send_gtk_offload_cmd = send_gtk_offload_cmd_tlv;
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
ops->send_igmp_offload_cmd = send_igmp_offload_cmd_tlv;
#endif
ops->send_process_gtk_offload_getinfo_cmd = ops->send_process_gtk_offload_getinfo_cmd =
send_process_gtk_offload_getinfo_cmd_tlv; send_process_gtk_offload_getinfo_cmd_tlv;
ops->send_enable_enhance_multicast_offload_cmd = ops->send_enable_enhance_multicast_offload_cmd =