qcacmn: IPA changes to support SDX+Pine

IPA changes to support SDX+Pine.

Change-Id: I66ad2a2c3e2f142c54df3e35c867ee827ac1d687
CRs-Fixed: 3079952
This commit is contained in:
Himanshu Batra
2021-09-30 12:25:18 +05:30
committad av Madan Koyyalamudi
förälder db8e2c1604
incheckning 78fb9d70d7
14 ändrade filer med 342 tillägg och 109 borttagningar

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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
@@ -96,12 +97,4 @@ struct ipa_intrabss_control_params {
uint32_t vdev_id;
uint32_t enable;
};
/* fp to send IPA UC offload cmd */
typedef QDF_STATUS (*ipa_uc_offload_control_req)(struct wlan_objmgr_psoc *psoc,
struct ipa_uc_offload_control_params *req);
/* fp to send IPA intrabss cmd */
typedef QDF_STATUS (*ipa_intrabss_control_req)(struct wlan_objmgr_psoc *psoc,
struct ipa_intrabss_control_params *req);
#endif /* end of _WLAN_IPA_PUBLIC_STRUCT_H_ */

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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
@@ -194,6 +195,17 @@ void ucfg_ipa_reg_rps_enable_cb(struct wlan_objmgr_pdev *pdev,
}
#endif
/**
* ucfg_ipa_reg_is_driver_unloading_cb() - Register cb to check if driver
* is unloading
* @pdev: pdev obj
* @cb: callback
*
* Return: None
*/
void ucfg_ipa_reg_is_driver_unloading_cb(struct wlan_objmgr_pdev *pdev,
wlan_ipa_driver_unloading cb);
/**
* ucfg_ipa_set_mcc_mode() - Set MCC mode
* @pdev: pdev obj
@@ -519,6 +531,12 @@ void ucfg_ipa_reg_rps_enable_cb(struct wlan_objmgr_pdev *pdev,
{
}
static inline
void ucfg_ipa_reg_is_driver_unloading_cb(struct wlan_objmgr_pdev *pdev,
wlan_ipa_driver_unloading cb)
{
}
static inline
void ucfg_ipa_set_mcc_mode(struct wlan_objmgr_pdev *pdev, bool mcc_mode)
{

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018, 2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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
@@ -25,6 +26,7 @@
#include "target_if_ipa.h"
#include "wlan_ipa_ucfg_api.h"
#include "qdf_platform.h"
#include "qdf_module.h"
static bool g_ipa_is_ready;
static qdf_mutex_t g_init_deinit_lock;
@@ -39,6 +41,8 @@ void ipa_disable_register_cb(void)
g_ipa_is_ready = false;
}
qdf_export_symbol(ipa_disable_register_cb);
void ipa_init_deinit_lock(void)
{
qdf_mutex_acquire(&g_init_deinit_lock);
@@ -124,8 +128,6 @@ ipa_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
}
ipa_obj->pdev = pdev;
target_if_ipa_register_tx_ops(&ipa_obj->ipa_tx_op);
target_if_ipa_register_intrabss_ops(&ipa_obj->ipa_intrabss_op);
ipa_debug("ipa pdev attached");
@@ -222,6 +224,8 @@ QDF_STATUS ipa_register_is_ipa_ready(struct wlan_objmgr_pdev *pdev)
return QDF_STATUS_SUCCESS;
}
qdf_export_symbol(ipa_register_is_ipa_ready);
QDF_STATUS ipa_init(void)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018, 2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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
@@ -24,26 +25,29 @@
#include "wlan_ipa_public_struct.h"
#include <wlan_objmgr_global_obj.h>
#include <wlan_objmgr_pdev_obj.h>
#include <wlan_lmac_if_def.h>
QDF_STATUS tgt_ipa_uc_offload_enable_disable(struct wlan_objmgr_pdev *pdev,
struct ipa_uc_offload_control_params *req)
{
struct wlan_ipa_priv *ipa_obj;
struct wlan_objmgr_psoc *psoc;
struct wlan_lmac_if_tx_ops *tx_ops;
QDF_STATUS status = QDF_STATUS_E_FAILURE;
IPA_ENTER();
ipa_obj = ipa_pdev_get_priv_obj(pdev);
if (!ipa_obj) {
ipa_err("IPA object is NULL");
return QDF_STATUS_E_INVAL;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc) {
ipa_err("NULL psoc");
return QDF_STATUS_E_NULL_VALUE;
}
psoc = wlan_pdev_get_psoc(pdev);
tx_ops = wlan_psoc_get_lmac_if_txops(psoc);
if (!tx_ops)
return QDF_STATUS_E_NULL_VALUE;
if (ipa_obj->ipa_tx_op)
status = ipa_obj->ipa_tx_op(psoc, req);
if (tx_ops->ipa_ops.ipa_uc_offload_control_req)
status = tx_ops->ipa_ops.ipa_uc_offload_control_req(psoc, req);
IPA_EXIT();
return status;
@@ -53,22 +57,24 @@ QDF_STATUS
tgt_ipa_intrabss_enable_disable(struct wlan_objmgr_pdev *pdev,
struct ipa_intrabss_control_params *req)
{
struct wlan_ipa_priv *ipa_obj;
struct wlan_objmgr_psoc *psoc;
struct wlan_lmac_if_tx_ops *tx_ops;
QDF_STATUS status = QDF_STATUS_E_FAILURE;
IPA_ENTER();
ipa_obj = ipa_pdev_get_priv_obj(pdev);
if (!ipa_obj) {
ipa_err("IPA object is NULL");
return QDF_STATUS_E_INVAL;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc) {
ipa_err("NULL psoc");
return QDF_STATUS_E_NULL_VALUE;
}
psoc = wlan_pdev_get_psoc(pdev);
tx_ops = wlan_psoc_get_lmac_if_txops(psoc);
if (!tx_ops)
return QDF_STATUS_E_NULL_VALUE;
if (ipa_obj->ipa_intrabss_op)
status = ipa_obj->ipa_intrabss_op(psoc, req);
if (tx_ops->ipa_ops.ipa_intrabss_control_req)
status = tx_ops->ipa_ops.ipa_intrabss_control_req(psoc, req);
IPA_EXIT();
return status;

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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
@@ -22,156 +23,216 @@
#include "wlan_ipa_ucfg_api.h"
#include "wlan_ipa_main.h"
#include "cfg_ucfg_api.h"
#include "qdf_module.h"
bool ucfg_ipa_is_present(void)
{
return ipa_is_hw_support();
}
qdf_export_symbol(ucfg_ipa_is_present);
bool ucfg_ipa_is_ready(void)
{
return ipa_cb_is_ready();
}
qdf_export_symbol(ucfg_ipa_is_ready);
bool ucfg_ipa_is_enabled(void)
{
return ipa_config_is_enabled();
}
qdf_export_symbol(ucfg_ipa_is_enabled);
bool ucfg_ipa_uc_is_enabled(void)
{
return ipa_config_is_uc_enabled();
}
qdf_export_symbol(ucfg_ipa_uc_is_enabled);
void ucfg_ipa_set_pdev_id(struct wlan_objmgr_psoc *psoc,
uint8_t pdev_id)
{
return ipa_set_pdev_id(psoc, pdev_id);
}
qdf_export_symbol(ucfg_ipa_set_pdev_id);
void ucfg_ipa_set_dp_handle(struct wlan_objmgr_psoc *psoc,
void *dp_soc)
{
return ipa_set_dp_handle(psoc, dp_soc);
}
qdf_export_symbol(ucfg_ipa_set_dp_handle);
QDF_STATUS ucfg_ipa_set_perf_level(struct wlan_objmgr_pdev *pdev,
uint64_t tx_packets, uint64_t rx_packets)
{
return ipa_rm_set_perf_level(pdev, tx_packets, rx_packets);
}
qdf_export_symbol(ucfg_ipa_set_perf_level);
void ucfg_ipa_uc_info(struct wlan_objmgr_pdev *pdev)
{
return ipa_uc_info(pdev);
}
qdf_export_symbol(ucfg_ipa_uc_info);
void ucfg_ipa_uc_stat(struct wlan_objmgr_pdev *pdev)
{
return ipa_uc_stat(pdev);
}
qdf_export_symbol(ucfg_ipa_uc_stat);
void ucfg_ipa_uc_rt_debug_host_dump(struct wlan_objmgr_pdev *pdev)
{
return ipa_uc_rt_debug_host_dump(pdev);
}
qdf_export_symbol(ucfg_ipa_uc_rt_debug_host_dump);
void ucfg_ipa_dump_info(struct wlan_objmgr_pdev *pdev)
{
return ipa_dump_info(pdev);
}
qdf_export_symbol(ucfg_ipa_dump_info);
void ucfg_ipa_uc_stat_request(struct wlan_objmgr_pdev *pdev,
uint8_t reason)
{
return ipa_uc_stat_request(pdev, reason);
}
qdf_export_symbol(ucfg_ipa_uc_stat_request);
void ucfg_ipa_uc_stat_query(struct wlan_objmgr_pdev *pdev,
uint32_t *ipa_tx_diff, uint32_t *ipa_rx_diff)
{
return ipa_uc_stat_query(pdev, ipa_tx_diff, ipa_rx_diff);
}
qdf_export_symbol(ucfg_ipa_uc_stat_query);
void ucfg_ipa_reg_sap_xmit_cb(struct wlan_objmgr_pdev *pdev,
wlan_ipa_softap_xmit cb)
{
return ipa_reg_sap_xmit_cb(pdev, cb);
}
qdf_export_symbol(ucfg_ipa_reg_sap_xmit_cb);
void ucfg_ipa_reg_send_to_nw_cb(struct wlan_objmgr_pdev *pdev,
wlan_ipa_send_to_nw cb)
{
return ipa_reg_send_to_nw_cb(pdev, cb);
}
qdf_export_symbol(ucfg_ipa_reg_send_to_nw_cb);
#ifdef QCA_CONFIG_RPS
void ucfg_ipa_reg_rps_enable_cb(struct wlan_objmgr_pdev *pdev,
wlan_ipa_rps_enable cb)
{
return ipa_reg_rps_enable_cb(pdev, cb);
}
qdf_export_symbol(ucfg_ipa_reg_rps_enable_cb);
#endif
void ucfg_ipa_reg_is_driver_unloading_cb(struct wlan_objmgr_pdev *pdev,
wlan_ipa_driver_unloading cb)
{
return ipa_reg_is_driver_unloading_cb(pdev, cb);
}
void ucfg_ipa_set_mcc_mode(struct wlan_objmgr_pdev *pdev, bool mcc_mode)
{
return ipa_set_mcc_mode(pdev, mcc_mode);
}
qdf_export_symbol(ucfg_ipa_set_mcc_mode);
void ucfg_ipa_set_dfs_cac_tx(struct wlan_objmgr_pdev *pdev, bool tx_block)
{
return ipa_set_dfs_cac_tx(pdev, tx_block);
}
qdf_export_symbol(ucfg_ipa_set_dfs_cac_tx);
void ucfg_ipa_set_ap_ibss_fwd(struct wlan_objmgr_pdev *pdev, uint8_t session_id,
bool intra_bss)
{
return ipa_set_ap_ibss_fwd(pdev, session_id, intra_bss);
}
qdf_export_symbol(ucfg_ipa_set_ap_ibss_fwd);
void ucfg_ipa_uc_force_pipe_shutdown(struct wlan_objmgr_pdev *pdev)
{
return ipa_uc_force_pipe_shutdown(pdev);
}
qdf_export_symbol(ucfg_ipa_uc_force_pipe_shutdown);
void ucfg_ipa_flush(struct wlan_objmgr_pdev *pdev)
{
return ipa_flush(pdev);
}
qdf_export_symbol(ucfg_ipa_flush);
QDF_STATUS ucfg_ipa_suspend(struct wlan_objmgr_pdev *pdev)
{
return ipa_suspend(pdev);
}
qdf_export_symbol(ucfg_ipa_suspend);
QDF_STATUS ucfg_ipa_resume(struct wlan_objmgr_pdev *pdev)
{
return ipa_resume(pdev);
}
qdf_export_symbol(ucfg_ipa_resume);
QDF_STATUS ucfg_ipa_uc_ol_init(struct wlan_objmgr_pdev *pdev,
qdf_device_t osdev)
{
return ipa_uc_ol_init(pdev, osdev);
}
qdf_export_symbol(ucfg_ipa_uc_ol_init);
QDF_STATUS ucfg_ipa_uc_ol_deinit(struct wlan_objmgr_pdev *pdev)
{
return ipa_uc_ol_deinit(pdev);
}
qdf_export_symbol(ucfg_ipa_uc_ol_deinit);
bool ucfg_ipa_is_tx_pending(struct wlan_objmgr_pdev *pdev)
{
return ipa_is_tx_pending(pdev);
}
qdf_export_symbol(ucfg_ipa_is_tx_pending);
QDF_STATUS ucfg_ipa_send_mcc_scc_msg(struct wlan_objmgr_pdev *pdev,
bool mcc_mode)
{
return ipa_send_mcc_scc_msg(pdev, mcc_mode);
}
qdf_export_symbol(ucfg_ipa_send_mcc_scc_msg);
QDF_STATUS ucfg_ipa_wlan_evt(struct wlan_objmgr_pdev *pdev,
qdf_netdev_t net_dev, uint8_t device_mode,
uint8_t session_id,
@@ -182,67 +243,93 @@ QDF_STATUS ucfg_ipa_wlan_evt(struct wlan_objmgr_pdev *pdev,
ipa_event_type, mac_addr, is_2g_iface);
}
qdf_export_symbol(ucfg_ipa_wlan_evt);
int ucfg_ipa_uc_smmu_map(bool map, uint32_t num_buf, qdf_mem_info_t *buf_arr)
{
return ipa_uc_smmu_map(map, num_buf, buf_arr);
}
qdf_export_symbol(ucfg_ipa_uc_smmu_map);
bool ucfg_ipa_is_fw_wdi_activated(struct wlan_objmgr_pdev *pdev)
{
return ipa_is_fw_wdi_activated(pdev);
}
qdf_export_symbol(ucfg_ipa_is_fw_wdi_activated);
void ucfg_ipa_uc_cleanup_sta(struct wlan_objmgr_pdev *pdev,
qdf_netdev_t net_dev)
{
return ipa_uc_cleanup_sta(pdev, net_dev);
}
qdf_export_symbol(ucfg_ipa_uc_cleanup_sta);
QDF_STATUS ucfg_ipa_uc_disconnect_ap(struct wlan_objmgr_pdev *pdev,
qdf_netdev_t net_dev)
{
return ipa_uc_disconnect_ap(pdev, net_dev);
}
qdf_export_symbol(ucfg_ipa_uc_disconnect_ap);
void ucfg_ipa_cleanup_dev_iface(struct wlan_objmgr_pdev *pdev,
qdf_netdev_t net_dev)
{
return ipa_cleanup_dev_iface(pdev, net_dev);
}
qdf_export_symbol(ucfg_ipa_cleanup_dev_iface);
void ucfg_ipa_uc_ssr_cleanup(struct wlan_objmgr_pdev *pdev)
{
return ipa_uc_ssr_cleanup(pdev);
}
qdf_export_symbol(ucfg_ipa_uc_ssr_cleanup);
void ucfg_ipa_fw_rejuvenate_send_msg(struct wlan_objmgr_pdev *pdev)
{
return ipa_fw_rejuvenate_send_msg(pdev);
}
qdf_export_symbol(ucfg_ipa_fw_rejuvenate_send_msg);
void ucfg_ipa_component_config_update(struct wlan_objmgr_psoc *psoc)
{
ipa_component_config_update(psoc);
}
qdf_export_symbol(ucfg_ipa_component_config_update);
void ucfg_ipa_component_config_free(void)
{
ipa_component_config_free();
}
qdf_export_symbol(ucfg_ipa_component_config_free);
uint32_t ucfg_ipa_get_tx_buf_count(void)
{
return ipa_get_tx_buf_count();
}
qdf_export_symbol(ucfg_ipa_get_tx_buf_count);
void ucfg_ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
uint64_t ap_tx)
{
ipa_update_tx_stats(pdev, sta_tx, ap_tx);
}
qdf_export_symbol(ucfg_ipa_update_tx_stats);
void ucfg_ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id)
{
ipa_flush_pending_vdev_events(pdev, vdev_id);
}
qdf_export_symbol(ucfg_ipa_flush_pending_vdev_events);