hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/drivers/net/ethernet/sgi/meth.c
....@@ -1,12 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * meth.c -- O2 Builtin 10/100 Ethernet driver
34 *
45 * Copyright (C) 2001-2003 Ilya Volynets
5
- *
6
- * This program is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU General Public License
8
- * as published by the Free Software Foundation; either version
9
- * 2 of the License, or (at your option) any later version.
106 */
117 #include <linux/delay.h>
128 #include <linux/dma-mapping.h>
....@@ -68,6 +64,8 @@
6864 * packets in and out, so there is place for a packet
6965 */
7066 struct meth_private {
67
+ struct platform_device *pdev;
68
+
7169 /* in-memory copy of MAC Control register */
7270 u64 mac_ctrl;
7371
....@@ -92,7 +90,7 @@
9290 spinlock_t meth_lock;
9391 };
9492
95
-static void meth_tx_timeout(struct net_device *dev);
93
+static void meth_tx_timeout(struct net_device *dev, unsigned int txqueue);
9694 static irqreturn_t meth_interrupt(int irq, void *dev_id);
9795
9896 /* global, initialized in ip32-setup.c */
....@@ -211,8 +209,8 @@
211209 static int meth_init_tx_ring(struct meth_private *priv)
212210 {
213211 /* Init TX ring */
214
- priv->tx_ring = dma_zalloc_coherent(NULL, TX_RING_BUFFER_SIZE,
215
- &priv->tx_ring_dma, GFP_ATOMIC);
212
+ priv->tx_ring = dma_alloc_coherent(&priv->pdev->dev,
213
+ TX_RING_BUFFER_SIZE, &priv->tx_ring_dma, GFP_ATOMIC);
216214 if (!priv->tx_ring)
217215 return -ENOMEM;
218216
....@@ -236,7 +234,7 @@
236234 priv->rx_ring[i]=(rx_packet*)(priv->rx_skbs[i]->head);
237235 /* I'll need to re-sync it after each RX */
238236 priv->rx_ring_dmas[i] =
239
- dma_map_single(NULL, priv->rx_ring[i],
237
+ dma_map_single(&priv->pdev->dev, priv->rx_ring[i],
240238 METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
241239 mace->eth.rx_fifo = priv->rx_ring_dmas[i];
242240 }
....@@ -249,11 +247,10 @@
249247
250248 /* Remove any pending skb */
251249 for (i = 0; i < TX_RING_ENTRIES; i++) {
252
- if (priv->tx_skbs[i])
253
- dev_kfree_skb(priv->tx_skbs[i]);
250
+ dev_kfree_skb(priv->tx_skbs[i]);
254251 priv->tx_skbs[i] = NULL;
255252 }
256
- dma_free_coherent(NULL, TX_RING_BUFFER_SIZE, priv->tx_ring,
253
+ dma_free_coherent(&priv->pdev->dev, TX_RING_BUFFER_SIZE, priv->tx_ring,
257254 priv->tx_ring_dma);
258255 }
259256
....@@ -263,7 +260,7 @@
263260 int i;
264261
265262 for (i = 0; i < RX_RING_ENTRIES; i++) {
266
- dma_unmap_single(NULL, priv->rx_ring_dmas[i],
263
+ dma_unmap_single(&priv->pdev->dev, priv->rx_ring_dmas[i],
267264 METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
268265 priv->rx_ring[i] = 0;
269266 priv->rx_ring_dmas[i] = 0;
....@@ -393,7 +390,8 @@
393390 fifo_rptr = (fifo_rptr - 1) & 0x0f;
394391 }
395392 while (priv->rx_write != fifo_rptr) {
396
- dma_unmap_single(NULL, priv->rx_ring_dmas[priv->rx_write],
393
+ dma_unmap_single(&priv->pdev->dev,
394
+ priv->rx_ring_dmas[priv->rx_write],
397395 METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
398396 status = priv->rx_ring[priv->rx_write]->status.raw;
399397 #if MFE_DEBUG
....@@ -454,7 +452,8 @@
454452 priv->rx_ring[priv->rx_write] = (rx_packet*)skb->head;
455453 priv->rx_ring[priv->rx_write]->status.raw = 0;
456454 priv->rx_ring_dmas[priv->rx_write] =
457
- dma_map_single(NULL, priv->rx_ring[priv->rx_write],
455
+ dma_map_single(&priv->pdev->dev,
456
+ priv->rx_ring[priv->rx_write],
458457 METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
459458 mace->eth.rx_fifo = priv->rx_ring_dmas[priv->rx_write];
460459 ADVANCE_RX_PTR(priv->rx_write);
....@@ -521,7 +520,7 @@
521520 DPRINTK("RPTR points us here, but packet not done?\n");
522521 break;
523522 }
524
- dev_kfree_skb_irq(skb);
523
+ dev_consume_skb_irq(skb);
525524 priv->tx_skbs[priv->tx_read] = NULL;
526525 priv->tx_ring[priv->tx_read].header.raw = 0;
527526 priv->tx_read = (priv->tx_read+1)&(TX_RING_ENTRIES-1);
....@@ -637,7 +636,7 @@
637636 }
638637
639638 /* first page */
640
- catbuf = dma_map_single(NULL, buffer_data, buffer_len,
639
+ catbuf = dma_map_single(&priv->pdev->dev, buffer_data, buffer_len,
641640 DMA_TO_DEVICE);
642641 desc->data.cat_buf[0].form.start_addr = catbuf >> 3;
643642 desc->data.cat_buf[0].form.len = buffer_len - 1;
....@@ -663,12 +662,12 @@
663662 }
664663
665664 /* first page */
666
- catbuf1 = dma_map_single(NULL, buffer1_data, buffer1_len,
665
+ catbuf1 = dma_map_single(&priv->pdev->dev, buffer1_data, buffer1_len,
667666 DMA_TO_DEVICE);
668667 desc->data.cat_buf[0].form.start_addr = catbuf1 >> 3;
669668 desc->data.cat_buf[0].form.len = buffer1_len - 1;
670669 /* second page */
671
- catbuf2 = dma_map_single(NULL, buffer2_data, buffer2_len,
670
+ catbuf2 = dma_map_single(&priv->pdev->dev, buffer2_data, buffer2_len,
672671 DMA_TO_DEVICE);
673672 desc->data.cat_buf[1].form.start_addr = catbuf2 >> 3;
674673 desc->data.cat_buf[1].form.len = buffer2_len - 1;
....@@ -728,7 +727,7 @@
728727 /*
729728 * Deal with a transmit timeout.
730729 */
731
-static void meth_tx_timeout(struct net_device *dev)
730
+static void meth_tx_timeout(struct net_device *dev, unsigned int txqueue)
732731 {
733732 struct meth_private *priv = netdev_priv(dev);
734733 unsigned long flags;
....@@ -840,6 +839,7 @@
840839 memcpy(dev->dev_addr, o2meth_eaddr, ETH_ALEN);
841840
842841 priv = netdev_priv(dev);
842
+ priv->pdev = pdev;
843843 spin_lock_init(&priv->meth_lock);
844844 SET_NETDEV_DEV(dev, &pdev->dev);
845845