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