atheros: define a common priv struct
hw code should never use private driver data, but sometimes we need a backpointer so just stuff it on the common ath struct. Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
7c89606e24
commit
bc974f4a23
@@ -56,6 +56,7 @@ struct ath_bus_ops {
|
|||||||
|
|
||||||
struct ath_common {
|
struct ath_common {
|
||||||
void *ah;
|
void *ah;
|
||||||
|
void *priv;
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
int debug_mask;
|
int debug_mask;
|
||||||
|
|
||||||
|
@@ -562,8 +562,8 @@ static const struct file_operations fops_xmit = {
|
|||||||
|
|
||||||
int ath9k_init_debug(struct ath_hw *ah)
|
int ath9k_init_debug(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_softc *sc = ah->ah_sc;
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
|
|
||||||
common->debug_mask = ath9k_debug;
|
common->debug_mask = ath9k_debug;
|
||||||
|
|
||||||
@@ -620,7 +620,8 @@ err:
|
|||||||
|
|
||||||
void ath9k_exit_debug(struct ath_hw *ah)
|
void ath9k_exit_debug(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_softc *sc = ah->ah_sc;
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
|
|
||||||
debugfs_remove(sc->debug.debugfs_xmit);
|
debugfs_remove(sc->debug.debugfs_xmit);
|
||||||
debugfs_remove(sc->debug.debugfs_wiphy);
|
debugfs_remove(sc->debug.debugfs_wiphy);
|
||||||
|
@@ -450,7 +450,6 @@ struct ath_gen_timer_table {
|
|||||||
|
|
||||||
struct ath_hw {
|
struct ath_hw {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct ath_softc *ah_sc;
|
|
||||||
struct ath_common common;
|
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;
|
||||||
|
@@ -1438,17 +1438,22 @@ static void ath9k_gen_timer_start(struct ath_hw *ah,
|
|||||||
u32 timer_next,
|
u32 timer_next,
|
||||||
u32 timer_period)
|
u32 timer_period)
|
||||||
{
|
{
|
||||||
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
|
|
||||||
ath9k_hw_gen_timer_start(ah, timer, timer_next, timer_period);
|
ath9k_hw_gen_timer_start(ah, timer, timer_next, timer_period);
|
||||||
|
|
||||||
if ((ah->ah_sc->imask & ATH9K_INT_GENTIMER) == 0) {
|
if ((sc->imask & ATH9K_INT_GENTIMER) == 0) {
|
||||||
ath9k_hw_set_interrupts(ah, 0);
|
ath9k_hw_set_interrupts(ah, 0);
|
||||||
ah->ah_sc->imask |= ATH9K_INT_GENTIMER;
|
sc->imask |= ATH9K_INT_GENTIMER;
|
||||||
ath9k_hw_set_interrupts(ah, ah->ah_sc->imask);
|
ath9k_hw_set_interrupts(ah, sc->imask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath9k_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
|
static void ath9k_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
|
||||||
{
|
{
|
||||||
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
struct ath_gen_timer_table *timer_table = &ah->hw_gen_timers;
|
struct ath_gen_timer_table *timer_table = &ah->hw_gen_timers;
|
||||||
|
|
||||||
ath9k_hw_gen_timer_stop(ah, timer);
|
ath9k_hw_gen_timer_stop(ah, timer);
|
||||||
@@ -1456,8 +1461,8 @@ static void ath9k_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
|
|||||||
/* if no timer is enabled, turn off interrupt mask */
|
/* if no timer is enabled, turn off interrupt mask */
|
||||||
if (timer_table->timer_mask.val == 0) {
|
if (timer_table->timer_mask.val == 0) {
|
||||||
ath9k_hw_set_interrupts(ah, 0);
|
ath9k_hw_set_interrupts(ah, 0);
|
||||||
ah->ah_sc->imask &= ~ATH9K_INT_GENTIMER;
|
sc->imask &= ~ATH9K_INT_GENTIMER;
|
||||||
ath9k_hw_set_interrupts(ah, ah->ah_sc->imask);
|
ath9k_hw_set_interrupts(ah, sc->imask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1554,28 +1559,32 @@ static int ath_init_btcoex_timer(struct ath_softc *sc)
|
|||||||
static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
|
static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
|
||||||
{
|
{
|
||||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||||
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
|
|
||||||
if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
|
if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
spin_lock_irqsave(&ah->ah_sc->sc_serial_rw, flags);
|
spin_lock_irqsave(&sc->sc_serial_rw, flags);
|
||||||
iowrite32(val, ah->ah_sc->mem + reg_offset);
|
iowrite32(val, sc->mem + reg_offset);
|
||||||
spin_unlock_irqrestore(&ah->ah_sc->sc_serial_rw, flags);
|
spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
|
||||||
} else
|
} else
|
||||||
iowrite32(val, ah->ah_sc->mem + reg_offset);
|
iowrite32(val, sc->mem + reg_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
|
static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
|
||||||
{
|
{
|
||||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||||
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
|
if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
spin_lock_irqsave(&ah->ah_sc->sc_serial_rw, flags);
|
spin_lock_irqsave(&sc->sc_serial_rw, flags);
|
||||||
val = ioread32(ah->ah_sc->mem + reg_offset);
|
val = ioread32(sc->mem + reg_offset);
|
||||||
spin_unlock_irqrestore(&ah->ah_sc->sc_serial_rw, flags);
|
spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
|
||||||
} else
|
} else
|
||||||
val = ioread32(ah->ah_sc->mem + reg_offset);
|
val = ioread32(sc->mem + reg_offset);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1618,7 +1627,6 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
|
|||||||
goto bad_no_ah;
|
goto bad_no_ah;
|
||||||
}
|
}
|
||||||
|
|
||||||
ah->ah_sc = sc;
|
|
||||||
ah->hw_version.devid = devid;
|
ah->hw_version.devid = devid;
|
||||||
ah->hw_version.subsysid = subsysid;
|
ah->hw_version.subsysid = subsysid;
|
||||||
sc->sc_ah = ah;
|
sc->sc_ah = ah;
|
||||||
@@ -1628,6 +1636,7 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
|
|||||||
common->bus_ops = bus_ops;
|
common->bus_ops = bus_ops;
|
||||||
common->ah = ah;
|
common->ah = ah;
|
||||||
common->hw = sc->hw;
|
common->hw = sc->hw;
|
||||||
|
common->priv = sc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Cache line size is used to size and align various
|
* Cache line size is used to size and align various
|
||||||
|
@@ -33,8 +33,7 @@ static struct pci_device_id ath_pci_id_table[] __devinitdata = {
|
|||||||
/* return bus cachesize in 4B word units */
|
/* return bus cachesize in 4B word units */
|
||||||
static void ath_pci_read_cachesize(struct ath_common *common, int *csz)
|
static void ath_pci_read_cachesize(struct ath_common *common, int *csz)
|
||||||
{
|
{
|
||||||
struct ath_hw *ah = (struct ath_hw *) common->ah;
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
struct ath_softc *sc = ah->ah_sc;
|
|
||||||
u8 u8tmp;
|
u8 u8tmp;
|
||||||
|
|
||||||
pci_read_config_byte(to_pci_dev(sc->dev), PCI_CACHE_LINE_SIZE, &u8tmp);
|
pci_read_config_byte(to_pci_dev(sc->dev), PCI_CACHE_LINE_SIZE, &u8tmp);
|
||||||
@@ -52,8 +51,7 @@ static void ath_pci_read_cachesize(struct ath_common *common, int *csz)
|
|||||||
|
|
||||||
static void ath_pci_cleanup(struct ath_common *common)
|
static void ath_pci_cleanup(struct ath_common *common)
|
||||||
{
|
{
|
||||||
struct ath_hw *ah = (struct ath_hw *) common->ah;
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
struct ath_softc *sc = ah->ah_sc;
|
|
||||||
struct pci_dev *pdev = to_pci_dev(sc->dev);
|
struct pci_dev *pdev = to_pci_dev(sc->dev);
|
||||||
|
|
||||||
pci_iounmap(pdev, sc->mem);
|
pci_iounmap(pdev, sc->mem);
|
||||||
@@ -86,8 +84,7 @@ static bool ath_pci_eeprom_read(struct ath_common *common, u32 off, u16 *data)
|
|||||||
*/
|
*/
|
||||||
static void ath_pci_bt_coex_prep(struct ath_common *common)
|
static void ath_pci_bt_coex_prep(struct ath_common *common)
|
||||||
{
|
{
|
||||||
struct ath_hw *ah = (struct ath_hw *) common->ah;
|
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||||
struct ath_softc *sc = ah->ah_sc;
|
|
||||||
struct pci_dev *pdev = to_pci_dev(sc->dev);
|
struct pci_dev *pdev = to_pci_dev(sc->dev);
|
||||||
u8 aspm;
|
u8 aspm;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user