forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
....@@ -70,7 +70,6 @@
7070 #include <net/tcp.h>
7171 #include <asm/byteorder.h>
7272 #include <asm/processor.h>
73
-#include <net/busy_poll.h>
7473
7574 #include "myri10ge_mcp.h"
7675 #include "myri10ge_mcp_gen_header.h"
....@@ -1175,18 +1174,6 @@
11751174 mb();
11761175 }
11771176
1178
-static inline void myri10ge_vlan_ip_csum(struct sk_buff *skb, __wsum hw_csum)
1179
-{
1180
- struct vlan_hdr *vh = (struct vlan_hdr *)(skb->data);
1181
-
1182
- if ((skb->protocol == htons(ETH_P_8021Q)) &&
1183
- (vh->h_vlan_encapsulated_proto == htons(ETH_P_IP) ||
1184
- vh->h_vlan_encapsulated_proto == htons(ETH_P_IPV6))) {
1185
- skb->csum = hw_csum;
1186
- skb->ip_summed = CHECKSUM_COMPLETE;
1187
- }
1188
-}
1189
-
11901177 static void
11911178 myri10ge_alloc_rx_pages(struct myri10ge_priv *mgp, struct myri10ge_rx_buf *rx,
11921179 int bytes, int watchdog)
....@@ -1287,7 +1274,7 @@
12871274 {
12881275 u8 *va;
12891276 struct vlan_ethhdr *veh;
1290
- struct skb_frag_struct *frag;
1277
+ skb_frag_t *frag;
12911278 __wsum vsum;
12921279
12931280 va = addr;
....@@ -1307,8 +1294,8 @@
13071294 skb->len -= VLAN_HLEN;
13081295 skb->data_len -= VLAN_HLEN;
13091296 frag = skb_shinfo(skb)->frags;
1310
- frag->page_offset += VLAN_HLEN;
1311
- skb_frag_size_set(frag, skb_frag_size(frag) - VLAN_HLEN);
1297
+ skb_frag_off_add(frag, VLAN_HLEN);
1298
+ skb_frag_size_sub(frag, VLAN_HLEN);
13121299 }
13131300 }
13141301
....@@ -1319,7 +1306,7 @@
13191306 {
13201307 struct myri10ge_priv *mgp = ss->mgp;
13211308 struct sk_buff *skb;
1322
- struct skb_frag_struct *rx_frags;
1309
+ skb_frag_t *rx_frags;
13231310 struct myri10ge_rx_buf *rx;
13241311 int i, idx, remainder, bytes;
13251312 struct pci_dev *pdev = mgp->pdev;
....@@ -1352,7 +1339,7 @@
13521339 return 0;
13531340 }
13541341 rx_frags = skb_shinfo(skb)->frags;
1355
- /* Fill skb_frag_struct(s) with data from our receive */
1342
+ /* Fill skb_frag_t(s) with data from our receive */
13561343 for (i = 0, remainder = len; remainder > 0; i++) {
13571344 myri10ge_unmap_rx_page(pdev, &rx->info[idx], bytes);
13581345 skb_fill_page_desc(skb, i, rx->info[idx].page,
....@@ -1365,8 +1352,8 @@
13651352 }
13661353
13671354 /* remove padding */
1368
- rx_frags[0].page_offset += MXGEFW_PAD;
1369
- rx_frags[0].size -= MXGEFW_PAD;
1355
+ skb_frag_off_add(&rx_frags[0], MXGEFW_PAD);
1356
+ skb_frag_size_sub(&rx_frags[0], MXGEFW_PAD);
13701357 len -= MXGEFW_PAD;
13711358
13721359 skb->len = len;
....@@ -1409,7 +1396,7 @@
14091396 if (skb) {
14101397 ss->stats.tx_bytes += skb->len;
14111398 ss->stats.tx_packets++;
1412
- dev_kfree_skb_irq(skb);
1399
+ dev_consume_skb_irq(skb);
14131400 if (len)
14141401 pci_unmap_single(pdev,
14151402 dma_unmap_addr(&tx->info[idx],
....@@ -1440,7 +1427,6 @@
14401427 tx->queue_active = 0;
14411428 put_be32(htonl(1), tx->send_stop);
14421429 mb();
1443
- mmiowb();
14441430 }
14451431 __netif_tx_unlock(dev_queue);
14461432 }
....@@ -1922,6 +1908,7 @@
19221908 }
19231909
19241910 static const struct ethtool_ops myri10ge_ethtool_ops = {
1911
+ .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS,
19251912 .get_drvinfo = myri10ge_get_drvinfo,
19261913 .get_coalesce = myri10ge_get_coalesce,
19271914 .set_coalesce = myri10ge_set_coalesce,
....@@ -2630,7 +2617,7 @@
26302617 struct myri10ge_slice_state *ss;
26312618 struct mcp_kreq_ether_send *req;
26322619 struct myri10ge_tx_buf *tx;
2633
- struct skb_frag_struct *frag;
2620
+ skb_frag_t *frag;
26342621 struct netdev_queue *netdev_queue;
26352622 dma_addr_t bus;
26362623 u32 low;
....@@ -2862,7 +2849,6 @@
28622849 tx->queue_active = 1;
28632850 put_be32(htonl(1), tx->send_go);
28642851 mb();
2865
- mmiowb();
28662852 }
28672853 tx->pkt_start++;
28682854 if ((avail - count) < MXGEFW_MAX_SEND_DESC) {
....@@ -2895,7 +2881,7 @@
28952881 static netdev_tx_t myri10ge_sw_tso(struct sk_buff *skb,
28962882 struct net_device *dev)
28972883 {
2898
- struct sk_buff *segs, *curr;
2884
+ struct sk_buff *segs, *curr, *next;
28992885 struct myri10ge_priv *mgp = netdev_priv(dev);
29002886 struct myri10ge_slice_state *ss;
29012887 netdev_tx_t status;
....@@ -2904,18 +2890,14 @@
29042890 if (IS_ERR(segs))
29052891 goto drop;
29062892
2907
- while (segs) {
2908
- curr = segs;
2909
- segs = segs->next;
2910
- curr->next = NULL;
2893
+ skb_list_walk_safe(segs, curr, next) {
2894
+ skb_mark_not_on_list(curr);
29112895 status = myri10ge_xmit(curr, dev);
29122896 if (status != 0) {
29132897 dev_kfree_skb_any(curr);
2914
- if (segs != NULL) {
2915
- curr = segs;
2916
- segs = segs->next;
2898
+ skb_list_walk_safe(next, curr, next) {
29172899 curr->next = NULL;
2918
- dev_kfree_skb_any(segs);
2900
+ dev_kfree_skb_any(curr);
29192901 }
29202902 goto drop;
29212903 }
....@@ -3040,7 +3022,6 @@
30403022 static int myri10ge_change_mtu(struct net_device *dev, int new_mtu)
30413023 {
30423024 struct myri10ge_priv *mgp = netdev_priv(dev);
3043
- int error = 0;
30443025
30453026 netdev_info(dev, "changing mtu from %d to %d\n", dev->mtu, new_mtu);
30463027 if (mgp->running) {
....@@ -3052,7 +3033,7 @@
30523033 } else
30533034 dev->mtu = new_mtu;
30543035
3055
- return error;
3036
+ return 0;
30563037 }
30573038
30583039 /*
....@@ -3274,13 +3255,12 @@
32743255 }
32753256 }
32763257
3277
-#ifdef CONFIG_PM
3278
-static int myri10ge_suspend(struct pci_dev *pdev, pm_message_t state)
3258
+static int __maybe_unused myri10ge_suspend(struct device *dev)
32793259 {
32803260 struct myri10ge_priv *mgp;
32813261 struct net_device *netdev;
32823262
3283
- mgp = pci_get_drvdata(pdev);
3263
+ mgp = dev_get_drvdata(dev);
32843264 if (mgp == NULL)
32853265 return -EINVAL;
32863266 netdev = mgp->dev;
....@@ -3293,14 +3273,13 @@
32933273 rtnl_unlock();
32943274 }
32953275 myri10ge_dummy_rdma(mgp, 0);
3296
- pci_save_state(pdev);
3297
- pci_disable_device(pdev);
32983276
3299
- return pci_set_power_state(pdev, pci_choose_state(pdev, state));
3277
+ return 0;
33003278 }
33013279
3302
-static int myri10ge_resume(struct pci_dev *pdev)
3280
+static int __maybe_unused myri10ge_resume(struct device *dev)
33033281 {
3282
+ struct pci_dev *pdev = to_pci_dev(dev);
33043283 struct myri10ge_priv *mgp;
33053284 struct net_device *netdev;
33063285 int status;
....@@ -3310,7 +3289,6 @@
33103289 if (mgp == NULL)
33113290 return -EINVAL;
33123291 netdev = mgp->dev;
3313
- pci_set_power_state(pdev, PCI_D0); /* zeros conf space as a side effect */
33143292 msleep(5); /* give card time to respond */
33153293 pci_read_config_word(mgp->pdev, PCI_VENDOR_ID, &vendor);
33163294 if (vendor == 0xffff) {
....@@ -3318,22 +3296,8 @@
33183296 return -EIO;
33193297 }
33203298
3321
- pci_restore_state(pdev);
3322
-
3323
- status = pci_enable_device(pdev);
3324
- if (status) {
3325
- dev_err(&pdev->dev, "failed to enable device\n");
3326
- return status;
3327
- }
3328
-
3329
- pci_set_master(pdev);
3330
-
33313299 myri10ge_reset(mgp);
33323300 myri10ge_dummy_rdma(mgp, 1);
3333
-
3334
- /* Save configuration space to be restored if the
3335
- * nic resets due to a parity error */
3336
- pci_save_state(pdev);
33373301
33383302 if (netif_running(netdev)) {
33393303 rtnl_lock();
....@@ -3348,11 +3312,8 @@
33483312 return 0;
33493313
33503314 abort_with_enabled:
3351
- pci_disable_device(pdev);
33523315 return -EIO;
3353
-
33543316 }
3355
-#endif /* CONFIG_PM */
33563317
33573318 static u32 myri10ge_read_reboot(struct myri10ge_priv *mgp)
33583319 {
....@@ -3580,11 +3541,10 @@
35803541 ss->fw_stats, ss->fw_stats_bus);
35813542 ss->fw_stats = NULL;
35823543 }
3583
- napi_hash_del(&ss->napi);
3584
- netif_napi_del(&ss->napi);
3544
+ __netif_napi_del(&ss->napi);
35853545 }
35863546 /* Wait till napi structs are no longer used, and then free ss. */
3587
- synchronize_rcu();
3547
+ synchronize_net();
35883548 kfree(mgp->ss);
35893549 mgp->ss = NULL;
35903550 }
....@@ -3605,9 +3565,9 @@
36053565 for (i = 0; i < mgp->num_slices; i++) {
36063566 ss = &mgp->ss[i];
36073567 bytes = mgp->max_intr_slots * sizeof(*ss->rx_done.entry);
3608
- ss->rx_done.entry = dma_zalloc_coherent(&pdev->dev, bytes,
3609
- &ss->rx_done.bus,
3610
- GFP_KERNEL);
3568
+ ss->rx_done.entry = dma_alloc_coherent(&pdev->dev, bytes,
3569
+ &ss->rx_done.bus,
3570
+ GFP_KERNEL);
36113571 if (ss->rx_done.entry == NULL)
36123572 goto abort;
36133573 bytes = sizeof(*ss->fw_stats);
....@@ -3960,6 +3920,7 @@
39603920 myri10ge_free_slices(mgp);
39613921
39623922 abort_with_firmware:
3923
+ kfree(mgp->msix_vectors);
39633924 myri10ge_dummy_rdma(mgp, 0);
39643925
39653926 abort_with_ioremap:
....@@ -4035,15 +3996,14 @@
40353996
40363997 MODULE_DEVICE_TABLE(pci, myri10ge_pci_tbl);
40373998
3999
+static SIMPLE_DEV_PM_OPS(myri10ge_pm_ops, myri10ge_suspend, myri10ge_resume);
4000
+
40384001 static struct pci_driver myri10ge_driver = {
40394002 .name = "myri10ge",
40404003 .probe = myri10ge_probe,
40414004 .remove = myri10ge_remove,
40424005 .id_table = myri10ge_pci_tbl,
4043
-#ifdef CONFIG_PM
4044
- .suspend = myri10ge_suspend,
4045
- .resume = myri10ge_resume,
4046
-#endif
4006
+ .driver.pm = &myri10ge_pm_ops,
40474007 };
40484008
40494009 #ifdef CONFIG_MYRI10GE_DCA