qede_fp.c 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723
  1. /* QLogic qede NIC Driver
  2. * Copyright (c) 2015-2017 QLogic Corporation
  3. *
  4. * This software is available to you under a choice of one of two
  5. * licenses. You may choose to be licensed under the terms of the GNU
  6. * General Public License (GPL) Version 2, available from the file
  7. * COPYING in the main directory of this source tree, or the
  8. * OpenIB.org BSD license below:
  9. *
  10. * Redistribution and use in source and binary forms, with or
  11. * without modification, are permitted provided that the following
  12. * conditions are met:
  13. *
  14. * - Redistributions of source code must retain the above
  15. * copyright notice, this list of conditions and the following
  16. * disclaimer.
  17. *
  18. * - Redistributions in binary form must reproduce the above
  19. * copyright notice, this list of conditions and the following
  20. * disclaimer in the documentation and /or other materials
  21. * provided with the distribution.
  22. *
  23. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30. * SOFTWARE.
  31. */
  32. #include <linux/netdevice.h>
  33. #include <linux/etherdevice.h>
  34. #include <linux/skbuff.h>
  35. #include <linux/bpf_trace.h>
  36. #include <net/udp_tunnel.h>
  37. #include <linux/ip.h>
  38. #include <net/ipv6.h>
  39. #include <net/tcp.h>
  40. #include <linux/if_ether.h>
  41. #include <linux/if_vlan.h>
  42. #include <net/ip6_checksum.h>
  43. #include "qede_ptp.h"
  44. #include <linux/qed/qed_if.h>
  45. #include "qede.h"
  46. /*********************************
  47. * Content also used by slowpath *
  48. *********************************/
  49. int qede_alloc_rx_buffer(struct qede_rx_queue *rxq, bool allow_lazy)
  50. {
  51. struct sw_rx_data *sw_rx_data;
  52. struct eth_rx_bd *rx_bd;
  53. dma_addr_t mapping;
  54. struct page *data;
  55. /* In case lazy-allocation is allowed, postpone allocation until the
  56. * end of the NAPI run. We'd still need to make sure the Rx ring has
  57. * sufficient buffers to guarantee an additional Rx interrupt.
  58. */
  59. if (allow_lazy && likely(rxq->filled_buffers > 12)) {
  60. rxq->filled_buffers--;
  61. return 0;
  62. }
  63. data = alloc_pages(GFP_ATOMIC, 0);
  64. if (unlikely(!data))
  65. return -ENOMEM;
  66. /* Map the entire page as it would be used
  67. * for multiple RX buffer segment size mapping.
  68. */
  69. mapping = dma_map_page(rxq->dev, data, 0,
  70. PAGE_SIZE, rxq->data_direction);
  71. if (unlikely(dma_mapping_error(rxq->dev, mapping))) {
  72. __free_page(data);
  73. return -ENOMEM;
  74. }
  75. sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_prod & NUM_RX_BDS_MAX];
  76. sw_rx_data->page_offset = 0;
  77. sw_rx_data->data = data;
  78. sw_rx_data->mapping = mapping;
  79. /* Advance PROD and get BD pointer */
  80. rx_bd = (struct eth_rx_bd *)qed_chain_produce(&rxq->rx_bd_ring);
  81. WARN_ON(!rx_bd);
  82. rx_bd->addr.hi = cpu_to_le32(upper_32_bits(mapping));
  83. rx_bd->addr.lo = cpu_to_le32(lower_32_bits(mapping) +
  84. rxq->rx_headroom);
  85. rxq->sw_rx_prod++;
  86. rxq->filled_buffers++;
  87. return 0;
  88. }
  89. /* Unmap the data and free skb */
  90. int qede_free_tx_pkt(struct qede_dev *edev, struct qede_tx_queue *txq, int *len)
  91. {
  92. u16 idx = txq->sw_tx_cons;
  93. struct sk_buff *skb = txq->sw_tx_ring.skbs[idx].skb;
  94. struct eth_tx_1st_bd *first_bd;
  95. struct eth_tx_bd *tx_data_bd;
  96. int bds_consumed = 0;
  97. int nbds;
  98. bool data_split = txq->sw_tx_ring.skbs[idx].flags & QEDE_TSO_SPLIT_BD;
  99. int i, split_bd_len = 0;
  100. if (unlikely(!skb)) {
  101. DP_ERR(edev,
  102. "skb is null for txq idx=%d txq->sw_tx_cons=%d txq->sw_tx_prod=%d\n",
  103. idx, txq->sw_tx_cons, txq->sw_tx_prod);
  104. return -1;
  105. }
  106. *len = skb->len;
  107. first_bd = (struct eth_tx_1st_bd *)qed_chain_consume(&txq->tx_pbl);
  108. bds_consumed++;
  109. nbds = first_bd->data.nbds;
  110. if (data_split) {
  111. struct eth_tx_bd *split = (struct eth_tx_bd *)
  112. qed_chain_consume(&txq->tx_pbl);
  113. split_bd_len = BD_UNMAP_LEN(split);
  114. bds_consumed++;
  115. }
  116. dma_unmap_single(&edev->pdev->dev, BD_UNMAP_ADDR(first_bd),
  117. BD_UNMAP_LEN(first_bd) + split_bd_len, DMA_TO_DEVICE);
  118. /* Unmap the data of the skb frags */
  119. for (i = 0; i < skb_shinfo(skb)->nr_frags; i++, bds_consumed++) {
  120. tx_data_bd = (struct eth_tx_bd *)
  121. qed_chain_consume(&txq->tx_pbl);
  122. dma_unmap_page(&edev->pdev->dev, BD_UNMAP_ADDR(tx_data_bd),
  123. BD_UNMAP_LEN(tx_data_bd), DMA_TO_DEVICE);
  124. }
  125. while (bds_consumed++ < nbds)
  126. qed_chain_consume(&txq->tx_pbl);
  127. /* Free skb */
  128. dev_kfree_skb_any(skb);
  129. txq->sw_tx_ring.skbs[idx].skb = NULL;
  130. txq->sw_tx_ring.skbs[idx].flags = 0;
  131. return 0;
  132. }
  133. /* Unmap the data and free skb when mapping failed during start_xmit */
  134. static void qede_free_failed_tx_pkt(struct qede_tx_queue *txq,
  135. struct eth_tx_1st_bd *first_bd,
  136. int nbd, bool data_split)
  137. {
  138. u16 idx = txq->sw_tx_prod;
  139. struct sk_buff *skb = txq->sw_tx_ring.skbs[idx].skb;
  140. struct eth_tx_bd *tx_data_bd;
  141. int i, split_bd_len = 0;
  142. /* Return prod to its position before this skb was handled */
  143. qed_chain_set_prod(&txq->tx_pbl,
  144. le16_to_cpu(txq->tx_db.data.bd_prod), first_bd);
  145. first_bd = (struct eth_tx_1st_bd *)qed_chain_produce(&txq->tx_pbl);
  146. if (data_split) {
  147. struct eth_tx_bd *split = (struct eth_tx_bd *)
  148. qed_chain_produce(&txq->tx_pbl);
  149. split_bd_len = BD_UNMAP_LEN(split);
  150. nbd--;
  151. }
  152. dma_unmap_single(txq->dev, BD_UNMAP_ADDR(first_bd),
  153. BD_UNMAP_LEN(first_bd) + split_bd_len, DMA_TO_DEVICE);
  154. /* Unmap the data of the skb frags */
  155. for (i = 0; i < nbd; i++) {
  156. tx_data_bd = (struct eth_tx_bd *)
  157. qed_chain_produce(&txq->tx_pbl);
  158. if (tx_data_bd->nbytes)
  159. dma_unmap_page(txq->dev,
  160. BD_UNMAP_ADDR(tx_data_bd),
  161. BD_UNMAP_LEN(tx_data_bd), DMA_TO_DEVICE);
  162. }
  163. /* Return again prod to its position before this skb was handled */
  164. qed_chain_set_prod(&txq->tx_pbl,
  165. le16_to_cpu(txq->tx_db.data.bd_prod), first_bd);
  166. /* Free skb */
  167. dev_kfree_skb_any(skb);
  168. txq->sw_tx_ring.skbs[idx].skb = NULL;
  169. txq->sw_tx_ring.skbs[idx].flags = 0;
  170. }
  171. static u32 qede_xmit_type(struct sk_buff *skb, int *ipv6_ext)
  172. {
  173. u32 rc = XMIT_L4_CSUM;
  174. __be16 l3_proto;
  175. if (skb->ip_summed != CHECKSUM_PARTIAL)
  176. return XMIT_PLAIN;
  177. l3_proto = vlan_get_protocol(skb);
  178. if (l3_proto == htons(ETH_P_IPV6) &&
  179. (ipv6_hdr(skb)->nexthdr == NEXTHDR_IPV6))
  180. *ipv6_ext = 1;
  181. if (skb->encapsulation) {
  182. rc |= XMIT_ENC;
  183. if (skb_is_gso(skb)) {
  184. unsigned short gso_type = skb_shinfo(skb)->gso_type;
  185. if ((gso_type & SKB_GSO_UDP_TUNNEL_CSUM) ||
  186. (gso_type & SKB_GSO_GRE_CSUM))
  187. rc |= XMIT_ENC_GSO_L4_CSUM;
  188. rc |= XMIT_LSO;
  189. return rc;
  190. }
  191. }
  192. if (skb_is_gso(skb))
  193. rc |= XMIT_LSO;
  194. return rc;
  195. }
  196. static void qede_set_params_for_ipv6_ext(struct sk_buff *skb,
  197. struct eth_tx_2nd_bd *second_bd,
  198. struct eth_tx_3rd_bd *third_bd)
  199. {
  200. u8 l4_proto;
  201. u16 bd2_bits1 = 0, bd2_bits2 = 0;
  202. bd2_bits1 |= (1 << ETH_TX_DATA_2ND_BD_IPV6_EXT_SHIFT);
  203. bd2_bits2 |= ((((u8 *)skb_transport_header(skb) - skb->data) >> 1) &
  204. ETH_TX_DATA_2ND_BD_L4_HDR_START_OFFSET_W_MASK)
  205. << ETH_TX_DATA_2ND_BD_L4_HDR_START_OFFSET_W_SHIFT;
  206. bd2_bits1 |= (ETH_L4_PSEUDO_CSUM_CORRECT_LENGTH <<
  207. ETH_TX_DATA_2ND_BD_L4_PSEUDO_CSUM_MODE_SHIFT);
  208. if (vlan_get_protocol(skb) == htons(ETH_P_IPV6))
  209. l4_proto = ipv6_hdr(skb)->nexthdr;
  210. else
  211. l4_proto = ip_hdr(skb)->protocol;
  212. if (l4_proto == IPPROTO_UDP)
  213. bd2_bits1 |= 1 << ETH_TX_DATA_2ND_BD_L4_UDP_SHIFT;
  214. if (third_bd)
  215. third_bd->data.bitfields |=
  216. cpu_to_le16(((tcp_hdrlen(skb) / 4) &
  217. ETH_TX_DATA_3RD_BD_TCP_HDR_LEN_DW_MASK) <<
  218. ETH_TX_DATA_3RD_BD_TCP_HDR_LEN_DW_SHIFT);
  219. second_bd->data.bitfields1 = cpu_to_le16(bd2_bits1);
  220. second_bd->data.bitfields2 = cpu_to_le16(bd2_bits2);
  221. }
  222. static int map_frag_to_bd(struct qede_tx_queue *txq,
  223. skb_frag_t *frag, struct eth_tx_bd *bd)
  224. {
  225. dma_addr_t mapping;
  226. /* Map skb non-linear frag data for DMA */
  227. mapping = skb_frag_dma_map(txq->dev, frag, 0,
  228. skb_frag_size(frag), DMA_TO_DEVICE);
  229. if (unlikely(dma_mapping_error(txq->dev, mapping)))
  230. return -ENOMEM;
  231. /* Setup the data pointer of the frag data */
  232. BD_SET_UNMAP_ADDR_LEN(bd, mapping, skb_frag_size(frag));
  233. return 0;
  234. }
  235. static u16 qede_get_skb_hlen(struct sk_buff *skb, bool is_encap_pkt)
  236. {
  237. if (is_encap_pkt)
  238. return (skb_inner_transport_header(skb) +
  239. inner_tcp_hdrlen(skb) - skb->data);
  240. else
  241. return (skb_transport_header(skb) +
  242. tcp_hdrlen(skb) - skb->data);
  243. }
  244. /* +2 for 1st BD for headers and 2nd BD for headlen (if required) */
  245. #if ((MAX_SKB_FRAGS + 2) > ETH_TX_MAX_BDS_PER_NON_LSO_PACKET)
  246. static bool qede_pkt_req_lin(struct sk_buff *skb, u8 xmit_type)
  247. {
  248. int allowed_frags = ETH_TX_MAX_BDS_PER_NON_LSO_PACKET - 1;
  249. if (xmit_type & XMIT_LSO) {
  250. int hlen;
  251. hlen = qede_get_skb_hlen(skb, xmit_type & XMIT_ENC);
  252. /* linear payload would require its own BD */
  253. if (skb_headlen(skb) > hlen)
  254. allowed_frags--;
  255. }
  256. return (skb_shinfo(skb)->nr_frags > allowed_frags);
  257. }
  258. #endif
  259. static inline void qede_update_tx_producer(struct qede_tx_queue *txq)
  260. {
  261. /* wmb makes sure that the BDs data is updated before updating the
  262. * producer, otherwise FW may read old data from the BDs.
  263. */
  264. wmb();
  265. barrier();
  266. writel(txq->tx_db.raw, txq->doorbell_addr);
  267. /* mmiowb is needed to synchronize doorbell writes from more than one
  268. * processor. It guarantees that the write arrives to the device before
  269. * the queue lock is released and another start_xmit is called (possibly
  270. * on another CPU). Without this barrier, the next doorbell can bypass
  271. * this doorbell. This is applicable to IA64/Altix systems.
  272. */
  273. mmiowb();
  274. }
  275. static int qede_xdp_xmit(struct qede_dev *edev, struct qede_fastpath *fp,
  276. struct sw_rx_data *metadata, u16 padding, u16 length)
  277. {
  278. struct qede_tx_queue *txq = fp->xdp_tx;
  279. struct eth_tx_1st_bd *first_bd;
  280. u16 idx = txq->sw_tx_prod;
  281. u16 val;
  282. if (!qed_chain_get_elem_left(&txq->tx_pbl)) {
  283. txq->stopped_cnt++;
  284. return -ENOMEM;
  285. }
  286. first_bd = (struct eth_tx_1st_bd *)qed_chain_produce(&txq->tx_pbl);
  287. memset(first_bd, 0, sizeof(*first_bd));
  288. first_bd->data.bd_flags.bitfields =
  289. BIT(ETH_TX_1ST_BD_FLAGS_START_BD_SHIFT);
  290. val = (length & ETH_TX_DATA_1ST_BD_PKT_LEN_MASK) <<
  291. ETH_TX_DATA_1ST_BD_PKT_LEN_SHIFT;
  292. first_bd->data.bitfields |= cpu_to_le16(val);
  293. first_bd->data.nbds = 1;
  294. /* We can safely ignore the offset, as it's 0 for XDP */
  295. BD_SET_UNMAP_ADDR_LEN(first_bd, metadata->mapping + padding, length);
  296. /* Synchronize the buffer back to device, as program [probably]
  297. * has changed it.
  298. */
  299. dma_sync_single_for_device(&edev->pdev->dev,
  300. metadata->mapping + padding,
  301. length, PCI_DMA_TODEVICE);
  302. txq->sw_tx_ring.xdp[idx].page = metadata->data;
  303. txq->sw_tx_ring.xdp[idx].mapping = metadata->mapping;
  304. txq->sw_tx_prod = (txq->sw_tx_prod + 1) % txq->num_tx_buffers;
  305. /* Mark the fastpath for future XDP doorbell */
  306. fp->xdp_xmit = 1;
  307. return 0;
  308. }
  309. int qede_txq_has_work(struct qede_tx_queue *txq)
  310. {
  311. u16 hw_bd_cons;
  312. /* Tell compiler that consumer and producer can change */
  313. barrier();
  314. hw_bd_cons = le16_to_cpu(*txq->hw_cons_ptr);
  315. if (qed_chain_get_cons_idx(&txq->tx_pbl) == hw_bd_cons + 1)
  316. return 0;
  317. return hw_bd_cons != qed_chain_get_cons_idx(&txq->tx_pbl);
  318. }
  319. static void qede_xdp_tx_int(struct qede_dev *edev, struct qede_tx_queue *txq)
  320. {
  321. u16 hw_bd_cons, idx;
  322. hw_bd_cons = le16_to_cpu(*txq->hw_cons_ptr);
  323. barrier();
  324. while (hw_bd_cons != qed_chain_get_cons_idx(&txq->tx_pbl)) {
  325. qed_chain_consume(&txq->tx_pbl);
  326. idx = txq->sw_tx_cons;
  327. dma_unmap_page(&edev->pdev->dev,
  328. txq->sw_tx_ring.xdp[idx].mapping,
  329. PAGE_SIZE, DMA_BIDIRECTIONAL);
  330. __free_page(txq->sw_tx_ring.xdp[idx].page);
  331. txq->sw_tx_cons = (txq->sw_tx_cons + 1) % txq->num_tx_buffers;
  332. txq->xmit_pkts++;
  333. }
  334. }
  335. static int qede_tx_int(struct qede_dev *edev, struct qede_tx_queue *txq)
  336. {
  337. struct netdev_queue *netdev_txq;
  338. u16 hw_bd_cons;
  339. unsigned int pkts_compl = 0, bytes_compl = 0;
  340. int rc;
  341. netdev_txq = netdev_get_tx_queue(edev->ndev, txq->index);
  342. hw_bd_cons = le16_to_cpu(*txq->hw_cons_ptr);
  343. barrier();
  344. while (hw_bd_cons != qed_chain_get_cons_idx(&txq->tx_pbl)) {
  345. int len = 0;
  346. rc = qede_free_tx_pkt(edev, txq, &len);
  347. if (rc) {
  348. DP_NOTICE(edev, "hw_bd_cons = %d, chain_cons=%d\n",
  349. hw_bd_cons,
  350. qed_chain_get_cons_idx(&txq->tx_pbl));
  351. break;
  352. }
  353. bytes_compl += len;
  354. pkts_compl++;
  355. txq->sw_tx_cons = (txq->sw_tx_cons + 1) % txq->num_tx_buffers;
  356. txq->xmit_pkts++;
  357. }
  358. netdev_tx_completed_queue(netdev_txq, pkts_compl, bytes_compl);
  359. /* Need to make the tx_bd_cons update visible to start_xmit()
  360. * before checking for netif_tx_queue_stopped(). Without the
  361. * memory barrier, there is a small possibility that
  362. * start_xmit() will miss it and cause the queue to be stopped
  363. * forever.
  364. * On the other hand we need an rmb() here to ensure the proper
  365. * ordering of bit testing in the following
  366. * netif_tx_queue_stopped(txq) call.
  367. */
  368. smp_mb();
  369. if (unlikely(netif_tx_queue_stopped(netdev_txq))) {
  370. /* Taking tx_lock is needed to prevent reenabling the queue
  371. * while it's empty. This could have happen if rx_action() gets
  372. * suspended in qede_tx_int() after the condition before
  373. * netif_tx_wake_queue(), while tx_action (qede_start_xmit()):
  374. *
  375. * stops the queue->sees fresh tx_bd_cons->releases the queue->
  376. * sends some packets consuming the whole queue again->
  377. * stops the queue
  378. */
  379. __netif_tx_lock(netdev_txq, smp_processor_id());
  380. if ((netif_tx_queue_stopped(netdev_txq)) &&
  381. (edev->state == QEDE_STATE_OPEN) &&
  382. (qed_chain_get_elem_left(&txq->tx_pbl)
  383. >= (MAX_SKB_FRAGS + 1))) {
  384. netif_tx_wake_queue(netdev_txq);
  385. DP_VERBOSE(edev, NETIF_MSG_TX_DONE,
  386. "Wake queue was called\n");
  387. }
  388. __netif_tx_unlock(netdev_txq);
  389. }
  390. return 0;
  391. }
  392. bool qede_has_rx_work(struct qede_rx_queue *rxq)
  393. {
  394. u16 hw_comp_cons, sw_comp_cons;
  395. /* Tell compiler that status block fields can change */
  396. barrier();
  397. hw_comp_cons = le16_to_cpu(*rxq->hw_cons_ptr);
  398. sw_comp_cons = qed_chain_get_cons_idx(&rxq->rx_comp_ring);
  399. return hw_comp_cons != sw_comp_cons;
  400. }
  401. static inline void qede_rx_bd_ring_consume(struct qede_rx_queue *rxq)
  402. {
  403. qed_chain_consume(&rxq->rx_bd_ring);
  404. rxq->sw_rx_cons++;
  405. }
  406. /* This function reuses the buffer(from an offset) from
  407. * consumer index to producer index in the bd ring
  408. */
  409. static inline void qede_reuse_page(struct qede_rx_queue *rxq,
  410. struct sw_rx_data *curr_cons)
  411. {
  412. struct eth_rx_bd *rx_bd_prod = qed_chain_produce(&rxq->rx_bd_ring);
  413. struct sw_rx_data *curr_prod;
  414. dma_addr_t new_mapping;
  415. curr_prod = &rxq->sw_rx_ring[rxq->sw_rx_prod & NUM_RX_BDS_MAX];
  416. *curr_prod = *curr_cons;
  417. new_mapping = curr_prod->mapping + curr_prod->page_offset;
  418. rx_bd_prod->addr.hi = cpu_to_le32(upper_32_bits(new_mapping));
  419. rx_bd_prod->addr.lo = cpu_to_le32(lower_32_bits(new_mapping) +
  420. rxq->rx_headroom);
  421. rxq->sw_rx_prod++;
  422. curr_cons->data = NULL;
  423. }
  424. /* In case of allocation failures reuse buffers
  425. * from consumer index to produce buffers for firmware
  426. */
  427. void qede_recycle_rx_bd_ring(struct qede_rx_queue *rxq, u8 count)
  428. {
  429. struct sw_rx_data *curr_cons;
  430. for (; count > 0; count--) {
  431. curr_cons = &rxq->sw_rx_ring[rxq->sw_rx_cons & NUM_RX_BDS_MAX];
  432. qede_reuse_page(rxq, curr_cons);
  433. qede_rx_bd_ring_consume(rxq);
  434. }
  435. }
  436. static inline int qede_realloc_rx_buffer(struct qede_rx_queue *rxq,
  437. struct sw_rx_data *curr_cons)
  438. {
  439. /* Move to the next segment in the page */
  440. curr_cons->page_offset += rxq->rx_buf_seg_size;
  441. if (curr_cons->page_offset == PAGE_SIZE) {
  442. if (unlikely(qede_alloc_rx_buffer(rxq, true))) {
  443. /* Since we failed to allocate new buffer
  444. * current buffer can be used again.
  445. */
  446. curr_cons->page_offset -= rxq->rx_buf_seg_size;
  447. return -ENOMEM;
  448. }
  449. dma_unmap_page(rxq->dev, curr_cons->mapping,
  450. PAGE_SIZE, rxq->data_direction);
  451. } else {
  452. /* Increment refcount of the page as we don't want
  453. * network stack to take the ownership of the page
  454. * which can be recycled multiple times by the driver.
  455. */
  456. page_ref_inc(curr_cons->data);
  457. qede_reuse_page(rxq, curr_cons);
  458. }
  459. return 0;
  460. }
  461. void qede_update_rx_prod(struct qede_dev *edev, struct qede_rx_queue *rxq)
  462. {
  463. u16 bd_prod = qed_chain_get_prod_idx(&rxq->rx_bd_ring);
  464. u16 cqe_prod = qed_chain_get_prod_idx(&rxq->rx_comp_ring);
  465. struct eth_rx_prod_data rx_prods = {0};
  466. /* Update producers */
  467. rx_prods.bd_prod = cpu_to_le16(bd_prod);
  468. rx_prods.cqe_prod = cpu_to_le16(cqe_prod);
  469. /* Make sure that the BD and SGE data is updated before updating the
  470. * producers since FW might read the BD/SGE right after the producer
  471. * is updated.
  472. */
  473. wmb();
  474. internal_ram_wr(rxq->hw_rxq_prod_addr, sizeof(rx_prods),
  475. (u32 *)&rx_prods);
  476. /* mmiowb is needed to synchronize doorbell writes from more than one
  477. * processor. It guarantees that the write arrives to the device before
  478. * the napi lock is released and another qede_poll is called (possibly
  479. * on another CPU). Without this barrier, the next doorbell can bypass
  480. * this doorbell. This is applicable to IA64/Altix systems.
  481. */
  482. mmiowb();
  483. }
  484. static void qede_get_rxhash(struct sk_buff *skb, u8 bitfields, __le32 rss_hash)
  485. {
  486. enum pkt_hash_types hash_type = PKT_HASH_TYPE_NONE;
  487. enum rss_hash_type htype;
  488. u32 hash = 0;
  489. htype = GET_FIELD(bitfields, ETH_FAST_PATH_RX_REG_CQE_RSS_HASH_TYPE);
  490. if (htype) {
  491. hash_type = ((htype == RSS_HASH_TYPE_IPV4) ||
  492. (htype == RSS_HASH_TYPE_IPV6)) ?
  493. PKT_HASH_TYPE_L3 : PKT_HASH_TYPE_L4;
  494. hash = le32_to_cpu(rss_hash);
  495. }
  496. skb_set_hash(skb, hash, hash_type);
  497. }
  498. static void qede_set_skb_csum(struct sk_buff *skb, u8 csum_flag)
  499. {
  500. skb_checksum_none_assert(skb);
  501. if (csum_flag & QEDE_CSUM_UNNECESSARY)
  502. skb->ip_summed = CHECKSUM_UNNECESSARY;
  503. if (csum_flag & QEDE_TUNN_CSUM_UNNECESSARY) {
  504. skb->csum_level = 1;
  505. skb->encapsulation = 1;
  506. }
  507. }
  508. static inline void qede_skb_receive(struct qede_dev *edev,
  509. struct qede_fastpath *fp,
  510. struct qede_rx_queue *rxq,
  511. struct sk_buff *skb, u16 vlan_tag)
  512. {
  513. if (vlan_tag)
  514. __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
  515. napi_gro_receive(&fp->napi, skb);
  516. }
  517. static void qede_set_gro_params(struct qede_dev *edev,
  518. struct sk_buff *skb,
  519. struct eth_fast_path_rx_tpa_start_cqe *cqe)
  520. {
  521. u16 parsing_flags = le16_to_cpu(cqe->pars_flags.flags);
  522. if (((parsing_flags >> PARSING_AND_ERR_FLAGS_L3TYPE_SHIFT) &
  523. PARSING_AND_ERR_FLAGS_L3TYPE_MASK) == 2)
  524. skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
  525. else
  526. skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
  527. skb_shinfo(skb)->gso_size = __le16_to_cpu(cqe->len_on_first_bd) -
  528. cqe->header_len;
  529. }
  530. static int qede_fill_frag_skb(struct qede_dev *edev,
  531. struct qede_rx_queue *rxq,
  532. u8 tpa_agg_index, u16 len_on_bd)
  533. {
  534. struct sw_rx_data *current_bd = &rxq->sw_rx_ring[rxq->sw_rx_cons &
  535. NUM_RX_BDS_MAX];
  536. struct qede_agg_info *tpa_info = &rxq->tpa_info[tpa_agg_index];
  537. struct sk_buff *skb = tpa_info->skb;
  538. if (unlikely(tpa_info->state != QEDE_AGG_STATE_START))
  539. goto out;
  540. /* Add one frag and update the appropriate fields in the skb */
  541. skb_fill_page_desc(skb, tpa_info->frag_id++,
  542. current_bd->data, current_bd->page_offset,
  543. len_on_bd);
  544. if (unlikely(qede_realloc_rx_buffer(rxq, current_bd))) {
  545. /* Incr page ref count to reuse on allocation failure
  546. * so that it doesn't get freed while freeing SKB.
  547. */
  548. page_ref_inc(current_bd->data);
  549. goto out;
  550. }
  551. qed_chain_consume(&rxq->rx_bd_ring);
  552. rxq->sw_rx_cons++;
  553. skb->data_len += len_on_bd;
  554. skb->truesize += rxq->rx_buf_seg_size;
  555. skb->len += len_on_bd;
  556. return 0;
  557. out:
  558. tpa_info->state = QEDE_AGG_STATE_ERROR;
  559. qede_recycle_rx_bd_ring(rxq, 1);
  560. return -ENOMEM;
  561. }
  562. static bool qede_tunn_exist(u16 flag)
  563. {
  564. return !!(flag & (PARSING_AND_ERR_FLAGS_TUNNELEXIST_MASK <<
  565. PARSING_AND_ERR_FLAGS_TUNNELEXIST_SHIFT));
  566. }
  567. static u8 qede_check_tunn_csum(u16 flag)
  568. {
  569. u16 csum_flag = 0;
  570. u8 tcsum = 0;
  571. if (flag & (PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_MASK <<
  572. PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_SHIFT))
  573. csum_flag |= PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_MASK <<
  574. PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_SHIFT;
  575. if (flag & (PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_MASK <<
  576. PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_SHIFT)) {
  577. csum_flag |= PARSING_AND_ERR_FLAGS_L4CHKSMERROR_MASK <<
  578. PARSING_AND_ERR_FLAGS_L4CHKSMERROR_SHIFT;
  579. tcsum = QEDE_TUNN_CSUM_UNNECESSARY;
  580. }
  581. csum_flag |= PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_MASK <<
  582. PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_SHIFT |
  583. PARSING_AND_ERR_FLAGS_IPHDRERROR_MASK <<
  584. PARSING_AND_ERR_FLAGS_IPHDRERROR_SHIFT;
  585. if (csum_flag & flag)
  586. return QEDE_CSUM_ERROR;
  587. return QEDE_CSUM_UNNECESSARY | tcsum;
  588. }
  589. static void qede_tpa_start(struct qede_dev *edev,
  590. struct qede_rx_queue *rxq,
  591. struct eth_fast_path_rx_tpa_start_cqe *cqe)
  592. {
  593. struct qede_agg_info *tpa_info = &rxq->tpa_info[cqe->tpa_agg_index];
  594. struct eth_rx_bd *rx_bd_cons = qed_chain_consume(&rxq->rx_bd_ring);
  595. struct eth_rx_bd *rx_bd_prod = qed_chain_produce(&rxq->rx_bd_ring);
  596. struct sw_rx_data *replace_buf = &tpa_info->buffer;
  597. dma_addr_t mapping = tpa_info->buffer_mapping;
  598. struct sw_rx_data *sw_rx_data_cons;
  599. struct sw_rx_data *sw_rx_data_prod;
  600. sw_rx_data_cons = &rxq->sw_rx_ring[rxq->sw_rx_cons & NUM_RX_BDS_MAX];
  601. sw_rx_data_prod = &rxq->sw_rx_ring[rxq->sw_rx_prod & NUM_RX_BDS_MAX];
  602. /* Use pre-allocated replacement buffer - we can't release the agg.
  603. * start until its over and we don't want to risk allocation failing
  604. * here, so re-allocate when aggregation will be over.
  605. */
  606. sw_rx_data_prod->mapping = replace_buf->mapping;
  607. sw_rx_data_prod->data = replace_buf->data;
  608. rx_bd_prod->addr.hi = cpu_to_le32(upper_32_bits(mapping));
  609. rx_bd_prod->addr.lo = cpu_to_le32(lower_32_bits(mapping));
  610. sw_rx_data_prod->page_offset = replace_buf->page_offset;
  611. rxq->sw_rx_prod++;
  612. /* move partial skb from cons to pool (don't unmap yet)
  613. * save mapping, incase we drop the packet later on.
  614. */
  615. tpa_info->buffer = *sw_rx_data_cons;
  616. mapping = HILO_U64(le32_to_cpu(rx_bd_cons->addr.hi),
  617. le32_to_cpu(rx_bd_cons->addr.lo));
  618. tpa_info->buffer_mapping = mapping;
  619. rxq->sw_rx_cons++;
  620. /* set tpa state to start only if we are able to allocate skb
  621. * for this aggregation, otherwise mark as error and aggregation will
  622. * be dropped
  623. */
  624. tpa_info->skb = netdev_alloc_skb(edev->ndev,
  625. le16_to_cpu(cqe->len_on_first_bd));
  626. if (unlikely(!tpa_info->skb)) {
  627. DP_NOTICE(edev, "Failed to allocate SKB for gro\n");
  628. tpa_info->state = QEDE_AGG_STATE_ERROR;
  629. goto cons_buf;
  630. }
  631. /* Start filling in the aggregation info */
  632. skb_put(tpa_info->skb, le16_to_cpu(cqe->len_on_first_bd));
  633. tpa_info->frag_id = 0;
  634. tpa_info->state = QEDE_AGG_STATE_START;
  635. /* Store some information from first CQE */
  636. tpa_info->start_cqe_placement_offset = cqe->placement_offset;
  637. tpa_info->start_cqe_bd_len = le16_to_cpu(cqe->len_on_first_bd);
  638. if ((le16_to_cpu(cqe->pars_flags.flags) >>
  639. PARSING_AND_ERR_FLAGS_TAG8021QEXIST_SHIFT) &
  640. PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK)
  641. tpa_info->vlan_tag = le16_to_cpu(cqe->vlan_tag);
  642. else
  643. tpa_info->vlan_tag = 0;
  644. qede_get_rxhash(tpa_info->skb, cqe->bitfields, cqe->rss_hash);
  645. /* This is needed in order to enable forwarding support */
  646. qede_set_gro_params(edev, tpa_info->skb, cqe);
  647. cons_buf: /* We still need to handle bd_len_list to consume buffers */
  648. if (likely(cqe->ext_bd_len_list[0]))
  649. qede_fill_frag_skb(edev, rxq, cqe->tpa_agg_index,
  650. le16_to_cpu(cqe->ext_bd_len_list[0]));
  651. if (unlikely(cqe->ext_bd_len_list[1])) {
  652. DP_ERR(edev,
  653. "Unlikely - got a TPA aggregation with more than one ext_bd_len_list entry in the TPA start\n");
  654. tpa_info->state = QEDE_AGG_STATE_ERROR;
  655. }
  656. }
  657. #ifdef CONFIG_INET
  658. static void qede_gro_ip_csum(struct sk_buff *skb)
  659. {
  660. const struct iphdr *iph = ip_hdr(skb);
  661. struct tcphdr *th;
  662. skb_set_transport_header(skb, sizeof(struct iphdr));
  663. th = tcp_hdr(skb);
  664. th->check = ~tcp_v4_check(skb->len - skb_transport_offset(skb),
  665. iph->saddr, iph->daddr, 0);
  666. tcp_gro_complete(skb);
  667. }
  668. static void qede_gro_ipv6_csum(struct sk_buff *skb)
  669. {
  670. struct ipv6hdr *iph = ipv6_hdr(skb);
  671. struct tcphdr *th;
  672. skb_set_transport_header(skb, sizeof(struct ipv6hdr));
  673. th = tcp_hdr(skb);
  674. th->check = ~tcp_v6_check(skb->len - skb_transport_offset(skb),
  675. &iph->saddr, &iph->daddr, 0);
  676. tcp_gro_complete(skb);
  677. }
  678. #endif
  679. static void qede_gro_receive(struct qede_dev *edev,
  680. struct qede_fastpath *fp,
  681. struct sk_buff *skb,
  682. u16 vlan_tag)
  683. {
  684. /* FW can send a single MTU sized packet from gro flow
  685. * due to aggregation timeout/last segment etc. which
  686. * is not expected to be a gro packet. If a skb has zero
  687. * frags then simply push it in the stack as non gso skb.
  688. */
  689. if (unlikely(!skb->data_len)) {
  690. skb_shinfo(skb)->gso_type = 0;
  691. skb_shinfo(skb)->gso_size = 0;
  692. goto send_skb;
  693. }
  694. #ifdef CONFIG_INET
  695. if (skb_shinfo(skb)->gso_size) {
  696. skb_reset_network_header(skb);
  697. switch (skb->protocol) {
  698. case htons(ETH_P_IP):
  699. qede_gro_ip_csum(skb);
  700. break;
  701. case htons(ETH_P_IPV6):
  702. qede_gro_ipv6_csum(skb);
  703. break;
  704. default:
  705. DP_ERR(edev,
  706. "Error: FW GRO supports only IPv4/IPv6, not 0x%04x\n",
  707. ntohs(skb->protocol));
  708. }
  709. }
  710. #endif
  711. send_skb:
  712. skb_record_rx_queue(skb, fp->rxq->rxq_id);
  713. qede_skb_receive(edev, fp, fp->rxq, skb, vlan_tag);
  714. }
  715. static inline void qede_tpa_cont(struct qede_dev *edev,
  716. struct qede_rx_queue *rxq,
  717. struct eth_fast_path_rx_tpa_cont_cqe *cqe)
  718. {
  719. int i;
  720. for (i = 0; cqe->len_list[i]; i++)
  721. qede_fill_frag_skb(edev, rxq, cqe->tpa_agg_index,
  722. le16_to_cpu(cqe->len_list[i]));
  723. if (unlikely(i > 1))
  724. DP_ERR(edev,
  725. "Strange - TPA cont with more than a single len_list entry\n");
  726. }
  727. static int qede_tpa_end(struct qede_dev *edev,
  728. struct qede_fastpath *fp,
  729. struct eth_fast_path_rx_tpa_end_cqe *cqe)
  730. {
  731. struct qede_rx_queue *rxq = fp->rxq;
  732. struct qede_agg_info *tpa_info;
  733. struct sk_buff *skb;
  734. int i;
  735. tpa_info = &rxq->tpa_info[cqe->tpa_agg_index];
  736. skb = tpa_info->skb;
  737. for (i = 0; cqe->len_list[i]; i++)
  738. qede_fill_frag_skb(edev, rxq, cqe->tpa_agg_index,
  739. le16_to_cpu(cqe->len_list[i]));
  740. if (unlikely(i > 1))
  741. DP_ERR(edev,
  742. "Strange - TPA emd with more than a single len_list entry\n");
  743. if (unlikely(tpa_info->state != QEDE_AGG_STATE_START))
  744. goto err;
  745. /* Sanity */
  746. if (unlikely(cqe->num_of_bds != tpa_info->frag_id + 1))
  747. DP_ERR(edev,
  748. "Strange - TPA had %02x BDs, but SKB has only %d frags\n",
  749. cqe->num_of_bds, tpa_info->frag_id);
  750. if (unlikely(skb->len != le16_to_cpu(cqe->total_packet_len)))
  751. DP_ERR(edev,
  752. "Strange - total packet len [cqe] is %4x but SKB has len %04x\n",
  753. le16_to_cpu(cqe->total_packet_len), skb->len);
  754. memcpy(skb->data,
  755. page_address(tpa_info->buffer.data) +
  756. tpa_info->start_cqe_placement_offset +
  757. tpa_info->buffer.page_offset, tpa_info->start_cqe_bd_len);
  758. /* Finalize the SKB */
  759. skb->protocol = eth_type_trans(skb, edev->ndev);
  760. skb->ip_summed = CHECKSUM_UNNECESSARY;
  761. /* tcp_gro_complete() will copy NAPI_GRO_CB(skb)->count
  762. * to skb_shinfo(skb)->gso_segs
  763. */
  764. NAPI_GRO_CB(skb)->count = le16_to_cpu(cqe->num_of_coalesced_segs);
  765. qede_gro_receive(edev, fp, skb, tpa_info->vlan_tag);
  766. tpa_info->state = QEDE_AGG_STATE_NONE;
  767. return 1;
  768. err:
  769. tpa_info->state = QEDE_AGG_STATE_NONE;
  770. dev_kfree_skb_any(tpa_info->skb);
  771. tpa_info->skb = NULL;
  772. return 0;
  773. }
  774. static u8 qede_check_notunn_csum(u16 flag)
  775. {
  776. u16 csum_flag = 0;
  777. u8 csum = 0;
  778. if (flag & (PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_MASK <<
  779. PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_SHIFT)) {
  780. csum_flag |= PARSING_AND_ERR_FLAGS_L4CHKSMERROR_MASK <<
  781. PARSING_AND_ERR_FLAGS_L4CHKSMERROR_SHIFT;
  782. csum = QEDE_CSUM_UNNECESSARY;
  783. }
  784. csum_flag |= PARSING_AND_ERR_FLAGS_IPHDRERROR_MASK <<
  785. PARSING_AND_ERR_FLAGS_IPHDRERROR_SHIFT;
  786. if (csum_flag & flag)
  787. return QEDE_CSUM_ERROR;
  788. return csum;
  789. }
  790. static u8 qede_check_csum(u16 flag)
  791. {
  792. if (!qede_tunn_exist(flag))
  793. return qede_check_notunn_csum(flag);
  794. else
  795. return qede_check_tunn_csum(flag);
  796. }
  797. static bool qede_pkt_is_ip_fragmented(struct eth_fast_path_rx_reg_cqe *cqe,
  798. u16 flag)
  799. {
  800. u8 tun_pars_flg = cqe->tunnel_pars_flags.flags;
  801. if ((tun_pars_flg & (ETH_TUNNEL_PARSING_FLAGS_IPV4_FRAGMENT_MASK <<
  802. ETH_TUNNEL_PARSING_FLAGS_IPV4_FRAGMENT_SHIFT)) ||
  803. (flag & (PARSING_AND_ERR_FLAGS_IPV4FRAG_MASK <<
  804. PARSING_AND_ERR_FLAGS_IPV4FRAG_SHIFT)))
  805. return true;
  806. return false;
  807. }
  808. /* Return true iff packet is to be passed to stack */
  809. static bool qede_rx_xdp(struct qede_dev *edev,
  810. struct qede_fastpath *fp,
  811. struct qede_rx_queue *rxq,
  812. struct bpf_prog *prog,
  813. struct sw_rx_data *bd,
  814. struct eth_fast_path_rx_reg_cqe *cqe,
  815. u16 *data_offset, u16 *len)
  816. {
  817. struct xdp_buff xdp;
  818. enum xdp_action act;
  819. xdp.data_hard_start = page_address(bd->data);
  820. xdp.data = xdp.data_hard_start + *data_offset;
  821. xdp.data_end = xdp.data + *len;
  822. /* Queues always have a full reset currently, so for the time
  823. * being until there's atomic program replace just mark read
  824. * side for map helpers.
  825. */
  826. rcu_read_lock();
  827. act = bpf_prog_run_xdp(prog, &xdp);
  828. rcu_read_unlock();
  829. /* Recalculate, as XDP might have changed the headers */
  830. *data_offset = xdp.data - xdp.data_hard_start;
  831. *len = xdp.data_end - xdp.data;
  832. if (act == XDP_PASS)
  833. return true;
  834. /* Count number of packets not to be passed to stack */
  835. rxq->xdp_no_pass++;
  836. switch (act) {
  837. case XDP_TX:
  838. /* We need the replacement buffer before transmit. */
  839. if (qede_alloc_rx_buffer(rxq, true)) {
  840. qede_recycle_rx_bd_ring(rxq, 1);
  841. trace_xdp_exception(edev->ndev, prog, act);
  842. return false;
  843. }
  844. /* Now if there's a transmission problem, we'd still have to
  845. * throw current buffer, as replacement was already allocated.
  846. */
  847. if (qede_xdp_xmit(edev, fp, bd, *data_offset, *len)) {
  848. dma_unmap_page(rxq->dev, bd->mapping,
  849. PAGE_SIZE, DMA_BIDIRECTIONAL);
  850. __free_page(bd->data);
  851. trace_xdp_exception(edev->ndev, prog, act);
  852. }
  853. /* Regardless, we've consumed an Rx BD */
  854. qede_rx_bd_ring_consume(rxq);
  855. return false;
  856. default:
  857. bpf_warn_invalid_xdp_action(act);
  858. case XDP_ABORTED:
  859. trace_xdp_exception(edev->ndev, prog, act);
  860. case XDP_DROP:
  861. qede_recycle_rx_bd_ring(rxq, cqe->bd_num);
  862. }
  863. return false;
  864. }
  865. static struct sk_buff *qede_rx_allocate_skb(struct qede_dev *edev,
  866. struct qede_rx_queue *rxq,
  867. struct sw_rx_data *bd, u16 len,
  868. u16 pad)
  869. {
  870. unsigned int offset = bd->page_offset + pad;
  871. struct skb_frag_struct *frag;
  872. struct page *page = bd->data;
  873. unsigned int pull_len;
  874. struct sk_buff *skb;
  875. unsigned char *va;
  876. /* Allocate a new SKB with a sufficient large header len */
  877. skb = netdev_alloc_skb(edev->ndev, QEDE_RX_HDR_SIZE);
  878. if (unlikely(!skb))
  879. return NULL;
  880. /* Copy data into SKB - if it's small, we can simply copy it and
  881. * re-use the already allcoated & mapped memory.
  882. */
  883. if (len + pad <= edev->rx_copybreak) {
  884. skb_put_data(skb, page_address(page) + offset, len);
  885. qede_reuse_page(rxq, bd);
  886. goto out;
  887. }
  888. frag = &skb_shinfo(skb)->frags[0];
  889. skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
  890. page, offset, len, rxq->rx_buf_seg_size);
  891. va = skb_frag_address(frag);
  892. pull_len = eth_get_headlen(va, QEDE_RX_HDR_SIZE);
  893. /* Align the pull_len to optimize memcpy */
  894. memcpy(skb->data, va, ALIGN(pull_len, sizeof(long)));
  895. /* Correct the skb & frag sizes offset after the pull */
  896. skb_frag_size_sub(frag, pull_len);
  897. frag->page_offset += pull_len;
  898. skb->data_len -= pull_len;
  899. skb->tail += pull_len;
  900. if (unlikely(qede_realloc_rx_buffer(rxq, bd))) {
  901. /* Incr page ref count to reuse on allocation failure so
  902. * that it doesn't get freed while freeing SKB [as its
  903. * already mapped there].
  904. */
  905. page_ref_inc(page);
  906. dev_kfree_skb_any(skb);
  907. return NULL;
  908. }
  909. out:
  910. /* We've consumed the first BD and prepared an SKB */
  911. qede_rx_bd_ring_consume(rxq);
  912. return skb;
  913. }
  914. static int qede_rx_build_jumbo(struct qede_dev *edev,
  915. struct qede_rx_queue *rxq,
  916. struct sk_buff *skb,
  917. struct eth_fast_path_rx_reg_cqe *cqe,
  918. u16 first_bd_len)
  919. {
  920. u16 pkt_len = le16_to_cpu(cqe->pkt_len);
  921. struct sw_rx_data *bd;
  922. u16 bd_cons_idx;
  923. u8 num_frags;
  924. pkt_len -= first_bd_len;
  925. /* We've already used one BD for the SKB. Now take care of the rest */
  926. for (num_frags = cqe->bd_num - 1; num_frags > 0; num_frags--) {
  927. u16 cur_size = pkt_len > rxq->rx_buf_size ? rxq->rx_buf_size :
  928. pkt_len;
  929. if (unlikely(!cur_size)) {
  930. DP_ERR(edev,
  931. "Still got %d BDs for mapping jumbo, but length became 0\n",
  932. num_frags);
  933. goto out;
  934. }
  935. /* We need a replacement buffer for each BD */
  936. if (unlikely(qede_alloc_rx_buffer(rxq, true)))
  937. goto out;
  938. /* Now that we've allocated the replacement buffer,
  939. * we can safely consume the next BD and map it to the SKB.
  940. */
  941. bd_cons_idx = rxq->sw_rx_cons & NUM_RX_BDS_MAX;
  942. bd = &rxq->sw_rx_ring[bd_cons_idx];
  943. qede_rx_bd_ring_consume(rxq);
  944. dma_unmap_page(rxq->dev, bd->mapping,
  945. PAGE_SIZE, DMA_FROM_DEVICE);
  946. skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags++,
  947. bd->data, 0, cur_size);
  948. skb->truesize += PAGE_SIZE;
  949. skb->data_len += cur_size;
  950. skb->len += cur_size;
  951. pkt_len -= cur_size;
  952. }
  953. if (unlikely(pkt_len))
  954. DP_ERR(edev,
  955. "Mapped all BDs of jumbo, but still have %d bytes\n",
  956. pkt_len);
  957. out:
  958. return num_frags;
  959. }
  960. static int qede_rx_process_tpa_cqe(struct qede_dev *edev,
  961. struct qede_fastpath *fp,
  962. struct qede_rx_queue *rxq,
  963. union eth_rx_cqe *cqe,
  964. enum eth_rx_cqe_type type)
  965. {
  966. switch (type) {
  967. case ETH_RX_CQE_TYPE_TPA_START:
  968. qede_tpa_start(edev, rxq, &cqe->fast_path_tpa_start);
  969. return 0;
  970. case ETH_RX_CQE_TYPE_TPA_CONT:
  971. qede_tpa_cont(edev, rxq, &cqe->fast_path_tpa_cont);
  972. return 0;
  973. case ETH_RX_CQE_TYPE_TPA_END:
  974. return qede_tpa_end(edev, fp, &cqe->fast_path_tpa_end);
  975. default:
  976. return 0;
  977. }
  978. }
  979. static int qede_rx_process_cqe(struct qede_dev *edev,
  980. struct qede_fastpath *fp,
  981. struct qede_rx_queue *rxq)
  982. {
  983. struct bpf_prog *xdp_prog = READ_ONCE(rxq->xdp_prog);
  984. struct eth_fast_path_rx_reg_cqe *fp_cqe;
  985. u16 len, pad, bd_cons_idx, parse_flag;
  986. enum eth_rx_cqe_type cqe_type;
  987. union eth_rx_cqe *cqe;
  988. struct sw_rx_data *bd;
  989. struct sk_buff *skb;
  990. __le16 flags;
  991. u8 csum_flag;
  992. /* Get the CQE from the completion ring */
  993. cqe = (union eth_rx_cqe *)qed_chain_consume(&rxq->rx_comp_ring);
  994. cqe_type = cqe->fast_path_regular.type;
  995. /* Process an unlikely slowpath event */
  996. if (unlikely(cqe_type == ETH_RX_CQE_TYPE_SLOW_PATH)) {
  997. struct eth_slow_path_rx_cqe *sp_cqe;
  998. sp_cqe = (struct eth_slow_path_rx_cqe *)cqe;
  999. edev->ops->eth_cqe_completion(edev->cdev, fp->id, sp_cqe);
  1000. return 0;
  1001. }
  1002. /* Handle TPA cqes */
  1003. if (cqe_type != ETH_RX_CQE_TYPE_REGULAR)
  1004. return qede_rx_process_tpa_cqe(edev, fp, rxq, cqe, cqe_type);
  1005. /* Get the data from the SW ring; Consume it only after it's evident
  1006. * we wouldn't recycle it.
  1007. */
  1008. bd_cons_idx = rxq->sw_rx_cons & NUM_RX_BDS_MAX;
  1009. bd = &rxq->sw_rx_ring[bd_cons_idx];
  1010. fp_cqe = &cqe->fast_path_regular;
  1011. len = le16_to_cpu(fp_cqe->len_on_first_bd);
  1012. pad = fp_cqe->placement_offset + rxq->rx_headroom;
  1013. /* Run eBPF program if one is attached */
  1014. if (xdp_prog)
  1015. if (!qede_rx_xdp(edev, fp, rxq, xdp_prog, bd, fp_cqe,
  1016. &pad, &len))
  1017. return 0;
  1018. /* If this is an error packet then drop it */
  1019. flags = cqe->fast_path_regular.pars_flags.flags;
  1020. parse_flag = le16_to_cpu(flags);
  1021. csum_flag = qede_check_csum(parse_flag);
  1022. if (unlikely(csum_flag == QEDE_CSUM_ERROR)) {
  1023. if (qede_pkt_is_ip_fragmented(fp_cqe, parse_flag)) {
  1024. rxq->rx_ip_frags++;
  1025. } else {
  1026. DP_NOTICE(edev,
  1027. "CQE has error, flags = %x, dropping incoming packet\n",
  1028. parse_flag);
  1029. rxq->rx_hw_errors++;
  1030. qede_recycle_rx_bd_ring(rxq, fp_cqe->bd_num);
  1031. return 0;
  1032. }
  1033. }
  1034. /* Basic validation passed; Need to prepare an SKB. This would also
  1035. * guarantee to finally consume the first BD upon success.
  1036. */
  1037. skb = qede_rx_allocate_skb(edev, rxq, bd, len, pad);
  1038. if (!skb) {
  1039. rxq->rx_alloc_errors++;
  1040. qede_recycle_rx_bd_ring(rxq, fp_cqe->bd_num);
  1041. return 0;
  1042. }
  1043. /* In case of Jumbo packet, several PAGE_SIZEd buffers will be pointed
  1044. * by a single cqe.
  1045. */
  1046. if (fp_cqe->bd_num > 1) {
  1047. u16 unmapped_frags = qede_rx_build_jumbo(edev, rxq, skb,
  1048. fp_cqe, len);
  1049. if (unlikely(unmapped_frags > 0)) {
  1050. qede_recycle_rx_bd_ring(rxq, unmapped_frags);
  1051. dev_kfree_skb_any(skb);
  1052. return 0;
  1053. }
  1054. }
  1055. /* The SKB contains all the data. Now prepare meta-magic */
  1056. skb->protocol = eth_type_trans(skb, edev->ndev);
  1057. qede_get_rxhash(skb, fp_cqe->bitfields, fp_cqe->rss_hash);
  1058. qede_set_skb_csum(skb, csum_flag);
  1059. skb_record_rx_queue(skb, rxq->rxq_id);
  1060. qede_ptp_record_rx_ts(edev, cqe, skb);
  1061. /* SKB is prepared - pass it to stack */
  1062. qede_skb_receive(edev, fp, rxq, skb, le16_to_cpu(fp_cqe->vlan_tag));
  1063. return 1;
  1064. }
  1065. static int qede_rx_int(struct qede_fastpath *fp, int budget)
  1066. {
  1067. struct qede_rx_queue *rxq = fp->rxq;
  1068. struct qede_dev *edev = fp->edev;
  1069. int work_done = 0, rcv_pkts = 0;
  1070. u16 hw_comp_cons, sw_comp_cons;
  1071. hw_comp_cons = le16_to_cpu(*rxq->hw_cons_ptr);
  1072. sw_comp_cons = qed_chain_get_cons_idx(&rxq->rx_comp_ring);
  1073. /* Memory barrier to prevent the CPU from doing speculative reads of CQE
  1074. * / BD in the while-loop before reading hw_comp_cons. If the CQE is
  1075. * read before it is written by FW, then FW writes CQE and SB, and then
  1076. * the CPU reads the hw_comp_cons, it will use an old CQE.
  1077. */
  1078. rmb();
  1079. /* Loop to complete all indicated BDs */
  1080. while ((sw_comp_cons != hw_comp_cons) && (work_done < budget)) {
  1081. rcv_pkts += qede_rx_process_cqe(edev, fp, rxq);
  1082. qed_chain_recycle_consumed(&rxq->rx_comp_ring);
  1083. sw_comp_cons = qed_chain_get_cons_idx(&rxq->rx_comp_ring);
  1084. work_done++;
  1085. }
  1086. rxq->rcv_pkts += rcv_pkts;
  1087. /* Allocate replacement buffers */
  1088. while (rxq->num_rx_buffers - rxq->filled_buffers)
  1089. if (qede_alloc_rx_buffer(rxq, false))
  1090. break;
  1091. /* Update producers */
  1092. qede_update_rx_prod(edev, rxq);
  1093. return work_done;
  1094. }
  1095. static bool qede_poll_is_more_work(struct qede_fastpath *fp)
  1096. {
  1097. qed_sb_update_sb_idx(fp->sb_info);
  1098. /* *_has_*_work() reads the status block, thus we need to ensure that
  1099. * status block indices have been actually read (qed_sb_update_sb_idx)
  1100. * prior to this check (*_has_*_work) so that we won't write the
  1101. * "newer" value of the status block to HW (if there was a DMA right
  1102. * after qede_has_rx_work and if there is no rmb, the memory reading
  1103. * (qed_sb_update_sb_idx) may be postponed to right before *_ack_sb).
  1104. * In this case there will never be another interrupt until there is
  1105. * another update of the status block, while there is still unhandled
  1106. * work.
  1107. */
  1108. rmb();
  1109. if (likely(fp->type & QEDE_FASTPATH_RX))
  1110. if (qede_has_rx_work(fp->rxq))
  1111. return true;
  1112. if (fp->type & QEDE_FASTPATH_XDP)
  1113. if (qede_txq_has_work(fp->xdp_tx))
  1114. return true;
  1115. if (likely(fp->type & QEDE_FASTPATH_TX))
  1116. if (qede_txq_has_work(fp->txq))
  1117. return true;
  1118. return false;
  1119. }
  1120. /*********************
  1121. * NDO & API related *
  1122. *********************/
  1123. int qede_poll(struct napi_struct *napi, int budget)
  1124. {
  1125. struct qede_fastpath *fp = container_of(napi, struct qede_fastpath,
  1126. napi);
  1127. struct qede_dev *edev = fp->edev;
  1128. int rx_work_done = 0;
  1129. if (likely(fp->type & QEDE_FASTPATH_TX) && qede_txq_has_work(fp->txq))
  1130. qede_tx_int(edev, fp->txq);
  1131. if ((fp->type & QEDE_FASTPATH_XDP) && qede_txq_has_work(fp->xdp_tx))
  1132. qede_xdp_tx_int(edev, fp->xdp_tx);
  1133. rx_work_done = (likely(fp->type & QEDE_FASTPATH_RX) &&
  1134. qede_has_rx_work(fp->rxq)) ?
  1135. qede_rx_int(fp, budget) : 0;
  1136. if (rx_work_done < budget) {
  1137. if (!qede_poll_is_more_work(fp)) {
  1138. napi_complete_done(napi, rx_work_done);
  1139. /* Update and reenable interrupts */
  1140. qed_sb_ack(fp->sb_info, IGU_INT_ENABLE, 1);
  1141. } else {
  1142. rx_work_done = budget;
  1143. }
  1144. }
  1145. if (fp->xdp_xmit) {
  1146. u16 xdp_prod = qed_chain_get_prod_idx(&fp->xdp_tx->tx_pbl);
  1147. fp->xdp_xmit = 0;
  1148. fp->xdp_tx->tx_db.data.bd_prod = cpu_to_le16(xdp_prod);
  1149. qede_update_tx_producer(fp->xdp_tx);
  1150. }
  1151. return rx_work_done;
  1152. }
  1153. irqreturn_t qede_msix_fp_int(int irq, void *fp_cookie)
  1154. {
  1155. struct qede_fastpath *fp = fp_cookie;
  1156. qed_sb_ack(fp->sb_info, IGU_INT_DISABLE, 0 /*do not update*/);
  1157. napi_schedule_irqoff(&fp->napi);
  1158. return IRQ_HANDLED;
  1159. }
  1160. /* Main transmit function */
  1161. netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev)
  1162. {
  1163. struct qede_dev *edev = netdev_priv(ndev);
  1164. struct netdev_queue *netdev_txq;
  1165. struct qede_tx_queue *txq;
  1166. struct eth_tx_1st_bd *first_bd;
  1167. struct eth_tx_2nd_bd *second_bd = NULL;
  1168. struct eth_tx_3rd_bd *third_bd = NULL;
  1169. struct eth_tx_bd *tx_data_bd = NULL;
  1170. u16 txq_index, val = 0;
  1171. u8 nbd = 0;
  1172. dma_addr_t mapping;
  1173. int rc, frag_idx = 0, ipv6_ext = 0;
  1174. u8 xmit_type;
  1175. u16 idx;
  1176. u16 hlen;
  1177. bool data_split = false;
  1178. /* Get tx-queue context and netdev index */
  1179. txq_index = skb_get_queue_mapping(skb);
  1180. WARN_ON(txq_index >= QEDE_TSS_COUNT(edev));
  1181. txq = edev->fp_array[edev->fp_num_rx + txq_index].txq;
  1182. netdev_txq = netdev_get_tx_queue(ndev, txq_index);
  1183. WARN_ON(qed_chain_get_elem_left(&txq->tx_pbl) < (MAX_SKB_FRAGS + 1));
  1184. xmit_type = qede_xmit_type(skb, &ipv6_ext);
  1185. #if ((MAX_SKB_FRAGS + 2) > ETH_TX_MAX_BDS_PER_NON_LSO_PACKET)
  1186. if (qede_pkt_req_lin(skb, xmit_type)) {
  1187. if (skb_linearize(skb)) {
  1188. DP_NOTICE(edev,
  1189. "SKB linearization failed - silently dropping this SKB\n");
  1190. dev_kfree_skb_any(skb);
  1191. return NETDEV_TX_OK;
  1192. }
  1193. }
  1194. #endif
  1195. /* Fill the entry in the SW ring and the BDs in the FW ring */
  1196. idx = txq->sw_tx_prod;
  1197. txq->sw_tx_ring.skbs[idx].skb = skb;
  1198. first_bd = (struct eth_tx_1st_bd *)
  1199. qed_chain_produce(&txq->tx_pbl);
  1200. memset(first_bd, 0, sizeof(*first_bd));
  1201. first_bd->data.bd_flags.bitfields =
  1202. 1 << ETH_TX_1ST_BD_FLAGS_START_BD_SHIFT;
  1203. if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP))
  1204. qede_ptp_tx_ts(edev, skb);
  1205. /* Map skb linear data for DMA and set in the first BD */
  1206. mapping = dma_map_single(txq->dev, skb->data,
  1207. skb_headlen(skb), DMA_TO_DEVICE);
  1208. if (unlikely(dma_mapping_error(txq->dev, mapping))) {
  1209. DP_NOTICE(edev, "SKB mapping failed\n");
  1210. qede_free_failed_tx_pkt(txq, first_bd, 0, false);
  1211. qede_update_tx_producer(txq);
  1212. return NETDEV_TX_OK;
  1213. }
  1214. nbd++;
  1215. BD_SET_UNMAP_ADDR_LEN(first_bd, mapping, skb_headlen(skb));
  1216. /* In case there is IPv6 with extension headers or LSO we need 2nd and
  1217. * 3rd BDs.
  1218. */
  1219. if (unlikely((xmit_type & XMIT_LSO) | ipv6_ext)) {
  1220. second_bd = (struct eth_tx_2nd_bd *)
  1221. qed_chain_produce(&txq->tx_pbl);
  1222. memset(second_bd, 0, sizeof(*second_bd));
  1223. nbd++;
  1224. third_bd = (struct eth_tx_3rd_bd *)
  1225. qed_chain_produce(&txq->tx_pbl);
  1226. memset(third_bd, 0, sizeof(*third_bd));
  1227. nbd++;
  1228. /* We need to fill in additional data in second_bd... */
  1229. tx_data_bd = (struct eth_tx_bd *)second_bd;
  1230. }
  1231. if (skb_vlan_tag_present(skb)) {
  1232. first_bd->data.vlan = cpu_to_le16(skb_vlan_tag_get(skb));
  1233. first_bd->data.bd_flags.bitfields |=
  1234. 1 << ETH_TX_1ST_BD_FLAGS_VLAN_INSERTION_SHIFT;
  1235. }
  1236. /* Fill the parsing flags & params according to the requested offload */
  1237. if (xmit_type & XMIT_L4_CSUM) {
  1238. /* We don't re-calculate IP checksum as it is already done by
  1239. * the upper stack
  1240. */
  1241. first_bd->data.bd_flags.bitfields |=
  1242. 1 << ETH_TX_1ST_BD_FLAGS_L4_CSUM_SHIFT;
  1243. if (xmit_type & XMIT_ENC) {
  1244. first_bd->data.bd_flags.bitfields |=
  1245. 1 << ETH_TX_1ST_BD_FLAGS_IP_CSUM_SHIFT;
  1246. val |= (1 << ETH_TX_DATA_1ST_BD_TUNN_FLAG_SHIFT);
  1247. }
  1248. /* Legacy FW had flipped behavior in regard to this bit -
  1249. * I.e., needed to set to prevent FW from touching encapsulated
  1250. * packets when it didn't need to.
  1251. */
  1252. if (unlikely(txq->is_legacy))
  1253. val ^= (1 << ETH_TX_DATA_1ST_BD_TUNN_FLAG_SHIFT);
  1254. /* If the packet is IPv6 with extension header, indicate that
  1255. * to FW and pass few params, since the device cracker doesn't
  1256. * support parsing IPv6 with extension header/s.
  1257. */
  1258. if (unlikely(ipv6_ext))
  1259. qede_set_params_for_ipv6_ext(skb, second_bd, third_bd);
  1260. }
  1261. if (xmit_type & XMIT_LSO) {
  1262. first_bd->data.bd_flags.bitfields |=
  1263. (1 << ETH_TX_1ST_BD_FLAGS_LSO_SHIFT);
  1264. third_bd->data.lso_mss =
  1265. cpu_to_le16(skb_shinfo(skb)->gso_size);
  1266. if (unlikely(xmit_type & XMIT_ENC)) {
  1267. first_bd->data.bd_flags.bitfields |=
  1268. 1 << ETH_TX_1ST_BD_FLAGS_TUNN_IP_CSUM_SHIFT;
  1269. if (xmit_type & XMIT_ENC_GSO_L4_CSUM) {
  1270. u8 tmp = ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_SHIFT;
  1271. first_bd->data.bd_flags.bitfields |= 1 << tmp;
  1272. }
  1273. hlen = qede_get_skb_hlen(skb, true);
  1274. } else {
  1275. first_bd->data.bd_flags.bitfields |=
  1276. 1 << ETH_TX_1ST_BD_FLAGS_IP_CSUM_SHIFT;
  1277. hlen = qede_get_skb_hlen(skb, false);
  1278. }
  1279. /* @@@TBD - if will not be removed need to check */
  1280. third_bd->data.bitfields |=
  1281. cpu_to_le16(1 << ETH_TX_DATA_3RD_BD_HDR_NBD_SHIFT);
  1282. /* Make life easier for FW guys who can't deal with header and
  1283. * data on same BD. If we need to split, use the second bd...
  1284. */
  1285. if (unlikely(skb_headlen(skb) > hlen)) {
  1286. DP_VERBOSE(edev, NETIF_MSG_TX_QUEUED,
  1287. "TSO split header size is %d (%x:%x)\n",
  1288. first_bd->nbytes, first_bd->addr.hi,
  1289. first_bd->addr.lo);
  1290. mapping = HILO_U64(le32_to_cpu(first_bd->addr.hi),
  1291. le32_to_cpu(first_bd->addr.lo)) +
  1292. hlen;
  1293. BD_SET_UNMAP_ADDR_LEN(tx_data_bd, mapping,
  1294. le16_to_cpu(first_bd->nbytes) -
  1295. hlen);
  1296. /* this marks the BD as one that has no
  1297. * individual mapping
  1298. */
  1299. txq->sw_tx_ring.skbs[idx].flags |= QEDE_TSO_SPLIT_BD;
  1300. first_bd->nbytes = cpu_to_le16(hlen);
  1301. tx_data_bd = (struct eth_tx_bd *)third_bd;
  1302. data_split = true;
  1303. }
  1304. } else {
  1305. val |= ((skb->len & ETH_TX_DATA_1ST_BD_PKT_LEN_MASK) <<
  1306. ETH_TX_DATA_1ST_BD_PKT_LEN_SHIFT);
  1307. }
  1308. first_bd->data.bitfields = cpu_to_le16(val);
  1309. /* Handle fragmented skb */
  1310. /* special handle for frags inside 2nd and 3rd bds.. */
  1311. while (tx_data_bd && frag_idx < skb_shinfo(skb)->nr_frags) {
  1312. rc = map_frag_to_bd(txq,
  1313. &skb_shinfo(skb)->frags[frag_idx],
  1314. tx_data_bd);
  1315. if (rc) {
  1316. qede_free_failed_tx_pkt(txq, first_bd, nbd, data_split);
  1317. qede_update_tx_producer(txq);
  1318. return NETDEV_TX_OK;
  1319. }
  1320. if (tx_data_bd == (struct eth_tx_bd *)second_bd)
  1321. tx_data_bd = (struct eth_tx_bd *)third_bd;
  1322. else
  1323. tx_data_bd = NULL;
  1324. frag_idx++;
  1325. }
  1326. /* map last frags into 4th, 5th .... */
  1327. for (; frag_idx < skb_shinfo(skb)->nr_frags; frag_idx++, nbd++) {
  1328. tx_data_bd = (struct eth_tx_bd *)
  1329. qed_chain_produce(&txq->tx_pbl);
  1330. memset(tx_data_bd, 0, sizeof(*tx_data_bd));
  1331. rc = map_frag_to_bd(txq,
  1332. &skb_shinfo(skb)->frags[frag_idx],
  1333. tx_data_bd);
  1334. if (rc) {
  1335. qede_free_failed_tx_pkt(txq, first_bd, nbd, data_split);
  1336. qede_update_tx_producer(txq);
  1337. return NETDEV_TX_OK;
  1338. }
  1339. }
  1340. /* update the first BD with the actual num BDs */
  1341. first_bd->data.nbds = nbd;
  1342. netdev_tx_sent_queue(netdev_txq, skb->len);
  1343. skb_tx_timestamp(skb);
  1344. /* Advance packet producer only before sending the packet since mapping
  1345. * of pages may fail.
  1346. */
  1347. txq->sw_tx_prod = (txq->sw_tx_prod + 1) % txq->num_tx_buffers;
  1348. /* 'next page' entries are counted in the producer value */
  1349. txq->tx_db.data.bd_prod =
  1350. cpu_to_le16(qed_chain_get_prod_idx(&txq->tx_pbl));
  1351. if (!skb->xmit_more || netif_xmit_stopped(netdev_txq))
  1352. qede_update_tx_producer(txq);
  1353. if (unlikely(qed_chain_get_elem_left(&txq->tx_pbl)
  1354. < (MAX_SKB_FRAGS + 1))) {
  1355. if (skb->xmit_more)
  1356. qede_update_tx_producer(txq);
  1357. netif_tx_stop_queue(netdev_txq);
  1358. txq->stopped_cnt++;
  1359. DP_VERBOSE(edev, NETIF_MSG_TX_QUEUED,
  1360. "Stop queue was called\n");
  1361. /* paired memory barrier is in qede_tx_int(), we have to keep
  1362. * ordering of set_bit() in netif_tx_stop_queue() and read of
  1363. * fp->bd_tx_cons
  1364. */
  1365. smp_mb();
  1366. if ((qed_chain_get_elem_left(&txq->tx_pbl) >=
  1367. (MAX_SKB_FRAGS + 1)) &&
  1368. (edev->state == QEDE_STATE_OPEN)) {
  1369. netif_tx_wake_queue(netdev_txq);
  1370. DP_VERBOSE(edev, NETIF_MSG_TX_QUEUED,
  1371. "Wake queue was called\n");
  1372. }
  1373. }
  1374. return NETDEV_TX_OK;
  1375. }
  1376. /* 8B udp header + 8B base tunnel header + 32B option length */
  1377. #define QEDE_MAX_TUN_HDR_LEN 48
  1378. netdev_features_t qede_features_check(struct sk_buff *skb,
  1379. struct net_device *dev,
  1380. netdev_features_t features)
  1381. {
  1382. if (skb->encapsulation) {
  1383. u8 l4_proto = 0;
  1384. switch (vlan_get_protocol(skb)) {
  1385. case htons(ETH_P_IP):
  1386. l4_proto = ip_hdr(skb)->protocol;
  1387. break;
  1388. case htons(ETH_P_IPV6):
  1389. l4_proto = ipv6_hdr(skb)->nexthdr;
  1390. break;
  1391. default:
  1392. return features;
  1393. }
  1394. /* Disable offloads for geneve tunnels, as HW can't parse
  1395. * the geneve header which has option length greater than 32b
  1396. * and disable offloads for the ports which are not offloaded.
  1397. */
  1398. if (l4_proto == IPPROTO_UDP) {
  1399. struct qede_dev *edev = netdev_priv(dev);
  1400. u16 hdrlen, vxln_port, gnv_port;
  1401. hdrlen = QEDE_MAX_TUN_HDR_LEN;
  1402. vxln_port = edev->vxlan_dst_port;
  1403. gnv_port = edev->geneve_dst_port;
  1404. if ((skb_inner_mac_header(skb) -
  1405. skb_transport_header(skb)) > hdrlen ||
  1406. (ntohs(udp_hdr(skb)->dest) != vxln_port &&
  1407. ntohs(udp_hdr(skb)->dest) != gnv_port))
  1408. return features & ~(NETIF_F_CSUM_MASK |
  1409. NETIF_F_GSO_MASK);
  1410. }
  1411. }
  1412. return features;
  1413. }