Commit e7b54194 authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo

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: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 5c81c7fd
...@@ -1059,12 +1059,12 @@ void ath10k_core_unregister(struct ath10k *ar) ...@@ -1059,12 +1059,12 @@ void ath10k_core_unregister(struct ath10k *ar)
} }
EXPORT_SYMBOL(ath10k_core_unregister); 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) const struct ath10k_hif_ops *hif_ops)
{ {
struct ath10k *ar; struct ath10k *ar;
ar = ath10k_mac_create(); ar = ath10k_mac_create(priv_size);
if (!ar) if (!ar)
return NULL; return NULL;
...@@ -1074,7 +1074,6 @@ struct ath10k *ath10k_core_create(void *hif_priv, struct device *dev, ...@@ -1074,7 +1074,6 @@ struct ath10k *ath10k_core_create(void *hif_priv, struct device *dev,
ar->p2p = !!ath10k_p2p; ar->p2p = !!ath10k_p2p;
ar->dev = dev; ar->dev = dev;
ar->hif.priv = hif_priv;
ar->hif.ops = hif_ops; ar->hif.ops = hif_ops;
init_completion(&ar->scan.started); init_completion(&ar->scan.started);
......
...@@ -398,7 +398,6 @@ struct ath10k { ...@@ -398,7 +398,6 @@ struct ath10k {
bool p2p; bool p2p;
struct { struct {
void *priv;
const struct ath10k_hif_ops *ops; const struct ath10k_hif_ops *ops;
} hif; } hif;
...@@ -532,9 +531,12 @@ struct ath10k { ...@@ -532,9 +531,12 @@ struct ath10k {
enum ath10k_spectral_mode mode; enum ath10k_spectral_mode mode;
struct ath10k_spec_scan config; struct ath10k_spec_scan config;
} spectral; } 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); const struct ath10k_hif_ops *hif_ops);
void ath10k_core_destroy(struct ath10k *ar); void ath10k_core_destroy(struct ath10k *ar);
......
...@@ -4564,12 +4564,12 @@ static struct ieee80211_rate ath10k_rates[] = { ...@@ -4564,12 +4564,12 @@ static struct ieee80211_rate ath10k_rates[] = {
#define ath10k_g_rates (ath10k_rates + 0) #define ath10k_g_rates (ath10k_rates + 0)
#define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates)) #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 ieee80211_hw *hw;
struct ath10k *ar; 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) if (!hw)
return NULL; return NULL;
......
...@@ -26,7 +26,7 @@ struct ath10k_generic_iter { ...@@ -26,7 +26,7 @@ struct ath10k_generic_iter {
int ret; int ret;
}; };
struct ath10k *ath10k_mac_create(void); struct ath10k *ath10k_mac_create(size_t priv_size);
void ath10k_mac_destroy(struct ath10k *ar); void ath10k_mac_destroy(struct ath10k *ar);
int ath10k_mac_register(struct ath10k *ar); int ath10k_mac_register(struct ath10k *ar);
void ath10k_mac_unregister(struct ath10k *ar); void ath10k_mac_unregister(struct ath10k *ar);
......
...@@ -2621,10 +2621,14 @@ static int ath10k_pci_probe(struct pci_dev *pdev, ...@@ -2621,10 +2621,14 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
ath10k_dbg(ATH10K_DBG_PCI, "pci probe\n"); ath10k_dbg(ATH10K_DBG_PCI, "pci probe\n");
ar_pci = kzalloc(sizeof(*ar_pci), GFP_KERNEL); ar = ath10k_core_create(sizeof(*ar_pci), &pdev->dev,
if (ar_pci == NULL) &ath10k_pci_hif_ops);
if (!ar) {
ath10k_err("failed to allocate core\n");
return -ENOMEM; return -ENOMEM;
}
ar_pci = ath10k_pci_priv(ar);
ar_pci->pdev = pdev; ar_pci->pdev = pdev;
ar_pci->dev = &pdev->dev; ar_pci->dev = &pdev->dev;
...@@ -2635,7 +2639,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev, ...@@ -2635,7 +2639,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
default: default:
ret = -ENODEV; ret = -ENODEV;
ath10k_err("Unknown device ID: %d\n", pci_dev->device); ath10k_err("Unknown device ID: %d\n", pci_dev->device);
goto err_ar_pci; goto err_core_destroy;
} }
if (ath10k_pci_target_ps) if (ath10k_pci_target_ps)
...@@ -2643,13 +2647,6 @@ static int ath10k_pci_probe(struct pci_dev *pdev, ...@@ -2643,13 +2647,6 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
ath10k_pci_dump_features(ar_pci); 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; ar_pci->ar = ar;
atomic_set(&ar_pci->keep_awake_count, 0); atomic_set(&ar_pci->keep_awake_count, 0);
...@@ -2658,7 +2655,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev, ...@@ -2658,7 +2655,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
ret = pci_enable_device(pdev); ret = pci_enable_device(pdev);
if (ret) { if (ret) {
ath10k_err("failed to enable PCI device: %d\n", ret); ath10k_err("failed to enable PCI device: %d\n", ret);
goto err_ar; goto err_core_destroy;
} }
/* Request MMIO resources */ /* Request MMIO resources */
...@@ -2742,11 +2739,8 @@ static int ath10k_pci_probe(struct pci_dev *pdev, ...@@ -2742,11 +2739,8 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
pci_release_region(pdev, BAR_NUM); pci_release_region(pdev, BAR_NUM);
err_device: err_device:
pci_disable_device(pdev); pci_disable_device(pdev);
err_ar: err_core_destroy:
ath10k_core_destroy(ar); ath10k_core_destroy(ar);
err_ar_pci:
/* call HIF PCI free here */
kfree(ar_pci);
return ret; return ret;
} }
...@@ -2775,7 +2769,6 @@ static void ath10k_pci_remove(struct pci_dev *pdev) ...@@ -2775,7 +2769,6 @@ static void ath10k_pci_remove(struct pci_dev *pdev)
pci_disable_device(pdev); pci_disable_device(pdev);
ath10k_core_destroy(ar); ath10k_core_destroy(ar);
kfree(ar_pci);
} }
MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table); MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table);
......
...@@ -202,7 +202,7 @@ struct ath10k_pci { ...@@ -202,7 +202,7 @@ struct ath10k_pci {
static inline struct ath10k_pci *ath10k_pci_priv(struct ath10k *ar) 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) static inline u32 ath10k_pci_reg_read32(struct ath10k *ar, u32 addr)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment