forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 072de836f53be56a70cecf70b43ae43b7ce17376
kernel/drivers/net/thunderbolt.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
23 * Networking over Thunderbolt cable using Apple ThunderboltIP protocol
34 *
....@@ -5,10 +6,6 @@
56 * Authors: Amir Levy <amir.jer.levy@intel.com>
67 * Michael Jamet <michael.jamet@intel.com>
78 * Mika Westerberg <mika.westerberg@linux.intel.com>
8
- *
9
- * This program is free software; you can redistribute it and/or modify
10
- * it under the terms of the GNU General Public License version 2 as
11
- * published by the Free Software Foundation.
129 */
1310
1411 #include <linux/atomic.h>
....@@ -869,8 +866,8 @@
869866 eof_mask = BIT(TBIP_PDF_FRAME_END);
870867
871868 ring = tb_ring_alloc_rx(xd->tb->nhi, -1, TBNET_RING_SIZE,
872
- RING_FLAG_FRAME | RING_FLAG_E2E, sof_mask,
873
- eof_mask, tbnet_start_poll, net);
869
+ RING_FLAG_FRAME, sof_mask, eof_mask,
870
+ tbnet_start_poll, net);
874871 if (!ring) {
875872 netdev_err(dev, "failed to allocate Rx ring\n");
876873 tb_ring_free(net->tx_ring.ring);
....@@ -1008,7 +1005,7 @@
10081005 const skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_num];
10091006
10101007 *len = skb_frag_size(frag);
1011
- return kmap_atomic(skb_frag_page(frag)) + frag->page_offset;
1008
+ return kmap_atomic(skb_frag_page(frag)) + skb_frag_off(frag);
10121009 }
10131010
10141011 static netdev_tx_t tbnet_start_xmit(struct sk_buff *skb,
....@@ -1338,16 +1335,29 @@
13381335 tb_property_add_immediate(tbnet_dir, "prtcid", 1);
13391336 tb_property_add_immediate(tbnet_dir, "prtcvers", 1);
13401337 tb_property_add_immediate(tbnet_dir, "prtcrevs", 1);
1338
+ /* Currently only announce support for match frags ID (bit 1). Bit 0
1339
+ * is reserved for full E2E flow control which we do not support at
1340
+ * the moment.
1341
+ */
13411342 tb_property_add_immediate(tbnet_dir, "prtcstns",
13421343 TBNET_MATCH_FRAGS_ID);
13431344
13441345 ret = tb_register_property_dir("network", tbnet_dir);
1345
- if (ret) {
1346
- tb_property_free_dir(tbnet_dir);
1347
- return ret;
1348
- }
1346
+ if (ret)
1347
+ goto err_free_dir;
13491348
1350
- return tb_register_service_driver(&tbnet_driver);
1349
+ ret = tb_register_service_driver(&tbnet_driver);
1350
+ if (ret)
1351
+ goto err_unregister;
1352
+
1353
+ return 0;
1354
+
1355
+err_unregister:
1356
+ tb_unregister_property_dir("network", tbnet_dir);
1357
+err_free_dir:
1358
+ tb_property_free_dir(tbnet_dir);
1359
+
1360
+ return ret;
13511361 }
13521362 module_init(tbnet_init);
13531363