qcacmn: Add support for mlo peer delete params

Add support for mlo peer delete params

Change-Id: Ic6ef0786f73a7bb16c8a5de035b13a0a56862125
CRs-Fixed: 3188357
Этот коммит содержится в:
Himanshu Batra
2022-04-18 08:44:39 +05:30
коммит произвёл Madan Koyyalamudi
родитель d58c71c6ff
Коммит 826f250128
9 изменённых файлов: 97 добавлений и 15 удалений

Просмотреть файл

@@ -423,6 +423,17 @@ struct peer_flush_params {
uint8_t peer_mac[QDF_MAC_ADDR_SIZE]; uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
}; };
/**
* struct peer_delete_params - peer delete cmd parameter
* @vdev_id: vdev id
* @mlo_logical_link_id_bitmap: logical link id bitmap for peers
* not getting created
*/
struct peer_delete_cmd_params {
uint8_t vdev_id;
uint32_t hw_link_id_bitmap;
};
/* Default FILS DISCOVERY/probe response sent in period of 20TU */ /* Default FILS DISCOVERY/probe response sent in period of 20TU */
#define DEFAULT_FILS_DISCOVERY_PERIOD 20 #define DEFAULT_FILS_DISCOVERY_PERIOD 20
#define DEFAULT_PROBE_RESP_PERIOD 20 #define DEFAULT_PROBE_RESP_PERIOD 20

Просмотреть файл

@@ -327,6 +327,8 @@ uint16_t wlan_mlo_get_pdev_hw_link_id(struct wlan_objmgr_pdev *pdev)
return hw_link_id; return hw_link_id;
} }
qdf_export_symbol(wlan_mlo_get_pdev_hw_link_id);
static void wlan_pdev_hw_link_iterator(struct wlan_objmgr_psoc *psoc, static void wlan_pdev_hw_link_iterator(struct wlan_objmgr_psoc *psoc,
void *obj, void *arg) void *obj, void *arg)
{ {
@@ -371,6 +373,8 @@ wlan_mlo_get_pdev_by_hw_link_id(uint16_t hw_link_id,
return itr.pdev; return itr.pdev;
} }
qdf_export_symbol(wlan_mlo_get_pdev_by_hw_link_id);
#endif /*WLAN_MLO_MULTI_CHIP*/ #endif /*WLAN_MLO_MULTI_CHIP*/
void mlo_get_ml_vdev_list(struct wlan_objmgr_vdev *vdev, void mlo_get_ml_vdev_list(struct wlan_objmgr_vdev *vdev,

Просмотреть файл

@@ -134,6 +134,25 @@ size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req);
*/ */
uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr, uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr,
struct peer_assoc_params *req); struct peer_assoc_params *req);
/**
* peer_delete_mlo_params_size() - Get MLO params size in pdev delete
* @req: peer delete request params
*
* Return: size of MLO params in vdev start
*/
size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req);
/**
* peer_delete_add_mlo_params() - Add MLO params in peer delete cmd
* @buf_ptr: pointer to peer delete cmd buffer.
* @req: ponter to peer delete request param
*
* Return: pointer to new offset of cmd buffer
*/
uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
struct peer_delete_cmd_params *req);
/** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks
* @wmi_handle: WMI handle * @wmi_handle: WMI handle
*/ */
@@ -229,6 +248,18 @@ static uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr,
return buf_ptr + WMI_TLV_HDR_SIZE; return buf_ptr + WMI_TLV_HDR_SIZE;
} }
static size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req)
{
return WMI_TLV_HDR_SIZE;
}
static uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
struct peer_delete_cmd_params *req)
{
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
return buf_ptr + WMI_TLV_HDR_SIZE;
}
static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle) static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle)
{ } { }
#endif /*WLAN_FEATURE_11BE_MLO*/ #endif /*WLAN_FEATURE_11BE_MLO*/

Просмотреть файл

@@ -913,14 +913,14 @@ QDF_STATUS wmi_unified_sifs_trigger_send(wmi_unified_t wmi_handle,
* wmi_unified_peer_delete_send() - send PEER delete command to fw * wmi_unified_peer_delete_send() - send PEER delete command to fw
* @wmi_handle: wmi handle * @wmi_handle: wmi handle
* @peer_addr: peer mac addr * @peer_addr: peer mac addr
* @vdev_id: vdev id * @param: pointer to hold peer delete parameters
* *
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
*/ */
QDF_STATUS QDF_STATUS
wmi_unified_peer_delete_send(wmi_unified_t wmi_handle, wmi_unified_peer_delete_send(wmi_unified_t wmi_handle,
uint8_t peer_addr[QDF_MAC_ADDR_SIZE], uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
uint8_t vdev_id); struct peer_delete_cmd_params *param);
/** /**
* wmi_unified_peer_flush_tids_send() - flush peer tids packets in fw * wmi_unified_peer_flush_tids_send() - flush peer tids packets in fw

Просмотреть файл

@@ -494,8 +494,8 @@ QDF_STATUS (*send_peer_flush_tids_cmd)(wmi_unified_t wmi,
struct peer_flush_params *param); struct peer_flush_params *param);
QDF_STATUS (*send_peer_delete_cmd)(wmi_unified_t wmi, QDF_STATUS (*send_peer_delete_cmd)(wmi_unified_t wmi,
uint8_t peer_addr[QDF_MAC_ADDR_SIZE], uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
uint8_t vdev_id); struct peer_delete_cmd_params *param);
QDF_STATUS (*send_peer_delete_all_cmd)( QDF_STATUS (*send_peer_delete_all_cmd)(
wmi_unified_t wmi, wmi_unified_t wmi,

Просмотреть файл

@@ -251,6 +251,36 @@ uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr,
sizeof(wmi_peer_assoc_mlo_partner_link_params)); sizeof(wmi_peer_assoc_mlo_partner_link_params));
} }
size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req)
{
if (!req->hw_link_id_bitmap)
return WMI_TLV_HDR_SIZE;
return sizeof(wmi_peer_delete_mlo_params) + WMI_TLV_HDR_SIZE;
}
uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
struct peer_delete_cmd_params *req)
{
wmi_peer_delete_mlo_params *mlo_params;
if (!req->hw_link_id_bitmap) {
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
return buf_ptr + WMI_TLV_HDR_SIZE;
}
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
sizeof(wmi_peer_delete_mlo_params));
buf_ptr += sizeof(uint32_t);
mlo_params = (wmi_peer_delete_mlo_params *)buf_ptr;
WMITLV_SET_HDR(&mlo_params->tlv_header,
WMITLV_TAG_STRUC_wmi_peer_delete_mlo_params,
WMITLV_GET_STRUCT_TLVLEN(wmi_peer_delete_mlo_params));
mlo_params->mlo_hw_link_id_bitmap = req->hw_link_id_bitmap;
return buf_ptr + sizeof(wmi_peer_delete_mlo_params);
}
/** /**
* force_mode_host_to_fw() - translate force mode for MLO link set active * force_mode_host_to_fw() - translate force mode for MLO link set active
* command * command

Просмотреть файл

@@ -162,11 +162,12 @@ wmi_unified_peer_flush_tids_send(wmi_unified_t wmi_handle,
QDF_STATUS wmi_unified_peer_delete_send(wmi_unified_t wmi_handle, QDF_STATUS wmi_unified_peer_delete_send(wmi_unified_t wmi_handle,
uint8_t peer_addr[QDF_MAC_ADDR_SIZE], uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
uint8_t vdev_id) struct peer_delete_cmd_params *param)
{ {
if (wmi_handle->ops->send_peer_delete_cmd) if (wmi_handle->ops->send_peer_delete_cmd)
return wmi_handle->ops->send_peer_delete_cmd(wmi_handle, return wmi_handle->ops->send_peer_delete_cmd(
peer_addr, vdev_id); wmi_handle,
peer_addr, param);
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }

Просмотреть файл

@@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. 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
@@ -379,7 +380,7 @@ static QDF_STATUS fake_peer_create_cmd_tlv(wmi_unified_t wmi,
*/ */
static QDF_STATUS fake_peer_delete_cmd_tlv(wmi_unified_t wmi, static QDF_STATUS fake_peer_delete_cmd_tlv(wmi_unified_t wmi,
uint8_t peer_addr[QDF_MAC_ADDR_SIZE], uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
uint8_t vdev_id) struct peer_delete_cmd_params *param)
{ {
wmi_debug("called"); wmi_debug("called");
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;

Просмотреть файл

@@ -1286,38 +1286,42 @@ static QDF_STATUS send_peer_flush_tids_cmd_tlv(wmi_unified_t wmi,
* send_peer_delete_cmd_tlv() - send PEER delete command to fw * send_peer_delete_cmd_tlv() - send PEER delete command to fw
* @wmi: wmi handle * @wmi: wmi handle
* @peer_addr: peer mac addr * @peer_addr: peer mac addr
* @vdev_id: vdev id * @param: peer delete parameters
* *
* Return: QDF_STATUS_SUCCESS for success or error code * Return: QDF_STATUS_SUCCESS for success or error code
*/ */
static QDF_STATUS send_peer_delete_cmd_tlv(wmi_unified_t wmi, static QDF_STATUS send_peer_delete_cmd_tlv(wmi_unified_t wmi,
uint8_t peer_addr[QDF_MAC_ADDR_SIZE], uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
uint8_t vdev_id) struct peer_delete_cmd_params *param)
{ {
wmi_peer_delete_cmd_fixed_param *cmd; wmi_peer_delete_cmd_fixed_param *cmd;
wmi_buf_t buf; wmi_buf_t buf;
int32_t len = sizeof(*cmd); int32_t len = sizeof(*cmd);
uint8_t *buf_ptr;
len += peer_delete_mlo_params_size(param);
buf = wmi_buf_alloc(wmi, len); buf = wmi_buf_alloc(wmi, len);
if (!buf) if (!buf)
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
cmd = (wmi_peer_delete_cmd_fixed_param *) wmi_buf_data(buf); buf_ptr = (uint8_t *)wmi_buf_data(buf);
cmd = (wmi_peer_delete_cmd_fixed_param *)buf_ptr;
WMITLV_SET_HDR(&cmd->tlv_header, WMITLV_SET_HDR(&cmd->tlv_header,
WMITLV_TAG_STRUC_wmi_peer_delete_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_peer_delete_cmd_fixed_param,
WMITLV_GET_STRUCT_TLVLEN WMITLV_GET_STRUCT_TLVLEN
(wmi_peer_delete_cmd_fixed_param)); (wmi_peer_delete_cmd_fixed_param));
WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr); WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr);
cmd->vdev_id = vdev_id; cmd->vdev_id = param->vdev_id;
buf_ptr = (uint8_t *)(((uintptr_t) cmd) + sizeof(*cmd));
buf_ptr = peer_delete_add_mlo_params(buf_ptr, param);
wmi_debug("peer_addr "QDF_MAC_ADDR_FMT" vdev_id %d", wmi_debug("peer_addr "QDF_MAC_ADDR_FMT" vdev_id %d",
QDF_MAC_ADDR_REF(peer_addr), vdev_id); QDF_MAC_ADDR_REF(peer_addr), param->vdev_id);
wmi_mtrace(WMI_PEER_DELETE_CMDID, cmd->vdev_id, 0); wmi_mtrace(WMI_PEER_DELETE_CMDID, cmd->vdev_id, 0);
if (wmi_unified_cmd_send(wmi, buf, len, WMI_PEER_DELETE_CMDID)) { if (wmi_unified_cmd_send(wmi, buf, len, WMI_PEER_DELETE_CMDID)) {
wmi_err("Failed to send peer delete command"); wmi_err("Failed to send peer delete command");
wmi_buf_free(buf); wmi_buf_free(buf);
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
return 0; return 0;
} }