ath9k: move ath_common to ath_hw
This ensures that we can access common on hw related code independent of the driver core. Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
394317fc79
commit
27c51f1a34
|
@ -553,8 +553,6 @@ struct ath_softc {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
struct ath_common common;
|
|
||||||
|
|
||||||
spinlock_t wiphy_lock; /* spinlock to protect ath_wiphy data */
|
spinlock_t wiphy_lock; /* spinlock to protect ath_wiphy data */
|
||||||
struct ath_wiphy *pri_wiphy;
|
struct ath_wiphy *pri_wiphy;
|
||||||
struct ath_wiphy **sec_wiphy; /* secondary wiphys (virtual radios); may
|
struct ath_wiphy **sec_wiphy; /* secondary wiphys (virtual radios); may
|
||||||
|
@ -649,7 +647,7 @@ int ath_cabq_update(struct ath_softc *);
|
||||||
|
|
||||||
static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah)
|
static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
return &ah->ah_sc->common;
|
return &ah->common;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct ath_regulatory *ath9k_hw_regulatory(struct ath_hw *ah)
|
static inline struct ath_regulatory *ath9k_hw_regulatory(struct ath_hw *ah)
|
||||||
|
|
|
@ -435,6 +435,7 @@ struct ath_gen_timer_table {
|
||||||
|
|
||||||
struct ath_hw {
|
struct ath_hw {
|
||||||
struct ath_softc *ah_sc;
|
struct ath_softc *ah_sc;
|
||||||
|
struct ath_common common;
|
||||||
struct ath9k_hw_version hw_version;
|
struct ath9k_hw_version hw_version;
|
||||||
struct ath9k_ops_config config;
|
struct ath9k_ops_config config;
|
||||||
struct ath9k_hw_capabilities caps;
|
struct ath9k_hw_capabilities caps;
|
||||||
|
|
|
@ -1348,7 +1348,7 @@ static int ath9k_reg_notifier(struct wiphy *wiphy,
|
||||||
struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
|
struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
|
||||||
struct ath_wiphy *aphy = hw->priv;
|
struct ath_wiphy *aphy = hw->priv;
|
||||||
struct ath_softc *sc = aphy->sc;
|
struct ath_softc *sc = aphy->sc;
|
||||||
struct ath_regulatory *reg = &sc->common.regulatory;
|
struct ath_regulatory *reg = ath9k_hw_regulatory(sc->sc_ah);
|
||||||
|
|
||||||
return ath_reg_notifier_apply(wiphy, request, reg);
|
return ath_reg_notifier_apply(wiphy, request, reg);
|
||||||
}
|
}
|
||||||
|
@ -1516,14 +1516,6 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid)
|
||||||
tasklet_init(&sc->bcon_tasklet, ath_beacon_tasklet,
|
tasklet_init(&sc->bcon_tasklet, ath_beacon_tasklet,
|
||||||
(unsigned long)sc);
|
(unsigned long)sc);
|
||||||
|
|
||||||
/*
|
|
||||||
* Cache line size is used to size and align various
|
|
||||||
* structures used to communicate with the hardware.
|
|
||||||
*/
|
|
||||||
ath_read_cachesize(sc, &csz);
|
|
||||||
/* XXX assert csz is non-zero */
|
|
||||||
sc->common.cachelsz = csz << 2; /* convert to bytes */
|
|
||||||
|
|
||||||
ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
|
ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
|
||||||
if (!ah) {
|
if (!ah) {
|
||||||
r = -ENOMEM;
|
r = -ENOMEM;
|
||||||
|
@ -1535,6 +1527,16 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid)
|
||||||
ah->hw_version.subsysid = subsysid;
|
ah->hw_version.subsysid = subsysid;
|
||||||
sc->sc_ah = ah;
|
sc->sc_ah = ah;
|
||||||
|
|
||||||
|
common = ath9k_hw_common(ah);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cache line size is used to size and align various
|
||||||
|
* structures used to communicate with the hardware.
|
||||||
|
*/
|
||||||
|
ath_read_cachesize(sc, &csz);
|
||||||
|
/* XXX assert csz is non-zero */
|
||||||
|
common->cachelsz = csz << 2; /* convert to bytes */
|
||||||
|
|
||||||
if (ath9k_init_debug(ah) < 0)
|
if (ath9k_init_debug(ah) < 0)
|
||||||
dev_err(sc->dev, "Unable to create debugfs files\n");
|
dev_err(sc->dev, "Unable to create debugfs files\n");
|
||||||
|
|
||||||
|
@ -1677,8 +1679,6 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid)
|
||||||
ath9k_hw_setcapability(ah, ATH9K_CAP_DIVERSITY, 1, true, NULL);
|
ath9k_hw_setcapability(ah, ATH9K_CAP_DIVERSITY, 1, true, NULL);
|
||||||
sc->rx.defant = ath9k_hw_getdefantenna(ah);
|
sc->rx.defant = ath9k_hw_getdefantenna(ah);
|
||||||
|
|
||||||
common = ath9k_hw_common(ah);
|
|
||||||
|
|
||||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
|
if (ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
|
||||||
memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
|
memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
|
||||||
|
|
||||||
|
|
|
@ -297,6 +297,7 @@ static void ath_opmode_init(struct ath_softc *sc)
|
||||||
|
|
||||||
int ath_rx_init(struct ath_softc *sc, int nbufs)
|
int ath_rx_init(struct ath_softc *sc, int nbufs)
|
||||||
{
|
{
|
||||||
|
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
struct ath_buf *bf;
|
struct ath_buf *bf;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
@ -306,10 +307,10 @@ int ath_rx_init(struct ath_softc *sc, int nbufs)
|
||||||
spin_lock_init(&sc->rx.rxbuflock);
|
spin_lock_init(&sc->rx.rxbuflock);
|
||||||
|
|
||||||
sc->rx.bufsize = roundup(IEEE80211_MAX_MPDU_LEN,
|
sc->rx.bufsize = roundup(IEEE80211_MAX_MPDU_LEN,
|
||||||
min(sc->common.cachelsz, (u16)64));
|
min(common->cachelsz, (u16)64));
|
||||||
|
|
||||||
DPRINTF(sc->sc_ah, ATH_DBG_CONFIG, "cachelsz %u rxbufsize %u\n",
|
DPRINTF(sc->sc_ah, ATH_DBG_CONFIG, "cachelsz %u rxbufsize %u\n",
|
||||||
sc->common.cachelsz, sc->rx.bufsize);
|
common->cachelsz, sc->rx.bufsize);
|
||||||
|
|
||||||
/* Initialize rx descriptors */
|
/* Initialize rx descriptors */
|
||||||
|
|
||||||
|
@ -322,7 +323,7 @@ int ath_rx_init(struct ath_softc *sc, int nbufs)
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_entry(bf, &sc->rx.rxbuf, list) {
|
list_for_each_entry(bf, &sc->rx.rxbuf, list) {
|
||||||
skb = ath_rxbuf_alloc(&sc->common, sc->rx.bufsize, GFP_KERNEL);
|
skb = ath_rxbuf_alloc(common, sc->rx.bufsize, GFP_KERNEL);
|
||||||
if (skb == NULL) {
|
if (skb == NULL) {
|
||||||
error = -ENOMEM;
|
error = -ENOMEM;
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -654,6 +655,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
|
||||||
struct sk_buff *skb = NULL, *requeue_skb;
|
struct sk_buff *skb = NULL, *requeue_skb;
|
||||||
struct ieee80211_rx_status rx_status;
|
struct ieee80211_rx_status rx_status;
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
struct ieee80211_hdr *hdr;
|
struct ieee80211_hdr *hdr;
|
||||||
int hdrlen, padsize, retval;
|
int hdrlen, padsize, retval;
|
||||||
bool decrypt_error = false;
|
bool decrypt_error = false;
|
||||||
|
@ -752,7 +754,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
|
||||||
|
|
||||||
/* Ensure we always have an skb to requeue once we are done
|
/* Ensure we always have an skb to requeue once we are done
|
||||||
* processing the current buffer's skb */
|
* processing the current buffer's skb */
|
||||||
requeue_skb = ath_rxbuf_alloc(&sc->common, sc->rx.bufsize, GFP_ATOMIC);
|
requeue_skb = ath_rxbuf_alloc(common, sc->rx.bufsize, GFP_ATOMIC);
|
||||||
|
|
||||||
/* If there is no memory we ignore the current RX'd frame,
|
/* If there is no memory we ignore the current RX'd frame,
|
||||||
* tell hardware it can give us a new frame using the old
|
* tell hardware it can give us a new frame using the old
|
||||||
|
|
Loading…
Reference in a new issue