Commit 19222601 authored by Kalle Valo's avatar Kalle Valo

Merge ath-next from git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git

ath.git patches for v5.18. Major changes:

ath6kl

* add device ID for WLU5150-D81
parents 3b03fc9a 83fe43ab
...@@ -1551,11 +1551,11 @@ static int ath10k_setup_msa_resources(struct ath10k *ar, u32 msa_size) ...@@ -1551,11 +1551,11 @@ static int ath10k_setup_msa_resources(struct ath10k *ar, u32 msa_size)
node = of_parse_phandle(dev->of_node, "memory-region", 0); node = of_parse_phandle(dev->of_node, "memory-region", 0);
if (node) { if (node) {
ret = of_address_to_resource(node, 0, &r); ret = of_address_to_resource(node, 0, &r);
of_node_put(node);
if (ret) { if (ret) {
dev_err(dev, "failed to resolve msa fixed region\n"); dev_err(dev, "failed to resolve msa fixed region\n");
return ret; return ret;
} }
of_node_put(node);
ar->msa.paddr = r.start; ar->msa.paddr = r.start;
ar->msa.mem_size = resource_size(&r); ar->msa.mem_size = resource_size(&r);
......
...@@ -1417,7 +1417,6 @@ EXPORT_SYMBOL(ath11k_core_deinit); ...@@ -1417,7 +1417,6 @@ EXPORT_SYMBOL(ath11k_core_deinit);
void ath11k_core_free(struct ath11k_base *ab) void ath11k_core_free(struct ath11k_base *ab)
{ {
flush_workqueue(ab->workqueue);
destroy_workqueue(ab->workqueue); destroy_workqueue(ab->workqueue);
kfree(ab); kfree(ab);
......
...@@ -1217,6 +1217,7 @@ static int ath6kl_usb_pm_resume(struct usb_interface *interface) ...@@ -1217,6 +1217,7 @@ static int ath6kl_usb_pm_resume(struct usb_interface *interface)
static const struct usb_device_id ath6kl_usb_ids[] = { static const struct usb_device_id ath6kl_usb_ids[] = {
{USB_DEVICE(0x0cf3, 0x9375)}, {USB_DEVICE(0x0cf3, 0x9375)},
{USB_DEVICE(0x0cf3, 0x9374)}, {USB_DEVICE(0x0cf3, 0x9374)},
{USB_DEVICE(0x04da, 0x390d)},
{ /* Terminating entry */ }, { /* Terminating entry */ },
}; };
......
...@@ -1750,7 +1750,6 @@ static int ath6kl_wmi_snr_threshold_event_rx(struct wmi *wmi, u8 *datap, ...@@ -1750,7 +1750,6 @@ static int ath6kl_wmi_snr_threshold_event_rx(struct wmi *wmi, u8 *datap,
static int ath6kl_wmi_aplist_event_rx(struct wmi *wmi, u8 *datap, int len) static int ath6kl_wmi_aplist_event_rx(struct wmi *wmi, u8 *datap, int len)
{ {
u16 ap_info_entry_size;
struct wmi_aplist_event *ev = (struct wmi_aplist_event *) datap; struct wmi_aplist_event *ev = (struct wmi_aplist_event *) datap;
struct wmi_ap_info_v1 *ap_info_v1; struct wmi_ap_info_v1 *ap_info_v1;
u8 index; u8 index;
...@@ -1759,14 +1758,12 @@ static int ath6kl_wmi_aplist_event_rx(struct wmi *wmi, u8 *datap, int len) ...@@ -1759,14 +1758,12 @@ static int ath6kl_wmi_aplist_event_rx(struct wmi *wmi, u8 *datap, int len)
ev->ap_list_ver != APLIST_VER1) ev->ap_list_ver != APLIST_VER1)
return -EINVAL; return -EINVAL;
ap_info_entry_size = sizeof(struct wmi_ap_info_v1);
ap_info_v1 = (struct wmi_ap_info_v1 *) ev->ap_list; ap_info_v1 = (struct wmi_ap_info_v1 *) ev->ap_list;
ath6kl_dbg(ATH6KL_DBG_WMI, ath6kl_dbg(ATH6KL_DBG_WMI,
"number of APs in aplist event: %d\n", ev->num_ap); "number of APs in aplist event: %d\n", ev->num_ap);
if (len < (int) (sizeof(struct wmi_aplist_event) + if (len < struct_size(ev, ap_list, ev->num_ap))
(ev->num_ap - 1) * ap_info_entry_size))
return -EINVAL; return -EINVAL;
/* AP list version 1 contents */ /* AP list version 1 contents */
...@@ -1959,21 +1956,15 @@ static int ath6kl_wmi_startscan_cmd(struct wmi *wmi, u8 if_idx, ...@@ -1959,21 +1956,15 @@ static int ath6kl_wmi_startscan_cmd(struct wmi *wmi, u8 if_idx,
{ {
struct sk_buff *skb; struct sk_buff *skb;
struct wmi_start_scan_cmd *sc; struct wmi_start_scan_cmd *sc;
s8 size;
int i, ret; int i, ret;
size = sizeof(struct wmi_start_scan_cmd);
if ((scan_type != WMI_LONG_SCAN) && (scan_type != WMI_SHORT_SCAN)) if ((scan_type != WMI_LONG_SCAN) && (scan_type != WMI_SHORT_SCAN))
return -EINVAL; return -EINVAL;
if (num_chan > WMI_MAX_CHANNELS) if (num_chan > WMI_MAX_CHANNELS)
return -EINVAL; return -EINVAL;
if (num_chan) skb = ath6kl_wmi_get_new_buf(struct_size(sc, ch_list, num_chan));
size += sizeof(u16) * (num_chan - 1);
skb = ath6kl_wmi_get_new_buf(size);
if (!skb) if (!skb)
return -ENOMEM; return -ENOMEM;
...@@ -2008,7 +1999,7 @@ int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx, ...@@ -2008,7 +1999,7 @@ int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx,
struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband;
struct sk_buff *skb; struct sk_buff *skb;
struct wmi_begin_scan_cmd *sc; struct wmi_begin_scan_cmd *sc;
s8 size, *supp_rates; s8 *supp_rates;
int i, band, ret; int i, band, ret;
struct ath6kl *ar = wmi->parent_dev; struct ath6kl *ar = wmi->parent_dev;
int num_rates; int num_rates;
...@@ -2023,18 +2014,13 @@ int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx, ...@@ -2023,18 +2014,13 @@ int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx,
num_chan, ch_list); num_chan, ch_list);
} }
size = sizeof(struct wmi_begin_scan_cmd);
if ((scan_type != WMI_LONG_SCAN) && (scan_type != WMI_SHORT_SCAN)) if ((scan_type != WMI_LONG_SCAN) && (scan_type != WMI_SHORT_SCAN))
return -EINVAL; return -EINVAL;
if (num_chan > WMI_MAX_CHANNELS) if (num_chan > WMI_MAX_CHANNELS)
return -EINVAL; return -EINVAL;
if (num_chan) skb = ath6kl_wmi_get_new_buf(struct_size(sc, ch_list, num_chan));
size += sizeof(u16) * (num_chan - 1);
skb = ath6kl_wmi_get_new_buf(size);
if (!skb) if (!skb)
return -ENOMEM; return -ENOMEM;
......
...@@ -863,7 +863,7 @@ struct wmi_begin_scan_cmd { ...@@ -863,7 +863,7 @@ struct wmi_begin_scan_cmd {
u8 num_ch; u8 num_ch;
/* channels in Mhz */ /* channels in Mhz */
__le16 ch_list[1]; __le16 ch_list[];
} __packed; } __packed;
/* wmi_start_scan_cmd is to be deprecated. Use /* wmi_start_scan_cmd is to be deprecated. Use
...@@ -889,7 +889,7 @@ struct wmi_start_scan_cmd { ...@@ -889,7 +889,7 @@ struct wmi_start_scan_cmd {
u8 num_ch; u8 num_ch;
/* channels in Mhz */ /* channels in Mhz */
__le16 ch_list[1]; __le16 ch_list[];
} __packed; } __packed;
/* /*
...@@ -1373,7 +1373,7 @@ struct wmi_channel_list_reply { ...@@ -1373,7 +1373,7 @@ struct wmi_channel_list_reply {
u8 num_ch; u8 num_ch;
/* channel in Mhz */ /* channel in Mhz */
__le16 ch_list[1]; __le16 ch_list[];
} __packed; } __packed;
/* List of Events (target to host) */ /* List of Events (target to host) */
...@@ -1545,7 +1545,7 @@ struct wmi_connect_event { ...@@ -1545,7 +1545,7 @@ struct wmi_connect_event {
u8 beacon_ie_len; u8 beacon_ie_len;
u8 assoc_req_len; u8 assoc_req_len;
u8 assoc_resp_len; u8 assoc_resp_len;
u8 assoc_info[1]; u8 assoc_info[];
} __packed; } __packed;
/* Disconnect Event */ /* Disconnect Event */
...@@ -1596,7 +1596,7 @@ struct wmi_disconnect_event { ...@@ -1596,7 +1596,7 @@ struct wmi_disconnect_event {
u8 disconn_reason; u8 disconn_reason;
u8 assoc_resp_len; u8 assoc_resp_len;
u8 assoc_info[1]; u8 assoc_info[];
} __packed; } __packed;
/* /*
...@@ -1957,7 +1957,7 @@ union wmi_ap_info { ...@@ -1957,7 +1957,7 @@ union wmi_ap_info {
struct wmi_aplist_event { struct wmi_aplist_event {
u8 ap_list_ver; u8 ap_list_ver;
u8 num_ap; u8 num_ap;
union wmi_ap_info ap_list[1]; union wmi_ap_info ap_list[];
} __packed; } __packed;
/* Developer Commands */ /* Developer Commands */
......
...@@ -43,7 +43,7 @@ static bool ath_mci_add_profile(struct ath_common *common, ...@@ -43,7 +43,7 @@ static bool ath_mci_add_profile(struct ath_common *common,
struct ath_mci_profile_info *info) struct ath_mci_profile_info *info)
{ {
struct ath_mci_profile_info *entry; struct ath_mci_profile_info *entry;
u8 voice_priority[] = { 110, 110, 110, 112, 110, 110, 114, 116, 118 }; static const u8 voice_priority[] = { 110, 110, 110, 112, 110, 110, 114, 116, 118 };
if ((mci->num_sco == ATH_MCI_MAX_SCO_PROFILE) && if ((mci->num_sco == ATH_MCI_MAX_SCO_PROFILE) &&
(info->type == MCI_GPM_COEX_PROFILE_VOICE)) (info->type == MCI_GPM_COEX_PROFILE_VOICE))
......
...@@ -458,7 +458,6 @@ struct ar9170 { ...@@ -458,7 +458,6 @@ struct ar9170 {
# define CARL9170_HWRNG_CACHE_SIZE CARL9170_MAX_CMD_PAYLOAD_LEN # define CARL9170_HWRNG_CACHE_SIZE CARL9170_MAX_CMD_PAYLOAD_LEN
struct { struct {
struct hwrng rng; struct hwrng rng;
bool initialized;
char name[30 + 1]; char name[30 + 1];
u16 cache[CARL9170_HWRNG_CACHE_SIZE / sizeof(u16)]; u16 cache[CARL9170_HWRNG_CACHE_SIZE / sizeof(u16)];
unsigned int cache_idx; unsigned int cache_idx;
......
...@@ -1412,7 +1412,7 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw, ...@@ -1412,7 +1412,7 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
return -EOPNOTSUPP; return -EOPNOTSUPP;
tid_info = kzalloc(sizeof(struct carl9170_sta_tid), tid_info = kzalloc(sizeof(struct carl9170_sta_tid),
GFP_ATOMIC); GFP_KERNEL);
if (!tid_info) if (!tid_info)
return -ENOMEM; return -ENOMEM;
...@@ -1494,7 +1494,7 @@ static int carl9170_register_wps_button(struct ar9170 *ar) ...@@ -1494,7 +1494,7 @@ static int carl9170_register_wps_button(struct ar9170 *ar)
if (!(ar->features & CARL9170_WPS_BUTTON)) if (!(ar->features & CARL9170_WPS_BUTTON))
return 0; return 0;
input = input_allocate_device(); input = devm_input_allocate_device(&ar->udev->dev);
if (!input) if (!input)
return -ENOMEM; return -ENOMEM;
...@@ -1512,10 +1512,8 @@ static int carl9170_register_wps_button(struct ar9170 *ar) ...@@ -1512,10 +1512,8 @@ static int carl9170_register_wps_button(struct ar9170 *ar)
input_set_capability(input, EV_KEY, KEY_WPS_BUTTON); input_set_capability(input, EV_KEY, KEY_WPS_BUTTON);
err = input_register_device(input); err = input_register_device(input);
if (err) { if (err)
input_free_device(input);
return err; return err;
}
ar->wps.pbc = input; ar->wps.pbc = input;
return 0; return 0;
...@@ -1539,7 +1537,7 @@ static int carl9170_rng_get(struct ar9170 *ar) ...@@ -1539,7 +1537,7 @@ static int carl9170_rng_get(struct ar9170 *ar)
BUILD_BUG_ON(RB > CARL9170_MAX_CMD_PAYLOAD_LEN); BUILD_BUG_ON(RB > CARL9170_MAX_CMD_PAYLOAD_LEN);
if (!IS_ACCEPTING_CMD(ar) || !ar->rng.initialized) if (!IS_ACCEPTING_CMD(ar))
return -EAGAIN; return -EAGAIN;
count = ARRAY_SIZE(ar->rng.cache); count = ARRAY_SIZE(ar->rng.cache);
...@@ -1585,14 +1583,6 @@ static int carl9170_rng_read(struct hwrng *rng, u32 *data) ...@@ -1585,14 +1583,6 @@ static int carl9170_rng_read(struct hwrng *rng, u32 *data)
return sizeof(u16); return sizeof(u16);
} }
static void carl9170_unregister_hwrng(struct ar9170 *ar)
{
if (ar->rng.initialized) {
hwrng_unregister(&ar->rng.rng);
ar->rng.initialized = false;
}
}
static int carl9170_register_hwrng(struct ar9170 *ar) static int carl9170_register_hwrng(struct ar9170 *ar)
{ {
int err; int err;
...@@ -1603,25 +1593,14 @@ static int carl9170_register_hwrng(struct ar9170 *ar) ...@@ -1603,25 +1593,14 @@ static int carl9170_register_hwrng(struct ar9170 *ar)
ar->rng.rng.data_read = carl9170_rng_read; ar->rng.rng.data_read = carl9170_rng_read;
ar->rng.rng.priv = (unsigned long)ar; ar->rng.rng.priv = (unsigned long)ar;
if (WARN_ON(ar->rng.initialized)) err = devm_hwrng_register(&ar->udev->dev, &ar->rng.rng);
return -EALREADY;
err = hwrng_register(&ar->rng.rng);
if (err) { if (err) {
dev_err(&ar->udev->dev, "Failed to register the random " dev_err(&ar->udev->dev, "Failed to register the random "
"number generator (%d)\n", err); "number generator (%d)\n", err);
return err; return err;
} }
ar->rng.initialized = true; return carl9170_rng_get(ar);
err = carl9170_rng_get(ar);
if (err) {
carl9170_unregister_hwrng(ar);
return err;
}
return 0;
} }
#endif /* CONFIG_CARL9170_HWRNG */ #endif /* CONFIG_CARL9170_HWRNG */
...@@ -1937,7 +1916,8 @@ static int carl9170_parse_eeprom(struct ar9170 *ar) ...@@ -1937,7 +1916,8 @@ static int carl9170_parse_eeprom(struct ar9170 *ar)
if (!bands) if (!bands)
return -EINVAL; return -EINVAL;
ar->survey = kcalloc(chans, sizeof(struct survey_info), GFP_KERNEL); ar->survey = devm_kcalloc(&ar->udev->dev, chans,
sizeof(struct survey_info), GFP_KERNEL);
if (!ar->survey) if (!ar->survey)
return -ENOMEM; return -ENOMEM;
ar->num_channels = chans; ar->num_channels = chans;
...@@ -1964,11 +1944,7 @@ int carl9170_register(struct ar9170 *ar) ...@@ -1964,11 +1944,7 @@ int carl9170_register(struct ar9170 *ar)
struct ath_regulatory *regulatory = &ar->common.regulatory; struct ath_regulatory *regulatory = &ar->common.regulatory;
int err = 0, i; int err = 0, i;
if (WARN_ON(ar->mem_bitmap)) ar->mem_bitmap = devm_bitmap_zalloc(&ar->udev->dev, ar->fw.mem_blocks, GFP_KERNEL);
return -EINVAL;
ar->mem_bitmap = bitmap_zalloc(ar->fw.mem_blocks, GFP_KERNEL);
if (!ar->mem_bitmap) if (!ar->mem_bitmap)
return -ENOMEM; return -ENOMEM;
...@@ -2057,17 +2033,6 @@ void carl9170_unregister(struct ar9170 *ar) ...@@ -2057,17 +2033,6 @@ void carl9170_unregister(struct ar9170 *ar)
carl9170_debugfs_unregister(ar); carl9170_debugfs_unregister(ar);
#endif /* CONFIG_CARL9170_DEBUGFS */ #endif /* CONFIG_CARL9170_DEBUGFS */
#ifdef CONFIG_CARL9170_WPC
if (ar->wps.pbc) {
input_unregister_device(ar->wps.pbc);
ar->wps.pbc = NULL;
}
#endif /* CONFIG_CARL9170_WPC */
#ifdef CONFIG_CARL9170_HWRNG
carl9170_unregister_hwrng(ar);
#endif /* CONFIG_CARL9170_HWRNG */
carl9170_cancel_worker(ar); carl9170_cancel_worker(ar);
cancel_work_sync(&ar->restart_work); cancel_work_sync(&ar->restart_work);
...@@ -2082,12 +2047,6 @@ void carl9170_free(struct ar9170 *ar) ...@@ -2082,12 +2047,6 @@ void carl9170_free(struct ar9170 *ar)
kfree_skb(ar->rx_failover); kfree_skb(ar->rx_failover);
ar->rx_failover = NULL; ar->rx_failover = NULL;
bitmap_free(ar->mem_bitmap);
ar->mem_bitmap = NULL;
kfree(ar->survey);
ar->survey = NULL;
mutex_destroy(&ar->mutex); mutex_destroy(&ar->mutex);
ieee80211_free_hw(ar->hw); ieee80211_free_hw(ar->hw);
......
...@@ -667,14 +667,14 @@ ath_regd_init_wiphy(struct ath_regulatory *reg, ...@@ -667,14 +667,14 @@ ath_regd_init_wiphy(struct ath_regulatory *reg,
/* /*
* Some users have reported their EEPROM programmed with * Some users have reported their EEPROM programmed with
* 0x8000 or 0x0 set, this is not a supported regulatory * 0x8000 set, this is not a supported regulatory domain
* domain but since we have more than one user with it we * but since we have more than one user with it we need
* need a solution for them. We default to 0x64, which is * a solution for them. We default to 0x64, which is the
* the default Atheros world regulatory domain. * default Atheros world regulatory domain.
*/ */
static void ath_regd_sanitize(struct ath_regulatory *reg) static void ath_regd_sanitize(struct ath_regulatory *reg)
{ {
if (reg->current_rd != COUNTRY_ERD_FLAG && reg->current_rd != 0) if (reg->current_rd != COUNTRY_ERD_FLAG)
return; return;
printk(KERN_DEBUG "ath: EEPROM regdomain sanitized\n"); printk(KERN_DEBUG "ath: EEPROM regdomain sanitized\n");
reg->current_rd = 0x64; reg->current_rd = 0x64;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment