ath9k: add a temporary uci option for setting the channel bandwidth
[openwrt.git] / package / madwifi / patches / 421-channel_handling.patch
index 781194e..2a8ec27 100644 (file)
@@ -8,7 +8,7 @@
  static void ath_updateslot(struct net_device *);
  static int ath_beaconq_setup(struct ath_softc *);
  static int ath_beacon_alloc(struct ath_softc *, struct ieee80211_node *);
  static void ath_updateslot(struct net_device *);
  static int ath_beaconq_setup(struct ath_softc *);
  static int ath_beacon_alloc(struct ath_softc *, struct ieee80211_node *);
-@@ -240,7 +239,7 @@ static void ath_setup_stationkey(struct 
+@@ -240,7 +239,7 @@ static void ath_setup_stationkey(struct
  static void ath_setup_stationwepkey(struct ieee80211_node *);
  static void ath_setup_keycacheslot(struct ath_softc *, struct ieee80211_node *);
  static void ath_newassoc(struct ieee80211_node *, int);
  static void ath_setup_stationwepkey(struct ieee80211_node *);
  static void ath_setup_keycacheslot(struct ath_softc *, struct ieee80211_node *);
  static void ath_newassoc(struct ieee80211_node *, int);
  
        /* NB: setup here so ath_rate_update is happy */
        ath_setcurmode(sc, IEEE80211_MODE_11A);
  
        /* NB: setup here so ath_rate_update is happy */
        ath_setcurmode(sc, IEEE80211_MODE_11A);
-@@ -909,10 +929,6 @@ ath_attach(u_int16_t devid, struct net_d
+@@ -908,10 +928,6 @@ ath_attach(u_int16_t devid, struct net_d
                        IEEE80211_ATHC_COMP : 0);
  #endif
  
                        IEEE80211_ATHC_COMP : 0);
  #endif
  
  #ifdef ATH_SUPERG_XR
        ic->ic_ath_cap |= (ath_hal_xrsupported(ah) ? IEEE80211_ATHC_XR : 0);
  #endif
  #ifdef ATH_SUPERG_XR
        ic->ic_ath_cap |= (ath_hal_xrsupported(ah) ? IEEE80211_ATHC_XR : 0);
  #endif
-@@ -4466,17 +4482,17 @@ ath_mode_init(struct net_device *dev)
+@@ -4470,17 +4486,17 @@ ath_mode_init(struct net_device *dev)
   * Set the slot time based on the current setting.
   */
  static void
   * Set the slot time based on the current setting.
   */
  static void
        sc->sc_updateslot = OK;
  }
  
        sc->sc_updateslot = OK;
  }
  
-@@ -4498,7 +4514,7 @@ ath_updateslot(struct net_device *dev)
+@@ -4502,7 +4518,7 @@ ath_updateslot(struct net_device *dev)
        if (ic->ic_opmode == IEEE80211_M_HOSTAP)
                sc->sc_updateslot = UPDATE;
        else if (dev->flags & IFF_RUNNING)
        if (ic->ic_opmode == IEEE80211_M_HOSTAP)
                sc->sc_updateslot = UPDATE;
        else if (dev->flags & IFF_RUNNING)
  }
  
  #ifdef ATH_SUPERG_DYNTURBO
  }
  
  #ifdef ATH_SUPERG_DYNTURBO
-@@ -5342,7 +5358,7 @@ ath_beacon_send(struct ath_softc *sc, in
+@@ -5346,7 +5362,7 @@ ath_beacon_send(struct ath_softc *sc, in
                sc->sc_updateslot = COMMIT;     /* commit next beacon */
                sc->sc_slotupdate = slot;
        } else if ((sc->sc_updateslot == COMMIT) && (sc->sc_slotupdate == slot))
                sc->sc_updateslot = COMMIT;     /* commit next beacon */
                sc->sc_slotupdate = slot;
        } else if ((sc->sc_updateslot == COMMIT) && (sc->sc_slotupdate == slot))
  
        if (bfaddr != 0) {
                /*
  
        if (bfaddr != 0) {
                /*
-@@ -7796,12 +7812,14 @@ ath_get_ivlen(struct ieee80211_key *k)
+@@ -7802,12 +7818,14 @@ ath_get_ivlen(struct ieee80211_key *k)
   * Get transmit rate index using rate in Kbps
   */
  static __inline int
   * Get transmit rate index using rate in Kbps
   */
  static __inline int
                        ndx = i;
                        break;
                }
                        ndx = i;
                        break;
                }
-@@ -8094,7 +8112,7 @@ ath_tx_start(struct net_device *dev, str
+@@ -8100,7 +8118,7 @@ ath_tx_start(struct net_device *dev, str
                atype = HAL_PKT_TYPE_NORMAL;            /* default */
  
                if (ismcast) {
                atype = HAL_PKT_TYPE_NORMAL;            /* default */
  
                if (ismcast) {
                        txrate = rt->info[rix].rateCode;
                        if (shortPreamble)
                                txrate |= rt->info[rix].shortPreamble;
                        txrate = rt->info[rix].rateCode;
                        if (shortPreamble)
                                txrate |= rt->info[rix].shortPreamble;
-@@ -9061,7 +9079,7 @@ ath_chan_change(struct ath_softc *sc, st
+@@ -9067,7 +9085,7 @@ ath_chan_change(struct ath_softc *sc, st
        struct net_device *dev = sc->sc_dev;
        enum ieee80211_phymode mode;
  
        struct net_device *dev = sc->sc_dev;
        enum ieee80211_phymode mode;
  
  
        ath_rate_setup(dev, mode);
        ath_setcurmode(sc, mode);
  
        ath_rate_setup(dev, mode);
        ath_setcurmode(sc, mode);
-@@ -10110,8 +10128,7 @@ ath_newassoc(struct ieee80211_node *ni, 
+@@ -10124,8 +10142,7 @@ ath_newassoc(struct ieee80211_node *ni,
  }
  
  static int
  }
  
  static int
  {
        struct ath_softc *sc = dev->priv;
        struct ieee80211com *ic = &sc->sc_ic;
  {
        struct ath_softc *sc = dev->priv;
        struct ieee80211com *ic = &sc->sc_ic;
-@@ -10125,17 +10142,31 @@ ath_getchannels(struct net_device *dev, 
+@@ -10139,17 +10156,31 @@ ath_getchannels(struct net_device *dev,
                EPRINTF(sc, "Insufficient memory for channel table!\n");
                return -ENOMEM;
        }
                EPRINTF(sc, "Insufficient memory for channel table!\n");
                return -ENOMEM;
        }
        /*
         * Convert HAL channels to ieee80211 ones.
         */
        /*
         * Convert HAL channels to ieee80211 ones.
         */
-@@ -10379,7 +10410,7 @@ ath_xr_rate_setup(struct net_device *dev
+@@ -10395,7 +10426,7 @@ ath_xr_rate_setup(struct net_device *dev
        struct ieee80211com *ic = &sc->sc_ic;
        const HAL_RATE_TABLE *rt;
        struct ieee80211_rateset *rs;
        struct ieee80211com *ic = &sc->sc_ic;
        const HAL_RATE_TABLE *rt;
        struct ieee80211_rateset *rs;
        sc->sc_xr_rates = ath_hal_getratetable(ah, HAL_MODE_XR);
        rt = sc->sc_xr_rates;
        if (rt == NULL)
        sc->sc_xr_rates = ath_hal_getratetable(ah, HAL_MODE_XR);
        rt = sc->sc_xr_rates;
        if (rt == NULL)
-@@ -10392,57 +10423,16 @@ ath_xr_rate_setup(struct net_device *dev
+@@ -10408,57 +10439,16 @@ ath_xr_rate_setup(struct net_device *dev
        } else
                maxrates = rt->rateCount;
        rs = &ic->ic_sup_xr_rates;
        } else
                maxrates = rt->rateCount;
        rs = &ic->ic_sup_xr_rates;
  static int
  ath_rate_setup(struct net_device *dev, u_int mode)
  {
  static int
  ath_rate_setup(struct net_device *dev, u_int mode)
  {
-@@ -10451,7 +10441,7 @@ ath_rate_setup(struct net_device *dev, u
+@@ -10467,7 +10457,7 @@ ath_rate_setup(struct net_device *dev, u
        struct ieee80211com *ic = &sc->sc_ic;
        const HAL_RATE_TABLE *rt;
        struct ieee80211_rateset *rs;
        struct ieee80211com *ic = &sc->sc_ic;
        const HAL_RATE_TABLE *rt;
        struct ieee80211_rateset *rs;
  
        switch (mode) {
        case IEEE80211_MODE_11A:
  
        switch (mode) {
        case IEEE80211_MODE_11A:
-@@ -10469,6 +10459,12 @@ ath_rate_setup(struct net_device *dev, u
+@@ -10485,6 +10475,12 @@ ath_rate_setup(struct net_device *dev, u
        case IEEE80211_MODE_TURBO_G:
                sc->sc_rates[mode] = ath_hal_getratetable(ah, HAL_MODE_108G);
                break;
        case IEEE80211_MODE_TURBO_G:
                sc->sc_rates[mode] = ath_hal_getratetable(ah, HAL_MODE_108G);
                break;
        default:
                DPRINTF(sc, ATH_DEBUG_ANY, "Invalid mode %u\n", mode);
                return 0;
        default:
                DPRINTF(sc, ATH_DEBUG_ANY, "Invalid mode %u\n", mode);
                return 0;
-@@ -10483,10 +10479,16 @@ ath_rate_setup(struct net_device *dev, u
+@@ -10499,10 +10495,16 @@ ath_rate_setup(struct net_device *dev, u
                maxrates = IEEE80211_RATE_MAXSIZE;
        } else
                maxrates = rt->rateCount;
                maxrates = IEEE80211_RATE_MAXSIZE;
        } else
                maxrates = rt->rateCount;
        return 1;
  }
  
        return 1;
  }
  
-@@ -10515,13 +10517,18 @@ ath_setcurmode(struct ath_softc *sc, enu
+@@ -10531,13 +10533,18 @@ ath_setcurmode(struct ath_softc *sc, enu
                {   0, 500, 130 },
        };
        const HAL_RATE_TABLE *rt;
                {   0, 500, 130 },
        };
        const HAL_RATE_TABLE *rt;
        memset(sc->sc_hwmap, 0, sizeof(sc->sc_hwmap));
        for (i = 0; i < 32; i++) {
                u_int8_t ix = rt->rateCodeToIndex[i];
        memset(sc->sc_hwmap, 0, sizeof(sc->sc_hwmap));
        for (i = 0; i < 32; i++) {
                u_int8_t ix = rt->rateCodeToIndex[i];
-@@ -10531,7 +10538,7 @@ ath_setcurmode(struct ath_softc *sc, enu
+@@ -10547,7 +10554,7 @@ ath_setcurmode(struct ath_softc *sc, enu
                        continue;
                }
                sc->sc_hwmap[i].ieeerate =
                        continue;
                }
                sc->sc_hwmap[i].ieeerate =
                if (rt->info[ix].shortPreamble ||
                    rt->info[ix].phy == IEEE80211_T_OFDM)
                        sc->sc_hwmap[i].flags |= IEEE80211_RADIOTAP_F_SHORTPRE;
                if (rt->info[ix].shortPreamble ||
                    rt->info[ix].phy == IEEE80211_T_OFDM)
                        sc->sc_hwmap[i].flags |= IEEE80211_RADIOTAP_F_SHORTPRE;
-@@ -10932,9 +10939,115 @@ enum {
+@@ -10948,9 +10955,106 @@ enum {
        ATH_MAXVAPS             = 26,
        ATH_INTMIT                      = 27,
        ATH_NOISE_IMMUNITY      = 28,
        ATH_MAXVAPS             = 26,
        ATH_INTMIT                      = 27,
        ATH_NOISE_IMMUNITY      = 28,
 +      struct ieee80211vap *vap;
 +      u_int16_t freq = 0;
 +      struct ifreq ifr;
 +      struct ieee80211vap *vap;
 +      u_int16_t freq = 0;
 +      struct ifreq ifr;
-+      void *ptr;
-+      u32 *reg;
 +
 +      if (ic->ic_curchan != IEEE80211_CHAN_ANYC)
 +              freq = ic->ic_curchan->ic_freq;
 +
 +      switch(ctl) {
 +
 +      if (ic->ic_curchan != IEEE80211_CHAN_ANYC)
 +              freq = ic->ic_curchan->ic_freq;
 +
 +      switch(ctl) {
-+      case ATH_REGDOMAIN:
-+              ptr = ah;
-+              ptr += sizeof(struct ath_hal);
-+              ptr += 116;
-+              reg = ptr;
-+              *reg = val;
-+              return 0;
 +      case ATH_COUNTRYCODE:
 +              ic->ic_country_code = val;
 +              break;
 +      case ATH_COUNTRYCODE:
 +              ic->ic_country_code = val;
 +              break;
  static int
  ath_sysctl_set_intmit(struct ath_softc *sc, long ctl, u_int val)
  {
  static int
  ath_sysctl_set_intmit(struct ath_softc *sc, long ctl, u_int val)
  {
-@@ -11013,6 +11126,7 @@ static int
+@@ -11029,6 +11133,7 @@ static int
  ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl, write, filp, buffer, lenp, ppos)
  {
        struct ath_softc *sc = ctl->extra1;
  ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl, write, filp, buffer, lenp, ppos)
  {
        struct ath_softc *sc = ctl->extra1;
        struct ath_hal *ah = sc->sc_ah;
        u_int val;
        u_int tab_3_val[3];
        struct ath_hal *ah = sc->sc_ah;
        u_int val;
        u_int tab_3_val[3];
-@@ -11036,25 +11150,31 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
+@@ -11052,25 +11157,34 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
                                lenp, ppos);
                if (ret == 0) {
                        switch ((long)ctl->extra2) {
 +                      case ATH_REGDOMAIN:
                                lenp, ppos);
                if (ret == 0) {
                        switch ((long)ctl->extra2) {
 +                      case ATH_REGDOMAIN:
++                              ath_hal_setregdomain(ah, val);
++                              break;
++                      case ATH_OUTDOOR:
 +                      case ATH_COUNTRYCODE:
 +                      case ATH_CHANBW:
 +                              ret = ath_sysctl_setchanparam(sc, (long) ctl->extra2, val);
 +                      case ATH_COUNTRYCODE:
 +                      case ATH_CHANBW:
 +                              ret = ath_sysctl_setchanparam(sc, (long) ctl->extra2, val);
                                break;
                        case ATH_SOFTLED:
                                if (val != sc->sc_softled) {
                                break;
                        case ATH_SOFTLED:
                                if (val != sc->sc_softled) {
-@@ -11206,7 +11326,12 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
-                       }
+@@ -11223,6 +11337,9 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
                }
        } else {
                }
        } else {
-+              void *ptr;
-+              u32 *reg;
                switch ((long)ctl->extra2) {
 +              case ATH_CHANBW:
 +                      val = sc->sc_chanbw ?: 20;
                switch ((long)ctl->extra2) {
 +              case ATH_CHANBW:
 +                      val = sc->sc_chanbw ?: 20;
                case ATH_SLOTTIME:
                        val = ath_hal_getslottime(ah);
                        break;
                case ATH_SLOTTIME:
                        val = ath_hal_getslottime(ah);
                        break;
-@@ -11225,11 +11350,18 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
+@@ -11241,6 +11358,9 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
                case ATH_COUNTRYCODE:
                        ath_hal_getcountrycode(ah, &val);
                        break;
                case ATH_COUNTRYCODE:
                        ath_hal_getcountrycode(ah, &val);
                        break;
                case ATH_MAXVAPS:
                        val = ath_maxvaps;
                        break;
                case ATH_MAXVAPS:
                        val = ath_maxvaps;
                        break;
-               case ATH_REGDOMAIN:
--                      ath_hal_getregdomain(ah, &val);
-+                      ptr = ah;
-+                      ptr += sizeof(struct ath_hal);
-+                      ptr += 116;
-+                      reg = ptr;
-+                      val = *reg;
-                       break;
-               case ATH_DEBUG:
-                       val = sc->sc_debug | ath_debug_global;
-@@ -11338,11 +11470,17 @@ static const ctl_table ath_sysctl_templa
+@@ -11354,11 +11474,17 @@ static const ctl_table ath_sysctl_templa
        },
        { .ctl_name     = CTL_AUTO,
          .procname     = "countrycode",
        },
        { .ctl_name     = CTL_AUTO,
          .procname     = "countrycode",
          .procname     = "maxvaps",
          .mode         = 0444,
          .proc_handler = ath_sysctl_halparam,
          .procname     = "maxvaps",
          .mode         = 0444,
          .proc_handler = ath_sysctl_halparam,
-@@ -11350,7 +11488,7 @@ static const ctl_table ath_sysctl_templa
+@@ -11366,7 +11492,7 @@ static const ctl_table ath_sysctl_templa
        },
        { .ctl_name     = CTL_AUTO,
          .procname     = "regdomain",
        },
        { .ctl_name     = CTL_AUTO,
          .procname     = "regdomain",
          .proc_handler = ath_sysctl_halparam,
          .extra2       = (void *)ATH_REGDOMAIN,
        },
          .proc_handler = ath_sysctl_halparam,
          .extra2       = (void *)ATH_REGDOMAIN,
        },
-@@ -11413,6 +11551,12 @@ static const ctl_table ath_sysctl_templa
+@@ -11429,6 +11555,12 @@ static const ctl_table ath_sysctl_templa
          .extra2       = (void *)ATH_ACKRATE,
        },
        { .ctl_name     = CTL_AUTO,
          .extra2       = (void *)ATH_ACKRATE,
        },
        { .ctl_name     = CTL_AUTO,
          .procname     = "rp",
          .mode         = 0200,
          .proc_handler = ath_sysctl_halparam,
          .procname     = "rp",
          .mode         = 0200,
          .proc_handler = ath_sysctl_halparam,
-@@ -11653,13 +11797,6 @@ static ctl_table ath_static_sysctls[] = 
+@@ -11669,13 +11801,6 @@ static ctl_table ath_static_sysctls[] =
        },
  #endif
        { .ctl_name     = CTL_AUTO,
        },
  #endif
        { .ctl_name     = CTL_AUTO,
          .procname     = "maxvaps",
          .mode         = 0444,
          .data         = &ath_maxvaps,
          .procname     = "maxvaps",
          .mode         = 0444,
          .data         = &ath_maxvaps,
-@@ -11667,13 +11804,6 @@ static ctl_table ath_static_sysctls[] = 
+@@ -11683,13 +11808,6 @@ static ctl_table ath_static_sysctls[] =
          .proc_handler = proc_dointvec
        },
        { .ctl_name     = CTL_AUTO,
          .proc_handler = proc_dointvec
        },
        { .ctl_name     = CTL_AUTO,
          .data         = &ath_xchanmode,
 --- a/ath/if_athvar.h
 +++ b/ath/if_athvar.h
          .data         = &ath_xchanmode,
 --- a/ath/if_athvar.h
 +++ b/ath/if_athvar.h
-@@ -689,16 +689,17 @@ struct ath_softc {
+@@ -688,17 +688,18 @@ struct ath_softc {
        int8_t sc_ofdm_weak_det; /* OFDM weak frames detection, -1 == auto */
  
        /* rate tables */
        int8_t sc_ofdm_weak_det; /* OFDM weak frames detection, -1 == auto */
  
        /* rate tables */
 -      const HAL_RATE_TABLE *sc_quarter_rates; /* quarter rate table */
        HAL_OPMODE sc_opmode;                   /* current hal operating mode */
        enum ieee80211_phymode sc_curmode;      /* current phy mode */
 -      const HAL_RATE_TABLE *sc_quarter_rates; /* quarter rate table */
        HAL_OPMODE sc_opmode;                   /* current hal operating mode */
        enum ieee80211_phymode sc_curmode;      /* current phy mode */
+       u_int sc_poweroffset;                   /* hardware power offset */
        u_int16_t sc_curtxpow;                  /* current tx power limit */
        u_int16_t sc_curaid;                    /* current association id */
        HAL_CHANNEL sc_curchan;                 /* current h/w channel */
        u_int16_t sc_curtxpow;                  /* current tx power limit */
        u_int16_t sc_curaid;                    /* current association id */
        HAL_CHANNEL sc_curchan;                 /* current h/w channel */
        }
        /* Initialize candidate channels to all available */
        memcpy(ic->ic_chan_active, ic->ic_chan_avail,
        }
        /* Initialize candidate channels to all available */
        memcpy(ic->ic_chan_active, ic->ic_chan_avail,
-@@ -311,11 +296,58 @@ ieee80211_ifattach(struct ieee80211com *
+@@ -311,11 +296,59 @@ ieee80211_ifattach(struct ieee80211com *
         * When 11g is supported, force the rate set to
         * include basic rates suitable for a mixed b/g bss.
         */
         * When 11g is supported, force the rate set to
         * include basic rates suitable for a mixed b/g bss.
         */
 +      if (init)
 +              return;
 +
 +      if (init)
 +              return;
 +
++      ifmedia_removeall(&ic->ic_media);
 +      ieee80211_media_setup(ic, &ic->ic_media, ic->ic_caps, NULL, NULL);
 +      ieee80211com_media_status(ic->ic_dev, &imr);
 +      ifmedia_set(&ic->ic_media, imr.ifm_active);
 +      ieee80211_media_setup(ic, &ic->ic_media, ic->ic_caps, NULL, NULL);
 +      ieee80211com_media_status(ic->ic_dev, &imr);
 +      ifmedia_set(&ic->ic_media, imr.ifm_active);
        /* Setup initial channel settings */
        ic->ic_bsschan = IEEE80211_CHAN_ANYC;
        /* Arbitrarily pick the first channel */
        /* Setup initial channel settings */
        ic->ic_bsschan = IEEE80211_CHAN_ANYC;
        /* Arbitrarily pick the first channel */
-@@ -327,6 +359,7 @@ ieee80211_ifattach(struct ieee80211com *
+@@ -327,6 +360,7 @@ ieee80211_ifattach(struct ieee80211com *
        /* Enable WME by default, if we're capable. */
        if (ic->ic_caps & IEEE80211_C_WME)
                ic->ic_flags |= IEEE80211_F_WME;
        /* Enable WME by default, if we're capable. */
        if (ic->ic_caps & IEEE80211_C_WME)
                ic->ic_flags |= IEEE80211_F_WME;
        (void) ieee80211_setmode(ic, ic->ic_curmode);
  
        /* Store default beacon interval, as nec. */
        (void) ieee80211_setmode(ic, ic->ic_curmode);
  
        /* Store default beacon interval, as nec. */
-@@ -763,7 +796,8 @@ ieee80211_media_setup(struct ieee80211co
+@@ -763,7 +797,8 @@ ieee80211_media_setup(struct ieee80211co
        struct ieee80211_rateset allrates;
  
        /* Fill in media characteristics. */
        struct ieee80211_rateset allrates;
  
        /* Fill in media characteristics. */
        maxrate = 0;
        memset(&allrates, 0, sizeof(allrates));
  
        maxrate = 0;
        memset(&allrates, 0, sizeof(allrates));
  
-@@ -793,7 +827,7 @@ ieee80211_media_setup(struct ieee80211co
+@@ -793,7 +828,7 @@ ieee80211_media_setup(struct ieee80211co
                        ADD(media, IFM_AUTO, mopt | IFM_IEEE80211_WDS);
                if (mode == IEEE80211_MODE_AUTO)
                        continue;
                        ADD(media, IFM_AUTO, mopt | IFM_IEEE80211_WDS);
                if (mode == IEEE80211_MODE_AUTO)
                        continue;
  
                for (i = 0; i < rs->rs_nrates; i++) {
                        rate = rs->rs_rates[i];
  
                for (i = 0; i < rs->rs_nrates; i++) {
                        rate = rs->rs_rates[i];
-@@ -1207,7 +1241,7 @@ ieee80211_announce(struct ieee80211com *
+@@ -1207,7 +1242,7 @@ ieee80211_announce(struct ieee80211com *
                if ((ic->ic_modecaps & (1 << mode)) == 0)
                        continue;
                if_printf(dev, "%s rates: ", ieee80211_phymode_name[mode]);
                if ((ic->ic_modecaps & (1 << mode)) == 0)
                        continue;
                if_printf(dev, "%s rates: ", ieee80211_phymode_name[mode]);
                for (i = 0; i < rs->rs_nrates; i++) {
                        rate = rs->rs_rates[i];
                        mword = ieee80211_rate2media(ic, rate, mode);
                for (i = 0; i < rs->rs_nrates; i++) {
                        rate = rs->rs_rates[i];
                        mword = ieee80211_rate2media(ic, rate, mode);
-@@ -1417,7 +1451,7 @@ ieee80211com_media_change(struct net_dev
+@@ -1417,7 +1452,7 @@ ieee80211com_media_change(struct net_dev
                         * now so drivers have a consistent state.
                         */
                        KASSERT(vap->iv_bss != NULL, ("no bss node"));
                         * now so drivers have a consistent state.
                         */
                        KASSERT(vap->iv_bss != NULL, ("no bss node"));
                }
                error = -ENETRESET;
        }
                }
                error = -ENETRESET;
        }
-@@ -1435,7 +1469,7 @@ findrate(struct ieee80211com *ic, enum i
+@@ -1435,7 +1470,7 @@ findrate(struct ieee80211com *ic, enum i
  {
  #define       IEEERATE(_ic,_m,_i) \
        ((_ic)->ic_sup_rates[_m].rs_rates[_i] & IEEE80211_RATE_VAL)
  {
  #define       IEEERATE(_ic,_m,_i) \
        ((_ic)->ic_sup_rates[_m].rs_rates[_i] & IEEE80211_RATE_VAL)
        for (i = 0; i < nrates; i++)
                if (IEEERATE(ic, mode, i) == rate)
                        return i;
        for (i = 0; i < nrates; i++)
                if (IEEERATE(ic, mode, i) == rate)
                        return i;
-@@ -1881,11 +1915,6 @@ ieee80211_build_countryie(struct ieee802
+@@ -1877,11 +1912,6 @@ ieee80211_build_countryie(struct ieee802
                        if (ieee80211_chan2mode(c) != curmode_noturbo)
                                continue;
  
                        if (ieee80211_chan2mode(c) != curmode_noturbo)
                                continue;
  
                        if (*cur_runlen == 0) {
                                (*cur_runlen)++;
                                *cur_pow = c->ic_maxregpower;
                        if (*cur_runlen == 0) {
                                (*cur_runlen)++;
                                *cur_pow = c->ic_maxregpower;
-@@ -1919,7 +1948,7 @@ void
+@@ -1915,7 +1945,7 @@ void
  ieee80211_build_sc_ie(struct ieee80211com *ic)
  {
        struct ieee80211_ie_sc *ie = &ic->ic_sc_ie;
  ieee80211_build_sc_ie(struct ieee80211com *ic)
  {
        struct ieee80211_ie_sc *ie = &ic->ic_sc_ie;
        u_int16_t ic_modecaps;                  /* set of mode capabilities */
        u_int16_t ic_curmode;                   /* current mode */
        u_int16_t ic_lintval;                   /* beacon interval */
        u_int16_t ic_modecaps;                  /* set of mode capabilities */
        u_int16_t ic_curmode;                   /* current mode */
        u_int16_t ic_lintval;                   /* beacon interval */
-@@ -715,6 +713,7 @@ MALLOC_DECLARE(M_80211_VAP);
+@@ -714,6 +712,7 @@ MALLOC_DECLARE(M_80211_VAP);
  
  int ieee80211_ifattach(struct ieee80211com *);
  void ieee80211_ifdetach(struct ieee80211com *);
  
  int ieee80211_ifattach(struct ieee80211com *);
  void ieee80211_ifdetach(struct ieee80211com *);
  int ieee80211_vap_setup(struct ieee80211com *, struct net_device *,
        const char *, int, int, struct ieee80211vap *);
  int ieee80211_vap_attach(struct ieee80211vap *, ifm_change_cb_t, ifm_stat_cb_t);
  int ieee80211_vap_setup(struct ieee80211com *, struct net_device *,
        const char *, int, int, struct ieee80211vap *);
  int ieee80211_vap_attach(struct ieee80211vap *, ifm_change_cb_t, ifm_stat_cb_t);
-@@ -794,6 +793,23 @@ ieee80211_anyhdrspace(struct ieee80211co
+@@ -793,6 +792,23 @@ ieee80211_anyhdrspace(struct ieee80211co
        return size;
  }
  
        return size;
  }
  
        nrs = &ni->ni_rates;
        fixedrate = IEEE80211_FIXED_RATE_NONE;
        for (i = 0; i < nrs->rs_nrates;) {
        nrs = &ni->ni_rates;
        fixedrate = IEEE80211_FIXED_RATE_NONE;
        for (i = 0; i < nrs->rs_nrates;) {
-@@ -1401,6 +1401,7 @@ ieee80211_new_state(struct ieee80211vap 
+@@ -1407,6 +1407,7 @@ ieee80211_new_state(struct ieee80211vap
        IEEE80211_VAPS_UNLOCK_IRQ(ic);
        return rc;
  }
        IEEE80211_VAPS_UNLOCK_IRQ(ic);
        return rc;
  }
        if ((ic->ic_flags & IEEE80211_F_USEPROT) &&
 --- a/net80211/ieee80211_wireless.c
 +++ b/net80211/ieee80211_wireless.c
        if ((ic->ic_flags & IEEE80211_F_USEPROT) &&
 --- a/net80211/ieee80211_wireless.c
 +++ b/net80211/ieee80211_wireless.c
-@@ -2133,7 +2133,7 @@ ieee80211_ioctl_setmode(struct net_devic
+@@ -2142,7 +2142,7 @@ ieee80211_ioctl_setmode(struct net_devic
  
                vap->iv_des_mode = mode;
                if (IS_UP_AUTO(vap))
  
                vap->iv_des_mode = mode;
                if (IS_UP_AUTO(vap))
  
                retv = 0;
        }
  
                retv = 0;
        }
-@@ -4081,46 +4081,60 @@ ieee80211_ioctl_getchanlist(struct net_d
+@@ -4090,46 +4090,60 @@ ieee80211_ioctl_getchanlist(struct net_d
        return 0;
  }
  
        return 0;
  }
  
  
 --- a/net80211/ieee80211_scan_ap.c
 +++ b/net80211/ieee80211_scan_ap.c
  
 --- a/net80211/ieee80211_scan_ap.c
 +++ b/net80211/ieee80211_scan_ap.c
-@@ -518,12 +518,13 @@ pick_channel(struct ieee80211_scan_state
+@@ -512,12 +512,13 @@ pick_channel(struct ieee80211_scan_state
        int ss_last = ss->ss_last;
        struct ieee80211_channel *best;
        struct ap_state *as = ss->ss_priv;
        int ss_last = ss->ss_last;
        struct ieee80211_channel *best;
        struct ap_state *as = ss->ss_priv;
        for (i = 0; i < ss_last; i++) {
                chans[i].chan = ss->ss_chans[i];
                chans[i].orig = i;
        for (i = 0; i < ss_last; i++) {
                chans[i].chan = ss->ss_chans[i];
                chans[i].orig = i;
-@@ -612,6 +613,7 @@ pick_channel(struct ieee80211_scan_state
+@@ -571,6 +572,7 @@ pick_channel(struct ieee80211_scan_state
                                "%s: best: channel %u rssi %d\n",
                                __func__, i, as->as_maxrssi[i]);
        }
                                "%s: best: channel %u rssi %d\n",
                                __func__, i, as->as_maxrssi[i]);
        }
        return best;
  }
  
        return best;
  }
  
-@@ -647,6 +649,7 @@ ap_end(struct ieee80211_scan_state *ss, 
+@@ -609,6 +611,7 @@ ap_end(struct ieee80211_scan_state *ss,
                res = 1; /* Do NOT restart scan */
        } else {
                struct ieee80211_scan_entry se;
                res = 1; /* Do NOT restart scan */
        } else {
                struct ieee80211_scan_entry se;
                /* XXX: notify all VAPs? */
                /* if this is a dynamic turbo frequency , start with normal 
                 * mode first */
                /* XXX: notify all VAPs? */
                /* if this is a dynamic turbo frequency , start with normal 
                 * mode first */
-@@ -661,6 +664,11 @@ ap_end(struct ieee80211_scan_state *ss, 
+@@ -623,6 +626,11 @@ ap_end(struct ieee80211_scan_state *ss,
                                return 0;
                        }
                }
                                return 0;
                        }
                }
  
  /*
   * Iterate over the contents of the scan cache.
  
  /*
   * Iterate over the contents of the scan cache.
+--- a/ath/if_ath_hal_wrappers.h
++++ b/ath/if_ath_hal_wrappers.h
+@@ -111,6 +111,11 @@ static inline HAL_BOOL ath_hal_getregdom
+       return (ath_hal_getcapability(ah, HAL_CAP_REG_DMN, 0, destination) == HAL_OK);
+ }
++static inline HAL_BOOL ath_hal_setregdomain(struct ath_hal *ah, u_int32_t v)
++{
++      return (ath_hal_setcapability(ah, HAL_CAP_REG_DMN, 0, v, NULL));
++}
++
+ static inline HAL_BOOL ath_hal_gettkipmic(struct ath_hal *ah)
+ {
+       return (ath_hal_getcapability(ah, HAL_CAP_TKIP_MIC, 1, NULL) == HAL_OK);
This page took 0.039689 seconds and 4 git commands to generate.