hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/net/hippi/rrunner.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * rrunner.c: Linux driver for the Essential RoadRunner HIPPI board.
34 *
....@@ -8,11 +9,6 @@
89 * been able to write this driver. A special thank you to John Gibbon
910 * for sorting out the legal issues, with the NDA, allowing the code to
1011 * be released under the GPL.
11
- *
12
- * This program is free software; you can redistribute it and/or modify
13
- * it under the terms of the GNU General Public License as published by
14
- * the Free Software Foundation; either version 2 of the License, or
15
- * (at your option) any later version.
1612 *
1713 * Thanks to Jayaram Bhat from ODS/Essential for fixing some of the
1814 * stupid bugs in my code.
....@@ -155,7 +151,8 @@
155151 goto out;
156152 }
157153
158
- tmpptr = pci_alloc_consistent(pdev, TX_TOTAL_SIZE, &ring_dma);
154
+ tmpptr = dma_alloc_coherent(&pdev->dev, TX_TOTAL_SIZE, &ring_dma,
155
+ GFP_KERNEL);
159156 rrpriv->tx_ring = tmpptr;
160157 rrpriv->tx_ring_dma = ring_dma;
161158
....@@ -164,7 +161,8 @@
164161 goto out;
165162 }
166163
167
- tmpptr = pci_alloc_consistent(pdev, RX_TOTAL_SIZE, &ring_dma);
164
+ tmpptr = dma_alloc_coherent(&pdev->dev, RX_TOTAL_SIZE, &ring_dma,
165
+ GFP_KERNEL);
168166 rrpriv->rx_ring = tmpptr;
169167 rrpriv->rx_ring_dma = ring_dma;
170168
....@@ -173,7 +171,8 @@
173171 goto out;
174172 }
175173
176
- tmpptr = pci_alloc_consistent(pdev, EVT_RING_SIZE, &ring_dma);
174
+ tmpptr = dma_alloc_coherent(&pdev->dev, EVT_RING_SIZE, &ring_dma,
175
+ GFP_KERNEL);
177176 rrpriv->evt_ring = tmpptr;
178177 rrpriv->evt_ring_dma = ring_dma;
179178
....@@ -202,14 +201,14 @@
202201
203202 out:
204203 if (rrpriv->evt_ring)
205
- pci_free_consistent(pdev, EVT_RING_SIZE, rrpriv->evt_ring,
206
- rrpriv->evt_ring_dma);
204
+ dma_free_coherent(&pdev->dev, EVT_RING_SIZE, rrpriv->evt_ring,
205
+ rrpriv->evt_ring_dma);
207206 if (rrpriv->rx_ring)
208
- pci_free_consistent(pdev, RX_TOTAL_SIZE, rrpriv->rx_ring,
209
- rrpriv->rx_ring_dma);
207
+ dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE, rrpriv->rx_ring,
208
+ rrpriv->rx_ring_dma);
210209 if (rrpriv->tx_ring)
211
- pci_free_consistent(pdev, TX_TOTAL_SIZE, rrpriv->tx_ring,
212
- rrpriv->tx_ring_dma);
210
+ dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE, rrpriv->tx_ring,
211
+ rrpriv->tx_ring_dma);
213212 if (rrpriv->regs)
214213 pci_iounmap(pdev, rrpriv->regs);
215214 if (pdev)
....@@ -232,12 +231,12 @@
232231 }
233232
234233 unregister_netdev(dev);
235
- pci_free_consistent(pdev, EVT_RING_SIZE, rr->evt_ring,
236
- rr->evt_ring_dma);
237
- pci_free_consistent(pdev, RX_TOTAL_SIZE, rr->rx_ring,
238
- rr->rx_ring_dma);
239
- pci_free_consistent(pdev, TX_TOTAL_SIZE, rr->tx_ring,
240
- rr->tx_ring_dma);
234
+ dma_free_coherent(&pdev->dev, EVT_RING_SIZE, rr->evt_ring,
235
+ rr->evt_ring_dma);
236
+ dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE, rr->rx_ring,
237
+ rr->rx_ring_dma);
238
+ dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE, rr->tx_ring,
239
+ rr->tx_ring_dma);
241240 pci_iounmap(pdev, rr->regs);
242241 pci_release_regions(pdev);
243242 pci_disable_device(pdev);
....@@ -652,8 +651,8 @@
652651 goto error;
653652 }
654653 rrpriv->rx_skbuff[i] = skb;
655
- addr = pci_map_single(rrpriv->pci_dev, skb->data,
656
- dev->mtu + HIPPI_HLEN, PCI_DMA_FROMDEVICE);
654
+ addr = dma_map_single(&rrpriv->pci_dev->dev, skb->data,
655
+ dev->mtu + HIPPI_HLEN, DMA_FROM_DEVICE);
657656 /*
658657 * Sanity test to see if we conflict with the DMA
659658 * limitations of the Roadrunner.
....@@ -703,10 +702,10 @@
703702 struct sk_buff *skb = rrpriv->rx_skbuff[i];
704703
705704 if (skb) {
706
- pci_unmap_single(rrpriv->pci_dev,
705
+ dma_unmap_single(&rrpriv->pci_dev->dev,
707706 rrpriv->rx_ring[i].addr.addrlo,
708707 dev->mtu + HIPPI_HLEN,
709
- PCI_DMA_FROMDEVICE);
708
+ DMA_FROM_DEVICE);
710709 rrpriv->rx_ring[i].size = 0;
711710 set_rraddr(&rrpriv->rx_ring[i].addr, 0);
712711 dev_kfree_skb(skb);
....@@ -957,18 +956,18 @@
957956 dev->stats.rx_dropped++;
958957 goto defer;
959958 } else {
960
- pci_dma_sync_single_for_cpu(rrpriv->pci_dev,
961
- desc->addr.addrlo,
962
- pkt_len,
963
- PCI_DMA_FROMDEVICE);
959
+ dma_sync_single_for_cpu(&rrpriv->pci_dev->dev,
960
+ desc->addr.addrlo,
961
+ pkt_len,
962
+ DMA_FROM_DEVICE);
964963
965964 skb_put_data(skb, rx_skb->data,
966965 pkt_len);
967966
968
- pci_dma_sync_single_for_device(rrpriv->pci_dev,
969
- desc->addr.addrlo,
970
- pkt_len,
971
- PCI_DMA_FROMDEVICE);
967
+ dma_sync_single_for_device(&rrpriv->pci_dev->dev,
968
+ desc->addr.addrlo,
969
+ pkt_len,
970
+ DMA_FROM_DEVICE);
972971 }
973972 }else{
974973 struct sk_buff *newskb;
....@@ -978,16 +977,17 @@
978977 if (newskb){
979978 dma_addr_t addr;
980979
981
- pci_unmap_single(rrpriv->pci_dev,
982
- desc->addr.addrlo, dev->mtu +
983
- HIPPI_HLEN, PCI_DMA_FROMDEVICE);
980
+ dma_unmap_single(&rrpriv->pci_dev->dev,
981
+ desc->addr.addrlo,
982
+ dev->mtu + HIPPI_HLEN,
983
+ DMA_FROM_DEVICE);
984984 skb = rx_skb;
985985 skb_put(skb, pkt_len);
986986 rrpriv->rx_skbuff[index] = newskb;
987
- addr = pci_map_single(rrpriv->pci_dev,
988
- newskb->data,
989
- dev->mtu + HIPPI_HLEN,
990
- PCI_DMA_FROMDEVICE);
987
+ addr = dma_map_single(&rrpriv->pci_dev->dev,
988
+ newskb->data,
989
+ dev->mtu + HIPPI_HLEN,
990
+ DMA_FROM_DEVICE);
991991 set_rraddr(&desc->addr, addr);
992992 } else {
993993 printk("%s: Out of memory, deferring "
....@@ -1072,9 +1072,9 @@
10721072 dev->stats.tx_packets++;
10731073 dev->stats.tx_bytes += skb->len;
10741074
1075
- pci_unmap_single(rrpriv->pci_dev,
1075
+ dma_unmap_single(&rrpriv->pci_dev->dev,
10761076 desc->addr.addrlo, skb->len,
1077
- PCI_DMA_TODEVICE);
1077
+ DMA_TO_DEVICE);
10781078 dev_kfree_skb_irq(skb);
10791079
10801080 rrpriv->tx_skbuff[txcon] = NULL;
....@@ -1114,8 +1114,9 @@
11141114 if (skb) {
11151115 struct tx_desc *desc = &(rrpriv->tx_ring[i]);
11161116
1117
- pci_unmap_single(rrpriv->pci_dev, desc->addr.addrlo,
1118
- skb->len, PCI_DMA_TODEVICE);
1117
+ dma_unmap_single(&rrpriv->pci_dev->dev,
1118
+ desc->addr.addrlo, skb->len,
1119
+ DMA_TO_DEVICE);
11191120 desc->size = 0;
11201121 set_rraddr(&desc->addr, 0);
11211122 dev_kfree_skb(skb);
....@@ -1136,8 +1137,10 @@
11361137 if (skb) {
11371138 struct rx_desc *desc = &(rrpriv->rx_ring[i]);
11381139
1139
- pci_unmap_single(rrpriv->pci_dev, desc->addr.addrlo,
1140
- dev->mtu + HIPPI_HLEN, PCI_DMA_FROMDEVICE);
1140
+ dma_unmap_single(&rrpriv->pci_dev->dev,
1141
+ desc->addr.addrlo,
1142
+ dev->mtu + HIPPI_HLEN,
1143
+ DMA_FROM_DEVICE);
11411144 desc->size = 0;
11421145 set_rraddr(&desc->addr, 0);
11431146 dev_kfree_skb(skb);
....@@ -1192,24 +1195,22 @@
11921195 goto error;
11931196 }
11941197
1195
- rrpriv->rx_ctrl = pci_alloc_consistent(pdev,
1196
- 256 * sizeof(struct ring_ctrl),
1197
- &dma_addr);
1198
+ rrpriv->rx_ctrl = dma_alloc_coherent(&pdev->dev,
1199
+ 256 * sizeof(struct ring_ctrl),
1200
+ &dma_addr, GFP_KERNEL);
11981201 if (!rrpriv->rx_ctrl) {
11991202 ecode = -ENOMEM;
12001203 goto error;
12011204 }
12021205 rrpriv->rx_ctrl_dma = dma_addr;
1203
- memset(rrpriv->rx_ctrl, 0, 256*sizeof(struct ring_ctrl));
12041206
1205
- rrpriv->info = pci_alloc_consistent(pdev, sizeof(struct rr_info),
1206
- &dma_addr);
1207
+ rrpriv->info = dma_alloc_coherent(&pdev->dev, sizeof(struct rr_info),
1208
+ &dma_addr, GFP_KERNEL);
12071209 if (!rrpriv->info) {
12081210 ecode = -ENOMEM;
12091211 goto error;
12101212 }
12111213 rrpriv->info_dma = dma_addr;
1212
- memset(rrpriv->info, 0, sizeof(struct rr_info));
12131214 wmb();
12141215
12151216 spin_lock_irqsave(&rrpriv->lock, flags);
....@@ -1243,13 +1244,13 @@
12431244 spin_unlock_irqrestore(&rrpriv->lock, flags);
12441245
12451246 if (rrpriv->info) {
1246
- pci_free_consistent(pdev, sizeof(struct rr_info), rrpriv->info,
1247
- rrpriv->info_dma);
1247
+ dma_free_coherent(&pdev->dev, sizeof(struct rr_info),
1248
+ rrpriv->info, rrpriv->info_dma);
12481249 rrpriv->info = NULL;
12491250 }
12501251 if (rrpriv->rx_ctrl) {
1251
- pci_free_consistent(pdev, 256 * sizeof(struct ring_ctrl),
1252
- rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma);
1252
+ dma_free_coherent(&pdev->dev, 256 * sizeof(struct ring_ctrl),
1253
+ rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma);
12531254 rrpriv->rx_ctrl = NULL;
12541255 }
12551256
....@@ -1298,11 +1299,11 @@
12981299 if (rrpriv->tx_skbuff[cons]){
12991300 len = min_t(int, 0x80, rrpriv->tx_skbuff[cons]->len);
13001301 printk("skbuff for cons %i is valid - dumping data (0x%x bytes - skbuff len 0x%x)\n", cons, len, rrpriv->tx_skbuff[cons]->len);
1301
- printk("mode 0x%x, size 0x%x,\n phys %08Lx, skbuff-addr %08lx, truesize 0x%x\n",
1302
+ printk("mode 0x%x, size 0x%x,\n phys %08Lx, skbuff-addr %p, truesize 0x%x\n",
13021303 rrpriv->tx_ring[cons].mode,
13031304 rrpriv->tx_ring[cons].size,
13041305 (unsigned long long) rrpriv->tx_ring[cons].addr.addrlo,
1305
- (unsigned long)rrpriv->tx_skbuff[cons]->data,
1306
+ rrpriv->tx_skbuff[cons]->data,
13061307 (unsigned int)rrpriv->tx_skbuff[cons]->truesize);
13071308 for (i = 0; i < len; i++){
13081309 if (!(i & 7))
....@@ -1352,7 +1353,9 @@
13521353
13531354 rrpriv->fw_running = 0;
13541355
1356
+ spin_unlock_irqrestore(&rrpriv->lock, flags);
13551357 del_timer_sync(&rrpriv->timer);
1358
+ spin_lock_irqsave(&rrpriv->lock, flags);
13561359
13571360 writel(0, &regs->TxPi);
13581361 writel(0, &regs->IpRxPi);
....@@ -1371,12 +1374,12 @@
13711374 rr_raz_tx(rrpriv, dev);
13721375 rr_raz_rx(rrpriv, dev);
13731376
1374
- pci_free_consistent(pdev, 256 * sizeof(struct ring_ctrl),
1375
- rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma);
1377
+ dma_free_coherent(&pdev->dev, 256 * sizeof(struct ring_ctrl),
1378
+ rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma);
13761379 rrpriv->rx_ctrl = NULL;
13771380
1378
- pci_free_consistent(pdev, sizeof(struct rr_info), rrpriv->info,
1379
- rrpriv->info_dma);
1381
+ dma_free_coherent(&pdev->dev, sizeof(struct rr_info), rrpriv->info,
1382
+ rrpriv->info_dma);
13801383 rrpriv->info = NULL;
13811384
13821385 spin_unlock_irqrestore(&rrpriv->lock, flags);
....@@ -1436,8 +1439,8 @@
14361439 index = txctrl->pi;
14371440
14381441 rrpriv->tx_skbuff[index] = skb;
1439
- set_rraddr(&rrpriv->tx_ring[index].addr, pci_map_single(
1440
- rrpriv->pci_dev, skb->data, len + 8, PCI_DMA_TODEVICE));
1442
+ set_rraddr(&rrpriv->tx_ring[index].addr,
1443
+ dma_map_single(&rrpriv->pci_dev->dev, skb->data, len + 8, DMA_TO_DEVICE));
14411444 rrpriv->tx_ring[index].size = len + 8; /* include IFIELD */
14421445 rrpriv->tx_ring[index].mode = PACKET_START | PACKET_END;
14431446 txctrl->pi = (index + 1) % TX_RING_ENTRIES;