diff options
author | David S. Miller <davem@davemloft.net> | 2014-08-14 18:17:37 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-08-14 18:17:37 -0400 |
commit | a61ebdfdb13a051f707b408d464f63b991aa21e3 (patch) | |
tree | 4e175cc207463251e4335fdab7dff9fb056f199d | |
parent | 9ce12eb16ffb143f3a509da86283ddd0b10bcdb3 (diff) | |
parent | 77b2f2865956b7573f9b040db7a9f808b434acd1 (diff) |
Merge tag 'master-2014-08-14' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
John W. Linville says:
====================
pull request: wireless 2014-08-14
Please pull this batch of fixes intended for the 3.17 stream...
Arend van Spriel brings two brcmfmac fixes, one which fixes a memory
leak and one which corrects some merge damage.
Emmanuel Grumbach fixes Linus's iwlwifi firmware-related log spam.
Rickard Strandqvist does some proper NULL termination after a call
to strncpy.
Ronald Wahl corrects a carl9170 problem with sending URBs with the
wrong endpoint type (resulting in log spam).
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/wireless/ath/carl9170/carl9170.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/usb.c | 31 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/pcie.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ipw2x00/ipw2200.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 3 |
6 files changed, 37 insertions, 6 deletions
diff --git a/drivers/net/wireless/ath/carl9170/carl9170.h b/drivers/net/wireless/ath/carl9170/carl9170.h index 8596aba34f96..237d0cda1bcb 100644 --- a/drivers/net/wireless/ath/carl9170/carl9170.h +++ b/drivers/net/wireless/ath/carl9170/carl9170.h | |||
@@ -256,6 +256,7 @@ struct ar9170 { | |||
256 | atomic_t rx_work_urbs; | 256 | atomic_t rx_work_urbs; |
257 | atomic_t rx_pool_urbs; | 257 | atomic_t rx_pool_urbs; |
258 | kernel_ulong_t features; | 258 | kernel_ulong_t features; |
259 | bool usb_ep_cmd_is_bulk; | ||
259 | 260 | ||
260 | /* firmware settings */ | 261 | /* firmware settings */ |
261 | struct completion fw_load_wait; | 262 | struct completion fw_load_wait; |
diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c index f35c7f30f9a6..c9f93310c0d6 100644 --- a/drivers/net/wireless/ath/carl9170/usb.c +++ b/drivers/net/wireless/ath/carl9170/usb.c | |||
@@ -621,9 +621,16 @@ int __carl9170_exec_cmd(struct ar9170 *ar, struct carl9170_cmd *cmd, | |||
621 | goto err_free; | 621 | goto err_free; |
622 | } | 622 | } |
623 | 623 | ||
624 | usb_fill_int_urb(urb, ar->udev, usb_sndintpipe(ar->udev, | 624 | if (ar->usb_ep_cmd_is_bulk) |
625 | AR9170_USB_EP_CMD), cmd, cmd->hdr.len + 4, | 625 | usb_fill_bulk_urb(urb, ar->udev, |
626 | carl9170_usb_cmd_complete, ar, 1); | 626 | usb_sndbulkpipe(ar->udev, AR9170_USB_EP_CMD), |
627 | cmd, cmd->hdr.len + 4, | ||
628 | carl9170_usb_cmd_complete, ar); | ||
629 | else | ||
630 | usb_fill_int_urb(urb, ar->udev, | ||
631 | usb_sndintpipe(ar->udev, AR9170_USB_EP_CMD), | ||
632 | cmd, cmd->hdr.len + 4, | ||
633 | carl9170_usb_cmd_complete, ar, 1); | ||
627 | 634 | ||
628 | if (free_buf) | 635 | if (free_buf) |
629 | urb->transfer_flags |= URB_FREE_BUFFER; | 636 | urb->transfer_flags |= URB_FREE_BUFFER; |
@@ -1032,9 +1039,10 @@ static void carl9170_usb_firmware_step2(const struct firmware *fw, | |||
1032 | static int carl9170_usb_probe(struct usb_interface *intf, | 1039 | static int carl9170_usb_probe(struct usb_interface *intf, |
1033 | const struct usb_device_id *id) | 1040 | const struct usb_device_id *id) |
1034 | { | 1041 | { |
1042 | struct usb_endpoint_descriptor *ep; | ||
1035 | struct ar9170 *ar; | 1043 | struct ar9170 *ar; |
1036 | struct usb_device *udev; | 1044 | struct usb_device *udev; |
1037 | int err; | 1045 | int i, err; |
1038 | 1046 | ||
1039 | err = usb_reset_device(interface_to_usbdev(intf)); | 1047 | err = usb_reset_device(interface_to_usbdev(intf)); |
1040 | if (err) | 1048 | if (err) |
@@ -1050,6 +1058,21 @@ static int carl9170_usb_probe(struct usb_interface *intf, | |||
1050 | ar->intf = intf; | 1058 | ar->intf = intf; |
1051 | ar->features = id->driver_info; | 1059 | ar->features = id->driver_info; |
1052 | 1060 | ||
1061 | /* We need to remember the type of endpoint 4 because it differs | ||
1062 | * between high- and full-speed configuration. The high-speed | ||
1063 | * configuration specifies it as interrupt and the full-speed | ||
1064 | * configuration as bulk endpoint. This information is required | ||
1065 | * later when sending urbs to that endpoint. | ||
1066 | */ | ||
1067 | for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; ++i) { | ||
1068 | ep = &intf->cur_altsetting->endpoint[i].desc; | ||
1069 | |||
1070 | if (usb_endpoint_num(ep) == AR9170_USB_EP_CMD && | ||
1071 | usb_endpoint_dir_out(ep) && | ||
1072 | usb_endpoint_type(ep) == USB_ENDPOINT_XFER_BULK) | ||
1073 | ar->usb_ep_cmd_is_bulk = true; | ||
1074 | } | ||
1075 | |||
1053 | usb_set_intfdata(intf, ar); | 1076 | usb_set_intfdata(intf, ar); |
1054 | SET_IEEE80211_DEV(ar->hw, &intf->dev); | 1077 | SET_IEEE80211_DEV(ar->hw, &intf->dev); |
1055 | 1078 | ||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c index 535c7eb01b3a..8f8b9373de95 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | |||
@@ -1318,6 +1318,8 @@ int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr) | |||
1318 | msgbuf->nrof_flowrings = if_msgbuf->nrof_flowrings; | 1318 | msgbuf->nrof_flowrings = if_msgbuf->nrof_flowrings; |
1319 | msgbuf->flowring_dma_handle = kzalloc(msgbuf->nrof_flowrings * | 1319 | msgbuf->flowring_dma_handle = kzalloc(msgbuf->nrof_flowrings * |
1320 | sizeof(*msgbuf->flowring_dma_handle), GFP_ATOMIC); | 1320 | sizeof(*msgbuf->flowring_dma_handle), GFP_ATOMIC); |
1321 | if (!msgbuf->flowring_dma_handle) | ||
1322 | goto fail; | ||
1321 | 1323 | ||
1322 | msgbuf->rx_dataoffset = if_msgbuf->rx_dataoffset; | 1324 | msgbuf->rx_dataoffset = if_msgbuf->rx_dataoffset; |
1323 | msgbuf->max_rxbufpost = if_msgbuf->max_rxbufpost; | 1325 | msgbuf->max_rxbufpost = if_msgbuf->max_rxbufpost; |
@@ -1362,6 +1364,7 @@ fail: | |||
1362 | kfree(msgbuf->flow_map); | 1364 | kfree(msgbuf->flow_map); |
1363 | kfree(msgbuf->txstatus_done_map); | 1365 | kfree(msgbuf->txstatus_done_map); |
1364 | brcmf_msgbuf_release_pktids(msgbuf); | 1366 | brcmf_msgbuf_release_pktids(msgbuf); |
1367 | kfree(msgbuf->flowring_dma_handle); | ||
1365 | if (msgbuf->ioctbuf) | 1368 | if (msgbuf->ioctbuf) |
1366 | dma_free_coherent(drvr->bus_if->dev, | 1369 | dma_free_coherent(drvr->bus_if->dev, |
1367 | BRCMF_TX_IOCTL_MAX_MSG_SIZE, | 1370 | BRCMF_TX_IOCTL_MAX_MSG_SIZE, |
@@ -1391,6 +1394,7 @@ void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr) | |||
1391 | BRCMF_TX_IOCTL_MAX_MSG_SIZE, | 1394 | BRCMF_TX_IOCTL_MAX_MSG_SIZE, |
1392 | msgbuf->ioctbuf, msgbuf->ioctbuf_handle); | 1395 | msgbuf->ioctbuf, msgbuf->ioctbuf_handle); |
1393 | brcmf_msgbuf_release_pktids(msgbuf); | 1396 | brcmf_msgbuf_release_pktids(msgbuf); |
1397 | kfree(msgbuf->flowring_dma_handle); | ||
1394 | kfree(msgbuf); | 1398 | kfree(msgbuf); |
1395 | drvr->proto->pd = NULL; | 1399 | drvr->proto->pd = NULL; |
1396 | } | 1400 | } |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/brcm80211/brcmfmac/pcie.c index bc972c0ba5f8..e5101b287e4e 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/pcie.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/pcie.c | |||
@@ -591,12 +591,13 @@ static void brcmf_pcie_handle_mb_data(struct brcmf_pciedev_info *devinfo) | |||
591 | } | 591 | } |
592 | if (dtoh_mb_data & BRCMF_D2H_DEV_DS_EXIT_NOTE) | 592 | if (dtoh_mb_data & BRCMF_D2H_DEV_DS_EXIT_NOTE) |
593 | brcmf_dbg(PCIE, "D2H_MB_DATA: DEEP SLEEP EXIT\n"); | 593 | brcmf_dbg(PCIE, "D2H_MB_DATA: DEEP SLEEP EXIT\n"); |
594 | if (dtoh_mb_data & BRCMF_D2H_DEV_D3_ACK) | 594 | if (dtoh_mb_data & BRCMF_D2H_DEV_D3_ACK) { |
595 | brcmf_dbg(PCIE, "D2H_MB_DATA: D3 ACK\n"); | 595 | brcmf_dbg(PCIE, "D2H_MB_DATA: D3 ACK\n"); |
596 | if (waitqueue_active(&devinfo->mbdata_resp_wait)) { | 596 | if (waitqueue_active(&devinfo->mbdata_resp_wait)) { |
597 | devinfo->mbdata_completed = true; | 597 | devinfo->mbdata_completed = true; |
598 | wake_up(&devinfo->mbdata_resp_wait); | 598 | wake_up(&devinfo->mbdata_resp_wait); |
599 | } | 599 | } |
600 | } | ||
600 | } | 601 | } |
601 | 602 | ||
602 | 603 | ||
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c index c5aa404069f3..389656bd1a74 100644 --- a/drivers/net/wireless/ipw2x00/ipw2200.c +++ b/drivers/net/wireless/ipw2x00/ipw2200.c | |||
@@ -9853,6 +9853,7 @@ static int ipw_wx_get_wireless_mode(struct net_device *dev, | |||
9853 | strncpy(extra, "unknown", MAX_WX_STRING); | 9853 | strncpy(extra, "unknown", MAX_WX_STRING); |
9854 | break; | 9854 | break; |
9855 | } | 9855 | } |
9856 | extra[MAX_WX_STRING - 1] = '\0'; | ||
9856 | 9857 | ||
9857 | IPW_DEBUG_WX("PRIV GET MODE: %s\n", extra); | 9858 | IPW_DEBUG_WX("PRIV GET MODE: %s\n", extra); |
9858 | 9859 | ||
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index 0d6a8b768a68..7c8796584c25 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
@@ -396,7 +396,8 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) | |||
396 | else | 396 | else |
397 | hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; | 397 | hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; |
398 | 398 | ||
399 | hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; | 399 | /* TODO: enable that only for firmwares that don't crash */ |
400 | /* hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; */ | ||
400 | hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX; | 401 | hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX; |
401 | hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES; | 402 | hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES; |
402 | /* we create the 802.11 header and zero length SSID IE. */ | 403 | /* we create the 802.11 header and zero length SSID IE. */ |