diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex')
-rw-r--r-- | drivers/net/wireless/mwifiex/Kconfig | 4 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/cfg80211.c | 14 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/fw.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/scan.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/usb.c | 54 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/usb.h | 12 |
6 files changed, 68 insertions, 22 deletions
diff --git a/drivers/net/wireless/mwifiex/Kconfig b/drivers/net/wireless/mwifiex/Kconfig index f7ff4725506a..ecdf34505b54 100644 --- a/drivers/net/wireless/mwifiex/Kconfig +++ b/drivers/net/wireless/mwifiex/Kconfig | |||
@@ -31,12 +31,12 @@ config MWIFIEX_PCIE | |||
31 | mwifiex_pcie. | 31 | mwifiex_pcie. |
32 | 32 | ||
33 | config MWIFIEX_USB | 33 | config MWIFIEX_USB |
34 | tristate "Marvell WiFi-Ex Driver for USB8797" | 34 | tristate "Marvell WiFi-Ex Driver for USB8797/8897" |
35 | depends on MWIFIEX && USB | 35 | depends on MWIFIEX && USB |
36 | select FW_LOADER | 36 | select FW_LOADER |
37 | ---help--- | 37 | ---help--- |
38 | This adds support for wireless adapters based on Marvell | 38 | This adds support for wireless adapters based on Marvell |
39 | Avastar 88W8797 chipset with USB interface. | 39 | 8797/8897 chipset with USB interface. |
40 | 40 | ||
41 | If you choose to build it as a module, it will be called | 41 | If you choose to build it as a module, it will be called |
42 | mwifiex_usb. | 42 | mwifiex_usb. |
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c index e7c81abf108e..f37b403e83d0 100644 --- a/drivers/net/wireless/mwifiex/cfg80211.c +++ b/drivers/net/wireless/mwifiex/cfg80211.c | |||
@@ -2677,6 +2677,7 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter) | |||
2677 | struct wiphy *wiphy; | 2677 | struct wiphy *wiphy; |
2678 | struct mwifiex_private *priv = adapter->priv[MWIFIEX_BSS_TYPE_STA]; | 2678 | struct mwifiex_private *priv = adapter->priv[MWIFIEX_BSS_TYPE_STA]; |
2679 | u8 *country_code; | 2679 | u8 *country_code; |
2680 | u32 thr, retry; | ||
2680 | 2681 | ||
2681 | /* create a new wiphy for use with cfg80211 */ | 2682 | /* create a new wiphy for use with cfg80211 */ |
2682 | wiphy = wiphy_new(&mwifiex_cfg80211_ops, | 2683 | wiphy = wiphy_new(&mwifiex_cfg80211_ops, |
@@ -2766,6 +2767,19 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter) | |||
2766 | country_code); | 2767 | country_code); |
2767 | } | 2768 | } |
2768 | 2769 | ||
2770 | mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_SNMP_MIB, | ||
2771 | HostCmd_ACT_GEN_GET, FRAG_THRESH_I, &thr); | ||
2772 | wiphy->frag_threshold = thr; | ||
2773 | mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_SNMP_MIB, | ||
2774 | HostCmd_ACT_GEN_GET, RTS_THRESH_I, &thr); | ||
2775 | wiphy->rts_threshold = thr; | ||
2776 | mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_SNMP_MIB, | ||
2777 | HostCmd_ACT_GEN_GET, SHORT_RETRY_LIM_I, &retry); | ||
2778 | wiphy->retry_short = (u8) retry; | ||
2779 | mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_SNMP_MIB, | ||
2780 | HostCmd_ACT_GEN_GET, LONG_RETRY_LIM_I, &retry); | ||
2781 | wiphy->retry_long = (u8) retry; | ||
2782 | |||
2769 | adapter->wiphy = wiphy; | 2783 | adapter->wiphy = wiphy; |
2770 | return ret; | 2784 | return ret; |
2771 | } | 2785 | } |
diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h index 4cee6ceb7e9e..5fa932d5f905 100644 --- a/drivers/net/wireless/mwifiex/fw.h +++ b/drivers/net/wireless/mwifiex/fw.h | |||
@@ -226,7 +226,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER { | |||
226 | 226 | ||
227 | /* HW_SPEC fw_cap_info */ | 227 | /* HW_SPEC fw_cap_info */ |
228 | 228 | ||
229 | #define ISSUPP_11ACENABLED(fw_cap_info) (fw_cap_info & (BIT(13)|BIT(14))) | 229 | #define ISSUPP_11ACENABLED(fw_cap_info) (fw_cap_info & (BIT(12)|BIT(13))) |
230 | 230 | ||
231 | #define GET_VHTCAP_CHWDSET(vht_cap_info) ((vht_cap_info >> 2) & 0x3) | 231 | #define GET_VHTCAP_CHWDSET(vht_cap_info) ((vht_cap_info >> 2) & 0x3) |
232 | #define GET_VHTNSSMCS(mcs_mapset, nss) ((mcs_mapset >> (2 * (nss - 1))) & 0x3) | 232 | #define GET_VHTNSSMCS(mcs_mapset, nss) ((mcs_mapset >> (2 * (nss - 1))) & 0x3) |
diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c index 0ed06646f19a..0a8a26e10f01 100644 --- a/drivers/net/wireless/mwifiex/scan.c +++ b/drivers/net/wireless/mwifiex/scan.c | |||
@@ -1681,7 +1681,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv, | |||
1681 | const u8 *ie_buf; | 1681 | const u8 *ie_buf; |
1682 | size_t ie_len; | 1682 | size_t ie_len; |
1683 | u16 channel = 0; | 1683 | u16 channel = 0; |
1684 | u64 fw_tsf = 0; | 1684 | __le64 fw_tsf = 0; |
1685 | u16 beacon_size = 0; | 1685 | u16 beacon_size = 0; |
1686 | u32 curr_bcn_bytes; | 1686 | u32 curr_bcn_bytes; |
1687 | u32 freq; | 1687 | u32 freq; |
@@ -1815,7 +1815,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv, | |||
1815 | ie_buf, ie_len, rssi, GFP_KERNEL); | 1815 | ie_buf, ie_len, rssi, GFP_KERNEL); |
1816 | bss_priv = (struct mwifiex_bss_priv *)bss->priv; | 1816 | bss_priv = (struct mwifiex_bss_priv *)bss->priv; |
1817 | bss_priv->band = band; | 1817 | bss_priv->band = band; |
1818 | bss_priv->fw_tsf = fw_tsf; | 1818 | bss_priv->fw_tsf = le64_to_cpu(fw_tsf); |
1819 | if (priv->media_connected && | 1819 | if (priv->media_connected && |
1820 | !memcmp(bssid, | 1820 | !memcmp(bssid, |
1821 | priv->curr_bss_params.bss_descriptor | 1821 | priv->curr_bss_params.bss_descriptor |
diff --git a/drivers/net/wireless/mwifiex/usb.c b/drivers/net/wireless/mwifiex/usb.c index a9240a2083f2..e8ebbd4bc3cd 100644 --- a/drivers/net/wireless/mwifiex/usb.c +++ b/drivers/net/wireless/mwifiex/usb.c | |||
@@ -22,15 +22,21 @@ | |||
22 | 22 | ||
23 | #define USB_VERSION "1.0" | 23 | #define USB_VERSION "1.0" |
24 | 24 | ||
25 | static const char usbdriver_name[] = "usb8797"; | 25 | static const char usbdriver_name[] = "usb8xxx"; |
26 | 26 | ||
27 | static struct mwifiex_if_ops usb_ops; | 27 | static struct mwifiex_if_ops usb_ops; |
28 | static struct semaphore add_remove_card_sem; | 28 | static struct semaphore add_remove_card_sem; |
29 | static struct usb_card_rec *usb_card; | 29 | static struct usb_card_rec *usb_card; |
30 | 30 | ||
31 | static struct usb_device_id mwifiex_usb_table[] = { | 31 | static struct usb_device_id mwifiex_usb_table[] = { |
32 | {USB_DEVICE(USB8797_VID, USB8797_PID_1)}, | 32 | /* 8797 */ |
33 | {USB_DEVICE_AND_INTERFACE_INFO(USB8797_VID, USB8797_PID_2, | 33 | {USB_DEVICE(USB8XXX_VID, USB8797_PID_1)}, |
34 | {USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8797_PID_2, | ||
35 | USB_CLASS_VENDOR_SPEC, | ||
36 | USB_SUBCLASS_VENDOR_SPEC, 0xff)}, | ||
37 | /* 8897 */ | ||
38 | {USB_DEVICE(USB8XXX_VID, USB8897_PID_1)}, | ||
39 | {USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8897_PID_2, | ||
34 | USB_CLASS_VENDOR_SPEC, | 40 | USB_CLASS_VENDOR_SPEC, |
35 | USB_SUBCLASS_VENDOR_SPEC, 0xff)}, | 41 | USB_SUBCLASS_VENDOR_SPEC, 0xff)}, |
36 | { } /* Terminating entry */ | 42 | { } /* Terminating entry */ |
@@ -343,10 +349,20 @@ static int mwifiex_usb_probe(struct usb_interface *intf, | |||
343 | id_vendor, id_product, bcd_device); | 349 | id_vendor, id_product, bcd_device); |
344 | 350 | ||
345 | /* PID_1 is used for firmware downloading only */ | 351 | /* PID_1 is used for firmware downloading only */ |
346 | if (id_product == USB8797_PID_1) | 352 | switch (id_product) { |
347 | card->usb_boot_state = USB8797_FW_DNLD; | 353 | case USB8797_PID_1: |
348 | else | 354 | case USB8897_PID_1: |
349 | card->usb_boot_state = USB8797_FW_READY; | 355 | card->usb_boot_state = USB8XXX_FW_DNLD; |
356 | break; | ||
357 | case USB8797_PID_2: | ||
358 | case USB8897_PID_2: | ||
359 | card->usb_boot_state = USB8XXX_FW_READY; | ||
360 | break; | ||
361 | default: | ||
362 | pr_warning("unknown id_product %#x\n", id_product); | ||
363 | card->usb_boot_state = USB8XXX_FW_DNLD; | ||
364 | break; | ||
365 | } | ||
350 | 366 | ||
351 | card->udev = udev; | 367 | card->udev = udev; |
352 | card->intf = intf; | 368 | card->intf = intf; |
@@ -755,9 +771,20 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter) | |||
755 | 771 | ||
756 | card->adapter = adapter; | 772 | card->adapter = adapter; |
757 | adapter->dev = &card->udev->dev; | 773 | adapter->dev = &card->udev->dev; |
758 | strcpy(adapter->fw_name, USB8797_DEFAULT_FW_NAME); | ||
759 | usb_card = card; | 774 | usb_card = card; |
760 | 775 | ||
776 | switch (le16_to_cpu(card->udev->descriptor.idProduct)) { | ||
777 | case USB8897_PID_1: | ||
778 | case USB8897_PID_2: | ||
779 | strcpy(adapter->fw_name, USB8897_DEFAULT_FW_NAME); | ||
780 | break; | ||
781 | case USB8797_PID_1: | ||
782 | case USB8797_PID_2: | ||
783 | default: | ||
784 | strcpy(adapter->fw_name, USB8797_DEFAULT_FW_NAME); | ||
785 | break; | ||
786 | } | ||
787 | |||
761 | return 0; | 788 | return 0; |
762 | } | 789 | } |
763 | 790 | ||
@@ -773,7 +800,7 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter, | |||
773 | { | 800 | { |
774 | int ret = 0; | 801 | int ret = 0; |
775 | u8 *firmware = fw->fw_buf, *recv_buff; | 802 | u8 *firmware = fw->fw_buf, *recv_buff; |
776 | u32 retries = USB8797_FW_MAX_RETRY, dlen; | 803 | u32 retries = USB8XXX_FW_MAX_RETRY, dlen; |
777 | u32 fw_seqnum = 0, tlen = 0, dnld_cmd = 0; | 804 | u32 fw_seqnum = 0, tlen = 0, dnld_cmd = 0; |
778 | struct fw_data *fwdata; | 805 | struct fw_data *fwdata; |
779 | struct fw_sync_header sync_fw; | 806 | struct fw_sync_header sync_fw; |
@@ -875,7 +902,7 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter, | |||
875 | continue; | 902 | continue; |
876 | } | 903 | } |
877 | 904 | ||
878 | retries = USB8797_FW_MAX_RETRY; | 905 | retries = USB8XXX_FW_MAX_RETRY; |
879 | break; | 906 | break; |
880 | } | 907 | } |
881 | fw_seqnum++; | 908 | fw_seqnum++; |
@@ -899,13 +926,13 @@ static int mwifiex_usb_dnld_fw(struct mwifiex_adapter *adapter, | |||
899 | int ret; | 926 | int ret; |
900 | struct usb_card_rec *card = (struct usb_card_rec *)adapter->card; | 927 | struct usb_card_rec *card = (struct usb_card_rec *)adapter->card; |
901 | 928 | ||
902 | if (card->usb_boot_state == USB8797_FW_DNLD) { | 929 | if (card->usb_boot_state == USB8XXX_FW_DNLD) { |
903 | ret = mwifiex_prog_fw_w_helper(adapter, fw); | 930 | ret = mwifiex_prog_fw_w_helper(adapter, fw); |
904 | if (ret) | 931 | if (ret) |
905 | return -1; | 932 | return -1; |
906 | 933 | ||
907 | /* Boot state changes after successful firmware download */ | 934 | /* Boot state changes after successful firmware download */ |
908 | if (card->usb_boot_state == USB8797_FW_DNLD) | 935 | if (card->usb_boot_state == USB8XXX_FW_DNLD) |
909 | return -1; | 936 | return -1; |
910 | } | 937 | } |
911 | 938 | ||
@@ -1039,4 +1066,5 @@ MODULE_AUTHOR("Marvell International Ltd."); | |||
1039 | MODULE_DESCRIPTION("Marvell WiFi-Ex USB Driver version" USB_VERSION); | 1066 | MODULE_DESCRIPTION("Marvell WiFi-Ex USB Driver version" USB_VERSION); |
1040 | MODULE_VERSION(USB_VERSION); | 1067 | MODULE_VERSION(USB_VERSION); |
1041 | MODULE_LICENSE("GPL v2"); | 1068 | MODULE_LICENSE("GPL v2"); |
1042 | MODULE_FIRMWARE("mrvl/usb8797_uapsta.bin"); | 1069 | MODULE_FIRMWARE(USB8797_DEFAULT_FW_NAME); |
1070 | MODULE_FIRMWARE(USB8897_DEFAULT_FW_NAME); | ||
diff --git a/drivers/net/wireless/mwifiex/usb.h b/drivers/net/wireless/mwifiex/usb.h index 98c4316cd1a9..15b73d12e998 100644 --- a/drivers/net/wireless/mwifiex/usb.h +++ b/drivers/net/wireless/mwifiex/usb.h | |||
@@ -22,19 +22,23 @@ | |||
22 | 22 | ||
23 | #include <linux/usb.h> | 23 | #include <linux/usb.h> |
24 | 24 | ||
25 | #define USB8797_VID 0x1286 | 25 | #define USB8XXX_VID 0x1286 |
26 | |||
26 | #define USB8797_PID_1 0x2043 | 27 | #define USB8797_PID_1 0x2043 |
27 | #define USB8797_PID_2 0x2044 | 28 | #define USB8797_PID_2 0x2044 |
29 | #define USB8897_PID_1 0x2045 | ||
30 | #define USB8897_PID_2 0x2046 | ||
28 | 31 | ||
29 | #define USB8797_FW_DNLD 1 | 32 | #define USB8XXX_FW_DNLD 1 |
30 | #define USB8797_FW_READY 2 | 33 | #define USB8XXX_FW_READY 2 |
31 | #define USB8797_FW_MAX_RETRY 3 | 34 | #define USB8XXX_FW_MAX_RETRY 3 |
32 | 35 | ||
33 | #define MWIFIEX_TX_DATA_URB 6 | 36 | #define MWIFIEX_TX_DATA_URB 6 |
34 | #define MWIFIEX_RX_DATA_URB 6 | 37 | #define MWIFIEX_RX_DATA_URB 6 |
35 | #define MWIFIEX_USB_TIMEOUT 100 | 38 | #define MWIFIEX_USB_TIMEOUT 100 |
36 | 39 | ||
37 | #define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin" | 40 | #define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin" |
41 | #define USB8897_DEFAULT_FW_NAME "mrvl/usb8897_uapsta.bin" | ||
38 | 42 | ||
39 | #define FW_DNLD_TX_BUF_SIZE 620 | 43 | #define FW_DNLD_TX_BUF_SIZE 620 |
40 | #define FW_DNLD_RX_BUF_SIZE 2048 | 44 | #define FW_DNLD_RX_BUF_SIZE 2048 |