qcacld-3.0: Add PLD support for QMI Indication

Add PLD APIs to register callback for QMI Indication via CNSS2

Change-Id: I5a92250bf349b2b94e3ed74ed0b420f96c2c7461
CRs-Fixed: 3786384
This commit is contained in:
Rachit Kankane
2024-04-11 19:15:32 +05:30
gecommit door Ravindra Konda
bovenliggende f6f3162846
commit 46a74af7d5
4 gewijzigde bestanden met toevoegingen van 80 en 3 verwijderingen

Bestand weergeven

@@ -243,6 +243,20 @@ static QDF_STATUS cds_wmi_send_recv_qmi(void *buf, uint32_t len, void * cb_ctx,
return QDF_STATUS_SUCCESS;
}
static QDF_STATUS cds_qmi_indication(void *cb_ctx, qdf_qmi_ind_cb qmi_ind_cb)
{
qdf_device_t qdf_ctx;
qdf_ctx = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
if (!qdf_ctx)
return QDF_STATUS_E_INVAL;
if (pld_qmi_indication(qdf_ctx->dev, cb_ctx, qmi_ind_cb))
return QDF_STATUS_E_INVAL;
return QDF_STATUS_SUCCESS;
}
/**
* cds_update_recovery_reason() - update the recovery reason code
* @recovery_reason: recovery reason
@@ -332,6 +346,7 @@ QDF_STATUS cds_init(void)
qdf_register_drv_connected_callback(cds_is_drv_connected);
qdf_register_drv_supported_callback(cds_is_drv_supported);
qdf_register_wmi_send_recv_qmi_callback(cds_wmi_send_recv_qmi);
qdf_register_qmi_indication_callback(cds_qmi_indication);
qdf_register_recovery_reason_update(cds_update_recovery_reason);
qdf_register_get_bus_reg_dump(pld_get_bus_reg_dump);
@@ -365,6 +380,7 @@ void cds_deinit(void)
qdf_register_is_driver_state_module_stop_callback(NULL);
qdf_register_self_recovery_callback(NULL);
qdf_register_wmi_send_recv_qmi_callback(NULL);
qdf_register_qmi_indication_callback(NULL);
gp_cds_context->qdf_ctx = NULL;
qdf_mem_zero(&g_qdf_ctx, sizeof(g_qdf_ctx));

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2024 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
@@ -1638,6 +1638,21 @@ int pld_qmi_send(struct device *dev, int type, void *cmd,
int cmd_len, void *cb_ctx,
int (*cb)(void *ctx, void *event, int event_len));
/**
* pld_qmi_indication() - Send data request over QMI
* @dev: device pointer
* @cb_ctx: context pointer if any to pass back in callback
* @cb: callback pointer to pass response back
*
* This API can be used to register for QMI events.
*
* Return: 0 if registration is successful
* Non zero failure code for errors
*/
int pld_qmi_indication(struct device *dev, void *cb_ctx,
int (*cb)(void *ctx, uint16_t type,
void *event, int event_len));
/**
* pld_is_fw_dump_skipped() - get fw dump skipped status.
* @dev: device

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2024 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
@@ -2323,6 +2323,26 @@ int pld_qmi_send(struct device *dev, int type, void *cmd,
}
}
int pld_qmi_indication(struct device *dev, void *cb_ctx,
int (*cb)(void *ctx, uint16_t type,
void *event, int event_len))
{
enum pld_bus_type bus_type = pld_get_bus_type(dev);
switch (bus_type) {
case PLD_BUS_TYPE_PCIE:
return pld_pcie_register_qmi_ind(dev, cb_ctx, cb);
case PLD_BUS_TYPE_SNOC:
case PLD_BUS_TYPE_SDIO:
case PLD_BUS_TYPE_USB:
case PLD_BUS_TYPE_IPCI:
return -EINVAL;
default:
pr_err("Invalid device type %d\n", bus_type);
return -EINVAL;
}
}
bool pld_is_fw_dump_skipped(struct device *dev)
{
bool ret = false;

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2024 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
@@ -451,6 +451,14 @@ pld_pcie_qmi_send(struct device *dev, int type, void *cmd,
return -EINVAL;
}
static inline int
pld_pcie_register_qmi_ind(struct device *dev, void *cb_ctx,
int (*cb)(void *ctx, uint16_t type,
void *event, int event_len))
{
return -EINVAL;
}
static inline int pld_pcie_get_user_msi_assignment(struct device *dev,
char *user_name,
int *num_vectors,
@@ -623,6 +631,24 @@ pld_pcie_qmi_send(struct device *dev, int type, void *cmd,
return cnss_qmi_send(dev, type, cmd, cmd_len, cb_ctx, cb);
}
#ifdef WLAN_CHIPSET_STATS
static inline int
pld_pcie_register_qmi_ind(struct device *dev, void *cb_ctx,
int (*cb)(void *ctx, uint16_t type,
void *event, int event_len))
{
return cnss_register_driver_async_data_cb(dev, cb_ctx, cb);
}
#else
static inline int
pld_pcie_register_qmi_ind(struct device *dev, void *cb_ctx,
int (*cb)(void *ctx, uint16_t type,
void *event, int event_len))
{
return 0;
}
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
static inline void *pld_pcie_smmu_get_domain(struct device *dev)
{