diff options
Diffstat (limited to 'package/madwifi/patches/424-timing.patch')
-rw-r--r-- | package/madwifi/patches/424-timing.patch | 764 |
1 files changed, 0 insertions, 764 deletions
diff --git a/package/madwifi/patches/424-timing.patch b/package/madwifi/patches/424-timing.patch deleted file mode 100644 index 8369db6185..0000000000 --- a/package/madwifi/patches/424-timing.patch +++ /dev/null @@ -1,764 +0,0 @@ ---- a/ath/if_ath.c -+++ b/ath/if_ath.c -@@ -382,6 +382,7 @@ static u_int32_t ath_set_clamped_maxtxpo - static void ath_poll_disable(struct net_device *dev); - static void ath_poll_enable(struct net_device *dev); - static void ath_fetch_idle_time(struct ath_softc *sc); -+static void ath_set_timing(struct ath_softc *sc); - - /* calibrate every 30 secs in steady state but check every second at first. */ - static int ath_calinterval = ATH_SHORT_CALINTERVAL; -@@ -1185,6 +1186,7 @@ ath_attach(u_int16_t devid, struct net_d - sc->sc_intmit = -1; - sc->sc_noise_immunity = -1; - sc->sc_ofdm_weak_det = -1; -+ sc->sc_coverage = 7; /* 2100 meters */ - - return 0; - bad3: -@@ -2673,6 +2675,7 @@ ath_init(struct net_device *dev) - */ - ath_chan_change(sc, ic->ic_curchan); - ath_set_ack_bitrate(sc, sc->sc_ackrate); -+ ath_set_timing(sc); - dev->flags |= IFF_RUNNING; /* we are ready to go */ - ieee80211_start_running(ic); /* start all VAPs */ - #ifdef ATH_TX99_DIAG -@@ -4484,17 +4487,52 @@ ath_mode_init(struct net_device *dev) - * Set the slot time based on the current setting. - */ - static void --ath_settiming(struct ath_softc *sc) -+ath_set_timing(struct ath_softc *sc) - { -+ struct ieee80211com *ic = &sc->sc_ic; - struct ath_hal *ah = sc->sc_ah; -- u_int offset = getTimingOffset(sc); -+ struct ath_timings *t = &sc->sc_timings; -+ u_int offset = 9; -+ -+ t->sifs = 16; -+ if (IEEE80211_IS_CHAN_ANYG(ic->ic_curchan)) { -+ offset = 20; -+ if (ic->ic_flags & IEEE80211_F_SHSLOT) -+ offset = 9; -+ } else if (IEEE80211_IS_CHAN_A(ic->ic_curchan)) { -+ offset = 9; -+ } -+ -+ if (IEEE80211_IS_CHAN_TURBO(ic->ic_curchan)) { -+ offset = 6; -+ t->sifs = 8; -+ } else if (IEEE80211_IS_CHAN_HALF(ic->ic_curchan)) { -+ offset = 13; -+ t->sifs = 32; -+ } else if (IEEE80211_IS_CHAN_QUARTER(ic->ic_curchan)) { -+ offset = 21; -+ t->sifs = 64; -+ } -+ -+ t->slot = offset + sc->sc_coverage; -+ t->ack = t->slot * 2 + 3; -+ t->cts = t->slot * 2 + 3; - - if (sc->sc_slottimeconf > 0) -- ath_hal_setslottime(ah, offset + sc->sc_slottimeconf); -+ t->slot = sc->sc_slottimeconf; - if (sc->sc_acktimeconf > 0) -- ath_hal_setacktimeout(ah, 2 * offset + sc->sc_acktimeconf); -+ t->ack = sc->sc_acktimeconf; - if (sc->sc_ctstimeconf > 0) -- ath_hal_setctstimeout(ah, 2 * offset + sc->sc_ctstimeconf); -+ t->cts = sc->sc_ctstimeconf; -+ -+ t->difs = 2 * t->sifs + t->slot; -+ t->eifs = t->sifs + t->difs + 3; -+ -+ ath_hal_setslottime(ah, t->slot); -+ ath_hal_setacktimeout(ah, t->ack); -+ ath_hal_setctstimeout(ah, t->cts); -+ ath_hal_seteifstime(ah, t->eifs); -+ - sc->sc_updateslot = OK; - } - -@@ -4516,7 +4554,7 @@ ath_updateslot(struct net_device *dev) - if (ic->ic_opmode == IEEE80211_M_HOSTAP) - sc->sc_updateslot = UPDATE; - else if (dev->flags & IFF_RUNNING) -- ath_settiming(sc); -+ ath_set_timing(sc); - } - - #ifdef ATH_SUPERG_DYNTURBO -@@ -5360,7 +5398,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)) -- ath_settiming(sc); /* commit change to hardware */ -+ ath_set_timing(sc); /* commit change to hardware */ - - if (bfaddr != 0) { - /* -@@ -9433,7 +9471,8 @@ ath_set_coverageclass(struct ieee80211co - { - struct ath_softc *sc = ic->ic_dev->priv; - -- ath_hal_setcoverageclass(sc->sc_ah, ic->ic_coverageclass, 0); -+ sc->sc_coverage = ic->ic_coverageclass * 3; -+ ath_set_timing(sc); - - return; - } -@@ -10956,6 +10995,7 @@ enum { - ATH_OFDM_WEAK_DET = 29, - ATH_CHANBW = 30, - ATH_OUTDOOR = 31, -+ ATH_DISTANCE = 32, - }; - - /* -@@ -11168,21 +11208,31 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl - sc->sc_slottimeconf = val; - else - sc->sc_slottimeconf = 0; -- ath_settiming(sc); -+ ath_set_timing(sc); - break; - case ATH_ACKTIMEOUT: - if (val > 0) - sc->sc_acktimeconf = val; - else - sc->sc_acktimeconf = 0; -- ath_settiming(sc); -+ ath_set_timing(sc); - break; - case ATH_CTSTIMEOUT: - if (val > 0) - sc->sc_ctstimeconf = val; - else - sc->sc_ctstimeconf = 0; -- ath_settiming(sc); -+ ath_set_timing(sc); -+ break; -+ case ATH_DISTANCE: -+ if (val > 0) { -+ sc->sc_coverage = ((val - 1) / 300) + 1; -+ ic->ic_coverageclass = ((sc->sc_coverage - 1) / 3) + 1; -+ } else { -+ sc->sc_coverage = 0; -+ ic->ic_coverageclass = 0; -+ } -+ ath_set_timing(sc); - break; - case ATH_SOFTLED: - if (val != sc->sc_softled) { -@@ -11338,6 +11388,9 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl - case ATH_CHANBW: - val = sc->sc_chanbw ?: 20; - break; -+ case ATH_DISTANCE: -+ val = sc->sc_coverage * 300; -+ break; - case ATH_SLOTTIME: - val = ath_hal_getslottime(ah); - break; -@@ -11459,6 +11512,12 @@ static const ctl_table ath_sysctl_templa - .extra2 = (void *)ATH_CTSTIMEOUT, - }, - { .ctl_name = CTL_AUTO, -+ .procname = "distance", -+ .mode = 0644, -+ .proc_handler = ath_sysctl_halparam, -+ .extra2 = (void *)ATH_DISTANCE, -+ }, -+ { .ctl_name = CTL_AUTO, - .procname = "softled", - .mode = 0644, - .proc_handler = ath_sysctl_halparam, ---- a/ath/if_ath_hal.h -+++ b/ath/if_ath_hal.h -@@ -284,6 +284,17 @@ static inline u_int ath_hal_getslottime( - return ret; - } - -+static inline u_int ath_hal_geteifstime(struct ath_hal *ah) -+{ -+ u_int ret; -+ ATH_HAL_LOCK_IRQ(ah->ah_sc); -+ ath_hal_set_function(__func__); -+ ret = ah->ah_getEifsTime(ah); -+ ath_hal_set_function(NULL); -+ ATH_HAL_UNLOCK_IRQ(ah->ah_sc); -+ return ret; -+} -+ - static inline void ath_hal_beaconinit(struct ath_hal *ah, u_int32_t nexttbtt, - u_int32_t intval) - { -@@ -839,6 +850,17 @@ static inline HAL_BOOL ath_hal_setslotti - ath_hal_set_function(NULL); - ATH_HAL_UNLOCK_IRQ(ah->ah_sc); - return ret; -+} -+ -+static inline HAL_BOOL ath_hal_seteifstime(struct ath_hal *ah, u_int a1) -+{ -+ HAL_BOOL ret; -+ ATH_HAL_LOCK_IRQ(ah->ah_sc); -+ ath_hal_set_function(__func__); -+ ret = ah->ah_setEifsTime(ah, a1); -+ ath_hal_set_function(NULL); -+ ATH_HAL_UNLOCK_IRQ(ah->ah_sc); -+ return ret; - } - - static inline void ath_hal_setledstate(struct ath_hal *ah, HAL_LED_STATE a1) ---- a/ath/if_athvar.h -+++ b/ath/if_athvar.h -@@ -613,6 +613,15 @@ struct ath_rp { - int rp_analyzed; - }; - -+struct ath_timings { -+ u_int slot; -+ u_int ack; -+ u_int cts; -+ u_int sifs; -+ u_int difs; -+ u_int eifs; -+}; -+ - struct ath_softc { - struct ieee80211com sc_ic; /* NB: must be first */ - struct net_device *sc_dev; -@@ -839,6 +848,8 @@ struct ath_softc { - * detected radars */ - u_int32_t sc_nexttbtt; - u_int64_t sc_last_tsf; -+ u_int sc_coverage; -+ struct ath_timings sc_timings; - }; - - typedef void (*ath_callback) (struct ath_softc *); -@@ -946,49 +957,76 @@ int ar_device(int devid); - DEV_NAME(_v->iv_ic->ic_dev)) - - void ath_radar_detected(struct ath_softc *sc, const char* message); --static inline u_int getTimingOffset(struct ath_softc *sc) --{ -- struct ieee80211com *ic = &sc->sc_ic; -- u_int usec = 9; -- if (IEEE80211_IS_CHAN_ANYG(ic->ic_curchan)) { -- usec = 20; -- if (ic->ic_flags & IEEE80211_F_SHSLOT) -- usec = 9; -- } else if (IEEE80211_IS_CHAN_A(ic->ic_curchan)) -- usec = 9; -- -- if (IEEE80211_IS_CHAN_TURBO(ic->ic_curchan)) -- usec = 6; -- -- if (IEEE80211_IS_CHAN_HALF(ic->ic_curchan)) -- usec = 13; -- else if (IEEE80211_IS_CHAN_QUARTER(ic->ic_curchan)) -- usec = 21; -- return usec; --} - --static inline void ath_get_timings(struct ath_softc *sc, u_int *t_slot, u_int *t_sifs, u_int *t_difs) --{ -- struct ieee80211_channel *c = sc->sc_ic.ic_curchan; -+#ifndef MIN -+#define MIN(a,b) ((a) < (b) ? (a) : (b)) -+#endif -+#ifndef MAX -+#define MAX(a,b) ((a) > (b) ? (a) : (b)) -+#endif - -- *t_slot = getTimingOffset(sc) + sc->sc_slottimeconf; - -- if (IEEE80211_IS_CHAN_HALF(c)) { -- *t_sifs = 32; -- *t_difs = 56; -- } else if (IEEE80211_IS_CHAN_QUARTER(c)) { -- *t_sifs = 64; -- *t_difs = 112; -- } else if (IEEE80211_IS_CHAN_TURBO(c)) { -- *t_sifs = 8; -- *t_difs = 28; -- } else { -- *t_sifs = 16; -- *t_difs = 28; -- } -+/* Calculate the transmit duration of a frame. */ -+static inline unsigned -+calc_usecs_unicast_packet(struct ath_softc *sc, int length, -+ int rix, int short_retries, int long_retries) -+{ -+ const HAL_RATE_TABLE *rt = sc->sc_currates; -+ struct ieee80211com *ic = &sc->sc_ic; -+ struct ath_timings *t = &sc->sc_timings; -+ unsigned int x = 0, tt = 0; -+ unsigned int cix = rt->info[rix].controlRate; -+ int rts = 0, cts = 0; -+ int cw = ATH_DEFAULT_CWMIN; -+ -+ KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); -+ -+ if (!rt->info[rix].rateKbps) { -+ printk(KERN_WARNING "rix %d (%d) bad ratekbps %d mode %u\n", -+ rix, rt->info[rix].dot11Rate, -+ rt->info[rix].rateKbps, -+ sc->sc_curmode); -+ return 0; -+ } -+ -+ if ((ic->ic_flags & IEEE80211_F_USEPROT) && -+ (rt->info[rix].phy == IEEE80211_T_OFDM)) { -+ -+ if (ic->ic_protmode == IEEE80211_PROT_RTSCTS) -+ rts = 1; -+ else if (ic->ic_protmode == IEEE80211_PROT_CTSONLY) -+ cts = 1; -+ -+ cix = rt->info[sc->sc_protrix].controlRate; -+ } -+ -+ if ((rts || cts) && rt->info[cix].rateKbps) { -+ int ctsrate = rt->info[cix].rateCode; -+ int ctsduration = 0; -+ -+ ctsrate |= rt->info[cix].shortPreamble; -+ if (rts) /* SIFS + CTS */ -+ ctsduration += rt->info[cix].spAckDuration; -+ -+ ctsduration += ath_hal_computetxtime(sc->sc_ah, -+ rt, length, rix, AH_TRUE); -+ -+ if (cts) /* SIFS + ACK */ -+ ctsduration += rt->info[cix].spAckDuration; -+ -+ tt += (short_retries + 1) * ctsduration; -+ } -+ tt += t->difs; -+ tt += (long_retries + 1) * (t->sifs + rt->info[rix].spAckDuration); -+ tt += (long_retries + 1) * ath_hal_computetxtime(sc->sc_ah, rt, length, -+ rix, AH_TRUE); -+ for (x = 0; x <= short_retries + long_retries; x++) { -+ cw = MIN(ATH_DEFAULT_CWMAX, (cw + 1) * 2); -+ tt += (t->slot * cw / 2); -+ } -+ return tt; - } - -- - struct ath_hw_detect { - const char *vendor_name; - const char *card_name; ---- a/ath_rate/minstrel/minstrel.c -+++ b/ath_rate/minstrel/minstrel.c -@@ -170,85 +170,6 @@ rate_to_ndx(struct minstrel_node *sn, in - return -1; - } - --/* Calculate the transmit duration of a frame. */ --static unsigned --calc_usecs_unicast_packet(struct ath_softc *sc, int length, -- int rix, int short_retries, int long_retries) --{ -- const HAL_RATE_TABLE *rt = sc->sc_currates; -- struct ieee80211com *ic = &sc->sc_ic; -- unsigned t_slot = 20; -- unsigned t_difs = 50; -- unsigned t_sifs = 10; -- unsigned int x = 0, tt = 0; -- unsigned int cix = rt->info[rix].controlRate; -- int rts = 0, cts = 0; -- int cw = ATH_DEFAULT_CWMIN; -- -- KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); -- -- if (!rt->info[rix].rateKbps) { -- printk(KERN_WARNING "rix %d (%d) bad ratekbps %d mode %u\n", -- rix, rt->info[rix].dot11Rate, -- rt->info[rix].rateKbps, -- sc->sc_curmode); -- return 0; -- } -- -- ath_get_timings(sc, &t_slot, &t_sifs, &t_difs); -- if ((ic->ic_flags & IEEE80211_F_USEPROT) && -- (rt->info[rix].phy == IEEE80211_T_OFDM)) { -- if (ic->ic_protmode == IEEE80211_PROT_RTSCTS) -- rts = 1; -- else if (ic->ic_protmode == IEEE80211_PROT_CTSONLY) -- cts = 1; -- -- cix = rt->info[sc->sc_protrix].controlRate; -- } -- --#if 0 -- if (length > ic->ic_rtsthreshold) -- rts = 1; --#endif -- -- if (rts || cts) { -- int ctsrate = rt->info[cix].rateCode; -- int ctsduration = 0; -- -- if (!rt->info[cix].rateKbps) { --#if 0 -- printk(KERN_WARNING "cix %d (%d) bad ratekbps %d mode %u\n", -- cix, rt->info[cix].dot11Rate, -- rt->info[cix].rateKbps, -- sc->sc_curmode); --#endif -- return 0; -- } -- -- -- ctsrate |= rt->info[cix].shortPreamble; -- if (rts) /* SIFS + CTS */ -- ctsduration += rt->info[cix].spAckDuration; -- -- ctsduration += ath_hal_computetxtime(sc->sc_ah, -- rt, length, rix, AH_TRUE); -- -- if (cts) /* SIFS + ACK */ -- ctsduration += rt->info[cix].spAckDuration; -- -- tt += (short_retries + 1) * ctsduration; -- } -- tt += t_difs; -- tt += (long_retries + 1) * (t_sifs + rt->info[rix].spAckDuration); -- tt += (long_retries + 1) * ath_hal_computetxtime(sc->sc_ah, rt, length, -- rix, AH_TRUE); -- for (x = 0; x <= short_retries + long_retries; x++) { -- cw = MIN(ATH_DEFAULT_CWMAX, (cw + 1) * 2); -- tt += (t_slot * cw / 2); -- } -- return tt; --} -- - static void - ath_rate_node_init(struct ath_softc *sc, struct ath_node *an) - { ---- a/ath_rate/sample/sample.c -+++ b/ath_rate/sample/sample.c -@@ -137,92 +137,6 @@ rate_to_ndx(struct sample_node *sn, int - return -1; - } - --/* -- * Calculate the transmit duration of a frame. -- */ --static unsigned --calc_usecs_unicast_packet(struct ath_softc *sc, int length, -- int rix, int short_retries, int long_retries) --{ -- const HAL_RATE_TABLE *rt = sc->sc_currates; -- int rts, cts; -- -- unsigned t_slot; -- unsigned t_difs; -- unsigned t_sifs; -- struct ieee80211com *ic = &sc->sc_ic; -- unsigned int tt = 0; -- unsigned int x; -- unsigned int cw = ATH_DEFAULT_CWMIN; -- unsigned int cix = rt->info[rix].controlRate; -- KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); -- -- if (!rt->info[rix].rateKbps) { -- printk(KERN_WARNING "rix %u (%u) bad ratekbps %u mode %u\n", -- rix, rt->info[rix].dot11Rate, -- rt->info[rix].rateKbps, -- sc->sc_curmode); -- -- return 0; -- } -- -- cix = rt->info[rix].controlRate; -- /* -- * XXX getting mac/phy level timings should be fixed for turbo -- * rates, and there is probably a way to get this from the -- * hal... -- */ -- ath_get_timings(sc, &t_slot, &t_sifs, &t_difs); -- rts = cts = 0; -- -- if ((ic->ic_flags & IEEE80211_F_USEPROT) && -- rt->info[rix].phy == IEEE80211_T_OFDM) { -- if (ic->ic_protmode == IEEE80211_PROT_RTSCTS) -- rts = 1; -- else if (ic->ic_protmode == IEEE80211_PROT_CTSONLY) -- cts = 1; -- -- cix = rt->info[sc->sc_protrix].controlRate; -- } -- -- if (0 /*length > ic->ic_rtsthreshold */) -- rts = 1; -- -- if (rts || cts) { -- int ctsrate; -- int ctsduration = 0; -- -- if (!rt->info[cix].rateKbps) { -- printk(KERN_WARNING "cix %u (%u) bad ratekbps %u mode %u\n", -- cix, rt->info[cix].dot11Rate, -- rt->info[cix].rateKbps, -- sc->sc_curmode); -- return 0; -- } -- -- -- ctsrate = rt->info[cix].rateCode | rt->info[cix].shortPreamble; -- if (rts) /* SIFS + CTS */ -- ctsduration += rt->info[cix].spAckDuration; -- -- ctsduration += ath_hal_computetxtime(sc->sc_ah, -- rt, length, rix, AH_TRUE); -- -- if (cts) /* SIFS + ACK */ -- ctsduration += rt->info[cix].spAckDuration; -- -- tt += (short_retries + 1) * ctsduration; -- } -- tt += t_difs; -- tt += (long_retries+1)*(t_sifs + rt->info[rix].spAckDuration); -- tt += (long_retries+1)*ath_hal_computetxtime(sc->sc_ah, rt, length, -- rix, AH_TRUE); -- for (x = 0; x <= short_retries + long_retries; x++) { -- cw = MIN(ATH_DEFAULT_CWMAX, (cw + 1) * 2); -- tt += (t_slot * cw / 2); -- } -- return tt; --} - - static void - ath_rate_node_init(struct ath_softc *sc, struct ath_node *an) ---- a/net80211/ieee80211_wireless.c -+++ b/net80211/ieee80211_wireless.c -@@ -2745,6 +2745,7 @@ ieee80211_ioctl_setparam(struct net_devi - case IEEE80211_PARAM_COVERAGE_CLASS: - if (value <= IEEE80211_COVERAGE_CLASS_MAX) { - ic->ic_coverageclass = value; -+ ic->ic_set_coverageclass(ic); - if (IS_UP_AUTO(vap)) - ieee80211_new_state(vap, IEEE80211_S_SCAN, 0); - retv = 0; ---- a/net80211/ieee80211_var.h -+++ b/net80211/ieee80211_var.h -@@ -94,7 +94,7 @@ - - #define IEEE80211_BGSCAN_TRIGGER_INTVL 20 /* min trigger interval for thresh based bgscan (secs) */ - --#define IEEE80211_COVERAGE_CLASS_MAX 31 /* max coverage class */ -+#define IEEE80211_COVERAGE_CLASS_MAX 255 /* max coverage class */ - #define IEEE80211_REGCLASSIDS_MAX 10 /* max regclass id list */ - - #define IEEE80211_PS_SLEEP 0x1 /* STA is in power saving mode */ ---- a/tools/Makefile -+++ b/tools/Makefile -@@ -50,7 +50,7 @@ all: compile - - DEBUG = -DAR_DEBUG - --ALLPROGS= athstats 80211stats athkey athchans athctrl \ -+ALLPROGS= athstats 80211stats athkey athchans \ - $(if $(DEBUG),athdebug 80211debug) wlanconfig ath_info - - OBJS= $(patsubst %,%.o,$(ALLPROGS)) ---- a/tools/athctrl.c -+++ /dev/null -@@ -1,133 +0,0 @@ --/*- -- * Copyright (c) 2002-2004 Gunter Burchardt, Local-Web AG -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted provided that the following conditions -- * are met: -- * 1. Redistributions of source code must retain the above copyright -- * notice, this list of conditions and the following disclaimer, -- * without modification. -- * 2. Redistributions in binary form must reproduce at minimum a disclaimer -- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any -- * redistribution must be conditioned upon including a substantially -- * similar Disclaimer requirement for further binary redistribution. -- * 3. Neither the names of the above-listed copyright holders nor the names -- * of any contributors may be used to endorse or promote products derived -- * from this software without specific prior written permission. -- * -- * Alternatively, this software may be distributed under the terms of the -- * GNU General Public License ("GPL") version 2 as published by the Free -- * Software Foundation. -- * -- * NO WARRANTY -- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY -- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, -- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -- * THE POSSIBILITY OF SUCH DAMAGES. -- * -- * $Id: athctrl.c 2394 2007-05-30 01:41:18Z mtaylor $ -- */ -- --/* -- * Simple Atheros-specific tool to inspect and set atheros specific values -- * athctrl [-i interface] [-d distance] -- * (default interface is wifi0). -- */ --#include <sys/types.h> --#include <sys/file.h> -- --#include <getopt.h> -- --#include <stdio.h> --#include <string.h> --#include <stdlib.h> --#include <err.h> -- --#include <net/if.h> --#include "do_multi.h" -- --static int --setsysctrl(const char *dev, const char *control , u_long value) --{ -- char buffer[256]; -- FILE * fd; -- -- snprintf(buffer, sizeof(buffer), "/proc/sys/dev/%s/%s", dev, control); -- fd = fopen(buffer, "w"); -- if (fd != NULL) { -- fprintf(fd, "%li", value); -- fclose(fd); -- } else -- fprintf(stderr, "Could not open %s for writing!\n", buffer); -- -- return 0; --} -- --static void usage(void) --{ -- fprintf(stderr, -- "Atheros driver control\n" -- "Copyright (c) 2002-2004 Gunter Burchardt, Local-Web AG\n" -- "\n" -- "usage: athctrl [-i interface] [-d distance]\n" -- "\n" -- "options:\n" -- " -h show this usage\n" -- " -i interface (default interface is wifi0)\n" -- " -d specify the maximum distance of a sta or the distance\n" -- " of the master\n"); -- -- exit(1); --} -- --int --CMD(athctrl)(int argc, char *argv[]) --{ -- char device[IFNAMSIZ + 1]; -- int distance = -1; -- int c; -- -- strncpy(device, "wifi0", sizeof (device)); -- -- for (;;) { -- c = getopt(argc, argv, "d:i:h"); -- if (c < 0) -- break; -- switch (c) { -- case 'h': -- usage(); -- break; -- case 'd': -- distance = atoi(optarg); -- break; -- case 'i': -- strncpy(device, optarg, sizeof (device)); -- break; -- default: -- usage(); -- break; -- } -- } -- -- if (distance >= 0) { -- int slottime = (distance / 300) + ((distance % 300) ? 1 : 0); -- int acktimeout = slottime * 2 + 3; -- int ctstimeout = slottime * 2 + 3; -- -- printf("Setting distance on interface %s to %i meters\n", -- device, distance); -- setsysctrl(device, "slottime", slottime); -- setsysctrl(device, "acktimeout", acktimeout); -- setsysctrl(device, "ctstimeout", ctstimeout); -- } else -- usage(); -- return 0; --} ---- a/tools/do_multi.c -+++ b/tools/do_multi.c -@@ -18,8 +18,6 @@ main(int argc, char *argv[]) - ret = a80211stats_init(argc, argv); - if(strcmp(progname, "athchans") == 0) - ret = athchans_init(argc, argv); -- if(strcmp(progname, "athctrl") == 0) -- ret = athctrl_init(argc, argv); - #ifdef AR_DEBUG - if(strcmp(progname, "athdebug") == 0) - ret = athdebug_init(argc, argv); ---- a/tools/do_multi.h -+++ b/tools/do_multi.h -@@ -2,7 +2,6 @@ - int a80211debug_init(int argc, char *argv[]); - int a80211stats_init(int argc, char *argv[]); - int athchans_init(int argc, char *argv[]); --int athctrl_init(int argc, char *argv[]); - int athdebug_init(int argc, char *argv[]); - int athkey_init(int argc, char *argv[]); - int athstats_init(int argc, char *argv[]); ---- a/ath_rate/minstrel/minstrel.h -+++ b/ath_rate/minstrel/minstrel.h -@@ -172,14 +172,6 @@ struct minstrel_node { - - #define ATH_NODE_MINSTREL(an) ((struct minstrel_node *)&an[1]) - -- --#ifndef MIN --#define MIN(a,b) ((a) < (b) ? (a) : (b)) --#endif --#ifndef MAX --#define MAX(a,b) ((a) > (b) ? (a) : (b)) --#endif -- - /* - * Definitions for pulling the rate and trie counts from - * a 5212 h/w descriptor. These Don't belong here; the ---- a/ath_rate/sample/sample.h -+++ b/ath_rate/sample/sample.h -@@ -98,14 +98,6 @@ struct sample_node { - }; - #define ATH_NODE_SAMPLE(an) ((struct sample_node *)&an[1]) - -- --#ifndef MIN --#define MIN(a,b) ((a) < (b) ? (a) : (b)) --#endif --#ifndef MAX --#define MAX(a,b) ((a) > (b) ? (a) : (b)) --#endif -- - /* - * Definitions for pulling the rate and trie counts from - * a 5212 h/w descriptor. These Don't belong here; the |