ath10k: embed ar_pci inside ar
Use the common convention of embedding private structures inside parent structures. This reduces allocations and simplifies pci probing code. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
Родитель
5c81c7fd62
Коммит
e7b541948b
|
@ -1059,12 +1059,12 @@ void ath10k_core_unregister(struct ath10k *ar)
|
|||
}
|
||||
EXPORT_SYMBOL(ath10k_core_unregister);
|
||||
|
||||
struct ath10k *ath10k_core_create(void *hif_priv, struct device *dev,
|
||||
struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
|
||||
const struct ath10k_hif_ops *hif_ops)
|
||||
{
|
||||
struct ath10k *ar;
|
||||
|
||||
ar = ath10k_mac_create();
|
||||
ar = ath10k_mac_create(priv_size);
|
||||
if (!ar)
|
||||
return NULL;
|
||||
|
||||
|
@ -1074,7 +1074,6 @@ struct ath10k *ath10k_core_create(void *hif_priv, struct device *dev,
|
|||
ar->p2p = !!ath10k_p2p;
|
||||
ar->dev = dev;
|
||||
|
||||
ar->hif.priv = hif_priv;
|
||||
ar->hif.ops = hif_ops;
|
||||
|
||||
init_completion(&ar->scan.started);
|
||||
|
|
|
@ -398,7 +398,6 @@ struct ath10k {
|
|||
bool p2p;
|
||||
|
||||
struct {
|
||||
void *priv;
|
||||
const struct ath10k_hif_ops *ops;
|
||||
} hif;
|
||||
|
||||
|
@ -532,9 +531,12 @@ struct ath10k {
|
|||
enum ath10k_spectral_mode mode;
|
||||
struct ath10k_spec_scan config;
|
||||
} spectral;
|
||||
|
||||
/* must be last */
|
||||
u8 drv_priv[0] __aligned(sizeof(void *));
|
||||
};
|
||||
|
||||
struct ath10k *ath10k_core_create(void *hif_priv, struct device *dev,
|
||||
struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
|
||||
const struct ath10k_hif_ops *hif_ops);
|
||||
void ath10k_core_destroy(struct ath10k *ar);
|
||||
|
||||
|
|
|
@ -4564,12 +4564,12 @@ static struct ieee80211_rate ath10k_rates[] = {
|
|||
#define ath10k_g_rates (ath10k_rates + 0)
|
||||
#define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
|
||||
|
||||
struct ath10k *ath10k_mac_create(void)
|
||||
struct ath10k *ath10k_mac_create(size_t priv_size)
|
||||
{
|
||||
struct ieee80211_hw *hw;
|
||||
struct ath10k *ar;
|
||||
|
||||
hw = ieee80211_alloc_hw(sizeof(struct ath10k), &ath10k_ops);
|
||||
hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
|
||||
if (!hw)
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ struct ath10k_generic_iter {
|
|||
int ret;
|
||||
};
|
||||
|
||||
struct ath10k *ath10k_mac_create(void);
|
||||
struct ath10k *ath10k_mac_create(size_t priv_size);
|
||||
void ath10k_mac_destroy(struct ath10k *ar);
|
||||
int ath10k_mac_register(struct ath10k *ar);
|
||||
void ath10k_mac_unregister(struct ath10k *ar);
|
||||
|
|
|
@ -2621,10 +2621,14 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|||
|
||||
ath10k_dbg(ATH10K_DBG_PCI, "pci probe\n");
|
||||
|
||||
ar_pci = kzalloc(sizeof(*ar_pci), GFP_KERNEL);
|
||||
if (ar_pci == NULL)
|
||||
ar = ath10k_core_create(sizeof(*ar_pci), &pdev->dev,
|
||||
&ath10k_pci_hif_ops);
|
||||
if (!ar) {
|
||||
ath10k_err("failed to allocate core\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
ar_pci = ath10k_pci_priv(ar);
|
||||
ar_pci->pdev = pdev;
|
||||
ar_pci->dev = &pdev->dev;
|
||||
|
||||
|
@ -2635,7 +2639,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|||
default:
|
||||
ret = -ENODEV;
|
||||
ath10k_err("Unknown device ID: %d\n", pci_dev->device);
|
||||
goto err_ar_pci;
|
||||
goto err_core_destroy;
|
||||
}
|
||||
|
||||
if (ath10k_pci_target_ps)
|
||||
|
@ -2643,13 +2647,6 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|||
|
||||
ath10k_pci_dump_features(ar_pci);
|
||||
|
||||
ar = ath10k_core_create(ar_pci, ar_pci->dev, &ath10k_pci_hif_ops);
|
||||
if (!ar) {
|
||||
ath10k_err("failed to create driver core\n");
|
||||
ret = -EINVAL;
|
||||
goto err_ar_pci;
|
||||
}
|
||||
|
||||
ar_pci->ar = ar;
|
||||
atomic_set(&ar_pci->keep_awake_count, 0);
|
||||
|
||||
|
@ -2658,7 +2655,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|||
ret = pci_enable_device(pdev);
|
||||
if (ret) {
|
||||
ath10k_err("failed to enable PCI device: %d\n", ret);
|
||||
goto err_ar;
|
||||
goto err_core_destroy;
|
||||
}
|
||||
|
||||
/* Request MMIO resources */
|
||||
|
@ -2742,11 +2739,8 @@ err_region:
|
|||
pci_release_region(pdev, BAR_NUM);
|
||||
err_device:
|
||||
pci_disable_device(pdev);
|
||||
err_ar:
|
||||
err_core_destroy:
|
||||
ath10k_core_destroy(ar);
|
||||
err_ar_pci:
|
||||
/* call HIF PCI free here */
|
||||
kfree(ar_pci);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -2775,7 +2769,6 @@ static void ath10k_pci_remove(struct pci_dev *pdev)
|
|||
pci_disable_device(pdev);
|
||||
|
||||
ath10k_core_destroy(ar);
|
||||
kfree(ar_pci);
|
||||
}
|
||||
|
||||
MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table);
|
||||
|
|
|
@ -202,7 +202,7 @@ struct ath10k_pci {
|
|||
|
||||
static inline struct ath10k_pci *ath10k_pci_priv(struct ath10k *ar)
|
||||
{
|
||||
return ar->hif.priv;
|
||||
return (struct ath10k_pci *)ar->drv_priv;
|
||||
}
|
||||
|
||||
static inline u32 ath10k_pci_reg_read32(struct ath10k *ar, u32 addr)
|
||||
|
|
Загрузка…
Ссылка в новой задаче