mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-01-27 14:21:06 +02:00
package/madwifi: refresh madwifi patches
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@23971 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
28620683f1
commit
c177eb0d43
@ -59,7 +59,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -475,6 +483,9 @@ ccmp_encrypt(struct ieee80211_key *key,
|
@@ -475,6 +483,9 @@ ccmp_encrypt(struct ieee80211_key *key,
|
||||||
uint8_t *mic, *pos;
|
uint8_t *mic, *pos;
|
||||||
u_int space;
|
u_int space;
|
||||||
|
|
||||||
@ -69,7 +69,7 @@
|
|||||||
ctx->cc_vap->iv_stats.is_crypto_ccmp++;
|
ctx->cc_vap->iv_stats.is_crypto_ccmp++;
|
||||||
|
|
||||||
skb = skb0;
|
skb = skb0;
|
||||||
@@ -589,6 +600,9 @@ ccmp_decrypt(struct ieee80211_key *key,
|
@@ -589,6 +600,9 @@ ccmp_decrypt(struct ieee80211_key *key,
|
||||||
uint8_t *pos, *mic;
|
uint8_t *pos, *mic;
|
||||||
u_int space;
|
u_int space;
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
ic->ic_set_dfs_testmode = ath_set_dfs_testmode;
|
ic->ic_set_dfs_testmode = ath_set_dfs_testmode;
|
||||||
ic->ic_get_dfs_testmode = ath_get_dfs_testmode;
|
ic->ic_get_dfs_testmode = ath_get_dfs_testmode;
|
||||||
|
|
||||||
@@ -1297,12 +1301,14 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1297,12 +1301,14 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
/* If no default VAP debug flags are passed, allow a few to
|
/* If no default VAP debug flags are passed, allow a few to
|
||||||
* transfer down from the driver to new VAPs so we can have load
|
* transfer down from the driver to new VAPs so we can have load
|
||||||
* time debugging for VAPs too. */
|
* time debugging for VAPs too. */
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52))
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52))
|
||||||
MODULE_PARM(ath_debug, "i");
|
MODULE_PARM(ath_debug, "i");
|
||||||
#else
|
#else
|
||||||
@@ -465,8 +465,8 @@ static void ath_printrxbuf(const struct
|
@@ -465,8 +465,8 @@ static void ath_printrxbuf(const struct
|
||||||
static void ath_printtxbuf(const struct ath_buf *, int);
|
static void ath_printtxbuf(const struct ath_buf *, int);
|
||||||
#endif /* defined(AR_DEBUG) */
|
#endif /* defined(AR_DEBUG) */
|
||||||
|
|
||||||
@ -118,7 +118,7 @@
|
|||||||
struct ieee80211com *ic = &sc->sc_ic;
|
struct ieee80211com *ic = &sc->sc_ic;
|
||||||
int required = 0;
|
int required = 0;
|
||||||
|
|
||||||
@@ -366,6 +370,7 @@ static struct ath_rp *pulse_prev(struct
|
@@ -366,6 +370,7 @@ static struct ath_rp *pulse_prev(struct
|
||||||
#define MR_FAIL_MIN_PERIOD 4
|
#define MR_FAIL_MIN_PERIOD 4
|
||||||
#define MR_FAIL_MAX_PERIOD 5
|
#define MR_FAIL_MAX_PERIOD 5
|
||||||
|
|
||||||
@ -174,7 +174,7 @@
|
|||||||
DPRINTF(sc, ATH_DEBUG_DOTHPULSES, "%s: ath_rp_record: "
|
DPRINTF(sc, ATH_DEBUG_DOTHPULSES, "%s: ath_rp_record: "
|
||||||
--- a/ath_rate/minstrel/minstrel.c
|
--- a/ath_rate/minstrel/minstrel.c
|
||||||
+++ b/ath_rate/minstrel/minstrel.c
|
+++ b/ath_rate/minstrel/minstrel.c
|
||||||
@@ -931,7 +931,9 @@ ath_proc_read_nodes(struct ieee80211vap
|
@@ -931,7 +931,9 @@ ath_proc_read_nodes(struct ieee80211vap
|
||||||
(struct ieee80211_node_table *) &vap->iv_ic->ic_sta;
|
(struct ieee80211_node_table *) &vap->iv_ic->ic_sta;
|
||||||
unsigned int x = 0;
|
unsigned int x = 0;
|
||||||
unsigned int this_tp, this_prob, this_eprob;
|
unsigned int this_tp, this_prob, this_eprob;
|
||||||
|
@ -183,7 +183,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -6360,15 +6426,25 @@ ath_setdefantenna(struct ath_softc *sc,
|
@@ -6360,15 +6426,25 @@ ath_setdefantenna(struct ath_softc *sc,
|
||||||
sc->sc_rxotherant = 0;
|
sc->sc_rxotherant = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,7 +448,7 @@
|
|||||||
* device was too busy */
|
* device was too busy */
|
||||||
if (ni_tmp != NULL) {
|
if (ni_tmp != NULL) {
|
||||||
/* node reference was leaked */
|
/* node reference was leaked */
|
||||||
@@ -2322,8 +2322,8 @@ forward_mgmt_to_app(struct ieee80211vap
|
@@ -2322,8 +2322,8 @@ forward_mgmt_to_app(struct ieee80211vap
|
||||||
skb1->protocol = __constant_htons(0x0019); /* ETH_P_80211_RAW */
|
skb1->protocol = __constant_htons(0x0019); /* ETH_P_80211_RAW */
|
||||||
|
|
||||||
ni_tmp = SKB_CB(skb1)->ni;
|
ni_tmp = SKB_CB(skb1)->ni;
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
break;
|
break;
|
||||||
case IEEE80211_M_WDS:
|
case IEEE80211_M_WDS:
|
||||||
if (skb->len < sizeof(struct ieee80211_frame_addr4)) {
|
if (skb->len < sizeof(struct ieee80211_frame_addr4)) {
|
||||||
@@ -3066,7 +3063,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3066,7 +3063,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
u_int8_t *frm, *efrm;
|
u_int8_t *frm, *efrm;
|
||||||
u_int8_t *ssid, *rates, *xrates, *suppchan, *wpa, *rsn, *wme, *ath;
|
u_int8_t *ssid, *rates, *xrates, *suppchan, *wpa, *rsn, *wme, *ath;
|
||||||
u_int8_t rate;
|
u_int8_t rate;
|
||||||
@ -58,7 +58,7 @@
|
|||||||
u_int8_t qosinfo;
|
u_int8_t qosinfo;
|
||||||
|
|
||||||
if (ni_or_null == NULL)
|
if (ni_or_null == NULL)
|
||||||
@@ -3096,11 +3093,15 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3096,11 +3093,15 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
* o station mode when associated (to collect state
|
* o station mode when associated (to collect state
|
||||||
* updates such as 802.11g slot time), or
|
* updates such as 802.11g slot time), or
|
||||||
* o adhoc mode (to discover neighbors)
|
* o adhoc mode (to discover neighbors)
|
||||||
@ -75,7 +75,7 @@
|
|||||||
vap->iv_stats.is_rx_mgtdiscard++;
|
vap->iv_stats.is_rx_mgtdiscard++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -3184,6 +3185,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3184,6 +3185,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
scan.erp = frm[2];
|
scan.erp = frm[2];
|
||||||
@ -83,7 +83,7 @@
|
|||||||
break;
|
break;
|
||||||
case IEEE80211_ELEMID_RSN:
|
case IEEE80211_ELEMID_RSN:
|
||||||
scan.rsn = frm;
|
scan.rsn = frm;
|
||||||
@@ -3421,6 +3423,20 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3421,6 +3423,20 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
ieee80211_bg_scan(vap);
|
ieee80211_bg_scan(vap);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -6457,6 +6457,7 @@ ath_rx_poll(struct net_device *dev, int
|
@@ -6457,6 +6457,7 @@ ath_rx_poll(struct net_device *dev, int
|
||||||
int type;
|
int type;
|
||||||
u_int phyerr;
|
u_int phyerr;
|
||||||
u_int processed = 0, early_stop = 0;
|
u_int processed = 0, early_stop = 0;
|
||||||
@ -205,7 +205,7 @@
|
|||||||
IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
|
IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
|
||||||
ni->ni_macaddr, "data", "%s", "demic error");
|
ni->ni_macaddr, "data", "%s", "demic error");
|
||||||
IEEE80211_NODE_STAT(ni, rx_demicfail);
|
IEEE80211_NODE_STAT(ni, rx_demicfail);
|
||||||
@@ -4293,6 +4293,47 @@ ath_eth_type_trans(struct sk_buff *skb,
|
@@ -4293,6 +4293,47 @@ ath_eth_type_trans(struct sk_buff *skb,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -1354,7 +1354,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1354,7 +1354,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
TAILQ_FOREACH(v, &ic->ic_vaps, iv_next)
|
TAILQ_FOREACH(v, &ic->ic_vaps, iv_next)
|
||||||
id_mask |= (1 << ATH_GET_VAP_ID(v->iv_myaddr));
|
id_mask |= (1 << ATH_GET_VAP_ID(v->iv_myaddr));
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
/* if it is a mode change beacon for dynamic turbo case */
|
/* if it is a mode change beacon for dynamic turbo case */
|
||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -3431,9 +3431,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3431,9 +3431,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
/* Assume no ERP IE == 11b AP */
|
/* Assume no ERP IE == 11b AP */
|
||||||
if ((!has_erp || (has_erp && (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) &&
|
if ((!has_erp || (has_erp && (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) &&
|
||||||
!(ic->ic_flags & IEEE80211_F_USEPROT)) {
|
!(ic->ic_flags & IEEE80211_F_USEPROT)) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -9792,7 +9792,9 @@ ath_getchannels(struct net_device *dev,
|
@@ -9792,7 +9792,9 @@ ath_getchannels(struct net_device *dev,
|
||||||
/*
|
/*
|
||||||
* Convert HAL channels to ieee80211 ones.
|
* Convert HAL channels to ieee80211 ones.
|
||||||
*/
|
*/
|
||||||
@ -10,7 +10,7 @@
|
|||||||
for (i = 0; i < nchan; i++) {
|
for (i = 0; i < nchan; i++) {
|
||||||
HAL_CHANNEL *c = &chans[i];
|
HAL_CHANNEL *c = &chans[i];
|
||||||
struct ieee80211_channel *ichan = &ic->ic_channels[i];
|
struct ieee80211_channel *ichan = &ic->ic_channels[i];
|
||||||
@@ -9819,6 +9821,7 @@ ath_getchannels(struct net_device *dev,
|
@@ -9819,6 +9821,7 @@ ath_getchannels(struct net_device *dev,
|
||||||
ic->ic_chan_non_occupy[i].tv_sec = 0;
|
ic->ic_chan_non_occupy[i].tv_sec = 0;
|
||||||
ic->ic_chan_non_occupy[i].tv_usec = 0;
|
ic->ic_chan_non_occupy[i].tv_usec = 0;
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
IPRINTF(sc, "Channel %3d (%4d MHz) Max Tx Power %d dBm%s "
|
IPRINTF(sc, "Channel %3d (%4d MHz) Max Tx Power %d dBm%s "
|
||||||
"[%d hw %d reg] Flags%s%s%s%s%s%s%s%s%s%s%s%s%"
|
"[%d hw %d reg] Flags%s%s%s%s%s%s%s%s%s%s%s%s%"
|
||||||
"s%s%s%s%s%s%s%s%s%s%s%s\n",
|
"s%s%s%s%s%s%s%s%s%s%s%s\n",
|
||||||
@@ -9907,6 +9910,7 @@ ath_getchannels(struct net_device *dev,
|
@@ -9907,6 +9910,7 @@ ath_getchannels(struct net_device *dev,
|
||||||
(c->privFlags & 0x0080 ?
|
(c->privFlags & 0x0080 ?
|
||||||
" PF & (1 << 7)" : "")
|
" PF & (1 << 7)" : "")
|
||||||
);
|
);
|
||||||
|
@ -79,7 +79,7 @@
|
|||||||
|
|
||||||
sc->sc_stats.ast_be_xmit++; /* XXX per-VAP? */
|
sc->sc_stats.ast_be_xmit++; /* XXX per-VAP? */
|
||||||
}
|
}
|
||||||
@@ -5403,6 +5431,7 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5403,6 +5431,7 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
ath_hal_beacontimers(ah, &bs);
|
ath_hal_beacontimers(ah, &bs);
|
||||||
sc->sc_imask |= HAL_INT_BMISS;
|
sc->sc_imask |= HAL_INT_BMISS;
|
||||||
ath_hal_intrset(ah, sc->sc_imask);
|
ath_hal_intrset(ah, sc->sc_imask);
|
||||||
@ -87,7 +87,7 @@
|
|||||||
} else {
|
} else {
|
||||||
ath_hal_intrset(ah, 0);
|
ath_hal_intrset(ah, 0);
|
||||||
if (reset_tsf)
|
if (reset_tsf)
|
||||||
@@ -5414,8 +5443,11 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5414,8 +5443,11 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
*/
|
*/
|
||||||
intval |= HAL_BEACON_ENA;
|
intval |= HAL_BEACON_ENA;
|
||||||
sc->sc_imask |= HAL_INT_SWBA;
|
sc->sc_imask |= HAL_INT_SWBA;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -950,6 +950,9 @@ ieee80211_input_all(struct ieee80211com
|
@@ -950,6 +950,9 @@ ieee80211_input_all(struct ieee80211com
|
||||||
TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
|
TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
|
||||||
struct sk_buff *skb1;
|
struct sk_buff *skb1;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -1307,6 +1307,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1307,6 +1307,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
vap->iv_key_set = ath_key_set;
|
vap->iv_key_set = ath_key_set;
|
||||||
vap->iv_key_update_begin = ath_key_update_begin;
|
vap->iv_key_update_begin = ath_key_update_begin;
|
||||||
vap->iv_key_update_end = ath_key_update_end;
|
vap->iv_key_update_end = ath_key_update_end;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -1308,6 +1308,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1308,6 +1308,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
vap->iv_key_update_begin = ath_key_update_begin;
|
vap->iv_key_update_begin = ath_key_update_begin;
|
||||||
vap->iv_key_update_end = ath_key_update_end;
|
vap->iv_key_update_end = ath_key_update_end;
|
||||||
vap->iv_maxrateindex = 0;
|
vap->iv_maxrateindex = 0;
|
||||||
|
@ -73,6 +73,7 @@
|
|||||||
- ieee80211_ref_node(SKB_CB(skb)->ni);
|
- ieee80211_ref_node(SKB_CB(skb)->ni);
|
||||||
- /* Unshare the node, decrementing users in the old skb */
|
- /* Unshare the node, decrementing users in the old skb */
|
||||||
- skb = skb_unshare(skb, GFP_ATOMIC);
|
- skb = skb_unshare(skb, GFP_ATOMIC);
|
||||||
|
- }
|
||||||
+ need_headroom -= skb_headroom(skb);
|
+ need_headroom -= skb_headroom(skb);
|
||||||
+ if (isff)
|
+ if (isff)
|
||||||
+ need_tailroom -= skb_tailroom(skb2);
|
+ need_tailroom -= skb_tailroom(skb2);
|
||||||
@ -83,42 +84,32 @@
|
|||||||
+ need_headroom = 0;
|
+ need_headroom = 0;
|
||||||
+ if (need_tailroom < 0)
|
+ if (need_tailroom < 0)
|
||||||
+ need_tailroom = 0;
|
+ need_tailroom = 0;
|
||||||
+
|
|
||||||
+ if (skb_cloned(skb) || (need_headroom > 0) ||
|
|
||||||
+ (!isff && (need_tailroom > 0))) {
|
|
||||||
+
|
|
||||||
+ if (pskb_expand_head(skb, need_headroom, need_tailroom, GFP_ATOMIC)) {
|
|
||||||
+ IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
|
|
||||||
+ "%s: cannot expand storage (tail)\n", __func__);
|
|
||||||
+ goto error;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ATH_SUPERG_FF
|
-#ifdef ATH_SUPERG_FF
|
||||||
if (isff) {
|
- if (isff) {
|
||||||
- if (skb == NULL) {
|
- if (skb == NULL) {
|
||||||
- IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
|
- IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
|
||||||
- "%s: cannot unshare for encapsulation\n",
|
- "%s: cannot unshare for encapsulation\n",
|
||||||
- __func__);
|
- __func__);
|
||||||
- vap->iv_stats.is_tx_nobuf++;
|
- vap->iv_stats.is_tx_nobuf++;
|
||||||
- ieee80211_dev_kfree_skb(&skb2);
|
- ieee80211_dev_kfree_skb(&skb2);
|
||||||
-
|
+ if (skb_cloned(skb) || (need_headroom > 0) ||
|
||||||
|
+ (!isff && (need_tailroom > 0))) {
|
||||||
|
|
||||||
- return NULL;
|
- return NULL;
|
||||||
- }
|
+ if (pskb_expand_head(skb, need_headroom, need_tailroom, GFP_ATOMIC)) {
|
||||||
+ inter_headroom -= skb_headroom(skb2);
|
+ IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
|
||||||
+ if (inter_headroom < 0)
|
+ "%s: cannot expand storage (tail)\n", __func__);
|
||||||
+ inter_headroom = 0;
|
+ goto error;
|
||||||
+ if ((skb_cloned(skb2) ||
|
}
|
||||||
+ (inter_headroom > 0) || (need_tailroom > 0))) {
|
+ }
|
||||||
|
|
||||||
- /* first skb header */
|
- /* first skb header */
|
||||||
- if (skb_headroom(skb) < need_headroom) {
|
- if (skb_headroom(skb) < need_headroom) {
|
||||||
- struct sk_buff *tmp = skb;
|
- struct sk_buff *tmp = skb;
|
||||||
- skb = skb_realloc_headroom(skb, need_headroom);
|
- skb = skb_realloc_headroom(skb, need_headroom);
|
||||||
- if (skb == NULL) {
|
- if (skb == NULL) {
|
||||||
+ if (pskb_expand_head(skb2, inter_headroom,
|
- IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
|
||||||
+ need_tailroom, GFP_ATOMIC)) {
|
|
||||||
IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
|
|
||||||
- "%s: cannot expand storage (head1)\n",
|
- "%s: cannot expand storage (head1)\n",
|
||||||
- __func__);
|
- __func__);
|
||||||
- vap->iv_stats.is_tx_nobuf++;
|
- vap->iv_stats.is_tx_nobuf++;
|
||||||
@ -130,7 +121,14 @@
|
|||||||
- /* NB: cb[] area was copied, but not next ptr. must do that
|
- /* NB: cb[] area was copied, but not next ptr. must do that
|
||||||
- * prior to return on success. */
|
- * prior to return on success. */
|
||||||
- }
|
- }
|
||||||
-
|
+#ifdef ATH_SUPERG_FF
|
||||||
|
+ if (isff) {
|
||||||
|
+ inter_headroom -= skb_headroom(skb2);
|
||||||
|
+ if (inter_headroom < 0)
|
||||||
|
+ inter_headroom = 0;
|
||||||
|
+ if ((skb_cloned(skb2) ||
|
||||||
|
+ (inter_headroom > 0) || (need_tailroom > 0))) {
|
||||||
|
|
||||||
- /* second skb with header and tail adjustments possible */
|
- /* second skb with header and tail adjustments possible */
|
||||||
- if (skb_tailroom(skb2) < need_tailroom) {
|
- if (skb_tailroom(skb2) < need_tailroom) {
|
||||||
- int n = 0;
|
- int n = 0;
|
||||||
@ -139,7 +137,9 @@
|
|||||||
- if (pskb_expand_head(skb2, n,
|
- if (pskb_expand_head(skb2, n,
|
||||||
- need_tailroom - skb_tailroom(skb2), GFP_ATOMIC)) {
|
- need_tailroom - skb_tailroom(skb2), GFP_ATOMIC)) {
|
||||||
- ieee80211_dev_kfree_skb(&skb2);
|
- ieee80211_dev_kfree_skb(&skb2);
|
||||||
- IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
|
+ if (pskb_expand_head(skb2, inter_headroom,
|
||||||
|
+ need_tailroom, GFP_ATOMIC)) {
|
||||||
|
IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
|
||||||
- "%s: cannot expand storage (tail2)\n",
|
- "%s: cannot expand storage (tail2)\n",
|
||||||
- __func__);
|
- __func__);
|
||||||
- vap->iv_stats.is_tx_nobuf++;
|
- vap->iv_stats.is_tx_nobuf++;
|
||||||
@ -163,10 +163,10 @@
|
|||||||
- } else
|
- } else
|
||||||
- ieee80211_skb_copy_noderef(tmp, skb);
|
- ieee80211_skb_copy_noderef(tmp, skb);
|
||||||
- ieee80211_dev_kfree_skb(&tmp);
|
- ieee80211_dev_kfree_skb(&tmp);
|
||||||
}
|
- }
|
||||||
- if (skb) {
|
- if (skb) {
|
||||||
- skb->next = skb2;
|
- skb->next = skb2;
|
||||||
- }
|
}
|
||||||
- return skb;
|
- return skb;
|
||||||
+ skb->next = skb2;
|
+ skb->next = skb2;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
* multiple segments.
|
* multiple segments.
|
||||||
--- a/ath_rate/minstrel/minstrel.c
|
--- a/ath_rate/minstrel/minstrel.c
|
||||||
+++ b/ath_rate/minstrel/minstrel.c
|
+++ b/ath_rate/minstrel/minstrel.c
|
||||||
@@ -333,15 +333,19 @@ ath_rate_findrate(struct ath_softc *sc,
|
@@ -333,15 +333,19 @@ ath_rate_findrate(struct ath_softc *sc,
|
||||||
if (sn->static_rate_ndx >= 0) {
|
if (sn->static_rate_ndx >= 0) {
|
||||||
ndx = sn->static_rate_ndx;
|
ndx = sn->static_rate_ndx;
|
||||||
} else {
|
} else {
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
TAILQ_INIT(&ic->ic_vaps);
|
TAILQ_INIT(&ic->ic_vaps);
|
||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -3411,14 +3411,18 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3411,14 +3411,18 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
IEEE80211_IS_CHAN_ANYG(ic->ic_curchan)) {
|
IEEE80211_IS_CHAN_ANYG(ic->ic_curchan)) {
|
||||||
|
|
||||||
/* Assume no ERP IE == 11b AP */
|
/* Assume no ERP IE == 11b AP */
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
return 0;
|
return 0;
|
||||||
bad3:
|
bad3:
|
||||||
ieee80211_ifdetach(ic);
|
ieee80211_ifdetach(ic);
|
||||||
@@ -2428,6 +2431,43 @@ ath_chan2flags(struct ieee80211_channel
|
@@ -2428,6 +2431,43 @@ ath_chan2flags(struct ieee80211_channel
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static __inline int
|
static __inline int
|
||||||
@@ -3258,6 +3260,25 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3258,6 +3260,25 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
/* record tsf of last beacon */
|
/* record tsf of last beacon */
|
||||||
memcpy(ni->ni_tstamp.data, scan.tstamp,
|
memcpy(ni->ni_tstamp.data, scan.tstamp,
|
||||||
sizeof(ni->ni_tstamp));
|
sizeof(ni->ni_tstamp));
|
||||||
|
@ -219,7 +219,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||||||
return ret;
|
return ret;
|
||||||
--- a/net80211/ieee80211_wireless.c
|
--- a/net80211/ieee80211_wireless.c
|
||||||
+++ b/net80211/ieee80211_wireless.c
|
+++ b/net80211/ieee80211_wireless.c
|
||||||
@@ -514,8 +514,9 @@ ieee80211_ioctl_siwap(struct net_device
|
@@ -514,8 +514,9 @@ ieee80211_ioctl_siwap(struct net_device
|
||||||
vap->iv_flags |= IEEE80211_F_DESBSSID;
|
vap->iv_flags |= IEEE80211_F_DESBSSID;
|
||||||
|
|
||||||
IEEE80211_ADDR_COPY(vap->iv_des_bssid, &ap_addr->sa_data);
|
IEEE80211_ADDR_COPY(vap->iv_des_bssid, &ap_addr->sa_data);
|
||||||
|
@ -7,7 +7,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||||||
|
|
||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -3400,12 +3400,17 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3400,12 +3400,17 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WDS/Repeater: re-schedule software beacon timer for
|
/* WDS/Repeater: re-schedule software beacon timer for
|
||||||
|
@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||||||
{ IEEE80211_PARAM_UAPSDINFO,
|
{ IEEE80211_PARAM_UAPSDINFO,
|
||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -3261,6 +3261,19 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3261,6 +3261,19 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
memcpy(ni->ni_tstamp.data, scan.tstamp,
|
memcpy(ni->ni_tstamp.data, scan.tstamp,
|
||||||
sizeof(ni->ni_tstamp));
|
sizeof(ni->ni_tstamp));
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
if (se->se_fails && (jiffies - se->se_lastfail) > STA_FAILS_AGE*HZ) {
|
if (se->se_fails && (jiffies - se->se_lastfail) > STA_FAILS_AGE*HZ) {
|
||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -3106,6 +3106,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3106,6 +3106,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
*/
|
*/
|
||||||
IEEE80211_VERIFY_LENGTH(efrm - frm, 12);
|
IEEE80211_VERIFY_LENGTH(efrm - frm, 12);
|
||||||
memset(&scan, 0, sizeof(scan));
|
memset(&scan, 0, sizeof(scan));
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
if (ic->ic_dev->flags & IFF_RUNNING) {
|
if (ic->ic_dev->flags & IFF_RUNNING) {
|
||||||
/* needs to disable hardware too */
|
/* needs to disable hardware too */
|
||||||
@@ -1271,8 +1269,12 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1271,8 +1269,12 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
} else
|
} else
|
||||||
ic_opmode = opmode;
|
ic_opmode = opmode;
|
||||||
break;
|
break;
|
||||||
@ -58,7 +58,7 @@
|
|||||||
/* permit multiple APs and/or WDS links */
|
/* permit multiple APs and/or WDS links */
|
||||||
/* XXX sta+ap for repeater/bridge application */
|
/* XXX sta+ap for repeater/bridge application */
|
||||||
if ((sc->sc_nvaps != 0) && (ic->ic_opmode == IEEE80211_M_STA))
|
if ((sc->sc_nvaps != 0) && (ic->ic_opmode == IEEE80211_M_STA))
|
||||||
@@ -1304,7 +1306,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1304,7 +1306,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
}
|
}
|
||||||
|
|
||||||
avp = dev->priv;
|
avp = dev->priv;
|
||||||
@ -124,7 +124,7 @@
|
|||||||
{
|
{
|
||||||
#define IEEE80211_C_OPMODE \
|
#define IEEE80211_C_OPMODE \
|
||||||
(IEEE80211_C_IBSS | IEEE80211_C_HOSTAP | IEEE80211_C_AHDEMO | \
|
(IEEE80211_C_IBSS | IEEE80211_C_HOSTAP | IEEE80211_C_AHDEMO | \
|
||||||
@@ -510,9 +525,18 @@ ieee80211_vap_setup(struct ieee80211com
|
@@ -510,9 +525,18 @@ ieee80211_vap_setup(struct ieee80211com
|
||||||
|
|
||||||
vap->iv_monitor_crc_errors = 0;
|
vap->iv_monitor_crc_errors = 0;
|
||||||
vap->iv_monitor_phy_errors = 0;
|
vap->iv_monitor_phy_errors = 0;
|
||||||
@ -528,7 +528,7 @@
|
|||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case SIOCG80211STATS:
|
case SIOCG80211STATS:
|
||||||
@@ -5921,8 +5922,20 @@ ieee80211_ioctl(struct net_device *dev,
|
@@ -5921,8 +5922,20 @@ ieee80211_ioctl(struct net_device *dev,
|
||||||
case SIOC80211IFDESTROY:
|
case SIOC80211IFDESTROY:
|
||||||
if (!capable(CAP_NET_ADMIN))
|
if (!capable(CAP_NET_ADMIN))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
@ -784,7 +784,7 @@
|
|||||||
skb1 = skb;
|
skb1 = skb;
|
||||||
skb = NULL;
|
skb = NULL;
|
||||||
}
|
}
|
||||||
@@ -3084,8 +3133,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3084,8 +3133,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
(vap->iv_opmode == IEEE80211_M_STA && ni->ni_associd) ||
|
(vap->iv_opmode == IEEE80211_M_STA && ni->ni_associd) ||
|
||||||
(vap->iv_opmode == IEEE80211_M_IBSS) ||
|
(vap->iv_opmode == IEEE80211_M_IBSS) ||
|
||||||
((subtype == IEEE80211_FC0_SUBTYPE_BEACON) &&
|
((subtype == IEEE80211_FC0_SUBTYPE_BEACON) &&
|
||||||
@ -794,7 +794,7 @@
|
|||||||
vap->iv_stats.is_rx_mgtdiscard++;
|
vap->iv_stats.is_rx_mgtdiscard++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -3471,13 +3519,56 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3471,13 +3519,56 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
*/
|
*/
|
||||||
if (ic->ic_flags & IEEE80211_F_SCAN) {
|
if (ic->ic_flags & IEEE80211_F_SCAN) {
|
||||||
ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
|
ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
|
||||||
@ -856,7 +856,7 @@
|
|||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Copy data from beacon to neighbor table.
|
* Copy data from beacon to neighbor table.
|
||||||
@@ -3490,6 +3581,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3490,6 +3581,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3);
|
IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3);
|
||||||
memcpy(ni->ni_tstamp.data, scan.tstamp,
|
memcpy(ni->ni_tstamp.data, scan.tstamp,
|
||||||
sizeof(ni->ni_tstamp));
|
sizeof(ni->ni_tstamp));
|
||||||
@ -1157,7 +1157,7 @@
|
|||||||
/* calculate priority so drivers can find the TX queue */
|
/* calculate priority so drivers can find the TX queue */
|
||||||
if (ieee80211_classify(ni, skb)) {
|
if (ieee80211_classify(ni, skb)) {
|
||||||
IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni,
|
IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni,
|
||||||
@@ -334,20 +335,33 @@ void ieee80211_parent_queue_xmit(struct
|
@@ -334,20 +335,33 @@ void ieee80211_parent_queue_xmit(struct
|
||||||
* constructing a frame as it sets i_fc[1]; other bits can
|
* constructing a frame as it sets i_fc[1]; other bits can
|
||||||
* then be or'd in.
|
* then be or'd in.
|
||||||
*/
|
*/
|
||||||
@ -1176,12 +1176,12 @@
|
|||||||
+ struct ieee80211_frame *wh;
|
+ struct ieee80211_frame *wh;
|
||||||
+ int len = sizeof(struct ieee80211_frame);
|
+ int len = sizeof(struct ieee80211_frame);
|
||||||
+ int opmode = vap->iv_opmode;
|
+ int opmode = vap->iv_opmode;
|
||||||
|
+
|
||||||
+ if ((type & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_DATA) {
|
+ if ((type & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_DATA) {
|
||||||
+ if ((opmode == IEEE80211_M_STA) &&
|
+ if ((opmode == IEEE80211_M_STA) &&
|
||||||
+ (vap->iv_flags_ext & IEEE80211_FEXT_WDS))
|
+ (vap->iv_flags_ext & IEEE80211_FEXT_WDS))
|
||||||
+ opmode = IEEE80211_M_WDS;
|
+ opmode = IEEE80211_M_WDS;
|
||||||
+
|
|
||||||
+ if (opmode == IEEE80211_M_WDS)
|
+ if (opmode == IEEE80211_M_WDS)
|
||||||
+ len = sizeof(struct ieee80211_frame_addr4);
|
+ len = sizeof(struct ieee80211_frame_addr4);
|
||||||
+ }
|
+ }
|
||||||
@ -1482,7 +1482,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_stop_running);
|
EXPORT_SYMBOL(ieee80211_stop_running);
|
||||||
@@ -1342,9 +1398,9 @@ ieee80211_new_state(struct ieee80211vap
|
@@ -1342,9 +1398,9 @@ ieee80211_new_state(struct ieee80211vap
|
||||||
struct ieee80211com *ic = vap->iv_ic;
|
struct ieee80211com *ic = vap->iv_ic;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
vap->iv_devstats.tx_dropped++;
|
vap->iv_devstats.tx_dropped++;
|
||||||
--- a/net80211/ieee80211_output.c
|
--- a/net80211/ieee80211_output.c
|
||||||
+++ b/net80211/ieee80211_output.c
|
+++ b/net80211/ieee80211_output.c
|
||||||
@@ -324,9 +324,10 @@ void ieee80211_parent_queue_xmit(struct
|
@@ -324,9 +324,10 @@ void ieee80211_parent_queue_xmit(struct
|
||||||
/* Dispatch the packet to the parent device */
|
/* Dispatch the packet to the parent device */
|
||||||
skb->dev = vap->iv_ic->ic_dev;
|
skb->dev = vap->iv_ic->ic_dev;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -5486,6 +5486,9 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5486,6 +5486,9 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
ath_beacon_dturbo_config(vap, intval &
|
ath_beacon_dturbo_config(vap, intval &
|
||||||
~(HAL_BEACON_RESET_TSF | HAL_BEACON_ENA));
|
~(HAL_BEACON_RESET_TSF | HAL_BEACON_ENA));
|
||||||
#endif
|
#endif
|
||||||
|
@ -81,7 +81,7 @@
|
|||||||
/*
|
/*
|
||||||
* Reset the hardware w/o losing operational state. This is
|
* Reset the hardware w/o losing operational state. This is
|
||||||
* basically a more efficient way of doing ath_stop, ath_init,
|
* basically a more efficient way of doing ath_stop, ath_init,
|
||||||
@@ -5294,6 +5361,7 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5294,6 +5361,7 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
u_int64_t tsf, hw_tsf;
|
u_int64_t tsf, hw_tsf;
|
||||||
u_int32_t tsftu, hw_tsftu;
|
u_int32_t tsftu, hw_tsftu;
|
||||||
u_int32_t intval, nexttbtt = 0;
|
u_int32_t intval, nexttbtt = 0;
|
||||||
@ -89,7 +89,7 @@
|
|||||||
int reset_tsf = 0;
|
int reset_tsf = 0;
|
||||||
|
|
||||||
if (vap == NULL)
|
if (vap == NULL)
|
||||||
@@ -5301,6 +5369,9 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5301,6 +5369,9 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
|
|
||||||
ni = vap->iv_bss;
|
ni = vap->iv_bss;
|
||||||
|
|
||||||
@ -99,7 +99,7 @@
|
|||||||
hw_tsf = ath_hal_gettsf64(ah);
|
hw_tsf = ath_hal_gettsf64(ah);
|
||||||
tsf = le64_to_cpu(ni->ni_tstamp.tsf);
|
tsf = le64_to_cpu(ni->ni_tstamp.tsf);
|
||||||
hw_tsftu = hw_tsf >> 10;
|
hw_tsftu = hw_tsf >> 10;
|
||||||
@@ -5490,15 +5561,27 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5490,15 +5561,27 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
<= ath_hal_sw_beacon_response_time)
|
<= ath_hal_sw_beacon_response_time)
|
||||||
nexttbtt += intval;
|
nexttbtt += intval;
|
||||||
sc->sc_nexttbtt = nexttbtt;
|
sc->sc_nexttbtt = nexttbtt;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -3529,6 +3529,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3529,6 +3529,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
if (ic->ic_flags & IEEE80211_F_SCAN) {
|
if (ic->ic_flags & IEEE80211_F_SCAN) {
|
||||||
ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
|
ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
|
||||||
}
|
}
|
||||||
|
@ -173,7 +173,7 @@
|
|||||||
|
|
||||||
_MOD_INC_USE(THIS_MODULE, return NULL);
|
_MOD_INC_USE(THIS_MODULE, return NULL);
|
||||||
osc = kmalloc(sizeof(struct minstrel_softc), GFP_ATOMIC);
|
osc = kmalloc(sizeof(struct minstrel_softc), GFP_ATOMIC);
|
||||||
@@ -963,7 +949,7 @@ ath_proc_read_nodes(struct ieee80211vap
|
@@ -963,7 +949,7 @@ ath_proc_read_nodes(struct ieee80211vap
|
||||||
p += sprintf(p, "out of room for node " MAC_FMT "\n\n", MAC_ADDR(ni->ni_macaddr));
|
p += sprintf(p, "out of room for node " MAC_FMT "\n\n", MAC_ADDR(ni->ni_macaddr));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net80211/ieee80211_node.c
|
--- a/net80211/ieee80211_node.c
|
||||||
+++ b/net80211/ieee80211_node.c
|
+++ b/net80211/ieee80211_node.c
|
||||||
@@ -427,8 +427,8 @@ ieee80211_reset_bss(struct ieee80211vap
|
@@ -427,8 +427,8 @@ ieee80211_reset_bss(struct ieee80211vap
|
||||||
__func__, ni, MAC_ADDR(vap->iv_myaddr));
|
__func__, ni, MAC_ADDR(vap->iv_myaddr));
|
||||||
KASSERT(ni != NULL, ("unable to setup inital BSS node"));
|
KASSERT(ni != NULL, ("unable to setup inital BSS node"));
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -1260,7 +1260,10 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1260,7 +1260,10 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
case IEEE80211_M_IBSS:
|
case IEEE80211_M_IBSS:
|
||||||
if ((sc->sc_nvaps != 0) && (ic->ic_opmode == IEEE80211_M_STA))
|
if ((sc->sc_nvaps != 0) && (ic->ic_opmode == IEEE80211_M_STA))
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -12,7 +12,7 @@
|
|||||||
break;
|
break;
|
||||||
case IEEE80211_M_AHDEMO:
|
case IEEE80211_M_AHDEMO:
|
||||||
case IEEE80211_M_MONITOR:
|
case IEEE80211_M_MONITOR:
|
||||||
@@ -1455,7 +1458,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1455,7 +1458,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
* frames. Other modes carry over directly to the HAL.
|
* frames. Other modes carry over directly to the HAL.
|
||||||
*/
|
*/
|
||||||
if (ic->ic_opmode == IEEE80211_M_AHDEMO)
|
if (ic->ic_opmode == IEEE80211_M_AHDEMO)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -1452,6 +1452,23 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1452,6 +1452,23 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
sc->sc_nstavaps++;
|
sc->sc_nstavaps++;
|
||||||
else if (opmode == IEEE80211_M_MONITOR)
|
else if (opmode == IEEE80211_M_MONITOR)
|
||||||
sc->sc_nmonvaps++;
|
sc->sc_nmonvaps++;
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
/* Allocate space for dynamically determined maximum VAP count */
|
/* Allocate space for dynamically determined maximum VAP count */
|
||||||
sc->sc_bslot =
|
sc->sc_bslot =
|
||||||
kmalloc(ath_maxvaps * sizeof(struct ieee80211vap*), GFP_KERNEL);
|
kmalloc(ath_maxvaps * sizeof(struct ieee80211vap*), GFP_KERNEL);
|
||||||
@@ -1508,6 +1520,29 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1508,6 +1520,29 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
return vap;
|
return vap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +226,7 @@
|
|||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
@@ -181,12 +182,32 @@ exit_ath_wmac(u_int16_t wlanNum, struct
|
@@ -181,12 +182,32 @@ exit_ath_wmac(u_int16_t wlanNum, struct
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -6669,6 +6669,7 @@ ath_setdefantenna(struct ath_softc *sc,
|
@@ -6669,6 +6669,7 @@ ath_setdefantenna(struct ath_softc *sc,
|
||||||
struct ath_hal *ah = sc->sc_ah;
|
struct ath_hal *ah = sc->sc_ah;
|
||||||
|
|
||||||
/* XXX block beacon interrupts */
|
/* XXX block beacon interrupts */
|
||||||
|
@ -37,7 +37,7 @@ Signed-off-by: Sebastian Gottschall <brainslayer@dd-wrt.com>
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,11 +183,11 @@ acl_add(struct ieee80211vap *vap, const
|
@@ -176,11 +183,11 @@ acl_add(struct ieee80211vap *vap, const
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ Signed-off-by: Sebastian Gottschall <brainslayer@dd-wrt.com>
|
|||||||
FREE(new, M_80211_ACL);
|
FREE(new, M_80211_ACL);
|
||||||
IEEE80211_DPRINTF(vap, IEEE80211_MSG_ACL,
|
IEEE80211_DPRINTF(vap, IEEE80211_MSG_ACL,
|
||||||
"ACL: add " MAC_FMT " failed, already present\n",
|
"ACL: add " MAC_FMT " failed, already present\n",
|
||||||
@@ -191,7 +198,7 @@ acl_add(struct ieee80211vap *vap, const
|
@@ -191,7 +198,7 @@ acl_add(struct ieee80211vap *vap, const
|
||||||
IEEE80211_ADDR_COPY(new->acl_macaddr, mac);
|
IEEE80211_ADDR_COPY(new->acl_macaddr, mac);
|
||||||
TAILQ_INSERT_TAIL(&as->as_list, new, acl_list);
|
TAILQ_INSERT_TAIL(&as->as_list, new, acl_list);
|
||||||
LIST_INSERT_HEAD(&as->as_hash[hash], new, acl_hash);
|
LIST_INSERT_HEAD(&as->as_hash[hash], new, acl_hash);
|
||||||
|
@ -56,14 +56,14 @@
|
|||||||
/*
|
/*
|
||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -4020,7 +4020,26 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -4020,7 +4020,26 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
vap->iv_stats.is_rx_assoc_norate++;
|
vap->iv_stats.is_rx_assoc_norate++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
+ if (vap->iv_max_nodes > 0) {
|
+ if (vap->iv_max_nodes > 0) {
|
||||||
+ unsigned int active_nodes = 0;
|
+ unsigned int active_nodes = 0;
|
||||||
+ struct ieee80211_node *tni;
|
+ struct ieee80211_node *tni;
|
||||||
+
|
|
||||||
+ IEEE80211_NODE_TABLE_LOCK_IRQ(&ic->ic_sta);
|
+ IEEE80211_NODE_TABLE_LOCK_IRQ(&ic->ic_sta);
|
||||||
+ TAILQ_FOREACH(tni, &ic->ic_sta.nt_node, ni_list) {
|
+ TAILQ_FOREACH(tni, &ic->ic_sta.nt_node, ni_list) {
|
||||||
+ if (tni->ni_vap != vap)
|
+ if (tni->ni_vap != vap)
|
||||||
@ -73,7 +73,7 @@
|
|||||||
+ active_nodes++;
|
+ active_nodes++;
|
||||||
+ }
|
+ }
|
||||||
+ IEEE80211_NODE_TABLE_UNLOCK_IRQ(&ic->ic_sta);
|
+ IEEE80211_NODE_TABLE_UNLOCK_IRQ(&ic->ic_sta);
|
||||||
|
+
|
||||||
+ if (active_nodes >= vap->iv_max_nodes) {
|
+ if (active_nodes >= vap->iv_max_nodes) {
|
||||||
+ /* too many nodes connected */
|
+ /* too many nodes connected */
|
||||||
+ ieee80211_node_leave(ni);
|
+ ieee80211_node_leave(ni);
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
sc->sc_curchan.channel = ic->ic_curchan->ic_freq;
|
sc->sc_curchan.channel = ic->ic_curchan->ic_freq;
|
||||||
sc->sc_curchan.channelFlags = ath_chan2flags(ic->ic_curchan);
|
sc->sc_curchan.channelFlags = ath_chan2flags(ic->ic_curchan);
|
||||||
if (!ath_hal_reset(ah, sc->sc_opmode, &sc->sc_curchan, AH_FALSE, &status)) {
|
if (!ath_hal_reset(ah, sc->sc_opmode, &sc->sc_curchan, AH_FALSE, &status)) {
|
||||||
@@ -2914,6 +2916,48 @@ ath_hw_check_atim(struct ath_softc *sc,
|
@@ -2914,6 +2916,48 @@ ath_hw_check_atim(struct ath_softc *sc,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +118,7 @@
|
|||||||
#define IEEE80211_CHAN_MAX 255
|
#define IEEE80211_CHAN_MAX 255
|
||||||
--- a/net80211/ieee80211_scan_ap.c
|
--- a/net80211/ieee80211_scan_ap.c
|
||||||
+++ b/net80211/ieee80211_scan_ap.c
|
+++ b/net80211/ieee80211_scan_ap.c
|
||||||
@@ -417,6 +417,19 @@ pc_cmp_rssi(struct ap_state *as, struct
|
@@ -417,6 +417,19 @@ pc_cmp_rssi(struct ap_state *as, struct
|
||||||
|
|
||||||
/* This function must be invoked with locks acquired */
|
/* This function must be invoked with locks acquired */
|
||||||
static int
|
static int
|
||||||
@ -196,7 +196,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (best != NULL) {
|
if (best != NULL) {
|
||||||
@@ -599,6 +583,9 @@ ap_end(struct ieee80211_scan_state *ss,
|
@@ -599,6 +583,9 @@ ap_end(struct ieee80211_scan_state *ss,
|
||||||
("wrong opmode %u", vap->iv_opmode));
|
("wrong opmode %u", vap->iv_opmode));
|
||||||
|
|
||||||
ic = vap->iv_ic;
|
ic = vap->iv_ic;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -4443,7 +4443,9 @@ ath_eth_type_trans(struct sk_buff *skb,
|
@@ -4443,7 +4443,9 @@ ath_eth_type_trans(struct sk_buff *skb,
|
||||||
if (memcmp(eth->h_dest, dev->dev_addr, ETH_ALEN))
|
if (memcmp(eth->h_dest, dev->dev_addr, ETH_ALEN))
|
||||||
skb->pkt_type = PACKET_OTHERHOST;
|
skb->pkt_type = PACKET_OTHERHOST;
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@
|
|||||||
if (TAILQ_NEXT(vap, iv_next) != NULL) {
|
if (TAILQ_NEXT(vap, iv_next) != NULL) {
|
||||||
skb1 = skb_copy(skb, GFP_ATOMIC);
|
skb1 = skb_copy(skb, GFP_ATOMIC);
|
||||||
if (skb1 == NULL) {
|
if (skb1 == NULL) {
|
||||||
@@ -950,8 +957,12 @@ ieee80211_input_all(struct ieee80211com
|
@@ -950,8 +957,12 @@ ieee80211_input_all(struct ieee80211com
|
||||||
skb1 = skb;
|
skb1 = skb;
|
||||||
skb = NULL;
|
skb = NULL;
|
||||||
}
|
}
|
||||||
@ -319,7 +319,7 @@
|
|||||||
!ni1->ni_subif &&
|
!ni1->ni_subif &&
|
||||||
ni1 != vap->iv_bss) {
|
ni1 != vap->iv_bss) {
|
||||||
|
|
||||||
@@ -3520,6 +3529,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3520,6 +3529,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
(vap->iv_opmode == IEEE80211_M_WDS)) &&
|
(vap->iv_opmode == IEEE80211_M_WDS)) &&
|
||||||
(scan.capinfo & IEEE80211_CAPINFO_ESS))) {
|
(scan.capinfo & IEEE80211_CAPINFO_ESS))) {
|
||||||
struct ieee80211vap *avp = NULL;
|
struct ieee80211vap *avp = NULL;
|
||||||
@ -327,7 +327,7 @@
|
|||||||
int found = 0;
|
int found = 0;
|
||||||
|
|
||||||
IEEE80211_LOCK_IRQ(vap->iv_ic);
|
IEEE80211_LOCK_IRQ(vap->iv_ic);
|
||||||
@@ -3553,10 +3563,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3553,10 +3563,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
ni->ni_associd |= 0xc000;
|
ni->ni_associd |= 0xc000;
|
||||||
avp->iv_wdsnode = ieee80211_ref_node(ni);
|
avp->iv_wdsnode = ieee80211_ref_node(ni);
|
||||||
IEEE80211_UNLOCK_IRQ(ic);
|
IEEE80211_UNLOCK_IRQ(ic);
|
||||||
@ -341,7 +341,7 @@
|
|||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Copy data from beacon to neighbor table.
|
* Copy data from beacon to neighbor table.
|
||||||
@@ -3595,6 +3607,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3595,6 +3607,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
ni->ni_rssi = rssi;
|
ni->ni_rssi = rssi;
|
||||||
ni->ni_rtsf = rtsf;
|
ni->ni_rtsf = rtsf;
|
||||||
ni->ni_last_rx = jiffies;
|
ni->ni_last_rx = jiffies;
|
||||||
@ -363,7 +363,7 @@
|
|||||||
(const struct ieee80211_frame_min *)skb->data);
|
(const struct ieee80211_frame_min *)skb->data);
|
||||||
if (ni == NULL) {
|
if (ni == NULL) {
|
||||||
DPRINTF(sc, ATH_DEBUG_BEACON, "Dropping; node unknown.\n");
|
DPRINTF(sc, ATH_DEBUG_BEACON, "Dropping; node unknown.\n");
|
||||||
@@ -6746,7 +6745,9 @@ ath_rx_poll(struct net_device *dev, int
|
@@ -6746,7 +6745,9 @@ ath_rx_poll(struct net_device *dev, int
|
||||||
struct ath_desc *ds;
|
struct ath_desc *ds;
|
||||||
struct ath_rx_status *rs;
|
struct ath_rx_status *rs;
|
||||||
struct sk_buff *skb = NULL;
|
struct sk_buff *skb = NULL;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net80211/ieee80211_input.c
|
--- a/net80211/ieee80211_input.c
|
||||||
+++ b/net80211/ieee80211_input.c
|
+++ b/net80211/ieee80211_input.c
|
||||||
@@ -3621,6 +3621,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3621,6 +3621,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
vap->iv_stats.is_rx_mgtdiscard++;
|
vap->iv_stats.is_rx_mgtdiscard++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -6734,10 +6734,10 @@ ath_rx_poll(struct net_device *dev, int
|
@@ -6734,10 +6734,10 @@ ath_rx_poll(struct net_device *dev, int
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
|
||||||
struct ath_softc *sc = container_of(napi, struct ath_softc, sc_napi);
|
struct ath_softc *sc = container_of(napi, struct ath_softc, sc_napi);
|
||||||
struct net_device *dev = sc->sc_dev;
|
struct net_device *dev = sc->sc_dev;
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
/*
|
/*
|
||||||
* Check if the MAC has multi-rate retry support.
|
* Check if the MAC has multi-rate retry support.
|
||||||
* We do this by trying to setup a fake extended
|
* We do this by trying to setup a fake extended
|
||||||
@@ -7568,7 +7576,7 @@ ath_txq_setup(struct ath_softc *sc, int
|
@@ -7568,7 +7576,7 @@ ath_txq_setup(struct ath_softc *sc, int
|
||||||
if (qtype == HAL_TX_QUEUE_UAPSD)
|
if (qtype == HAL_TX_QUEUE_UAPSD)
|
||||||
qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
|
qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
|
||||||
else
|
else
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
Please let us know if you think your name should be mentioned here!
|
Please let us know if you think your name should be mentioned here!
|
||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -3147,7 +3147,7 @@ ath_tx_startraw(struct net_device *dev,
|
@@ -3147,7 +3147,7 @@ ath_tx_startraw(struct net_device *dev,
|
||||||
struct ath_softc *sc = dev->priv;
|
struct ath_softc *sc = dev->priv;
|
||||||
struct ath_hal *ah = sc->sc_ah;
|
struct ath_hal *ah = sc->sc_ah;
|
||||||
struct ieee80211_phy_params *ph = (struct ieee80211_phy_params *)
|
struct ieee80211_phy_params *ph = (struct ieee80211_phy_params *)
|
||||||
|
@ -307,7 +307,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -575,6 +583,7 @@ ap_end(struct ieee80211_scan_state *ss,
|
@@ -575,6 +583,7 @@ ap_end(struct ieee80211_scan_state *ss,
|
||||||
struct ap_state *as = ss->ss_priv;
|
struct ap_state *as = ss->ss_priv;
|
||||||
struct ieee80211_channel *bestchan = NULL;
|
struct ieee80211_channel *bestchan = NULL;
|
||||||
struct ieee80211com *ic = NULL;
|
struct ieee80211com *ic = NULL;
|
||||||
@ -315,7 +315,7 @@
|
|||||||
int res = 1;
|
int res = 1;
|
||||||
|
|
||||||
SCAN_AP_LOCK_IRQ(as);
|
SCAN_AP_LOCK_IRQ(as);
|
||||||
@@ -586,8 +595,11 @@ ap_end(struct ieee80211_scan_state *ss,
|
@@ -586,8 +595,11 @@ ap_end(struct ieee80211_scan_state *ss,
|
||||||
|
|
||||||
/* record stats for the channel that was scanned last */
|
/* record stats for the channel that was scanned last */
|
||||||
ic->ic_set_channel(ic);
|
ic->ic_set_channel(ic);
|
||||||
@ -327,7 +327,7 @@
|
|||||||
if (ss->ss_last > 0) {
|
if (ss->ss_last > 0) {
|
||||||
/* no suitable channel, should not happen */
|
/* no suitable channel, should not happen */
|
||||||
printk(KERN_ERR "%s: %s: no suitable channel! "
|
printk(KERN_ERR "%s: %s: no suitable channel! "
|
||||||
@@ -606,6 +618,7 @@ ap_end(struct ieee80211_scan_state *ss,
|
@@ -606,6 +618,7 @@ ap_end(struct ieee80211_scan_state *ss,
|
||||||
bestchan->ic_freq, bestchan->ic_flags &
|
bestchan->ic_freq, bestchan->ic_flags &
|
||||||
~IEEE80211_CHAN_TURBO)) == NULL) {
|
~IEEE80211_CHAN_TURBO)) == NULL) {
|
||||||
/* should never happen ?? */
|
/* should never happen ?? */
|
||||||
@ -335,7 +335,7 @@
|
|||||||
SCAN_AP_UNLOCK_IRQ_EARLY(as);
|
SCAN_AP_UNLOCK_IRQ_EARLY(as);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -618,6 +631,9 @@ ap_end(struct ieee80211_scan_state *ss,
|
@@ -618,6 +631,9 @@ ap_end(struct ieee80211_scan_state *ss,
|
||||||
as->as_action = action;
|
as->as_action = action;
|
||||||
as->as_selbss = se;
|
as->as_selbss = se;
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@
|
|||||||
|
|
||||||
static void ath_poll_disable(struct net_device *dev);
|
static void ath_poll_disable(struct net_device *dev);
|
||||||
static void ath_poll_enable(struct net_device *dev);
|
static void ath_poll_enable(struct net_device *dev);
|
||||||
@@ -3168,7 +3167,7 @@ ath_tx_startraw(struct net_device *dev,
|
@@ -3168,7 +3167,7 @@ ath_tx_startraw(struct net_device *dev,
|
||||||
try0 = ph->try0;
|
try0 = ph->try0;
|
||||||
rt = sc->sc_currates;
|
rt = sc->sc_currates;
|
||||||
txrate = dot11_to_ratecode(sc, rt, ph->rate0);
|
txrate = dot11_to_ratecode(sc, rt, ph->rate0);
|
||||||
|
@ -444,7 +444,7 @@
|
|||||||
static int beacon_cal = 1;
|
static int beacon_cal = 1;
|
||||||
|
|
||||||
static const struct ath_hw_detect generic_hw_info = {
|
static const struct ath_hw_detect generic_hw_info = {
|
||||||
@@ -1525,6 +1526,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1525,6 +1526,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
ath_hal_intrset(ah, sc->sc_imask);
|
ath_hal_intrset(ah, sc->sc_imask);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,7 +509,7 @@
|
|||||||
if (bf->bf_skb->priority == WME_AC_VO ||
|
if (bf->bf_skb->priority == WME_AC_VO ||
|
||||||
bf->bf_skb->priority == WME_AC_VI)
|
bf->bf_skb->priority == WME_AC_VI)
|
||||||
ni->ni_ic->ic_wme.wme_hipri_traffic++;
|
ni->ni_ic->ic_wme.wme_hipri_traffic++;
|
||||||
@@ -10111,6 +10124,7 @@ ath_newassoc(struct ieee80211_node *ni,
|
@@ -10111,6 +10124,7 @@ ath_newassoc(struct ieee80211_node *ni,
|
||||||
struct ath_softc *sc = ic->ic_dev->priv;
|
struct ath_softc *sc = ic->ic_dev->priv;
|
||||||
|
|
||||||
sc->sc_rc->ops->newassoc(sc, ATH_NODE(ni), isnew);
|
sc->sc_rc->ops->newassoc(sc, ATH_NODE(ni), isnew);
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
if (bfaddr != 0) {
|
if (bfaddr != 0) {
|
||||||
/*
|
/*
|
||||||
* Stop any current DMA and put the new frame(s) on the queue.
|
* Stop any current DMA and put the new frame(s) on the queue.
|
||||||
@@ -6734,9 +6708,8 @@ ath_setdefantenna(struct ath_softc *sc,
|
@@ -6734,9 +6708,8 @@ ath_setdefantenna(struct ath_softc *sc,
|
||||||
{
|
{
|
||||||
struct ath_hal *ah = sc->sc_ah;
|
struct ath_hal *ah = sc->sc_ah;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
static void ath_updateslot(struct net_device *);
|
static void ath_updateslot(struct net_device *);
|
||||||
static int ath_beaconq_setup(struct ath_softc *);
|
static int ath_beaconq_setup(struct ath_softc *);
|
||||||
static int ath_beacon_alloc(struct ath_softc *, struct ieee80211_node *);
|
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_stationwepkey(struct ieee80211_node *);
|
||||||
static void ath_setup_keycacheslot(struct ath_softc *, 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_newassoc(struct ieee80211_node *, int);
|
||||||
@ -263,7 +263,7 @@
|
|||||||
|
|
||||||
ath_rate_setup(dev, mode);
|
ath_rate_setup(dev, mode);
|
||||||
ath_setcurmode(sc, mode);
|
ath_setcurmode(sc, mode);
|
||||||
@@ -10124,8 +10142,7 @@ ath_newassoc(struct ieee80211_node *ni,
|
@@ -10124,8 +10142,7 @@ ath_newassoc(struct ieee80211_node *ni,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -273,7 +273,7 @@
|
|||||||
{
|
{
|
||||||
struct ath_softc *sc = dev->priv;
|
struct ath_softc *sc = dev->priv;
|
||||||
struct ieee80211com *ic = &sc->sc_ic;
|
struct ieee80211com *ic = &sc->sc_ic;
|
||||||
@@ -10139,17 +10156,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");
|
EPRINTF(sc, "Insufficient memory for channel table!\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
@ -674,7 +674,7 @@
|
|||||||
.procname = "rp",
|
.procname = "rp",
|
||||||
.mode = 0200,
|
.mode = 0200,
|
||||||
.proc_handler = ath_sysctl_halparam,
|
.proc_handler = ath_sysctl_halparam,
|
||||||
@@ -11669,13 +11801,6 @@ static ctl_table ath_static_sysctls[] =
|
@@ -11669,13 +11801,6 @@ static ctl_table ath_static_sysctls[] =
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
{ .ctl_name = CTL_AUTO,
|
{ .ctl_name = CTL_AUTO,
|
||||||
@ -688,7 +688,7 @@
|
|||||||
.procname = "maxvaps",
|
.procname = "maxvaps",
|
||||||
.mode = 0444,
|
.mode = 0444,
|
||||||
.data = &ath_maxvaps,
|
.data = &ath_maxvaps,
|
||||||
@@ -11683,13 +11808,6 @@ static ctl_table ath_static_sysctls[] =
|
@@ -11683,13 +11808,6 @@ static ctl_table ath_static_sysctls[] =
|
||||||
.proc_handler = proc_dointvec
|
.proc_handler = proc_dointvec
|
||||||
},
|
},
|
||||||
{ .ctl_name = CTL_AUTO,
|
{ .ctl_name = CTL_AUTO,
|
||||||
@ -1109,7 +1109,7 @@
|
|||||||
nrs = &ni->ni_rates;
|
nrs = &ni->ni_rates;
|
||||||
fixedrate = IEEE80211_FIXED_RATE_NONE;
|
fixedrate = IEEE80211_FIXED_RATE_NONE;
|
||||||
for (i = 0; i < nrs->rs_nrates;) {
|
for (i = 0; i < nrs->rs_nrates;) {
|
||||||
@@ -1407,6 +1407,7 @@ ieee80211_new_state(struct ieee80211vap
|
@@ -1407,6 +1407,7 @@ ieee80211_new_state(struct ieee80211vap
|
||||||
IEEE80211_VAPS_UNLOCK_IRQ(ic);
|
IEEE80211_VAPS_UNLOCK_IRQ(ic);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -1294,7 +1294,7 @@
|
|||||||
return best;
|
return best;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -609,6 +611,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 */
|
res = 1; /* Do NOT restart scan */
|
||||||
} else {
|
} else {
|
||||||
struct ieee80211_scan_entry se;
|
struct ieee80211_scan_entry se;
|
||||||
@ -1302,7 +1302,7 @@
|
|||||||
/* XXX: notify all VAPs? */
|
/* XXX: notify all VAPs? */
|
||||||
/* if this is a dynamic turbo frequency , start with normal
|
/* if this is a dynamic turbo frequency , start with normal
|
||||||
* mode first */
|
* mode first */
|
||||||
@@ -623,6 +626,11 @@ ap_end(struct ieee80211_scan_state *ss,
|
@@ -623,6 +626,11 @@ ap_end(struct ieee80211_scan_state *ss,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -196,10 +196,12 @@
|
|||||||
static inline void ath_hal_beaconinit(struct ath_hal *ah, u_int32_t nexttbtt,
|
static inline void ath_hal_beaconinit(struct ath_hal *ah, u_int32_t nexttbtt,
|
||||||
u_int32_t intval)
|
u_int32_t intval)
|
||||||
{
|
{
|
||||||
@@ -841,6 +852,17 @@ static inline HAL_BOOL ath_hal_setslotti
|
@@ -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;
|
return ret;
|
||||||
}
|
+}
|
||||||
|
+
|
||||||
+static inline HAL_BOOL ath_hal_seteifstime(struct ath_hal *ah, u_int a1)
|
+static inline HAL_BOOL ath_hal_seteifstime(struct ath_hal *ah, u_int a1)
|
||||||
+{
|
+{
|
||||||
+ HAL_BOOL ret;
|
+ HAL_BOOL ret;
|
||||||
@ -209,11 +211,9 @@
|
|||||||
+ ath_hal_set_function(NULL);
|
+ ath_hal_set_function(NULL);
|
||||||
+ ATH_HAL_UNLOCK_IRQ(ah->ah_sc);
|
+ ATH_HAL_UNLOCK_IRQ(ah->ah_sc);
|
||||||
+ return ret;
|
+ return ret;
|
||||||
+}
|
}
|
||||||
+
|
|
||||||
static inline void ath_hal_setledstate(struct ath_hal *ah, HAL_LED_STATE a1)
|
static inline void ath_hal_setledstate(struct ath_hal *ah, HAL_LED_STATE a1)
|
||||||
{
|
|
||||||
ATH_HAL_LOCK_IRQ(ah->ah_sc);
|
|
||||||
--- a/ath/if_athvar.h
|
--- a/ath/if_athvar.h
|
||||||
+++ b/ath/if_athvar.h
|
+++ b/ath/if_athvar.h
|
||||||
@@ -613,6 +613,15 @@ struct ath_rp {
|
@@ -613,6 +613,15 @@ struct ath_rp {
|
||||||
@ -446,7 +446,7 @@
|
|||||||
{
|
{
|
||||||
--- a/ath_rate/sample/sample.c
|
--- a/ath_rate/sample/sample.c
|
||||||
+++ b/ath_rate/sample/sample.c
|
+++ b/ath_rate/sample/sample.c
|
||||||
@@ -137,92 +137,6 @@ rate_to_ndx(struct sample_node *sn, int
|
@@ -137,92 +137,6 @@ rate_to_ndx(struct sample_node *sn, int
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,7 +303,7 @@
|
|||||||
/* don't use a bit-rate that has been failing */
|
/* don't use a bit-rate that has been failing */
|
||||||
if (sn->stats[size_bin][x].successive_failures > 3)
|
if (sn->stats[size_bin][x].successive_failures > 3)
|
||||||
continue;
|
continue;
|
||||||
@@ -234,10 +230,6 @@ pick_sample_ndx(struct sample_node *sn,
|
@@ -234,10 +230,6 @@ pick_sample_ndx(struct sample_node *sn,
|
||||||
if (sn->rates[ndx].rate > 22 && ndx > current_ndx + 2)
|
if (sn->rates[ndx].rate > 22 && ndx > current_ndx + 2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@
|
|||||||
struct ath_hal *ah = sc->sc_ah;
|
struct ath_hal *ah = sc->sc_ah;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
struct ath_vap *avp;
|
struct ath_vap *avp;
|
||||||
@@ -1344,7 +1344,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1344,7 +1344,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +175,7 @@
|
|||||||
struct ieee80211com *ic = &sc->sc_ic;
|
struct ieee80211com *ic = &sc->sc_ic;
|
||||||
struct ath_hal *ah = sc->sc_ah;
|
struct ath_hal *ah = sc->sc_ah;
|
||||||
struct ieee80211_channel *c;
|
struct ieee80211_channel *c;
|
||||||
@@ -3164,7 +3164,7 @@ dot11_to_ratecode(struct ath_softc *sc,
|
@@ -3164,7 +3164,7 @@ dot11_to_ratecode(struct ath_softc *sc,
|
||||||
static int
|
static int
|
||||||
ath_tx_startraw(struct net_device *dev, struct ath_buf *bf, struct sk_buff *skb)
|
ath_tx_startraw(struct net_device *dev, struct ath_buf *bf, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
@ -372,7 +372,7 @@
|
|||||||
#ifdef AR_DEBUG
|
#ifdef AR_DEBUG
|
||||||
struct ieee80211_frame *wh = (struct ieee80211_frame *)skb->data;
|
struct ieee80211_frame *wh = (struct ieee80211_frame *)skb->data;
|
||||||
#endif
|
#endif
|
||||||
@@ -6780,7 +6780,7 @@ ath_rx_poll(struct net_device *dev, int
|
@@ -6780,7 +6780,7 @@ ath_rx_poll(struct net_device *dev, int
|
||||||
struct net_device *dev = sc->sc_dev;
|
struct net_device *dev = sc->sc_dev;
|
||||||
int rx_limit = budget;
|
int rx_limit = budget;
|
||||||
#else
|
#else
|
||||||
@ -543,7 +543,7 @@
|
|||||||
ieee80211_keyix_t keyix;
|
ieee80211_keyix_t keyix;
|
||||||
|
|
||||||
keyix = ath_key_alloc(vap, &ni->ni_ucastkey);
|
keyix = ath_key_alloc(vap, &ni->ni_ucastkey);
|
||||||
@@ -10177,7 +10177,7 @@ ath_newassoc(struct ieee80211_node *ni,
|
@@ -10177,7 +10177,7 @@ ath_newassoc(struct ieee80211_node *ni,
|
||||||
{
|
{
|
||||||
struct ieee80211com *ic = ni->ni_ic;
|
struct ieee80211com *ic = ni->ni_ic;
|
||||||
struct ieee80211vap *vap = ni->ni_vap;
|
struct ieee80211vap *vap = ni->ni_vap;
|
||||||
@ -552,7 +552,7 @@
|
|||||||
|
|
||||||
sc->sc_rc->ops->newassoc(sc, ATH_NODE(ni), isnew);
|
sc->sc_rc->ops->newassoc(sc, ATH_NODE(ni), isnew);
|
||||||
ath_wprobe_node_join(ni->ni_vap, ni);
|
ath_wprobe_node_join(ni->ni_vap, ni);
|
||||||
@@ -10208,7 +10208,7 @@ ath_newassoc(struct ieee80211_node *ni,
|
@@ -10208,7 +10208,7 @@ ath_newassoc(struct ieee80211_node *ni,
|
||||||
static int
|
static int
|
||||||
ath_getchannels(struct net_device *dev)
|
ath_getchannels(struct net_device *dev)
|
||||||
{
|
{
|
||||||
@ -723,7 +723,7 @@
|
|||||||
if (sc->sc_txcont_rate != new_rate) {
|
if (sc->sc_txcont_rate != new_rate) {
|
||||||
/* NOTE: This value is sanity checked and dropped down to
|
/* NOTE: This value is sanity checked and dropped down to
|
||||||
* closest rate in txcont_on. */
|
* closest rate in txcont_on. */
|
||||||
@@ -12539,7 +12539,7 @@ ath_set_txcont_rate(struct ieee80211com
|
@@ -12539,7 +12539,7 @@ ath_set_txcont_rate(struct ieee80211com
|
||||||
ath_get_txcont_rate(struct ieee80211com *ic)
|
ath_get_txcont_rate(struct ieee80211com *ic)
|
||||||
{
|
{
|
||||||
struct net_device *dev = ic->ic_dev;
|
struct net_device *dev = ic->ic_dev;
|
||||||
@ -786,7 +786,7 @@
|
|||||||
ath_hal_dump_map(sc->sc_ah);
|
ath_hal_dump_map(sc->sc_ah);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -12724,7 +12724,7 @@ ath_rcv_dev_event(struct notifier_block
|
@@ -12724,7 +12724,7 @@ ath_rcv_dev_event(struct notifier_block
|
||||||
void *ptr)
|
void *ptr)
|
||||||
{
|
{
|
||||||
struct net_device *dev = (struct net_device *)ptr;
|
struct net_device *dev = (struct net_device *)ptr;
|
||||||
@ -938,7 +938,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -822,7 +822,7 @@ ath_proc_read_nodes(struct ieee80211vap
|
@@ -822,7 +822,7 @@ ath_proc_read_nodes(struct ieee80211vap
|
||||||
unsigned int x = 0;
|
unsigned int x = 0;
|
||||||
unsigned int this_tp, this_prob, this_eprob;
|
unsigned int this_tp, this_prob, this_eprob;
|
||||||
#ifdef AR_DEBUG
|
#ifdef AR_DEBUG
|
||||||
@ -1002,7 +1002,7 @@
|
|||||||
#define skb_tail_pointer(_skb) ((_skb)->tail)
|
#define skb_tail_pointer(_skb) ((_skb)->tail)
|
||||||
--- a/net80211/ieee80211.c
|
--- a/net80211/ieee80211.c
|
||||||
+++ b/net80211/ieee80211.c
|
+++ b/net80211/ieee80211.c
|
||||||
@@ -458,7 +458,7 @@ ieee80211_vap_setup(struct ieee80211com
|
@@ -458,7 +458,7 @@ ieee80211_vap_setup(struct ieee80211com
|
||||||
#define IEEE80211_C_OPMODE \
|
#define IEEE80211_C_OPMODE \
|
||||||
(IEEE80211_C_IBSS | IEEE80211_C_HOSTAP | IEEE80211_C_AHDEMO | \
|
(IEEE80211_C_IBSS | IEEE80211_C_HOSTAP | IEEE80211_C_AHDEMO | \
|
||||||
IEEE80211_C_MONITOR)
|
IEEE80211_C_MONITOR)
|
||||||
@ -1029,7 +1029,7 @@
|
|||||||
struct ieee80211vap *vap;
|
struct ieee80211vap *vap;
|
||||||
struct ifmedia_entry *ime = ic->ic_media.ifm_cur;
|
struct ifmedia_entry *ime = ic->ic_media.ifm_cur;
|
||||||
enum ieee80211_phymode newphymode;
|
enum ieee80211_phymode newphymode;
|
||||||
@@ -1511,7 +1511,7 @@ checkrate(struct ieee80211com *ic, enum
|
@@ -1511,7 +1511,7 @@ checkrate(struct ieee80211com *ic, enum
|
||||||
int
|
int
|
||||||
ieee80211_media_change(struct net_device *dev)
|
ieee80211_media_change(struct net_device *dev)
|
||||||
{
|
{
|
||||||
@ -1552,7 +1552,7 @@
|
|||||||
struct ieee80211com *ic = vap->iv_ic;
|
struct ieee80211com *ic = vap->iv_ic;
|
||||||
params[0] = ic->ic_dump_hal_map(ic);
|
params[0] = ic->ic_dump_hal_map(ic);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1545,7 +1545,7 @@ ieee80211_ioctl_radar(struct net_device
|
@@ -1545,7 +1545,7 @@ ieee80211_ioctl_radar(struct net_device
|
||||||
void *w, char *extra)
|
void *w, char *extra)
|
||||||
{
|
{
|
||||||
int *params = (int*) extra;
|
int *params = (int*) extra;
|
||||||
@ -1633,7 +1633,7 @@
|
|||||||
struct ieee80211com *ic = vap->iv_ic;
|
struct ieee80211com *ic = vap->iv_ic;
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
char s[6]; /* big enough for ``11adt'' */
|
char s[6]; /* big enough for ``11adt'' */
|
||||||
@@ -2222,10 +2222,10 @@ ieee80211_setathcap(struct ieee80211vap
|
@@ -2222,10 +2222,10 @@ ieee80211_setathcap(struct ieee80211vap
|
||||||
static int
|
static int
|
||||||
ieee80211_set_turbo(struct net_device *dev, int flag)
|
ieee80211_set_turbo(struct net_device *dev, int flag)
|
||||||
{
|
{
|
||||||
@ -1862,7 +1862,7 @@
|
|||||||
struct ieee80211com *ic = vap->iv_ic;
|
struct ieee80211com *ic = vap->iv_ic;
|
||||||
struct ieee80211_node *ni;
|
struct ieee80211_node *ni;
|
||||||
u_int8_t macaddr[IEEE80211_ADDR_LEN];
|
u_int8_t macaddr[IEEE80211_ADDR_LEN];
|
||||||
@@ -4428,7 +4428,7 @@ get_scan_result(void *arg, const struct
|
@@ -4428,7 +4428,7 @@ get_scan_result(void *arg, const struct
|
||||||
static int
|
static int
|
||||||
ieee80211_ioctl_getscanresults(struct net_device *dev, struct iwreq *iwr)
|
ieee80211_ioctl_getscanresults(struct net_device *dev, struct iwreq *iwr)
|
||||||
{
|
{
|
||||||
|
@ -53,7 +53,7 @@ http://madwifi-project.org/changeset/4005
|
|||||||
unregister_netdev(dev);
|
unregister_netdev(dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -12732,8 +12749,13 @@ ath_rcv_dev_event(struct notifier_block
|
@@ -12732,8 +12749,13 @@ ath_rcv_dev_event(struct notifier_block
|
||||||
struct net_device *dev = (struct net_device *)ptr;
|
struct net_device *dev = (struct net_device *)ptr;
|
||||||
struct ath_softc *sc = (struct ath_softc *)netdev_priv(dev);
|
struct ath_softc *sc = (struct ath_softc *)netdev_priv(dev);
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ http://madwifi-project.org/changeset/4005
|
|||||||
int
|
int
|
||||||
ieee80211_vap_setup(struct ieee80211com *ic, struct net_device *dev,
|
ieee80211_vap_setup(struct ieee80211com *ic, struct net_device *dev,
|
||||||
const char *name, int opmode, int flags, struct ieee80211vap *master)
|
const char *name, int opmode, int flags, struct ieee80211vap *master)
|
||||||
@@ -471,16 +483,21 @@ ieee80211_vap_setup(struct ieee80211com
|
@@ -471,16 +483,21 @@ ieee80211_vap_setup(struct ieee80211com
|
||||||
} else
|
} else
|
||||||
strncpy(dev->name, name, sizeof(dev->name));
|
strncpy(dev->name, name, sizeof(dev->name));
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -3199,7 +3199,13 @@ ath_tx_startraw(struct net_device *dev,
|
@@ -3199,7 +3199,13 @@ ath_tx_startraw(struct net_device *dev,
|
||||||
struct ieee80211_frame *wh;
|
struct ieee80211_frame *wh;
|
||||||
|
|
||||||
wh = (struct ieee80211_frame *)skb->data;
|
wh = (struct ieee80211_frame *)skb->data;
|
||||||
@ -14,7 +14,7 @@
|
|||||||
rt = sc->sc_currates;
|
rt = sc->sc_currates;
|
||||||
txrate = dot11_to_ratecode(sc, rt, ph->rate0);
|
txrate = dot11_to_ratecode(sc, rt, ph->rate0);
|
||||||
power = ph->power > 63 ? 63 : ph->power;
|
power = ph->power > 63 ? 63 : ph->power;
|
||||||
@@ -3224,7 +3230,8 @@ ath_tx_startraw(struct net_device *dev,
|
@@ -3224,7 +3230,8 @@ ath_tx_startraw(struct net_device *dev,
|
||||||
rt = sc->sc_currates;
|
rt = sc->sc_currates;
|
||||||
KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode));
|
KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode));
|
||||||
|
|
||||||
|
@ -36,13 +36,13 @@
|
|||||||
struct ieee80211vap *vap = ni->ni_vap;
|
struct ieee80211vap *vap = ni->ni_vap;
|
||||||
- struct ether_header *eh = (struct ether_header *) skb->data;
|
- struct ether_header *eh = (struct ether_header *) skb->data;
|
||||||
- int v_wme_ac = 0, d_wme_ac = 0;
|
- int v_wme_ac = 0, d_wme_ac = 0;
|
||||||
-
|
|
||||||
- /* default priority */
|
- /* default priority */
|
||||||
- skb->priority = WME_AC_BE;
|
- skb->priority = WME_AC_BE;
|
||||||
-
|
-
|
||||||
- if (!(ni->ni_flags & IEEE80211_NODE_QOS))
|
- if (!(ni->ni_flags & IEEE80211_NODE_QOS))
|
||||||
- return 0;
|
- return 0;
|
||||||
|
-
|
||||||
- /*
|
- /*
|
||||||
- * If node has a vlan tag then all traffic
|
- * If node has a vlan tag then all traffic
|
||||||
- * to it must have a matching vlan id.
|
- * to it must have a matching vlan id.
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
if (dir != IEEE80211_FC1_DIR_NODS) {
|
if (dir != IEEE80211_FC1_DIR_NODS) {
|
||||||
IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
|
IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
|
||||||
wh, "data", "invalid dir 0x%x", dir);
|
wh, "data", "invalid dir 0x%x", dir);
|
||||||
@@ -3558,6 +3563,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3558,6 +3563,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
} else if ((vap->iv_opmode == IEEE80211_M_WDS) && vap->iv_wdsnode) {
|
} else if ((vap->iv_opmode == IEEE80211_M_WDS) && vap->iv_wdsnode) {
|
||||||
found = 1;
|
found = 1;
|
||||||
ni = ni_or_null = vap->iv_wdsnode;
|
ni = ni_or_null = vap->iv_wdsnode;
|
||||||
@ -56,7 +56,7 @@
|
|||||||
}
|
}
|
||||||
IEEE80211_UNLOCK_IRQ(vap->iv_ic);
|
IEEE80211_UNLOCK_IRQ(vap->iv_ic);
|
||||||
|
|
||||||
@@ -3686,19 +3696,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3686,19 +3696,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/
|
vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@
|
|||||||
{
|
{
|
||||||
--- a/net80211/ieee80211_crypto_ccmp.c
|
--- a/net80211/ieee80211_crypto_ccmp.c
|
||||||
+++ b/net80211/ieee80211_crypto_ccmp.c
|
+++ b/net80211/ieee80211_crypto_ccmp.c
|
||||||
@@ -686,6 +686,8 @@ ccmp_decrypt(struct ieee80211_key *key,
|
@@ -686,6 +686,8 @@ ccmp_decrypt(struct ieee80211_key *key,
|
||||||
}
|
}
|
||||||
#undef CCMP_DECRYPT
|
#undef CCMP_DECRYPT
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -160,7 +160,7 @@ static int ath_check_beacon_done(struct
|
@@ -160,7 +160,7 @@ static int ath_check_beacon_done(struct
|
||||||
static void ath_beacon_send(struct ath_softc *, int *, uint64_t hw_tsf);
|
static void ath_beacon_send(struct ath_softc *, int *, uint64_t hw_tsf);
|
||||||
static void ath_beacon_return(struct ath_softc *, struct ath_buf *);
|
static void ath_beacon_return(struct ath_softc *, struct ath_buf *);
|
||||||
static void ath_beacon_free(struct ath_softc *);
|
static void ath_beacon_free(struct ath_softc *);
|
||||||
@ -81,7 +81,7 @@
|
|||||||
if (xchanmode != -1)
|
if (xchanmode != -1)
|
||||||
ath_xchanmode = xchanmode;
|
ath_xchanmode = xchanmode;
|
||||||
error = ath_getchannels(dev);
|
error = ath_getchannels(dev);
|
||||||
@@ -1349,12 +1337,6 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1349,12 +1337,6 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +94,7 @@
|
|||||||
dev = alloc_etherdev(sizeof(struct ath_vap) + sc->sc_rc->arc_vap_space);
|
dev = alloc_etherdev(sizeof(struct ath_vap) + sc->sc_rc->arc_vap_space);
|
||||||
if (dev == NULL) {
|
if (dev == NULL) {
|
||||||
/* XXX msg */
|
/* XXX msg */
|
||||||
@@ -1424,7 +1406,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1424,7 +1406,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
TAILQ_FOREACH(v, &ic->ic_vaps, iv_next)
|
TAILQ_FOREACH(v, &ic->ic_vaps, iv_next)
|
||||||
id_mask |= (1 << ATH_GET_VAP_ID(v->iv_myaddr));
|
id_mask |= (1 << ATH_GET_VAP_ID(v->iv_myaddr));
|
||||||
|
|
||||||
@ -103,7 +103,7 @@
|
|||||||
/* get the first available slot */
|
/* get the first available slot */
|
||||||
if ((id_mask & (1 << id)) == 0) {
|
if ((id_mask & (1 << id)) == 0) {
|
||||||
ATH_SET_VAP_BSSID(vap->iv_myaddr, id);
|
ATH_SET_VAP_BSSID(vap->iv_myaddr, id);
|
||||||
@@ -1451,11 +1433,11 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1451,11 +1433,11 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
/* Assign the VAP to a beacon xmit slot. As
|
/* Assign the VAP to a beacon xmit slot. As
|
||||||
* above, this cannot fail to find one. */
|
* above, this cannot fail to find one. */
|
||||||
avp->av_bslot = 0;
|
avp->av_bslot = 0;
|
||||||
@ -117,7 +117,7 @@
|
|||||||
sc->sc_bslot[slot+1] == NULL) {
|
sc->sc_bslot[slot+1] == NULL) {
|
||||||
avp->av_bslot = slot + 1;
|
avp->av_bslot = slot + 1;
|
||||||
break;
|
break;
|
||||||
@@ -1463,8 +1445,11 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1463,8 +1445,11 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
avp->av_bslot = slot;
|
avp->av_bslot = slot;
|
||||||
/* NB: keep looking for a double slot */
|
/* NB: keep looking for a double slot */
|
||||||
}
|
}
|
||||||
@ -131,7 +131,7 @@
|
|||||||
sc->sc_bslot[avp->av_bslot] = vap;
|
sc->sc_bslot[avp->av_bslot] = vap;
|
||||||
sc->sc_nbcnvaps++;
|
sc->sc_nbcnvaps++;
|
||||||
|
|
||||||
@@ -1475,15 +1460,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1475,15 +1460,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
* of staggered beacons.
|
* of staggered beacons.
|
||||||
*/
|
*/
|
||||||
/* XXX check for beacon interval too small */
|
/* XXX check for beacon interval too small */
|
||||||
@ -148,7 +148,7 @@
|
|||||||
}
|
}
|
||||||
DPRINTF(sc, ATH_DEBUG_BEACON, "sc->sc_stagbeacons %sabled\n",
|
DPRINTF(sc, ATH_DEBUG_BEACON, "sc->sc_stagbeacons %sabled\n",
|
||||||
(sc->sc_stagbeacons ? "en" : "dis"));
|
(sc->sc_stagbeacons ? "en" : "dis"));
|
||||||
@@ -1553,7 +1530,7 @@ ath_vap_create(struct ieee80211com *ic,
|
@@ -1553,7 +1530,7 @@ ath_vap_create(struct ieee80211com *ic,
|
||||||
if (ath_startrecv(sc) != 0) /* restart recv */
|
if (ath_startrecv(sc) != 0) /* restart recv */
|
||||||
EPRINTF(sc, "Unable to start receive logic.\n");
|
EPRINTF(sc, "Unable to start receive logic.\n");
|
||||||
if (sc->sc_beacons)
|
if (sc->sc_beacons)
|
||||||
@ -231,7 +231,7 @@
|
|||||||
{
|
{
|
||||||
struct ieee80211com *ic = &sc->sc_ic;
|
struct ieee80211com *ic = &sc->sc_ic;
|
||||||
struct ath_hal *ah = sc->sc_ah;
|
struct ath_hal *ah = sc->sc_ah;
|
||||||
@@ -5553,7 +5530,7 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5553,7 +5530,7 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
/* We should reset hw TSF only once, so we increment
|
/* We should reset hw TSF only once, so we increment
|
||||||
* ni_tstamp.tsf to avoid resetting the hw TSF multiple
|
* ni_tstamp.tsf to avoid resetting the hw TSF multiple
|
||||||
* times */
|
* times */
|
||||||
@ -240,7 +240,7 @@
|
|||||||
reset_tsf = 1;
|
reset_tsf = 1;
|
||||||
ni->ni_tstamp.tsf = cpu_to_le64(1);
|
ni->ni_tstamp.tsf = cpu_to_le64(1);
|
||||||
}
|
}
|
||||||
@@ -5567,7 +5544,7 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5567,7 +5544,7 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
/* NB: the beacon interval is kept internally in TUs */
|
/* NB: the beacon interval is kept internally in TUs */
|
||||||
intval = ic->ic_lintval & HAL_BEACON_PERIOD;
|
intval = ic->ic_lintval & HAL_BEACON_PERIOD;
|
||||||
if (sc->sc_stagbeacons)
|
if (sc->sc_stagbeacons)
|
||||||
@ -249,7 +249,7 @@
|
|||||||
if ((sc->sc_nostabeacons) &&
|
if ((sc->sc_nostabeacons) &&
|
||||||
(vap->iv_opmode == IEEE80211_M_HOSTAP))
|
(vap->iv_opmode == IEEE80211_M_HOSTAP))
|
||||||
reset_tsf = 1;
|
reset_tsf = 1;
|
||||||
@@ -5583,31 +5560,24 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5583,31 +5560,24 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
* time */
|
* time */
|
||||||
nexttbtt = intval;
|
nexttbtt = intval;
|
||||||
} else if (intval) { /* NB: can be 0 for monitor mode */
|
} else if (intval) { /* NB: can be 0 for monitor mode */
|
||||||
@ -299,7 +299,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5730,9 +5700,6 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5730,9 +5700,6 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
ath_beacon_dturbo_config(vap, intval &
|
ath_beacon_dturbo_config(vap, intval &
|
||||||
~(HAL_BEACON_RESET_TSF | HAL_BEACON_ENA));
|
~(HAL_BEACON_RESET_TSF | HAL_BEACON_ENA));
|
||||||
#endif
|
#endif
|
||||||
@ -378,7 +378,7 @@
|
|||||||
.procname = "regdomain",
|
.procname = "regdomain",
|
||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = ath_sysctl_halparam,
|
.proc_handler = ath_sysctl_halparam,
|
||||||
@@ -11928,13 +11883,6 @@ static ctl_table ath_static_sysctls[] =
|
@@ -11928,13 +11883,6 @@ static ctl_table ath_static_sysctls[] =
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
{ .ctl_name = CTL_AUTO,
|
{ .ctl_name = CTL_AUTO,
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
iwspy_event(vap, ni, rssi);
|
iwspy_event(vap, ni, rssi);
|
||||||
@@ -3553,8 +3546,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3553,8 +3546,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
(((vap->iv_opmode == IEEE80211_M_HOSTAP) ||
|
(((vap->iv_opmode == IEEE80211_M_HOSTAP) ||
|
||||||
(vap->iv_opmode == IEEE80211_M_WDS)) &&
|
(vap->iv_opmode == IEEE80211_M_WDS)) &&
|
||||||
(scan.capinfo & IEEE80211_CAPINFO_ESS))) {
|
(scan.capinfo & IEEE80211_CAPINFO_ESS))) {
|
||||||
@ -53,7 +53,7 @@
|
|||||||
int found = 0;
|
int found = 0;
|
||||||
|
|
||||||
IEEE80211_LOCK_IRQ(vap->iv_ic);
|
IEEE80211_LOCK_IRQ(vap->iv_ic);
|
||||||
@@ -3570,14 +3563,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3570,14 +3563,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (found)
|
if (found)
|
||||||
@ -72,7 +72,7 @@
|
|||||||
found = 1;
|
found = 1;
|
||||||
}
|
}
|
||||||
IEEE80211_UNLOCK_IRQ(vap->iv_ic);
|
IEEE80211_UNLOCK_IRQ(vap->iv_ic);
|
||||||
@@ -3585,20 +3576,21 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3585,20 +3576,21 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
if (!found)
|
if (!found)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -100,7 +100,7 @@
|
|||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Copy data from beacon to neighbor table.
|
* Copy data from beacon to neighbor table.
|
||||||
@@ -3606,39 +3598,38 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
@@ -3606,39 +3598,38 @@ ieee80211_recv_mgmt(struct ieee80211vap
|
||||||
* ieee80211_add_neighbor(), so we just copy
|
* ieee80211_add_neighbor(), so we just copy
|
||||||
* everything over to be safe.
|
* everything over to be safe.
|
||||||
*/
|
*/
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52))
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52))
|
||||||
@@ -204,6 +202,11 @@ ath_rate_findrate(struct ath_softc *sc,
|
@@ -204,6 +202,11 @@ ath_rate_findrate(struct ath_softc *sc,
|
||||||
unsigned int ndx, offset;
|
unsigned int ndx, offset;
|
||||||
int mrr;
|
int mrr;
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
/*
|
/*
|
||||||
* Configure the beacon and sleep timers.
|
* Configure the beacon and sleep timers.
|
||||||
*
|
*
|
||||||
@@ -5523,6 +5543,7 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5523,6 +5543,7 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
if (vap == NULL)
|
if (vap == NULL)
|
||||||
vap = TAILQ_FIRST(&ic->ic_vaps); /* XXX */
|
vap = TAILQ_FIRST(&ic->ic_vaps); /* XXX */
|
||||||
|
|
||||||
@ -70,7 +70,7 @@
|
|||||||
ni = vap->iv_bss;
|
ni = vap->iv_bss;
|
||||||
|
|
||||||
/* TSF calculation is timing critical - we don't want to be interrupted here */
|
/* TSF calculation is timing critical - we don't want to be interrupted here */
|
||||||
@@ -5699,6 +5720,9 @@ ath_beacon_config(struct ath_softc *sc,
|
@@ -5699,6 +5720,9 @@ ath_beacon_config(struct ath_softc *sc,
|
||||||
sc->sc_imask |= HAL_INT_SWBA;
|
sc->sc_imask |= HAL_INT_SWBA;
|
||||||
ath_set_beacon_cal(sc, 1);
|
ath_set_beacon_cal(sc, 1);
|
||||||
ath_beaconq_config(sc);
|
ath_beaconq_config(sc);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
char *uts_release = UTS_RELEASE;
|
char *uts_release = UTS_RELEASE;
|
||||||
--- a/ath/if_ath.c
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c
|
+++ b/ath/if_ath.c
|
||||||
@@ -11580,227 +11580,231 @@ static int mincalibrate = 1; /* once a
|
@@ -11580,227 +11580,231 @@ static int mincalibrate = 1; /* once a
|
||||||
static int maxint = 0x7fffffff; /* 32-bit big */
|
static int maxint = 0x7fffffff; /* 32-bit big */
|
||||||
|
|
||||||
static const ctl_table ath_sysctl_template[] = {
|
static const ctl_table ath_sysctl_template[] = {
|
||||||
@ -309,7 +309,7 @@
|
|||||||
.procname = "debug",
|
.procname = "debug",
|
||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.data = &ath_debug,
|
.data = &ath_debug,
|
||||||
@@ -11974,14 +11982,14 @@ static ctl_table ath_static_sysctls[] =
|
@@ -11974,14 +11982,14 @@ static ctl_table ath_static_sysctls[] =
|
||||||
.proc_handler = proc_dointvec
|
.proc_handler = proc_dointvec
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
@ -326,7 +326,7 @@
|
|||||||
.procname = "calibrate",
|
.procname = "calibrate",
|
||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.data = &ath_calinterval,
|
.data = &ath_calinterval,
|
||||||
@@ -11993,14 +12001,14 @@ static ctl_table ath_static_sysctls[] =
|
@@ -11993,14 +12001,14 @@ static ctl_table ath_static_sysctls[] =
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
static ctl_table ath_ath_table[] = {
|
static ctl_table ath_ath_table[] = {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net80211/ieee80211_scan_ap.c
|
--- a/net80211/ieee80211_scan_ap.c
|
||||||
+++ b/net80211/ieee80211_scan_ap.c
|
+++ b/net80211/ieee80211_scan_ap.c
|
||||||
@@ -595,6 +595,14 @@ ap_end(struct ieee80211_scan_state *ss,
|
@@ -595,6 +595,14 @@ ap_end(struct ieee80211_scan_state *ss,
|
||||||
|
|
||||||
ic = vap->iv_ic;
|
ic = vap->iv_ic;
|
||||||
|
|
||||||
@ -15,7 +15,7 @@
|
|||||||
/* record stats for the channel that was scanned last */
|
/* record stats for the channel that was scanned last */
|
||||||
ic->ic_set_channel(ic);
|
ic->ic_set_channel(ic);
|
||||||
spin_lock_irqsave(&channel_lock, sflags);
|
spin_lock_irqsave(&channel_lock, sflags);
|
||||||
@@ -648,6 +656,8 @@ ap_end(struct ieee80211_scan_state *ss,
|
@@ -648,6 +656,8 @@ ap_end(struct ieee80211_scan_state *ss,
|
||||||
IEEE80211_SCHEDULE_TQUEUE(&as->as_actiontq);
|
IEEE80211_SCHEDULE_TQUEUE(&as->as_actiontq);
|
||||||
res = 1;
|
res = 1;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--- a/ath/if_ath.c 2010-07-13 22:58:23.000000000 +0200
|
--- a/ath/if_ath.c
|
||||||
+++ b/ath/if_ath.c 2010-07-13 23:03:20.000000000 +0200
|
+++ b/ath/if_ath.c
|
||||||
@@ -63,6 +63,8 @@
|
@@ -63,6 +63,8 @@
|
||||||
#include <linux/rtnetlink.h>
|
#include <linux/rtnetlink.h>
|
||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
@ -9,7 +9,7 @@
|
|||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
#include "if_ethersubr.h" /* for ETHER_IS_MULTICAST */
|
#include "if_ethersubr.h" /* for ETHER_IS_MULTICAST */
|
||||||
@@ -587,6 +589,10 @@
|
@@ -587,6 +589,10 @@ ath_attach(u_int16_t devid, struct net_d
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int autocreatemode = -1;
|
int autocreatemode = -1;
|
||||||
u_int8_t csz;
|
u_int8_t csz;
|
||||||
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
sc->devid = devid;
|
sc->devid = devid;
|
||||||
#ifdef AR_DEBUG
|
#ifdef AR_DEBUG
|
||||||
@@ -648,6 +654,13 @@
|
@@ -648,6 +654,13 @@ ath_attach(u_int16_t devid, struct net_d
|
||||||
}
|
}
|
||||||
sc->sc_ah = ah;
|
sc->sc_ah = ah;
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
--- a/ath/if_athvar.h
|
--- a/ath/if_athvar.h
|
||||||
+++ b/ath/if_athvar.h
|
+++ b/ath/if_athvar.h
|
||||||
@@ -991,5 +991,5 @@
|
@@ -974,7 +974,7 @@ typedef void (*ath_callback) (struct ath
|
||||||
#endif
|
#endif
|
||||||
/* Protects the device from concurrent accesses */
|
|
||||||
-#define ATH_LOCK_INIT(_sc) init_MUTEX(&(_sc)->sc_lock)
|
/* Protects the device from concurrent accesses */
|
||||||
+#define ATH_LOCK_INIT(_sc) sema_init(&(_sc)->sc_lock, 1)
|
-#define ATH_LOCK_INIT(_sc) init_MUTEX(&(_sc)->sc_lock)
|
||||||
#define ATH_LOCK_DESTROY(_sc)
|
+#define ATH_LOCK_INIT(_sc) sema_init(&(_sc)->sc_lock, 1)
|
||||||
#define ATH_LOCK(_sc) down(&(_sc)->sc_lock)
|
#define ATH_LOCK_DESTROY(_sc)
|
||||||
|
#define ATH_LOCK(_sc) down(&(_sc)->sc_lock)
|
||||||
|
#define ATH_UNLOCK(_sc) up(&(_sc)->sc_lock)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user