huge madwifi update (work in progress, disabled by default, compiles but breaks at...
[openwrt/openwrt.git] / package / madwifi / patches-r3776 / 307-maxrate.patch
1 Index: madwifi-trunk-r3776/ath/if_ath.c
2 ===================================================================
3 --- madwifi-trunk-r3776.orig/ath/if_ath.c 2008-07-17 02:20:52.000000000 +0200
4 +++ madwifi-trunk-r3776/ath/if_ath.c 2008-07-17 02:20:53.000000000 +0200
5 @@ -1299,6 +1299,7 @@
6 vap->iv_key_set = ath_key_set;
7 vap->iv_key_update_begin = ath_key_update_begin;
8 vap->iv_key_update_end = ath_key_update_end;
9 + vap->iv_maxrateindex = 0;
10 if (sc->sc_default_ieee80211_debug) {
11 /* User specified defaults for new VAPs were provided, so
12 * use those (only). */
13 Index: madwifi-trunk-r3776/ath_rate/sample/sample.c
14 ===================================================================
15 --- madwifi-trunk-r3776.orig/ath_rate/sample/sample.c 2008-07-17 02:20:26.000000000 +0200
16 +++ madwifi-trunk-r3776/ath_rate/sample/sample.c 2008-07-17 02:20:53.000000000 +0200
17 @@ -838,7 +838,12 @@
18 }
19 sn->static_rate_ndx = -1;
20
21 - sn->num_rates = ni->ni_rates.rs_nrates;
22 + if (vap->iv_maxrateindex == 0 || ni->ni_rates.rs_nrates <= 0
23 + || vap->iv_maxrateindex > ni->ni_rates.rs_nrates)
24 + sn->num_rates = ni->ni_rates.rs_nrates;
25 + else
26 + sn->num_rates = vap->iv_maxrateindex;
27 +
28 for (x = 0; x < ni->ni_rates.rs_nrates; x++) {
29 sn->rates[x].rate = ni->ni_rates.rs_rates[x] & IEEE80211_RATE_VAL;
30 sn->rates[x].rix = sc->sc_rixmap[sn->rates[x].rate];
31 Index: madwifi-trunk-r3776/net80211/ieee80211_var.h
32 ===================================================================
33 --- madwifi-trunk-r3776.orig/net80211/ieee80211_var.h 2008-07-17 02:20:51.000000000 +0200
34 +++ madwifi-trunk-r3776/net80211/ieee80211_var.h 2008-07-17 02:20:53.000000000 +0200
35 @@ -291,6 +291,7 @@
36 struct ieee80211_spy iv_spy; /* IWSPY support */
37 struct ieee80211_app_ie app_ie[IEEE80211_APPIE_NUM_OF_FRAME]; /* app-specified IEs by frame type */
38 u_int32_t app_filter; /* filters which management frames are forwarded to app */
39 + int iv_maxrateindex;
40 };
41
42 /* Debug functions need the defintion of struct ieee80211vap because iv_debug
43 Index: madwifi-trunk-r3776/net80211/ieee80211_wireless.c
44 ===================================================================
45 --- madwifi-trunk-r3776.orig/net80211/ieee80211_wireless.c 2008-07-17 02:20:51.000000000 +0200
46 +++ madwifi-trunk-r3776/net80211/ieee80211_wireless.c 2008-07-17 02:20:53.000000000 +0200
47 @@ -2873,6 +2873,12 @@
48 else
49 ic->ic_flags_ext &= ~IEEE80211_FEXT_MARKDFS;
50 break;
51 + case IEEE80211_PARAM_MAXRATE:
52 + if (value > 0)
53 + vap->iv_maxrateindex = value;
54 + else
55 + vap->iv_maxrateindex = 0;
56 + break;
57 #ifdef ATH_REVERSE_ENGINEERING
58 case IEEE80211_PARAM_DUMPREGS:
59 ieee80211_dump_registers(dev, info, w, extra);
60 @@ -3211,6 +3217,9 @@
61 else
62 param[0] = 0;
63 break;
64 + case IEEE80211_PARAM_MAXRATE:
65 + param[0] = vap->iv_maxrateindex;
66 + break;
67 default:
68 return -EOPNOTSUPP;
69 }
70 @@ -5666,6 +5675,10 @@
71 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_scanbufs" },
72 { IEEE80211_PARAM_LEAKTXBUFS,
73 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_leaktxbufs" },
74 + {IEEE80211_PARAM_MAXRATE,
75 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "maxrate"},
76 + {IEEE80211_PARAM_MAXRATE,
77 + 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_maxrate"},
78
79 #ifdef ATH_REVERSE_ENGINEERING
80 /*
81 Index: madwifi-trunk-r3776/net80211/ieee80211_ioctl.h
82 ===================================================================
83 --- madwifi-trunk-r3776.orig/net80211/ieee80211_ioctl.h 2008-07-17 02:20:51.000000000 +0200
84 +++ madwifi-trunk-r3776/net80211/ieee80211_ioctl.h 2008-07-17 02:20:53.000000000 +0200
85 @@ -650,6 +650,7 @@
86 IEEE80211_PARAM_RESETTXBUFS = 80, /* Reset transmit DMA */
87 IEEE80211_PARAM_SCANBUFS = 81, /* Heap analysis for TX DMA */
88 IEEE80211_PARAM_LEAKTXBUFS = 82, /* Leak tx buffers */
89 + IEEE80211_PARAM_MAXRATE = 83, /* Maximum rate (by table index) */
90 };
91
92 #define SIOCG80211STATS (SIOCDEVPRIVATE+2)
93 Index: madwifi-trunk-r3776/ath_rate/minstrel/minstrel.c
94 ===================================================================
95 --- madwifi-trunk-r3776.orig/ath_rate/minstrel/minstrel.c 2008-07-17 02:22:27.000000000 +0200
96 +++ madwifi-trunk-r3776/ath_rate/minstrel/minstrel.c 2008-07-17 02:22:33.000000000 +0200
97 @@ -644,6 +644,11 @@
98 return;
99 }
100 sn->static_rate_ndx = -1;
101 + if (vap->iv_maxrateindex == 0 || ni->ni_rates.rs_nrates <= 0
102 + || vap->iv_maxrateindex > ni->ni_rates.rs_nrates)
103 + sn->num_rates = ni->ni_rates.rs_nrates;
104 + else
105 + sn->num_rates = vap->iv_maxrateindex;
106
107 sn->num_rates = ni->ni_rates.rs_nrates;
108 for (x = 0; x < ni->ni_rates.rs_nrates; x++) {