mirror of https://gitee.com/openkylin/linux.git
wlcore/wl12xx: create per-chip-family private storage
This storage is allocated in wlcore_alloc_hw and freed in free_hw. The size of the storage is determined by the low-level driver. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
441101f678
commit
96e0c6837b
|
@ -655,12 +655,16 @@ static struct wlcore_ops wl12xx_ops = {
|
|||
.get_mac = wl12xx_get_mac,
|
||||
};
|
||||
|
||||
struct wl12xx_priv {
|
||||
};
|
||||
|
||||
static int __devinit wl12xx_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct wl1271 *wl;
|
||||
struct ieee80211_hw *hw;
|
||||
struct wl12xx_priv *priv;
|
||||
|
||||
hw = wlcore_alloc_hw();
|
||||
hw = wlcore_alloc_hw(sizeof(*priv));
|
||||
if (IS_ERR(hw)) {
|
||||
wl1271_error("can't allocate hw");
|
||||
return PTR_ERR(hw);
|
||||
|
|
|
@ -5197,7 +5197,7 @@ static int wl1271_init_ieee80211(struct wl1271 *wl)
|
|||
|
||||
#define WL1271_DEFAULT_CHANNEL 0
|
||||
|
||||
struct ieee80211_hw *wlcore_alloc_hw(void)
|
||||
struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size)
|
||||
{
|
||||
struct ieee80211_hw *hw;
|
||||
struct wl1271 *wl;
|
||||
|
@ -5216,6 +5216,13 @@ struct ieee80211_hw *wlcore_alloc_hw(void)
|
|||
wl = hw->priv;
|
||||
memset(wl, 0, sizeof(*wl));
|
||||
|
||||
wl->priv = kzalloc(priv_size, GFP_KERNEL);
|
||||
if (!wl->priv) {
|
||||
wl1271_error("could not alloc wl priv");
|
||||
ret = -ENOMEM;
|
||||
goto err_priv_alloc;
|
||||
}
|
||||
|
||||
INIT_LIST_HEAD(&wl->wlvif_list);
|
||||
|
||||
wl->hw = hw;
|
||||
|
@ -5316,6 +5323,9 @@ struct ieee80211_hw *wlcore_alloc_hw(void)
|
|||
|
||||
err_hw:
|
||||
wl1271_debugfs_exit(wl);
|
||||
kfree(wl->priv);
|
||||
|
||||
err_priv_alloc:
|
||||
ieee80211_free_hw(hw);
|
||||
|
||||
err_hw_alloc:
|
||||
|
@ -5354,6 +5364,7 @@ int wlcore_free_hw(struct wl1271 *wl)
|
|||
kfree(wl->tx_res_if);
|
||||
destroy_workqueue(wl->freezable_wq);
|
||||
|
||||
kfree(wl->priv);
|
||||
ieee80211_free_hw(wl->hw);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -300,11 +300,14 @@ struct wl1271 {
|
|||
const char *plt_fw_name;
|
||||
const char *sr_fw_name;
|
||||
const char *mr_fw_name;
|
||||
|
||||
/* per-chip-family private structure */
|
||||
void *priv;
|
||||
};
|
||||
|
||||
int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev);
|
||||
int __devexit wlcore_remove(struct platform_device *pdev);
|
||||
struct ieee80211_hw *wlcore_alloc_hw(void);
|
||||
struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size);
|
||||
int wlcore_free_hw(struct wl1271 *wl);
|
||||
|
||||
/* Firmware image load chunk size */
|
||||
|
|
Loading…
Reference in New Issue