.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * This file contains the major functions in WLAN |
---|
3 | 4 | * driver. It includes init, exit, open, close and main |
---|
.. | .. |
---|
216 | 217 | |
---|
217 | 218 | spin_lock_irqsave(&priv->driver_lock, flags); |
---|
218 | 219 | priv->iface_running = false; |
---|
219 | | - kfree_skb(priv->currenttxskb); |
---|
| 220 | + dev_kfree_skb_irq(priv->currenttxskb); |
---|
220 | 221 | priv->currenttxskb = NULL; |
---|
221 | 222 | priv->tx_pending_len = 0; |
---|
222 | 223 | spin_unlock_irqrestore(&priv->driver_lock, flags); |
---|
.. | .. |
---|
720 | 721 | * lbs_cmd_timeout_handler - handles the timeout of command sending. |
---|
721 | 722 | * It will re-send the same command again. |
---|
722 | 723 | * |
---|
723 | | - * @data: &struct lbs_private pointer |
---|
| 724 | + * @t: Context from which to retrieve a &struct lbs_private pointer |
---|
724 | 725 | */ |
---|
725 | 726 | static void lbs_cmd_timeout_handler(struct timer_list *t) |
---|
726 | 727 | { |
---|
.. | .. |
---|
754 | 755 | * to the hardware. This is known to frequently happen with SD8686 when |
---|
755 | 756 | * waking up after a Wake-on-WLAN-triggered resume. |
---|
756 | 757 | * |
---|
757 | | - * @data: &struct lbs_private pointer |
---|
| 758 | + * @t: Context from which to retrieve a &struct lbs_private pointer |
---|
758 | 759 | */ |
---|
759 | 760 | static void lbs_tx_lockup_handler(struct timer_list *t) |
---|
760 | 761 | { |
---|
.. | .. |
---|
776 | 777 | /** |
---|
777 | 778 | * auto_deepsleep_timer_fn - put the device back to deep sleep mode when |
---|
778 | 779 | * timer expires and no activity (command, event, data etc.) is detected. |
---|
779 | | - * @data: &struct lbs_private pointer |
---|
| 780 | + * @t: Context from which to retrieve a &struct lbs_private pointer |
---|
780 | 781 | * returns: N/A |
---|
781 | 782 | */ |
---|
782 | 783 | static void auto_deepsleep_timer_fn(struct timer_list *t) |
---|
.. | .. |
---|
869 | 870 | ret = kfifo_alloc(&priv->event_fifo, sizeof(u32) * 16, GFP_KERNEL); |
---|
870 | 871 | if (ret) { |
---|
871 | 872 | pr_err("Out of memory allocating event FIFO buffer\n"); |
---|
| 873 | + lbs_free_cmd_buffer(priv); |
---|
872 | 874 | goto out; |
---|
873 | 875 | } |
---|
874 | 876 | |
---|
.. | .. |
---|
907 | 909 | struct net_device *dev; |
---|
908 | 910 | struct wireless_dev *wdev; |
---|
909 | 911 | struct lbs_private *priv = NULL; |
---|
| 912 | + int err; |
---|
910 | 913 | |
---|
911 | 914 | /* Allocate an Ethernet device and register it */ |
---|
912 | 915 | wdev = lbs_cfg_alloc(dmdev); |
---|
913 | 916 | if (IS_ERR(wdev)) { |
---|
| 917 | + err = PTR_ERR(wdev); |
---|
914 | 918 | pr_err("cfg80211 init failed\n"); |
---|
915 | | - goto done; |
---|
| 919 | + goto err_cfg; |
---|
916 | 920 | } |
---|
917 | 921 | |
---|
918 | 922 | wdev->iftype = NL80211_IFTYPE_STATION; |
---|
919 | 923 | priv = wdev_priv(wdev); |
---|
920 | 924 | priv->wdev = wdev; |
---|
921 | 925 | |
---|
922 | | - if (lbs_init_adapter(priv)) { |
---|
| 926 | + err = lbs_init_adapter(priv); |
---|
| 927 | + if (err) { |
---|
923 | 928 | pr_err("failed to initialize adapter structure\n"); |
---|
924 | 929 | goto err_wdev; |
---|
925 | 930 | } |
---|
926 | 931 | |
---|
927 | 932 | dev = alloc_netdev(0, "wlan%d", NET_NAME_UNKNOWN, ether_setup); |
---|
928 | 933 | if (!dev) { |
---|
| 934 | + err = -ENOMEM; |
---|
929 | 935 | dev_err(dmdev, "no memory for network device instance\n"); |
---|
930 | 936 | goto err_adapter; |
---|
931 | 937 | } |
---|
.. | .. |
---|
949 | 955 | init_waitqueue_head(&priv->waitq); |
---|
950 | 956 | priv->main_thread = kthread_run(lbs_thread, dev, "lbs_main"); |
---|
951 | 957 | if (IS_ERR(priv->main_thread)) { |
---|
| 958 | + err = PTR_ERR(priv->main_thread); |
---|
952 | 959 | lbs_deb_thread("Error creating main thread.\n"); |
---|
953 | 960 | goto err_ndev; |
---|
954 | 961 | } |
---|
.. | .. |
---|
961 | 968 | priv->wol_gap = 20; |
---|
962 | 969 | priv->ehs_remove_supported = true; |
---|
963 | 970 | |
---|
964 | | - goto done; |
---|
| 971 | + return priv; |
---|
965 | 972 | |
---|
966 | 973 | err_ndev: |
---|
967 | 974 | free_netdev(dev); |
---|
.. | .. |
---|
972 | 979 | err_wdev: |
---|
973 | 980 | lbs_cfg_free(priv); |
---|
974 | 981 | |
---|
975 | | - priv = NULL; |
---|
976 | | - |
---|
977 | | -done: |
---|
978 | | - return priv; |
---|
| 982 | + err_cfg: |
---|
| 983 | + return ERR_PTR(err); |
---|
979 | 984 | } |
---|
980 | 985 | EXPORT_SYMBOL_GPL(lbs_add_card); |
---|
981 | 986 | |
---|
.. | .. |
---|
1042 | 1047 | int lbs_start_card(struct lbs_private *priv) |
---|
1043 | 1048 | { |
---|
1044 | 1049 | struct net_device *dev = priv->dev; |
---|
1045 | | - int ret = -1; |
---|
| 1050 | + int ret; |
---|
1046 | 1051 | |
---|
1047 | 1052 | /* poke the firmware */ |
---|
1048 | 1053 | ret = lbs_setup_firmware(priv); |
---|