mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 04:01:48 -04:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: drivers/infiniband/core/iwcm.c drivers/net/chelsio/cxgb2.c drivers/net/wireless/bcm43xx/bcm43xx_main.c drivers/net/wireless/prism54/islpci_eth.c drivers/usb/core/hub.h drivers/usb/input/hid-core.c net/core/netpoll.c Fix up merge failures with Linus's head and fix new compilation failures. Signed-Off-By: David Howells <[email protected]>
This commit is contained in:
commit
4c1ac1b491
1476 changed files with 67631 additions and 41020 deletions
|
|
@ -67,7 +67,7 @@ static int ieee80211_networks_allocate(struct ieee80211_device *ieee)
|
|||
return 0;
|
||||
|
||||
ieee->networks =
|
||||
kmalloc(MAX_NETWORK_COUNT * sizeof(struct ieee80211_network),
|
||||
kzalloc(MAX_NETWORK_COUNT * sizeof(struct ieee80211_network),
|
||||
GFP_KERNEL);
|
||||
if (!ieee->networks) {
|
||||
printk(KERN_WARNING "%s: Out of memory allocating beacons\n",
|
||||
|
|
@ -75,9 +75,6 @@ static int ieee80211_networks_allocate(struct ieee80211_device *ieee)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
memset(ieee->networks, 0,
|
||||
MAX_NETWORK_COUNT * sizeof(struct ieee80211_network));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -118,6 +115,21 @@ static void ieee80211_networks_initialize(struct ieee80211_device *ieee)
|
|||
&ieee->network_free_list);
|
||||
}
|
||||
|
||||
static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
|
||||
{
|
||||
if ((new_mtu < 68) || (new_mtu > IEEE80211_DATA_LEN))
|
||||
return -EINVAL;
|
||||
dev->mtu = new_mtu;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct net_device_stats *ieee80211_generic_get_stats(
|
||||
struct net_device *dev)
|
||||
{
|
||||
struct ieee80211_device *ieee = netdev_priv(dev);
|
||||
return &ieee->stats;
|
||||
}
|
||||
|
||||
struct net_device *alloc_ieee80211(int sizeof_priv)
|
||||
{
|
||||
struct ieee80211_device *ieee;
|
||||
|
|
@ -133,6 +145,11 @@ struct net_device *alloc_ieee80211(int sizeof_priv)
|
|||
}
|
||||
ieee = netdev_priv(dev);
|
||||
dev->hard_start_xmit = ieee80211_xmit;
|
||||
dev->change_mtu = ieee80211_change_mtu;
|
||||
|
||||
/* Drivers are free to override this if the generic implementation
|
||||
* does not meet their needs. */
|
||||
dev->get_stats = ieee80211_generic_get_stats;
|
||||
|
||||
ieee->dev = dev;
|
||||
|
||||
|
|
|
|||
|
|
@ -415,17 +415,16 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|||
ieee->host_mc_decrypt : ieee->host_decrypt;
|
||||
|
||||
if (can_be_decrypted) {
|
||||
int idx = 0;
|
||||
if (skb->len >= hdrlen + 3) {
|
||||
/* Top two-bits of byte 3 are the key index */
|
||||
idx = skb->data[hdrlen + 3] >> 6;
|
||||
keyidx = skb->data[hdrlen + 3] >> 6;
|
||||
}
|
||||
|
||||
/* ieee->crypt[] is WEP_KEY (4) in length. Given that idx
|
||||
* is only allowed 2-bits of storage, no value of idx can
|
||||
* be provided via above code that would result in idx
|
||||
/* ieee->crypt[] is WEP_KEY (4) in length. Given that keyidx
|
||||
* is only allowed 2-bits of storage, no value of keyidx can
|
||||
* be provided via above code that would result in keyidx
|
||||
* being out of range */
|
||||
crypt = ieee->crypt[idx];
|
||||
crypt = ieee->crypt[keyidx];
|
||||
|
||||
#ifdef NOT_YET
|
||||
sta = NULL;
|
||||
|
|
@ -479,6 +478,11 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|||
goto rx_exit;
|
||||
}
|
||||
#endif
|
||||
/* drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.29) */
|
||||
if (sc == ieee->prev_seq_ctl)
|
||||
goto rx_dropped;
|
||||
else
|
||||
ieee->prev_seq_ctl = sc;
|
||||
|
||||
/* Data frame - extract src/dst addresses */
|
||||
if (skb->len < IEEE80211_3ADDR_LEN)
|
||||
|
|
@ -655,6 +659,51 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|||
goto rx_dropped;
|
||||
}
|
||||
|
||||
/* If the frame was decrypted in hardware, we may need to strip off
|
||||
* any security data (IV, ICV, etc) that was left behind */
|
||||
if (!can_be_decrypted && (fc & IEEE80211_FCTL_PROTECTED) &&
|
||||
ieee->host_strip_iv_icv) {
|
||||
int trimlen = 0;
|
||||
|
||||
/* Top two-bits of byte 3 are the key index */
|
||||
if (skb->len >= hdrlen + 3)
|
||||
keyidx = skb->data[hdrlen + 3] >> 6;
|
||||
|
||||
/* To strip off any security data which appears before the
|
||||
* payload, we simply increase hdrlen (as the header gets
|
||||
* chopped off immediately below). For the security data which
|
||||
* appears after the payload, we use skb_trim. */
|
||||
|
||||
switch (ieee->sec.encode_alg[keyidx]) {
|
||||
case SEC_ALG_WEP:
|
||||
/* 4 byte IV */
|
||||
hdrlen += 4;
|
||||
/* 4 byte ICV */
|
||||
trimlen = 4;
|
||||
break;
|
||||
case SEC_ALG_TKIP:
|
||||
/* 4 byte IV, 4 byte ExtIV */
|
||||
hdrlen += 8;
|
||||
/* 8 byte MIC, 4 byte ICV */
|
||||
trimlen = 12;
|
||||
break;
|
||||
case SEC_ALG_CCMP:
|
||||
/* 8 byte CCMP header */
|
||||
hdrlen += 8;
|
||||
/* 8 byte MIC */
|
||||
trimlen = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
if (skb->len < trimlen)
|
||||
goto rx_dropped;
|
||||
|
||||
__skb_trim(skb, skb->len - trimlen);
|
||||
|
||||
if (skb->len < hdrlen)
|
||||
goto rx_dropped;
|
||||
}
|
||||
|
||||
/* skb: hdr + (possible reassembled) full plaintext payload */
|
||||
|
||||
payload = skb->data + hdrlen;
|
||||
|
|
@ -1255,12 +1304,11 @@ static int ieee80211_parse_info_param(struct ieee80211_info_element
|
|||
case MFIE_TYPE_IBSS_DFS:
|
||||
if (network->ibss_dfs)
|
||||
break;
|
||||
network->ibss_dfs =
|
||||
kmalloc(info_element->len, GFP_ATOMIC);
|
||||
network->ibss_dfs = kmemdup(info_element->data,
|
||||
info_element->len,
|
||||
GFP_ATOMIC);
|
||||
if (!network->ibss_dfs)
|
||||
return 1;
|
||||
memcpy(network->ibss_dfs, info_element->data,
|
||||
info_element->len);
|
||||
network->flags |= NETWORK_HAS_IBSS_DFS;
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -390,7 +390,7 @@ int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
* this stack is providing the full 802.11 header, one will
|
||||
* eventually be affixed to this fragment -- so we must account
|
||||
* for it when determining the amount of payload space. */
|
||||
bytes_per_frag = frag_size - IEEE80211_3ADDR_LEN;
|
||||
bytes_per_frag = frag_size - hdr_len;
|
||||
if (ieee->config &
|
||||
(CFG_IEEE80211_COMPUTE_FCS | CFG_IEEE80211_RESERVE_FCS))
|
||||
bytes_per_frag -= IEEE80211_FCS_LEN;
|
||||
|
|
@ -412,7 +412,7 @@ int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
} else {
|
||||
nr_frags = 1;
|
||||
bytes_per_frag = bytes_last_frag = bytes;
|
||||
frag_size = bytes + IEEE80211_3ADDR_LEN;
|
||||
frag_size = bytes + hdr_len;
|
||||
}
|
||||
|
||||
rts_required = (frag_size > ieee->rts
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth)
|
|||
/* Make sure that we've got an auth queue item for this request */
|
||||
if(aq == NULL)
|
||||
{
|
||||
printkl(KERN_DEBUG PFX "Authentication response received from "MAC_FMT" but no queue item exists.\n", MAC_ARG(auth->header.addr2));
|
||||
dprintkl(KERN_DEBUG PFX "Authentication response received from "MAC_FMT" but no queue item exists.\n", MAC_ARG(auth->header.addr2));
|
||||
/* Error #? */
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -169,7 +169,7 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth)
|
|||
/* Check for out of order authentication */
|
||||
if(!net->authenticating)
|
||||
{
|
||||
printkl(KERN_DEBUG PFX "Authentication response received from "MAC_FMT" but did not request authentication.\n",MAC_ARG(auth->header.addr2));
|
||||
dprintkl(KERN_DEBUG PFX "Authentication response received from "MAC_FMT" but did not request authentication.\n",MAC_ARG(auth->header.addr2));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -219,10 +219,16 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth)
|
|||
net->challenge_len = *data++;
|
||||
if (net->challenge_len > WLAN_AUTH_CHALLENGE_LEN)
|
||||
net->challenge_len = WLAN_AUTH_CHALLENGE_LEN;
|
||||
if (net->challenge != NULL)
|
||||
kfree(net->challenge);
|
||||
net->challenge = kmalloc(net->challenge_len, GFP_ATOMIC);
|
||||
memcpy(net->challenge, data, net->challenge_len);
|
||||
kfree(net->challenge);
|
||||
net->challenge = kmemdup(data, net->challenge_len,
|
||||
GFP_ATOMIC);
|
||||
if (net->challenge == NULL) {
|
||||
printkl(KERN_NOTICE PFX "Shared Key "
|
||||
"Authentication failed due to "
|
||||
"memory shortage.\n");
|
||||
spin_unlock_irqrestore(&mac->lock, flags);
|
||||
break;
|
||||
}
|
||||
aq->state = IEEE80211SOFTMAC_AUTH_SHARED_RESPONSE;
|
||||
|
||||
/* We reuse the work struct from the auth request here.
|
||||
|
|
@ -345,7 +351,7 @@ ieee80211softmac_deauth_req(struct ieee80211softmac_device *mac,
|
|||
/* Make sure the network is authenticated */
|
||||
if (!net->authenticated)
|
||||
{
|
||||
printkl(KERN_DEBUG PFX "Can't send deauthentication packet, network is not authenticated.\n");
|
||||
dprintkl(KERN_DEBUG PFX "Can't send deauthentication packet, network is not authenticated.\n");
|
||||
/* Error okay? */
|
||||
return -EPERM;
|
||||
}
|
||||
|
|
@ -379,7 +385,7 @@ ieee80211softmac_deauth_resp(struct net_device *dev, struct ieee80211_deauth *de
|
|||
net = ieee80211softmac_get_network_by_bssid(mac, deauth->header.addr2);
|
||||
|
||||
if (net == NULL) {
|
||||
printkl(KERN_DEBUG PFX "Received deauthentication packet from "MAC_FMT", but that network is unknown.\n",
|
||||
dprintkl(KERN_DEBUG PFX "Received deauthentication packet from "MAC_FMT", but that network is unknown.\n",
|
||||
MAC_ARG(deauth->header.addr2));
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -387,7 +393,7 @@ ieee80211softmac_deauth_resp(struct net_device *dev, struct ieee80211_deauth *de
|
|||
/* Make sure the network is authenticated */
|
||||
if(!net->authenticated)
|
||||
{
|
||||
printkl(KERN_DEBUG PFX "Can't perform deauthentication, network is not authenticated.\n");
|
||||
dprintkl(KERN_DEBUG PFX "Can't perform deauthentication, network is not authenticated.\n");
|
||||
/* Error okay? */
|
||||
return -EPERM;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@ ieee80211softmac_start_scan(struct ieee80211softmac_device *sm)
|
|||
sm->scanning = 1;
|
||||
spin_unlock_irqrestore(&sm->lock, flags);
|
||||
|
||||
netif_tx_disable(sm->ieee->dev);
|
||||
ret = sm->start_scan(sm->dev);
|
||||
if (ret) {
|
||||
spin_lock_irqsave(&sm->lock, flags);
|
||||
|
|
@ -137,7 +136,8 @@ void ieee80211softmac_scan(struct work_struct *work)
|
|||
si->started = 0;
|
||||
spin_unlock_irqrestore(&sm->lock, flags);
|
||||
|
||||
dprintk(PFX "Scanning finished\n");
|
||||
dprintk(PFX "Scanning finished: scanned %d channels starting with channel %d\n",
|
||||
sm->scaninfo->number_channels, sm->scaninfo->channels[0].channel);
|
||||
ieee80211softmac_scan_finished(sm);
|
||||
complete_all(&sm->scaninfo->finished);
|
||||
}
|
||||
|
|
@ -186,8 +186,6 @@ int ieee80211softmac_start_scan_implementation(struct net_device *dev)
|
|||
sm->scaninfo->channels = sm->ieee->geo.bg;
|
||||
sm->scaninfo->number_channels = sm->ieee->geo.bg_channels;
|
||||
}
|
||||
dprintk(PFX "Start scanning with channel: %d\n", sm->scaninfo->channels[0].channel);
|
||||
dprintk(PFX "Scanning %d channels\n", sm->scaninfo->number_channels);
|
||||
sm->scaninfo->current_channel_idx = 0;
|
||||
sm->scaninfo->started = 1;
|
||||
sm->scaninfo->stop = 0;
|
||||
|
|
@ -251,7 +249,6 @@ void ieee80211softmac_scan_finished(struct ieee80211softmac_device *sm)
|
|||
if (net)
|
||||
sm->set_channel(sm->dev, net->channel);
|
||||
}
|
||||
netif_wake_queue(sm->ieee->dev);
|
||||
ieee80211softmac_call_events(sm, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, NULL);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ieee80211softmac_scan_finished);
|
||||
|
|
|
|||
Loading…
Reference in a new issue