diff --git a/drivers/net/wireless/ath9k/ath9k.h b/drivers/net/wireless/ath9k/ath9k.h
index 71027dc..587c0fe 100644
--- a/drivers/net/wireless/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath9k/ath9k.h
@@ -282,23 +282,6 @@
 	TXQ_FLAG_FRAG_BURST_BACKOFF_ENABLE = 0x0080,
 };
 
-struct ath9k_txq_info {
-	u32 tqi_ver;
-	enum ath9k_tx_queue_subtype tqi_subtype;
-	enum ath9k_tx_queue_flags tqi_qflags;
-	u32 tqi_priority;
-	u32 tqi_aifs;
-	u32 tqi_cwmin;
-	u32 tqi_cwmax;
-	u16 tqi_shretry;
-	u16 tqi_lgretry;
-	u32 tqi_cbrPeriod;
-	u32 tqi_cbrOverflowLimit;
-	u32 tqi_burstTime;
-	u32 tqi_readyTime;
-	u32 tqi_compBuf;
-};
-
 #define ATH9K_TXQ_USEDEFAULT ((u32) -1)
 
 #define ATH9K_DECOMP_MASK_SIZE     128
@@ -999,10 +982,10 @@
 u32 ath9k_regd_get_antenna_allowed(struct ath_hal *ah,
 				     struct ath9k_channel *chan);
 u32 ath9k_hw_mhz2ieee(struct ath_hal *ah, u32 freq, u32 flags);
-bool ath9k_hw_gettxqueueprops(struct ath_hal *ah, int q,
-			      struct ath9k_txq_info *qInfo);
-bool ath9k_hw_settxqueueprops(struct ath_hal *ah, int q,
-			      const struct ath9k_txq_info *qInfo);
+bool ath9k_hw_get_txq_props(struct ath_hal *ah, int q,
+			    struct ath9k_tx_queue_info *qinfo);
+bool ath9k_hw_set_txq_props(struct ath_hal *ah, int q,
+			    const struct ath9k_tx_queue_info *qinfo);
 struct ath9k_channel *ath9k_regd_check_channel(struct ath_hal *ah,
 					      const struct ath9k_channel *c);
 void ath9k_hw_set11n_txdesc(struct ath_hal *ah, struct ath_desc *ds,
@@ -1053,7 +1036,7 @@
 bool ath9k_hw_set_txpowerlimit(struct ath_hal *ah, u32 limit);
 bool ath9k_regd_is_public_safety_sku(struct ath_hal *ah);
 int ath9k_hw_setuptxqueue(struct ath_hal *ah, enum ath9k_tx_queue type,
-			  const struct ath9k_txq_info *qInfo);
+			  const struct ath9k_tx_queue_info *qinfo);
 u32 ath9k_hw_numtxpending(struct ath_hal *ah, u32 q);
 const char *ath9k_hw_probe(u16 vendorid, u16 devid);
 bool ath9k_hw_disable(struct ath_hal *ah);
diff --git a/drivers/net/wireless/ath9k/beacon.c b/drivers/net/wireless/ath9k/beacon.c
index ba3dd25..6e6538b 100644
--- a/drivers/net/wireless/ath9k/beacon.c
+++ b/drivers/net/wireless/ath9k/beacon.c
@@ -30,9 +30,9 @@
 static int ath_beaconq_config(struct ath_softc *sc)
 {
 	struct ath_hal *ah = sc->sc_ah;
-	struct ath9k_txq_info qi;
+	struct ath9k_tx_queue_info qi;
 
-	ath9k_hw_gettxqueueprops(ah, sc->sc_bhalq, &qi);
+	ath9k_hw_get_txq_props(ah, sc->sc_bhalq, &qi);
 	if (sc->sc_opmode == ATH9K_M_HOSTAP) {
 		/* Always burst out beacon and CAB traffic. */
 		qi.tqi_aifs = 1;
@@ -45,7 +45,7 @@
 		qi.tqi_cwmax = sc->sc_beacon_qi.tqi_cwmax;
 	}
 
-	if (!ath9k_hw_settxqueueprops(ah, sc->sc_bhalq, &qi)) {
+	if (!ath9k_hw_set_txq_props(ah, sc->sc_bhalq, &qi)) {
 		DPRINTF(sc, ATH_DBG_FATAL,
 			"%s: unable to update h/w beacon queue parameters\n",
 			__func__);
@@ -335,7 +335,7 @@
 
 int ath_beaconq_setup(struct ath_hal *ah)
 {
-	struct ath9k_txq_info qi;
+	struct ath9k_tx_queue_info qi;
 
 	memzero(&qi, sizeof(qi));
 	qi.tqi_aifs = 1;
diff --git a/drivers/net/wireless/ath9k/core.h b/drivers/net/wireless/ath9k/core.h
index cf76b36..903bd46 100644
--- a/drivers/net/wireless/ath9k/core.h
+++ b/drivers/net/wireless/ath9k/core.h
@@ -568,7 +568,8 @@
 int ath_tx_init(struct ath_softc *sc, int nbufs);
 int ath_tx_cleanup(struct ath_softc *sc);
 int ath_tx_get_qnum(struct ath_softc *sc, int qtype, int haltype);
-int ath_txq_update(struct ath_softc *sc, int qnum, struct ath9k_txq_info *q);
+int ath_txq_update(struct ath_softc *sc, int qnum,
+		   struct ath9k_tx_queue_info *q);
 int ath_tx_start(struct ath_softc *sc, struct sk_buff *skb);
 void ath_tx_tasklet(struct ath_softc *sc);
 u32 ath_txq_depth(struct ath_softc *sc, int qnum);
@@ -922,132 +923,123 @@
 };
 
 struct ath_softc {
-	struct ieee80211_hw *hw; /* mac80211 instance */
-	struct pci_dev		*pdev;	    /* Bus handle */
-	void __iomem		*mem;	    /* address of the device */
-	struct tasklet_struct   intr_tq;    /* General tasklet */
-	struct tasklet_struct   bcon_tasklet; /* Beacon tasklet */
-	struct ath_config       sc_config;  /* per-instance load-time
-						parameters */
-	int                     sc_debug;   /* Debug masks */
-	struct ath_hal          *sc_ah;     /* HAL Instance */
-	struct ath_rate_softc    *sc_rc;     /* tx rate control support */
-	u32               sc_intrstatus; /* HAL_STATUS */
-	enum ath9k_opmode         sc_opmode;  /* current operating mode */
+	struct ieee80211_hw *hw;
+	struct pci_dev *pdev;
+	void __iomem *mem;
+	struct tasklet_struct intr_tq;
+	struct tasklet_struct bcon_tasklet;
+	struct ath_config sc_config;	/* load-time parameters */
+	int sc_debug;
+	struct ath_hal *sc_ah;
+	struct ath_rate_softc *sc_rc;	/* tx rate control support */
+	u32 sc_intrstatus;
+	enum ath9k_opmode sc_opmode;	/* current operating mode */
 
-	/* Properties, Config */
-	u8                sc_invalid;	/* being detached */
-	u8                sc_beacons;	/* beacons running */
-	u8                sc_scanning;	/* scanning active */
-	u8                sc_txaggr;	/* enable 11n tx aggregation */
-	u8                sc_rxaggr;	/* enable 11n rx aggregation */
-	u8                sc_update_chainmask;	/* change chain mask */
-	u8                sc_full_reset;		/* force full reset */
-	enum wireless_mode      sc_curmode;     /* current phy mode */
-	u16               sc_curtxpow;    /* current tx power limit */
-	u16               sc_curaid;      /* current association id */
-	u8                sc_curbssid[ETH_ALEN];
-	u8                sc_myaddr[ETH_ALEN];
-	enum PROT_MODE          sc_protmode;    /* protection mode */
-	u8                sc_mcastantenna;/* Multicast antenna number */
-	u8                sc_txantenna;   /* data tx antenna
-						(fixed or auto) */
-	u8                sc_nbcnvaps;    /* # of vaps sending beacons */
-	u16               sc_nvaps;       /* # of active virtual ap's */
-	struct ath_vap          *sc_vaps[ATH_BCBUF]; /* interface id
-						to avp map */
-	enum ath9k_int            sc_imask;       /* interrupt mask copy */
-	u8                sc_bssidmask[ETH_ALEN];
-	u8                sc_defant;      /* current default antenna */
-	u8                sc_rxotherant;  /* rx's on non-default antenna*/
-	u16               sc_cachelsz;    /* cache line size */
-	int                     sc_slotupdate;  /* slot to next advance fsm */
-	int                     sc_slottime;    /* slot time */
-	u8                sc_noreset;
-	int                     sc_bslot[ATH_BCBUF];/* beacon xmit slots */
-	struct ath9k_node_stats   sc_halstats;    /* station-mode rssi stats */
-	struct list_head        node_list;
-	struct ath_ht_info      sc_ht_info;
-	int16_t                 sc_noise_floor; /* signal noise floor in dBm */
-	enum ath9k_ht_extprotspacing   sc_ht_extprotspacing;
-	u8                sc_tx_chainmask;
-	u8                sc_rx_chainmask;
-	u8                sc_rxchaindetect_ref;
-	u8                sc_rxchaindetect_thresh5GHz;
-	u8                sc_rxchaindetect_thresh2GHz;
-	u8                sc_rxchaindetect_delta5GHz;
-	u8                sc_rxchaindetect_delta2GHz;
-	u32               sc_rtsaggrlimit; /* Chipset specific
-						aggr limit */
-	u32                     sc_flags;
+	u8 sc_invalid;			/* being detached */
+	u8 sc_beacons;			/* beacons running */
+	u8 sc_scanning;			/* scanning active */
+	u8 sc_txaggr;			/* enable 11n tx aggregation */
+	u8 sc_rxaggr;			/* enable 11n rx aggregation */
+	u8 sc_update_chainmask;		/* change chain mask */
+	u8 sc_full_reset;		/* force full reset */
+	enum wireless_mode sc_curmode;	/* current phy mode */
+	u16 sc_curtxpow;
+	u16 sc_curaid;
+	u8 sc_curbssid[ETH_ALEN];
+	u8 sc_myaddr[ETH_ALEN];
+	enum PROT_MODE sc_protmode;
+	u8 sc_mcastantenna;
+	u8 sc_txantenna;		/* data tx antenna (fixed or auto) */
+	u8 sc_nbcnvaps;			/* # of vaps sending beacons */
+	u16 sc_nvaps;			/* # of active virtual ap's */
+	struct ath_vap *sc_vaps[ATH_BCBUF];
+	enum ath9k_int sc_imask;
+	u8 sc_bssidmask[ETH_ALEN];
+	u8 sc_defant;			/* current default antenna */
+	u8 sc_rxotherant;		/* rx's on non-default antenna */
+	u16 sc_cachelsz;
+	int sc_slotupdate;		/* slot to next advance fsm */
+	int sc_slottime;
+	u8 sc_noreset;
+	int sc_bslot[ATH_BCBUF];
+	struct ath9k_node_stats sc_halstats; /* station-mode rssi stats */
+	struct list_head node_list;
+	struct ath_ht_info sc_ht_info;
+	int16_t sc_noise_floor;		/* signal noise floor in dBm */
+	enum ath9k_ht_extprotspacing sc_ht_extprotspacing;
+	u8 sc_tx_chainmask;
+	u8 sc_rx_chainmask;
+	u8 sc_rxchaindetect_ref;
+	u8 sc_rxchaindetect_thresh5GHz;
+	u8 sc_rxchaindetect_thresh2GHz;
+	u8 sc_rxchaindetect_delta5GHz;
+	u8 sc_rxchaindetect_delta2GHz;
+	u32 sc_rtsaggrlimit;		/* Chipset specific aggr limit */
+	u32 sc_flags;
 #ifdef CONFIG_SLOW_ANT_DIV
-	/* Slow antenna diversity */
-	struct ath_antdiv       sc_antdiv;
+	struct ath_antdiv sc_antdiv;
 #endif
 	enum {
-		OK,                 /* no change needed */
-		UPDATE,             /* update pending */
-		COMMIT              /* beacon sent, commit change */
-	} sc_updateslot;            /* slot time update fsm */
+		OK,		/* no change needed */
+		UPDATE,		/* update pending */
+		COMMIT		/* beacon sent, commit change */
+	} sc_updateslot;	/* slot time update fsm */
 
 	/* Crypto */
-	u32                   sc_keymax;      /* size of key cache */
-	DECLARE_BITMAP(sc_keymap, ATH_KEYMAX); /* key use bit map */
-	u8		sc_splitmic;	/* split TKIP MIC keys */
-	int                     sc_keytype;     /* type of the key being used */
+	u32 sc_keymax;		/* size of key cache */
+	DECLARE_BITMAP(sc_keymap, ATH_KEYMAX);	/* key use bit map */
+	u8 sc_splitmic;		/* split TKIP MIC keys */
+	int sc_keytype;
 
 	/* RX */
-	struct list_head	sc_rxbuf;       /* receive buffer */
-	struct ath_descdma      sc_rxdma;       /* RX descriptors */
-	int                     sc_rxbufsize;   /* rx size based on mtu */
-	u32               *sc_rxlink;     /* link ptr in last RX desc */
-	u32               sc_rxflush;     /* rx flush in progress */
-	u64               sc_lastrx;      /* tsf of last rx'd frame */
+	struct list_head sc_rxbuf;
+	struct ath_descdma sc_rxdma;
+	int sc_rxbufsize;	/* rx size based on mtu */
+	u32 *sc_rxlink;		/* link ptr in last RX desc */
+	u32 sc_rxflush;		/* rx flush in progress */
+	u64 sc_lastrx;		/* tsf of last rx'd frame */
 
 	/* TX */
-	struct list_head	sc_txbuf;       /* transmit buffer */
-	struct ath_txq          sc_txq[ATH9K_NUM_TX_QUEUES];
-	struct ath_descdma      sc_txdma;       /* TX descriptors */
-	u32                   sc_txqsetup;    /* h/w queues setup */
-	u32                   sc_txintrperiod;/* tx interrupt batching */
-	int                     sc_haltype2q[ATH9K_WME_AC_VO+1]; /* HAL WME
-							AC -> h/w qnum */
-	u32               sc_ant_tx[8];   /* recent tx frames/antenna */
+	struct list_head sc_txbuf;
+	struct ath_txq sc_txq[ATH9K_NUM_TX_QUEUES];
+	struct ath_descdma sc_txdma;
+	u32 sc_txqsetup;
+	u32 sc_txintrperiod;	/* tx interrupt batching */
+	int sc_haltype2q[ATH9K_WME_AC_VO+1]; /* HAL WME	AC -> h/w qnum */
+	u32 sc_ant_tx[8];	/* recent tx frames/antenna */
 
 	/* Beacon */
-	struct ath9k_txq_info     sc_beacon_qi;   /* adhoc only: beacon
-						queue parameters */
-	struct ath_descdma      sc_bdma;        /* beacon descriptors */
-	struct ath_txq          *sc_cabq;       /* tx q for cab frames */
-	struct list_head	sc_bbuf;	/* beacon buffers */
-	u32                   sc_bhalq;       /* HAL q for outgoing beacons */
-	u32                   sc_bmisscount;  /* missed beacon transmits */
-	u32               ast_be_xmit; /* beacons transmitted */
+	struct ath9k_tx_queue_info sc_beacon_qi;
+	struct ath_descdma sc_bdma;
+	struct ath_txq *sc_cabq;
+	struct list_head sc_bbuf;
+	u32 sc_bhalq;
+	u32 sc_bmisscount;
+	u32 ast_be_xmit;	/* beacons transmitted */
 
 	/* Rate */
-	struct ieee80211_rate          rates[IEEE80211_NUM_BANDS][ATH_RATE_MAX];
-	const struct ath9k_rate_table    *sc_rates[WIRELESS_MODE_MAX];
-	const struct ath9k_rate_table    *sc_currates; /* current rate table */
-	u8                       sc_rixmap[256]; /* IEEE to h/w
-						rate table ix */
-	u8                       sc_minrateix;   /* min h/w rate index */
-	u8                       sc_protrix; /* protection rate index */
+	struct ieee80211_rate rates[IEEE80211_NUM_BANDS][ATH_RATE_MAX];
+	const struct ath9k_rate_table *sc_rates[WIRELESS_MODE_MAX];
+	const struct ath9k_rate_table *sc_currates;
+	u8 sc_rixmap[256];	/* IEEE to h/w rate table ix */
+	u8 sc_minrateix;	/* min h/w rate index */
+	u8 sc_protrix;		/* protection rate index */
 	struct {
-		u32 rateKbps;      /* transfer rate in kbs */
-		u8 ieeerate;       /* IEEE rate */
-	} sc_hwmap[256];         /* h/w rate ix mappings */
+		u32 rateKbps;	/* transfer rate in kbs */
+		u8 ieeerate;	/* IEEE rate */
+	} sc_hwmap[256];	/* h/w rate ix mappings */
 
 	/* Channel, Band */
 	struct ieee80211_channel channels[IEEE80211_NUM_BANDS][ATH_CHAN_MAX];
 	struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
-	struct ath9k_channel            sc_curchan; /* current h/w channel */
+	struct ath9k_channel sc_curchan;
 
 	/* Locks */
-	spinlock_t              sc_rxflushlock; /* lock of RX flush */
-	spinlock_t              sc_rxbuflock;   /* rxbuf lock */
-	spinlock_t              sc_txbuflock;   /* txbuf lock */
-	spinlock_t              sc_resetlock;
-	spinlock_t              node_lock;
+	spinlock_t sc_rxflushlock;
+	spinlock_t sc_rxbuflock;
+	spinlock_t sc_txbuflock;
+	spinlock_t sc_resetlock;
+	spinlock_t node_lock;
 };
 
 int ath_init(u16 devid, struct ath_softc *sc);
diff --git a/drivers/net/wireless/ath9k/hw.c b/drivers/net/wireless/ath9k/hw.c
index 0dd11ee..bc5def9 100644
--- a/drivers/net/wireless/ath9k/hw.c
+++ b/drivers/net/wireless/ath9k/hw.c
@@ -7394,12 +7394,21 @@
 	return newLevel != curLevel;
 }
 
-static bool ath9k_hw_set_txq_props(struct ath_hal *ah,
-				   struct ath9k_tx_queue_info *qi,
-				   const struct ath9k_txq_info *qInfo)
+bool ath9k_hw_set_txq_props(struct ath_hal *ah, int q,
+			    const struct ath9k_tx_queue_info *qinfo)
 {
 	u32 cw;
+	struct ath_hal_5416 *ahp = AH5416(ah);
+	struct ath9k_hw_capabilities *pCap = &ah->ah_caps;
+	struct ath9k_tx_queue_info *qi;
 
+	if (q >= pCap->total_queues) {
+		DPRINTF(ah->ah_sc, ATH_DBG_QUEUE, "%s: invalid queue num %u\n",
+			 __func__, q);
+		return false;
+	}
+
+	qi = &ahp->ah_txq[q];
 	if (qi->tqi_type == ATH9K_TX_QUEUE_INACTIVE) {
 		DPRINTF(ah->ah_sc, ATH_DBG_QUEUE, "%s: inactive queue\n",
 			 __func__);
@@ -7408,43 +7417,43 @@
 
 	DPRINTF(ah->ah_sc, ATH_DBG_QUEUE, "%s: queue %p\n", __func__, qi);
 
-	qi->tqi_ver = qInfo->tqi_ver;
-	qi->tqi_subtype = qInfo->tqi_subtype;
-	qi->tqi_qflags = qInfo->tqi_qflags;
-	qi->tqi_priority = qInfo->tqi_priority;
-	if (qInfo->tqi_aifs != ATH9K_TXQ_USEDEFAULT)
-		qi->tqi_aifs = min(qInfo->tqi_aifs, 255U);
+	qi->tqi_ver = qinfo->tqi_ver;
+	qi->tqi_subtype = qinfo->tqi_subtype;
+	qi->tqi_qflags = qinfo->tqi_qflags;
+	qi->tqi_priority = qinfo->tqi_priority;
+	if (qinfo->tqi_aifs != ATH9K_TXQ_USEDEFAULT)
+		qi->tqi_aifs = min(qinfo->tqi_aifs, 255U);
 	else
 		qi->tqi_aifs = INIT_AIFS;
-	if (qInfo->tqi_cwmin != ATH9K_TXQ_USEDEFAULT) {
-		cw = min(qInfo->tqi_cwmin, 1024U);
+	if (qinfo->tqi_cwmin != ATH9K_TXQ_USEDEFAULT) {
+		cw = min(qinfo->tqi_cwmin, 1024U);
 		qi->tqi_cwmin = 1;
 		while (qi->tqi_cwmin < cw)
 			qi->tqi_cwmin = (qi->tqi_cwmin << 1) | 1;
 	} else
-		qi->tqi_cwmin = qInfo->tqi_cwmin;
-	if (qInfo->tqi_cwmax != ATH9K_TXQ_USEDEFAULT) {
-		cw = min(qInfo->tqi_cwmax, 1024U);
+		qi->tqi_cwmin = qinfo->tqi_cwmin;
+	if (qinfo->tqi_cwmax != ATH9K_TXQ_USEDEFAULT) {
+		cw = min(qinfo->tqi_cwmax, 1024U);
 		qi->tqi_cwmax = 1;
 		while (qi->tqi_cwmax < cw)
 			qi->tqi_cwmax = (qi->tqi_cwmax << 1) | 1;
 	} else
 		qi->tqi_cwmax = INIT_CWMAX;
 
-	if (qInfo->tqi_shretry != 0)
-		qi->tqi_shretry = min((u32) qInfo->tqi_shretry, 15U);
+	if (qinfo->tqi_shretry != 0)
+		qi->tqi_shretry = min((u32) qinfo->tqi_shretry, 15U);
 	else
 		qi->tqi_shretry = INIT_SH_RETRY;
-	if (qInfo->tqi_lgretry != 0)
-		qi->tqi_lgretry = min((u32) qInfo->tqi_lgretry, 15U);
+	if (qinfo->tqi_lgretry != 0)
+		qi->tqi_lgretry = min((u32) qinfo->tqi_lgretry, 15U);
 	else
 		qi->tqi_lgretry = INIT_LG_RETRY;
-	qi->tqi_cbrPeriod = qInfo->tqi_cbrPeriod;
-	qi->tqi_cbrOverflowLimit = qInfo->tqi_cbrOverflowLimit;
-	qi->tqi_burstTime = qInfo->tqi_burstTime;
-	qi->tqi_readyTime = qInfo->tqi_readyTime;
+	qi->tqi_cbrPeriod = qinfo->tqi_cbrPeriod;
+	qi->tqi_cbrOverflowLimit = qinfo->tqi_cbrOverflowLimit;
+	qi->tqi_burstTime = qinfo->tqi_burstTime;
+	qi->tqi_readyTime = qinfo->tqi_readyTime;
 
-	switch (qInfo->tqi_subtype) {
+	switch (qinfo->tqi_subtype) {
 	case ATH9K_WME_UPSD:
 		if (qi->tqi_type == ATH9K_TX_QUEUE_DATA)
 			qi->tqi_intFlags = ATH9K_TXQ_USE_LOCKOUT_BKOFF_DIS;
@@ -7455,66 +7464,47 @@
 	return true;
 }
 
-bool ath9k_hw_settxqueueprops(struct ath_hal *ah, int q,
-			      const struct ath9k_txq_info *qInfo)
+bool ath9k_hw_get_txq_props(struct ath_hal *ah, int q,
+			    struct ath9k_tx_queue_info *qinfo)
 {
 	struct ath_hal_5416 *ahp = AH5416(ah);
 	struct ath9k_hw_capabilities *pCap = &ah->ah_caps;
+	struct ath9k_tx_queue_info *qi;
 
 	if (q >= pCap->total_queues) {
 		DPRINTF(ah->ah_sc, ATH_DBG_QUEUE, "%s: invalid queue num %u\n",
 			 __func__, q);
 		return false;
 	}
-	return ath9k_hw_set_txq_props(ah, &ahp->ah_txq[q], qInfo);
-}
 
-static bool ath9k_hw_get_txq_props(struct ath_hal *ah,
-				   struct ath9k_txq_info *qInfo,
-				   const struct ath9k_tx_queue_info *qi)
-{
+	qi = &ahp->ah_txq[q];
 	if (qi->tqi_type == ATH9K_TX_QUEUE_INACTIVE) {
 		DPRINTF(ah->ah_sc, ATH_DBG_QUEUE, "%s: inactive queue\n",
 			 __func__);
 		return false;
 	}
 
-	qInfo->tqi_qflags = qi->tqi_qflags;
-	qInfo->tqi_ver = qi->tqi_ver;
-	qInfo->tqi_subtype = qi->tqi_subtype;
-	qInfo->tqi_qflags = qi->tqi_qflags;
-	qInfo->tqi_priority = qi->tqi_priority;
-	qInfo->tqi_aifs = qi->tqi_aifs;
-	qInfo->tqi_cwmin = qi->tqi_cwmin;
-	qInfo->tqi_cwmax = qi->tqi_cwmax;
-	qInfo->tqi_shretry = qi->tqi_shretry;
-	qInfo->tqi_lgretry = qi->tqi_lgretry;
-	qInfo->tqi_cbrPeriod = qi->tqi_cbrPeriod;
-	qInfo->tqi_cbrOverflowLimit = qi->tqi_cbrOverflowLimit;
-	qInfo->tqi_burstTime = qi->tqi_burstTime;
-	qInfo->tqi_readyTime = qi->tqi_readyTime;
+	qinfo->tqi_qflags = qi->tqi_qflags;
+	qinfo->tqi_ver = qi->tqi_ver;
+	qinfo->tqi_subtype = qi->tqi_subtype;
+	qinfo->tqi_qflags = qi->tqi_qflags;
+	qinfo->tqi_priority = qi->tqi_priority;
+	qinfo->tqi_aifs = qi->tqi_aifs;
+	qinfo->tqi_cwmin = qi->tqi_cwmin;
+	qinfo->tqi_cwmax = qi->tqi_cwmax;
+	qinfo->tqi_shretry = qi->tqi_shretry;
+	qinfo->tqi_lgretry = qi->tqi_lgretry;
+	qinfo->tqi_cbrPeriod = qi->tqi_cbrPeriod;
+	qinfo->tqi_cbrOverflowLimit = qi->tqi_cbrOverflowLimit;
+	qinfo->tqi_burstTime = qi->tqi_burstTime;
+	qinfo->tqi_readyTime = qi->tqi_readyTime;
 
 	return true;
 }
 
-bool
-ath9k_hw_gettxqueueprops(struct ath_hal *ah, int q,
-			 struct ath9k_txq_info *qInfo)
-{
-	struct ath_hal_5416 *ahp = AH5416(ah);
-	struct ath9k_hw_capabilities *pCap = &ah->ah_caps;
-
-	if (q >= pCap->total_queues) {
-		DPRINTF(ah->ah_sc, ATH_DBG_QUEUE, "%s: invalid queue num %u\n",
-			 __func__, q);
-		return false;
-	}
-	return ath9k_hw_get_txq_props(ah, qInfo, &ahp->ah_txq[q]);
-}
-
 int
 ath9k_hw_setuptxqueue(struct ath_hal *ah, enum ath9k_tx_queue type,
-		      const struct ath9k_txq_info *qInfo)
+		      const struct ath9k_tx_queue_info *qinfo)
 {
 	struct ath_hal_5416 *ahp = AH5416(ah);
 	struct ath9k_tx_queue_info *qi;
@@ -7561,7 +7551,7 @@
 	}
 	memset(qi, 0, sizeof(struct ath9k_tx_queue_info));
 	qi->tqi_type = type;
-	if (qInfo == NULL) {
+	if (qinfo == NULL) {
 		qi->tqi_qflags =
 			TXQ_FLAG_TXOKINT_ENABLE
 			| TXQ_FLAG_TXERRINT_ENABLE
@@ -7573,8 +7563,8 @@
 		qi->tqi_lgretry = INIT_LG_RETRY;
 		qi->tqi_physCompBuf = 0;
 	} else {
-		qi->tqi_physCompBuf = qInfo->tqi_compBuf;
-		(void) ath9k_hw_settxqueueprops(ah, q, qInfo);
+		qi->tqi_physCompBuf = qinfo->tqi_physCompBuf;
+		(void) ath9k_hw_set_txq_props(ah, q, qinfo);
 	}
 
 	return q;
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c
index 01bee5e..4cf0d26 100644
--- a/drivers/net/wireless/ath9k/main.c
+++ b/drivers/net/wireless/ath9k/main.c
@@ -700,7 +700,7 @@
 			 const struct ieee80211_tx_queue_params *params)
 {
 	struct ath_softc *sc = hw->priv;
-	struct ath9k_txq_info qi;
+	struct ath9k_tx_queue_info qi;
 	int ret = 0, qnum;
 
 	if (queue >= WME_NUM_AC)
diff --git a/drivers/net/wireless/ath9k/xmit.c b/drivers/net/wireless/ath9k/xmit.c
index 92bb3c2..debd7f4 100644
--- a/drivers/net/wireless/ath9k/xmit.c
+++ b/drivers/net/wireless/ath9k/xmit.c
@@ -2209,7 +2209,7 @@
 struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype)
 {
 	struct ath_hal *ah = sc->sc_ah;
-	struct ath9k_txq_info qi;
+	struct ath9k_tx_queue_info qi;
 	int qnum;
 
 	memzero(&qi, sizeof(qi));
@@ -2217,7 +2217,7 @@
 	qi.tqi_aifs = ATH9K_TXQ_USEDEFAULT;
 	qi.tqi_cwmin = ATH9K_TXQ_USEDEFAULT;
 	qi.tqi_cwmax = ATH9K_TXQ_USEDEFAULT;
-	qi.tqi_compBuf = 0;
+	qi.tqi_physCompBuf = 0;
 
 	/*
 	 * Enable interrupts only for EOL and DESC conditions.
@@ -2337,11 +2337,12 @@
 
 /* Update parameters for a transmit queue */
 
-int ath_txq_update(struct ath_softc *sc, int qnum, struct ath9k_txq_info *qi0)
+int ath_txq_update(struct ath_softc *sc, int qnum,
+		   struct ath9k_tx_queue_info *qinfo)
 {
 	struct ath_hal *ah = sc->sc_ah;
 	int error = 0;
-	struct ath9k_txq_info qi;
+	struct ath9k_tx_queue_info qi;
 
 	if (qnum == sc->sc_bhalq) {
 		/*
@@ -2349,20 +2350,20 @@
 		 * It will be picked up by ath_beaconq_config when
 		 * it's necessary.
 		 */
-		sc->sc_beacon_qi = *qi0;
+		sc->sc_beacon_qi = *qinfo;
 		return 0;
 	}
 
 	ASSERT(sc->sc_txq[qnum].axq_qnum == qnum);
 
-	ath9k_hw_gettxqueueprops(ah, qnum, &qi);
-	qi.tqi_aifs = qi0->tqi_aifs;
-	qi.tqi_cwmin = qi0->tqi_cwmin;
-	qi.tqi_cwmax = qi0->tqi_cwmax;
-	qi.tqi_burstTime = qi0->tqi_burstTime;
-	qi.tqi_readyTime = qi0->tqi_readyTime;
+	ath9k_hw_get_txq_props(ah, qnum, &qi);
+	qi.tqi_aifs = qinfo->tqi_aifs;
+	qi.tqi_cwmin = qinfo->tqi_cwmin;
+	qi.tqi_cwmax = qinfo->tqi_cwmax;
+	qi.tqi_burstTime = qinfo->tqi_burstTime;
+	qi.tqi_readyTime = qinfo->tqi_readyTime;
 
-	if (!ath9k_hw_settxqueueprops(ah, qnum, &qi)) {
+	if (!ath9k_hw_set_txq_props(ah, qnum, &qi)) {
 		DPRINTF(sc, ATH_DBG_FATAL,
 			"%s: unable to update hardware queue %u!\n",
 			__func__, qnum);
@@ -2376,11 +2377,11 @@
 
 int ath_cabq_update(struct ath_softc *sc)
 {
-	struct ath9k_txq_info qi;
+	struct ath9k_tx_queue_info qi;
 	int qnum = sc->sc_cabq->axq_qnum;
 	struct ath_beacon_config conf;
 
-	ath9k_hw_gettxqueueprops(sc->sc_ah, qnum, &qi);
+	ath9k_hw_get_txq_props(sc->sc_ah, qnum, &qi);
 	/*
 	 * Ensure the readytime % is within the bounds.
 	 */
