*
  * precondition: perimeter lock has been acquired
  */
-void brcms_add_timer(struct brcms_info *wl, struct brcms_timer *t, uint ms,
+void brcms_add_timer(struct brcms_timer *t, uint ms,
                     int periodic)
 {
 #ifdef BCMDBG
        if (t->set)
-               wiphy_err(wl->wiphy, "%s: Already set. Name: %s, per %d\n",
+               wiphy_err(t->wl->wiphy, "%s: Already set. Name: %s, per %d\n",
                          __func__, t->name, periodic);
 
 #endif
        t->set = true;
        t->timer.expires = jiffies + ms * HZ / 1000;
 
-       atomic_inc(&wl->callbacks);
+       atomic_inc(&t->wl->callbacks);
        add_timer(&t->timer);
 }
 
  *
  * precondition: perimeter lock has been acquired
  */
-bool brcms_del_timer(struct brcms_info *wl, struct brcms_timer *t)
+bool brcms_del_timer(struct brcms_timer *t)
 {
        if (t->set) {
                t->set = false;
                if (!del_timer(&t->timer))
                        return false;
 
-               atomic_dec(&wl->callbacks);
+               atomic_dec(&t->wl->callbacks);
        }
 
        return true;
 /*
  * precondition: perimeter lock has been acquired
  */
-void brcms_free_timer(struct brcms_info *wl, struct brcms_timer *t)
+void brcms_free_timer(struct brcms_timer *t)
 {
+       struct brcms_info *wl = t->wl;
        struct brcms_timer *tmp;
 
        /* delete the timer in case it is active */
-       brcms_del_timer(wl, t);
+       brcms_del_timer(t);
 
        if (wl->timers == t) {
                wl->timers = wl->timers->next;
 
 extern struct brcms_timer *brcms_init_timer(struct brcms_info *wl,
                                      void (*fn) (void *arg), void *arg,
                                      const char *name);
-extern void brcms_free_timer(struct brcms_info *wl, struct brcms_timer *timer);
-extern void brcms_add_timer(struct brcms_info *wl, struct brcms_timer *timer,
-                           uint ms, int periodic);
-extern bool brcms_del_timer(struct brcms_info *wl, struct brcms_timer *timer);
+extern void brcms_free_timer(struct brcms_timer *timer);
+extern void brcms_add_timer(struct brcms_timer *timer, uint ms, int periodic);
+extern bool brcms_del_timer(struct brcms_timer *timer);
 extern void brcms_msleep(struct brcms_info *wl, uint ms);
 extern void brcms_dpc(unsigned long data);
 extern void brcms_timer(struct brcms_timer *t);
 
 
        wlc->radio_monitor = true;
        brcms_b_pllreq(wlc->hw, true, BRCMS_PLLREQ_RADIO_MON);
-       brcms_add_timer(wlc->wl, wlc->radio_timer, TIMER_INTERVAL_RADIOCHK,
-                       true);
+       brcms_add_timer(wlc->radio_timer, TIMER_INTERVAL_RADIOCHK, true);
 }
 
 void brcms_c_radio_disable(struct brcms_c_info *wlc)
 
        wlc->radio_monitor = false;
        brcms_b_pllreq(wlc->hw, false, BRCMS_PLLREQ_RADIO_MON);
-       return brcms_del_timer(wlc->wl, wlc->radio_timer);
+       return brcms_del_timer(wlc->radio_timer);
 }
 
 /* read hwdisable state and propagate to wlc flag */
 {
        /* free timer state */
        if (wlc->wdtimer) {
-               brcms_free_timer(wlc->wl, wlc->wdtimer);
+               brcms_free_timer(wlc->wdtimer);
                wlc->wdtimer = NULL;
        }
        if (wlc->radio_timer) {
-               brcms_free_timer(wlc->wl, wlc->radio_timer);
+               brcms_free_timer(wlc->radio_timer);
                wlc->radio_timer = NULL;
        }
 }
        brcms_c_wme_retries_write(wlc);
 
        /* start one second watchdog timer */
-       brcms_add_timer(wlc->wl, wlc->wdtimer, TIMER_INTERVAL_WATCHDOG, true);
+       brcms_add_timer(wlc->wdtimer, TIMER_INTERVAL_WATCHDOG, true);
        wlc->WDarmed = true;
 
        /* ensure antenna config is up to date */
 
        /* cancel the watchdog timer */
        if (wlc->WDarmed) {
-               if (!brcms_del_timer(wlc->wl, wlc->wdtimer))
+               if (!brcms_del_timer(wlc->wdtimer))
                        callbacks++;
                wlc->WDarmed = false;
        }
 
                        wlc_phy_cal_perical_mphase_restart(pi);
                } else
                        wlc_phy_cal_perical_nphy_run(pi, PHY_PERICAL_AUTO);
-               wlapi_add_timer(pi->sh->physhim, pi->phycal_timer, delay, 0);
+               wlapi_add_timer(pi->phycal_timer, delay, 0);
                return;
        }
 
                        return;
 
                if (pi->phycal_timer) {
-                       wlapi_free_timer(pi->sh->physhim, pi->phycal_timer);
+                       wlapi_free_timer(pi->phycal_timer);
                        pi->phycal_timer = NULL;
                }
 
        int callbacks = 0;
 
        if (pi->phycal_timer
-           && !wlapi_del_timer(pi->sh->physhim, pi->phycal_timer))
+           && !wlapi_del_timer(pi->phycal_timer))
                callbacks++;
 
        pi->nphy_iqcal_chanspec_2G = 0;
 
 void wlc_phy_cal_perical_mphase_reset(struct brcms_phy *pi)
 {
-       wlapi_del_timer(pi->sh->physhim, pi->phycal_timer);
+       wlapi_del_timer(pi->phycal_timer);
 
        pi->cal_type_override = PHY_PERICAL_AUTO;
        pi->mphase_cal_phase_id = MPHASE_CAL_STATE_IDLE;
            (pi->nphy_perical != PHY_PERICAL_MANUAL))
                return;
 
-       wlapi_del_timer(pi->sh->physhim, pi->phycal_timer);
+       wlapi_del_timer(pi->phycal_timer);
 
        pi->mphase_cal_phase_id = MPHASE_CAL_STATE_INIT;
-       wlapi_add_timer(pi->sh->physhim, pi->phycal_timer, delay, 0);
+       wlapi_add_timer(pi->phycal_timer, delay, 0);
 }
 
 void wlc_phy_cal_perical(struct brcms_phy_pub *pih, u8 reason)
 
                                         arg, name);
 }
 
-void wlapi_free_timer(struct phy_shim_info *physhim, struct wlapi_timer *t)
+void wlapi_free_timer(struct wlapi_timer *t)
 {
-       brcms_free_timer(physhim->wl, (struct brcms_timer *)t);
+       brcms_free_timer((struct brcms_timer *)t);
 }
 
 void
-wlapi_add_timer(struct phy_shim_info *physhim, struct wlapi_timer *t, uint ms,
-               int periodic)
+wlapi_add_timer(struct wlapi_timer *t, uint ms, int periodic)
 {
-       brcms_add_timer(physhim->wl, (struct brcms_timer *)t, ms, periodic);
+       brcms_add_timer((struct brcms_timer *)t, ms, periodic);
 }
 
-bool wlapi_del_timer(struct phy_shim_info *physhim, struct wlapi_timer *t)
+bool wlapi_del_timer(struct wlapi_timer *t)
 {
-       return brcms_del_timer(physhim->wl, (struct brcms_timer *)t);
+       return brcms_del_timer((struct brcms_timer *)t);
 }
 
 void wlapi_intrson(struct phy_shim_info *physhim)
 
 extern struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim,
                                            void (*fn) (struct brcms_phy *pi),
                                            void *arg, const char *name);
-extern void wlapi_free_timer(struct phy_shim_info *physhim,
-                            struct wlapi_timer *t);
-extern void wlapi_add_timer(struct phy_shim_info *physhim,
-                           struct wlapi_timer *t, uint ms, int periodic);
-extern bool wlapi_del_timer(struct phy_shim_info *physhim,
-                           struct wlapi_timer *t);
+extern void wlapi_free_timer(struct wlapi_timer *t);
+extern void wlapi_add_timer(struct wlapi_timer *t, uint ms, int periodic);
+extern bool wlapi_del_timer(struct wlapi_timer *t);
 extern void wlapi_intrson(struct phy_shim_info *physhim);
 extern u32 wlapi_intrsoff(struct phy_shim_info *physhim);
 extern void wlapi_intrsrestore(struct phy_shim_info *physhim,