qcacmn: Register callback to get max supported FW phymode
Register a callback to get max supported FW phymode for the given channel list. Also, corrected the array index value used to populate the DFS flag and phymode. Change-Id: Id635a159acac085827831726d3020cc209b810cf CRs-Fixed: 3083405
This commit is contained in:

committed by
Madan Koyyalamudi

vanhempi
6083809cd0
commit
236152dcc0
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021-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
|
||||||
@@ -513,6 +513,20 @@ QDF_STATUS wifi_pos_register_get_pdev_id_by_dev_name(
|
|||||||
struct wlan_objmgr_psoc *psoc,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
QDF_STATUS (*handler)(char *dev_name, uint8_t *pdev_id,
|
QDF_STATUS (*handler)(char *dev_name, uint8_t *pdev_id,
|
||||||
struct wlan_objmgr_psoc **psoc));
|
struct wlan_objmgr_psoc **psoc));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wifi_pos_register_get_max_fw_phymode_for_channels: API to register callback
|
||||||
|
* to get FW phymode for the given channels.
|
||||||
|
* @psoc: pointer to global psoc object
|
||||||
|
* @handler: callback to be registered
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS in case of success, error codes in case of failure
|
||||||
|
*/
|
||||||
|
QDF_STATUS wifi_pos_register_get_max_fw_phymode_for_channels(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
QDF_STATUS (*handler)(struct wlan_objmgr_pdev *pdev,
|
||||||
|
struct wifi_pos_channel_power *chan_list,
|
||||||
|
uint16_t wifi_pos_num_chans));
|
||||||
#endif /* CNSS_GENL */
|
#endif /* CNSS_GENL */
|
||||||
|
|
||||||
#if !defined(CNSS_GENL) && defined(WLAN_RTT_MEASUREMENT_NOTIFICATION)
|
#if !defined(CNSS_GENL) && defined(WLAN_RTT_MEASUREMENT_NOTIFICATION)
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021-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
|
||||||
@@ -438,6 +438,35 @@ QDF_STATUS wifi_pos_register_measurement_request_notification(
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
#endif /* WLAN_RTT_MEASUREMENT_NOTIFICATION */
|
#endif /* WLAN_RTT_MEASUREMENT_NOTIFICATION */
|
||||||
|
|
||||||
|
QDF_STATUS wifi_pos_register_get_max_fw_phymode_for_channels(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
QDF_STATUS (*handler)(struct wlan_objmgr_pdev *pdev,
|
||||||
|
struct wifi_pos_channel_power *chan_list,
|
||||||
|
uint16_t wifi_pos_num_chans))
|
||||||
|
{
|
||||||
|
struct wifi_pos_psoc_priv_obj *wifi_pos_psoc;
|
||||||
|
|
||||||
|
if (!psoc) {
|
||||||
|
wifi_pos_err("psoc is null");
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!handler) {
|
||||||
|
wifi_pos_err("Null callback");
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wifi_pos_psoc = wifi_pos_get_psoc_priv_obj(psoc);
|
||||||
|
if (!wifi_pos_psoc) {
|
||||||
|
wifi_pos_err("wifi_pos priv obj is null");
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wifi_pos_psoc->wifi_pos_get_max_fw_phymode_for_channels = handler;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif /* CNSS_GENL */
|
#endif /* CNSS_GENL */
|
||||||
|
|
||||||
QDF_STATUS wifi_pos_register_send_action(
|
QDF_STATUS wifi_pos_register_send_action(
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021-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
|
||||||
@@ -505,6 +505,13 @@ static void wifi_pos_pdev_iterator(struct wlan_objmgr_psoc *psoc,
|
|||||||
struct channel_power *ch_info = NULL;
|
struct channel_power *ch_info = NULL;
|
||||||
struct wifi_pos_channel_power *wifi_pos_ch;
|
struct wifi_pos_channel_power *wifi_pos_ch;
|
||||||
int i;
|
int i;
|
||||||
|
struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
|
||||||
|
wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
|
||||||
|
|
||||||
|
if (!wifi_pos_psoc) {
|
||||||
|
wifi_pos_err("wifi_pos priv obj is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!chan_list) {
|
if (!chan_list) {
|
||||||
wifi_pos_err("wifi_pos priv arg is null");
|
wifi_pos_err("wifi_pos priv arg is null");
|
||||||
@@ -546,6 +553,16 @@ static void wifi_pos_pdev_iterator(struct wlan_objmgr_psoc *psoc,
|
|||||||
ch_info[i].center_freq, &wifi_pos_ch[i]);
|
ch_info[i].center_freq, &wifi_pos_ch[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wifi_pos_psoc->wifi_pos_get_max_fw_phymode_for_channels) {
|
||||||
|
status = wifi_pos_psoc->wifi_pos_get_max_fw_phymode_for_channels(
|
||||||
|
pdev, wifi_pos_ch, num_channels);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
wifi_pos_err("Failed to get phymode");
|
||||||
|
qdf_mem_free(ch_info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
chan_list->num_channels += num_channels;
|
chan_list->num_channels += num_channels;
|
||||||
qdf_mem_free(ch_info);
|
qdf_mem_free(ch_info);
|
||||||
}
|
}
|
||||||
@@ -712,11 +729,11 @@ static QDF_STATUS wifi_pos_process_ch_info_req(struct wlan_objmgr_psoc *psoc,
|
|||||||
REG_SET_CHANNEL_MAX_TX_POWER(ch_info[idx].reg_info_2,
|
REG_SET_CHANNEL_MAX_TX_POWER(ch_info[idx].reg_info_2,
|
||||||
ch[idx].ch_power.tx_power);
|
ch[idx].ch_power.tx_power);
|
||||||
|
|
||||||
if (ch[i].is_dfs_chan)
|
if (ch[idx].is_dfs_chan)
|
||||||
WIFI_POS_SET_DFS(ch_info[idx].info);
|
WIFI_POS_SET_DFS(ch_info[idx].info);
|
||||||
|
|
||||||
if (ch[i].phy_mode)
|
if (ch[idx].phy_mode)
|
||||||
REG_SET_CHANNEL_MODE(&ch_info[idx], ch[i].phy_mode);
|
REG_SET_CHANNEL_MODE(&ch_info[idx], ch[idx].phy_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
wifi_pos_obj->wifi_pos_send_rsp(psoc, wifi_pos_obj->app_pid,
|
wifi_pos_obj->wifi_pos_send_rsp(psoc, wifi_pos_obj->app_pid,
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021-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
|
||||||
@@ -262,6 +262,8 @@ typedef void (*wifi_pos_send_rsp_handler)(struct wlan_objmgr_psoc *, uint32_t,
|
|||||||
*| |resp |init |resp |init |resp |init |resp |init |
|
*| |resp |init |resp |init |resp |init |resp |init |
|
||||||
*+----------+-----+-----+------+------+-------+-------+-----+-----+
|
*+----------+-----+-----+------+------+-------+-------+-----+-----+
|
||||||
* resp - responder role; init- initiator role
|
* resp - responder role; init- initiator role
|
||||||
|
* @wifi_pos_get_max_fw_phymode_for_channels: function pointer to get max
|
||||||
|
* supported FW phymode for the given channels
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
struct wifi_pos_psoc_priv_obj {
|
struct wifi_pos_psoc_priv_obj {
|
||||||
@@ -305,6 +307,10 @@ struct wifi_pos_psoc_priv_obj {
|
|||||||
struct wlan_objmgr_pdev *pdev,
|
struct wlan_objmgr_pdev *pdev,
|
||||||
struct rtt_channel_info *chinfo);
|
struct rtt_channel_info *chinfo);
|
||||||
uint32_t rsp_version;
|
uint32_t rsp_version;
|
||||||
|
QDF_STATUS (*wifi_pos_get_max_fw_phymode_for_channels)(
|
||||||
|
struct wlan_objmgr_pdev *pdev,
|
||||||
|
struct wifi_pos_channel_power *chan_list,
|
||||||
|
uint16_t wifi_pos_num_chans);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Viittaa uudesa ongelmassa
Block a user