| .. | .. | 
|---|
|  | 1 | +// SPDX-License-Identifier: GPL-2.0-or-later | 
|---|
| 1 | 2 | /* | 
|---|
| 2 | 3 | * Ethernet driver for the WIZnet W5100 chip. | 
|---|
| 3 | 4 | * | 
|---|
| 4 | 5 | * Copyright (C) 2006-2008 WIZnet Co.,Ltd. | 
|---|
| 5 | 6 | * Copyright (C) 2012 Mike Sinkovsky <msink@permonline.ru> | 
|---|
| 6 |  | - * | 
|---|
| 7 |  | - * Licensed under the GPL-2 or later. | 
|---|
| 8 | 7 | */ | 
|---|
| 9 | 8 |  | 
|---|
| 10 | 9 | #include <linux/kernel.h> | 
|---|
| .. | .. | 
|---|
| 219 | 218 | static inline int w5100_write_direct(struct net_device *ndev, u32 addr, u8 data) | 
|---|
| 220 | 219 | { | 
|---|
| 221 | 220 | __w5100_write_direct(ndev, addr, data); | 
|---|
| 222 |  | -	mmiowb(); | 
|---|
| 223 | 221 |  | 
|---|
| 224 | 222 | return 0; | 
|---|
| 225 | 223 | } | 
|---|
| .. | .. | 
|---|
| 236 | 234 | { | 
|---|
| 237 | 235 | __w5100_write_direct(ndev, addr, data >> 8); | 
|---|
| 238 | 236 | __w5100_write_direct(ndev, addr + 1, data); | 
|---|
| 239 |  | -	mmiowb(); | 
|---|
| 240 | 237 |  | 
|---|
| 241 | 238 | return 0; | 
|---|
| 242 | 239 | } | 
|---|
| .. | .. | 
|---|
| 259 | 256 |  | 
|---|
| 260 | 257 | for (i = 0; i < len; i++, addr++) | 
|---|
| 261 | 258 | __w5100_write_direct(ndev, addr, *buf++); | 
|---|
| 262 |  | - | 
|---|
| 263 |  | -	mmiowb(); | 
|---|
| 264 | 259 |  | 
|---|
| 265 | 260 | return 0; | 
|---|
| 266 | 261 | } | 
|---|
| .. | .. | 
|---|
| 375 | 370 | for (i = 0; i < len; i++) | 
|---|
| 376 | 371 | *buf++ = w5100_read_direct(ndev, W5100_IDM_DR); | 
|---|
| 377 | 372 |  | 
|---|
| 378 |  | -	mmiowb(); | 
|---|
| 379 | 373 | spin_unlock_irqrestore(&mmio_priv->reg_lock, flags); | 
|---|
| 380 | 374 |  | 
|---|
| 381 | 375 | return 0; | 
|---|
| .. | .. | 
|---|
| 394 | 388 | for (i = 0; i < len; i++) | 
|---|
| 395 | 389 | __w5100_write_direct(ndev, W5100_IDM_DR, *buf++); | 
|---|
| 396 | 390 |  | 
|---|
| 397 |  | -	mmiowb(); | 
|---|
| 398 | 391 | spin_unlock_irqrestore(&mmio_priv->reg_lock, flags); | 
|---|
| 399 | 392 |  | 
|---|
| 400 | 393 | return 0; | 
|---|
| .. | .. | 
|---|
| 797 | 790 | w5100_restart(priv->ndev); | 
|---|
| 798 | 791 | } | 
|---|
| 799 | 792 |  | 
|---|
| 800 |  | -static void w5100_tx_timeout(struct net_device *ndev) | 
|---|
|  | 793 | +static void w5100_tx_timeout(struct net_device *ndev, unsigned int txqueue) | 
|---|
| 801 | 794 | { | 
|---|
| 802 | 795 | struct w5100_priv *priv = netdev_priv(ndev); | 
|---|
| 803 | 796 |  | 
|---|
| .. | .. | 
|---|
| 1166 | 1159 | INIT_WORK(&priv->setrx_work, w5100_setrx_work); | 
|---|
| 1167 | 1160 | INIT_WORK(&priv->restart_work, w5100_restart_work); | 
|---|
| 1168 | 1161 |  | 
|---|
| 1169 |  | -	if (mac_addr) | 
|---|
|  | 1162 | +	if (!IS_ERR_OR_NULL(mac_addr)) | 
|---|
| 1170 | 1163 | memcpy(ndev->dev_addr, mac_addr, ETH_ALEN); | 
|---|
| 1171 | 1164 | else | 
|---|
| 1172 | 1165 | eth_hw_addr_random(ndev); | 
|---|