{
        void __iomem *mem;
        struct ath5k_softc *sc;
+       struct ath_common *common;
        struct ieee80211_hw *hw;
        int ret;
        u8 csz;
        __set_bit(ATH_STAT_INVALID, sc->status);
 
        sc->iobase = mem; /* So we can unmap it on detach */
-       sc->common.cachelsz = csz << 2; /* convert to bytes */
        sc->opmode = NL80211_IFTYPE_STATION;
        sc->bintval = 1000;
        mutex_init(&sc->lock);
                goto err_irq;
        }
 
+       common = ath5k_hw_common(sc->ah);
+       common->cachelsz = csz << 2; /* convert to bytes */
+
        /* set up multi-rate retry capabilities */
        if (sc->ah->ah_version == AR5K_AR5212) {
                hw->max_rates = 4;
 {
        struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
        struct ath5k_softc *sc = hw->priv;
-       struct ath_regulatory *regulatory = &sc->common.regulatory;
+       struct ath_regulatory *regulatory = ath5k_hw_regulatory(sc->ah);
 
        return ath_reg_notifier_apply(wiphy, request, regulatory);
 }
 {
        struct ath5k_softc *sc = hw->priv;
        struct ath5k_hw *ah = sc->ah;
-       struct ath_regulatory *regulatory = &sc->common.regulatory;
+       struct ath_regulatory *regulatory = ath5k_hw_regulatory(ah);
        u8 mac[ETH_ALEN] = {};
        int ret;
 
 static
 struct sk_buff *ath5k_rx_skb_alloc(struct ath5k_softc *sc, dma_addr_t *skb_addr)
 {
+       struct ath_common *common = ath5k_hw_common(sc->ah);
        struct sk_buff *skb;
 
        /*
         * Allocate buffer with headroom_needed space for the
         * fake physical layer header at the start.
         */
-       skb = ath_rxbuf_alloc(&sc->common,
-                             sc->rxbufsize + sc->common.cachelsz - 1,
+       skb = ath_rxbuf_alloc(common,
+                             sc->rxbufsize + common->cachelsz - 1,
                              GFP_ATOMIC);
 
        if (!skb) {
                ATH5K_ERR(sc, "can't alloc skbuff of size %u\n",
-                               sc->rxbufsize + sc->common.cachelsz - 1);
+                               sc->rxbufsize + common->cachelsz - 1);
                return NULL;
        }
 
 ath5k_rx_start(struct ath5k_softc *sc)
 {
        struct ath5k_hw *ah = sc->ah;
+       struct ath_common *common = ath5k_hw_common(ah);
        struct ath5k_buf *bf;
        int ret;
 
-       sc->rxbufsize = roundup(IEEE80211_MAX_LEN, sc->common.cachelsz);
+       sc->rxbufsize = roundup(IEEE80211_MAX_LEN, common->cachelsz);
 
        ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "cachelsz %u rxbufsize %u\n",
-               sc->common.cachelsz, sc->rxbufsize);
+               common->cachelsz, sc->rxbufsize);
 
        spin_lock_bh(&sc->rxbuflock);
        sc->rxlink = NULL;
 
  * associated with an instance of a device */
 struct ath5k_softc {
        struct pci_dev          *pdev;          /* for dma mapping */
-       struct ath_common       common;
        void __iomem            *iobase;        /* address of the device */
        struct mutex            lock;           /* dev-level lock */
        struct ieee80211_tx_queue_stats tx_stats[AR5K_NUM_TX_QUEUES];
 
 static inline struct ath_common *ath5k_hw_common(struct ath5k_hw *ah)
 {
-       return &ah->ah_sc->common;
+       return &ah->common;
 }
 
 static inline struct ath_regulatory *ath5k_hw_regulatory(struct ath5k_hw *ah)