qcacld-3.0: Add pld support for get irq by ce id
Add pld support to get irq number by ce id. Change-Id: I31499fa12ed3176c7cf3f38e65530764f169520c CRs-Fixed: 3381121
Este commit está contenido en:

cometido por
Madan Koyyalamudi

padre
549dfcf544
commit
058c73bc44
@@ -1350,9 +1350,12 @@ int pld_get_irq(struct device *dev, int ce_id)
|
||||
ret = pld_snoc_fw_sim_get_irq(dev, ce_id);
|
||||
break;
|
||||
case PLD_BUS_TYPE_IPCI:
|
||||
ret = pld_ipci_get_irq(dev, ce_id);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE_FW_SIM:
|
||||
case PLD_BUS_TYPE_IPCI_FW_SIM:
|
||||
ret = pld_pcie_fw_sim_get_irq(dev, ce_id);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
@@ -617,4 +617,33 @@ int pld_ipci_get_soc_info(struct device *dev, struct pld_soc_info *info)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pld_ipci_get_irq() - Get irq by ce_id
|
||||
* @dev: device
|
||||
* @ce_id: CE id for which irq is requested
|
||||
*
|
||||
* Return irq number.
|
||||
*
|
||||
* Return: irq number for success
|
||||
* Non zero failure code for errors
|
||||
*/
|
||||
int pld_ipci_get_irq(struct device *dev, int ce_id)
|
||||
{
|
||||
uint32_t msi_data_start;
|
||||
uint32_t msi_data_count;
|
||||
uint32_t msi_irq_start;
|
||||
uint32_t msi_data;
|
||||
int ret;
|
||||
|
||||
ret = icnss_get_user_msi_assignment(dev, "CE", &msi_data_count,
|
||||
&msi_data_start, &msi_irq_start);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
msi_data = (ce_id % msi_data_count) + msi_irq_start;
|
||||
ret = icnss_get_msi_irq(dev, msi_data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
@@ -210,6 +210,11 @@ static inline int pld_ipci_is_pci_ep_awake(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pld_ipci_get_irq(struct device *dev, int ce_id)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
/**
|
||||
* pld_ipci_register_driver() - Register platform device callback functions
|
||||
@@ -265,6 +270,7 @@ int pld_ipci_wlan_disable(struct device *dev, enum pld_driver_mode mode);
|
||||
* Non zero failure code for errors
|
||||
*/
|
||||
int pld_ipci_get_soc_info(struct device *dev, struct pld_soc_info *info);
|
||||
int pld_ipci_get_irq(struct device *dev, int ce_id);
|
||||
|
||||
static inline int pld_ipci_power_on(struct device *dev)
|
||||
{
|
||||
|
@@ -785,4 +785,34 @@ int pld_pcie_fw_sim_get_platform_cap(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pld_pcie_get_irq() - Get irq by ce_id
|
||||
* @dev: device
|
||||
* @ce_id: CE id for which irq is requested
|
||||
*
|
||||
* Return irq number.
|
||||
*
|
||||
* Return: irq number for success
|
||||
* Non zero failure code for errors
|
||||
*/
|
||||
int pld_pcie_fw_sim_get_irq(struct device *dev, int ce_id)
|
||||
{
|
||||
uint32_t msi_data_start;
|
||||
uint32_t msi_data_count;
|
||||
uint32_t msi_irq_start;
|
||||
uint32_t msi_data;
|
||||
int ret;
|
||||
|
||||
ret = cnss_fw_sim_get_user_msi_assignment(dev, "CE",
|
||||
&msi_data_count,
|
||||
&msi_data_start,
|
||||
&msi_irq_start);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
msi_data = (ce_id % msi_data_count) + msi_irq_start;
|
||||
ret = cnss_fw_sim_get_msi_irq(dev, msi_data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@@ -153,6 +154,10 @@ static inline int pld_pcie_fw_sim_exit_power_save(struct device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pld_pcie_fw_sim_get_irq(struct device *dev, int ce_id)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#include <net/cnss2.h>
|
||||
|
||||
@@ -166,6 +171,7 @@ void pld_pcie_fw_sim_unregister_driver(void);
|
||||
int pld_pcie_fw_sim_get_platform_cap(struct device *dev,
|
||||
struct pld_platform_cap *cap);
|
||||
int pld_pcie_fw_sim_get_soc_info(struct device *dev, struct pld_soc_info *info);
|
||||
int pld_pcie_fw_sim_get_irq(struct device *dev, int ce_id);
|
||||
|
||||
static inline int pld_pcie_fw_sim_get_user_msi_assignment(struct device *dev,
|
||||
char *user_name,
|
||||
|
Referencia en una nueva incidencia
Block a user