| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (c) 2002 Petko Manolov (petkan@users.sourceforge.net) |
|---|
| 3 | | - * |
|---|
| 4 | | - * This program is free software; you can redistribute it and/or |
|---|
| 5 | | - * modify it under the terms of the GNU General Public License |
|---|
| 6 | | - * version 2 as published by the Free Software Foundation. |
|---|
| 7 | 4 | */ |
|---|
| 8 | 5 | |
|---|
| 9 | 6 | #include <linux/signal.h> |
|---|
| .. | .. |
|---|
| 155 | 152 | */ |
|---|
| 156 | 153 | static int get_registers(rtl8150_t * dev, u16 indx, u16 size, void *data) |
|---|
| 157 | 154 | { |
|---|
| 158 | | - void *buf; |
|---|
| 159 | | - int ret; |
|---|
| 160 | | - |
|---|
| 161 | | - buf = kmalloc(size, GFP_NOIO); |
|---|
| 162 | | - if (!buf) |
|---|
| 163 | | - return -ENOMEM; |
|---|
| 164 | | - |
|---|
| 165 | | - ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), |
|---|
| 166 | | - RTL8150_REQ_GET_REGS, RTL8150_REQT_READ, |
|---|
| 167 | | - indx, 0, buf, size, 500); |
|---|
| 168 | | - if (ret > 0 && ret <= size) |
|---|
| 169 | | - memcpy(data, buf, ret); |
|---|
| 170 | | - kfree(buf); |
|---|
| 171 | | - return ret; |
|---|
| 155 | + return usb_control_msg_recv(dev->udev, 0, RTL8150_REQ_GET_REGS, |
|---|
| 156 | + RTL8150_REQT_READ, indx, 0, data, size, |
|---|
| 157 | + 1000, GFP_NOIO); |
|---|
| 172 | 158 | } |
|---|
| 173 | 159 | |
|---|
| 174 | 160 | static int set_registers(rtl8150_t * dev, u16 indx, u16 size, const void *data) |
|---|
| 175 | 161 | { |
|---|
| 176 | | - void *buf; |
|---|
| 177 | | - int ret; |
|---|
| 178 | | - |
|---|
| 179 | | - buf = kmemdup(data, size, GFP_NOIO); |
|---|
| 180 | | - if (!buf) |
|---|
| 181 | | - return -ENOMEM; |
|---|
| 182 | | - |
|---|
| 183 | | - ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), |
|---|
| 184 | | - RTL8150_REQ_SET_REGS, RTL8150_REQT_WRITE, |
|---|
| 185 | | - indx, 0, buf, size, 500); |
|---|
| 186 | | - kfree(buf); |
|---|
| 187 | | - return ret; |
|---|
| 162 | + return usb_control_msg_send(dev->udev, 0, RTL8150_REQ_SET_REGS, |
|---|
| 163 | + RTL8150_REQT_WRITE, indx, 0, data, size, |
|---|
| 164 | + 1000, GFP_NOIO); |
|---|
| 188 | 165 | } |
|---|
| 189 | 166 | |
|---|
| 190 | 167 | static void async_set_reg_cb(struct urb *urb) |
|---|
| .. | .. |
|---|
| 284 | 261 | |
|---|
| 285 | 262 | ret = get_registers(dev, IDR, sizeof(node_id), node_id); |
|---|
| 286 | 263 | |
|---|
| 287 | | - if (ret == sizeof(node_id)) { |
|---|
| 264 | + if (!ret) { |
|---|
| 288 | 265 | ether_addr_copy(dev->netdev->dev_addr, node_id); |
|---|
| 289 | 266 | } else { |
|---|
| 290 | 267 | eth_hw_addr_random(dev->netdev); |
|---|
| .. | .. |
|---|
| 396 | 373 | unsigned pkt_len, res; |
|---|
| 397 | 374 | struct sk_buff *skb; |
|---|
| 398 | 375 | struct net_device *netdev; |
|---|
| 399 | | - u16 rx_stat; |
|---|
| 400 | 376 | int status = urb->status; |
|---|
| 401 | 377 | int result; |
|---|
| 402 | 378 | unsigned long flags; |
|---|
| .. | .. |
|---|
| 432 | 408 | goto goon; |
|---|
| 433 | 409 | |
|---|
| 434 | 410 | res = urb->actual_length; |
|---|
| 435 | | - rx_stat = le16_to_cpu(*(__le16 *)(urb->transfer_buffer + res - 4)); |
|---|
| 436 | 411 | pkt_len = res - 4; |
|---|
| 437 | 412 | |
|---|
| 438 | 413 | skb_put(dev->rx_skb, pkt_len); |
|---|
| .. | .. |
|---|
| 599 | 574 | int i; |
|---|
| 600 | 575 | |
|---|
| 601 | 576 | for (i = 0; i < RX_SKB_POOL_SIZE; i++) |
|---|
| 602 | | - if (dev->rx_skb_pool[i]) |
|---|
| 603 | | - dev_kfree_skb(dev->rx_skb_pool[i]); |
|---|
| 577 | + dev_kfree_skb(dev->rx_skb_pool[i]); |
|---|
| 604 | 578 | } |
|---|
| 605 | 579 | |
|---|
| 606 | 580 | static void rx_fixup(unsigned long data) |
|---|
| .. | .. |
|---|
| 669 | 643 | set_registers(dev, CR, 1, &cr); |
|---|
| 670 | 644 | } |
|---|
| 671 | 645 | |
|---|
| 672 | | -static void rtl8150_tx_timeout(struct net_device *netdev) |
|---|
| 646 | +static void rtl8150_tx_timeout(struct net_device *netdev, unsigned int txqueue) |
|---|
| 673 | 647 | { |
|---|
| 674 | 648 | rtl8150_t *dev = netdev_priv(netdev); |
|---|
| 675 | 649 | dev_warn(&netdev->dev, "Tx timeout.\n"); |
|---|
| .. | .. |
|---|
| 857 | 831 | switch (cmd) { |
|---|
| 858 | 832 | case SIOCDEVPRIVATE: |
|---|
| 859 | 833 | data[0] = dev->phy; |
|---|
| 834 | + fallthrough; |
|---|
| 860 | 835 | case SIOCDEVPRIVATE + 1: |
|---|
| 861 | 836 | read_mii_word(dev, dev->phy, (data[1] & 0x1f), &data[3]); |
|---|
| 862 | 837 | break; |
|---|
| .. | .. |
|---|
| 958 | 933 | unlink_all_urbs(dev); |
|---|
| 959 | 934 | free_all_urbs(dev); |
|---|
| 960 | 935 | free_skb_pool(dev); |
|---|
| 961 | | - if (dev->rx_skb) |
|---|
| 962 | | - dev_kfree_skb(dev->rx_skb); |
|---|
| 936 | + dev_kfree_skb(dev->rx_skb); |
|---|
| 963 | 937 | kfree(dev->intr_buff); |
|---|
| 964 | 938 | free_netdev(dev->netdev); |
|---|
| 965 | 939 | } |
|---|