ethdev: rename DCB field in config structs
[dpdk.git] / drivers / net / ixgbe / ixgbe_rxtx.c
index 3f808b3..6a62d67 100644 (file)
@@ -864,7 +864,6 @@ end_of_tx:
  *  RX functions
  *
  **********************************************************************/
-#ifdef RTE_NEXT_ABI
 #define IXGBE_PACKET_TYPE_IPV4              0X01
 #define IXGBE_PACKET_TYPE_IPV4_TCP          0X11
 #define IXGBE_PACKET_TYPE_IPV4_UDP          0X21
@@ -967,43 +966,6 @@ ixgbe_rxd_pkt_info_to_pkt_flags(uint16_t pkt_info)
        return ip_rss_types_map[pkt_info & 0XF];
 #endif
 }
-#else /* RTE_NEXT_ABI */
-static inline uint64_t
-rx_desc_hlen_type_rss_to_pkt_flags(uint32_t hl_tp_rs)
-{
-       uint64_t pkt_flags;
-
-       static const uint64_t ip_pkt_types_map[16] = {
-               0, PKT_RX_IPV4_HDR, PKT_RX_IPV4_HDR_EXT, PKT_RX_IPV4_HDR_EXT,
-               PKT_RX_IPV6_HDR, 0, 0, 0,
-               PKT_RX_IPV6_HDR_EXT, 0, 0, 0,
-               PKT_RX_IPV6_HDR_EXT, 0, 0, 0,
-       };
-
-       static const uint64_t ip_rss_types_map[16] = {
-               0, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH,
-               0, PKT_RX_RSS_HASH, 0, PKT_RX_RSS_HASH,
-               PKT_RX_RSS_HASH, 0, 0, 0,
-               0, 0, 0,  PKT_RX_FDIR,
-       };
-
-#ifdef RTE_LIBRTE_IEEE1588
-       static uint64_t ip_pkt_etqf_map[8] = {
-               0, 0, 0, PKT_RX_IEEE1588_PTP,
-               0, 0, 0, 0,
-       };
-
-       pkt_flags = (hl_tp_rs & IXGBE_RXDADV_PKTTYPE_ETQF) ?
-                       ip_pkt_etqf_map[(hl_tp_rs >> 4) & 0x07] :
-                       ip_pkt_types_map[(hl_tp_rs >> 4) & 0x0F];
-#else
-       pkt_flags = (hl_tp_rs & IXGBE_RXDADV_PKTTYPE_ETQF) ? 0 :
-                       ip_pkt_types_map[(hl_tp_rs >> 4) & 0x0F];
-
-#endif
-       return pkt_flags | ip_rss_types_map[hl_tp_rs & 0xF];
-}
-#endif /* RTE_NEXT_ABI */
 
 static inline uint64_t
 rx_desc_status_to_pkt_flags(uint32_t rx_status)
@@ -1058,13 +1020,9 @@ ixgbe_rx_scan_hw_ring(struct ixgbe_rx_queue *rxq)
        struct rte_mbuf *mb;
        uint16_t pkt_len;
        uint64_t pkt_flags;
-#ifdef RTE_NEXT_ABI
        int nb_dd;
        uint32_t s[LOOK_AHEAD];
        uint16_t pkt_info[LOOK_AHEAD];
-#else
-       int s[LOOK_AHEAD], nb_dd;
-#endif /* RTE_NEXT_ABI */
        int i, j, nb_rx = 0;
        uint32_t status;
 
@@ -1088,11 +1046,9 @@ ixgbe_rx_scan_hw_ring(struct ixgbe_rx_queue *rxq)
                for (j = LOOK_AHEAD-1; j >= 0; --j)
                        s[j] = rte_le_to_cpu_32(rxdp[j].wb.upper.status_error);
 
-#ifdef RTE_NEXT_ABI
                for (j = LOOK_AHEAD - 1; j >= 0; --j)
                        pkt_info[j] = rxdp[j].wb.lower.lo_dword.
                                                hs_rss.pkt_info;
-#endif /* RTE_NEXT_ABI */
 
                /* Compute how many status bits were set */
                nb_dd = 0;
@@ -1111,7 +1067,6 @@ ixgbe_rx_scan_hw_ring(struct ixgbe_rx_queue *rxq)
                        mb->vlan_tci = rte_le_to_cpu_16(rxdp[j].wb.upper.vlan);
 
                        /* convert descriptor fields to rte mbuf flags */
-#ifdef RTE_NEXT_ABI
                        pkt_flags = rx_desc_status_to_pkt_flags(s[j]);
                        pkt_flags |= rx_desc_error_to_pkt_flags(s[j]);
                        pkt_flags |=
@@ -1119,15 +1074,6 @@ ixgbe_rx_scan_hw_ring(struct ixgbe_rx_queue *rxq)
                        mb->ol_flags = pkt_flags;
                        mb->packet_type =
                                ixgbe_rxd_pkt_info_to_pkt_type(pkt_info[j]);
-#else /* RTE_NEXT_ABI */
-                       pkt_flags  = rx_desc_hlen_type_rss_to_pkt_flags(
-                                       rte_le_to_cpu_32(
-                                       rxdp[j].wb.lower.lo_dword.data));
-                       /* reuse status field from scan list */
-                       pkt_flags |= rx_desc_status_to_pkt_flags(s[j]);
-                       pkt_flags |= rx_desc_error_to_pkt_flags(s[j]);
-                       mb->ol_flags = pkt_flags;
-#endif /* RTE_NEXT_ABI */
 
                        if (likely(pkt_flags & PKT_RX_RSS_HASH))
                                mb->hash.rss = rte_le_to_cpu_32(
@@ -1193,7 +1139,7 @@ ixgbe_rx_alloc_bufs(struct ixgbe_rx_queue *rxq, bool reset_mbuf)
 
                /* populate the descriptors */
                dma_addr = rte_cpu_to_le_64(RTE_MBUF_DATA_DMA_ADDR_DEFAULT(mb));
-               rxdp[i].read.hdr_addr = dma_addr;
+               rxdp[i].read.hdr_addr = 0;
                rxdp[i].read.pkt_addr = dma_addr;
        }
 
@@ -1328,11 +1274,7 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
        union ixgbe_adv_rx_desc rxd;
        uint64_t dma_addr;
        uint32_t staterr;
-#ifdef RTE_NEXT_ABI
        uint32_t pkt_info;
-#else
-       uint32_t hlen_type_rss;
-#endif
        uint16_t pkt_len;
        uint16_t rx_id;
        uint16_t nb_rx;
@@ -1424,7 +1366,7 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
                rxe->mbuf = nmb;
                dma_addr =
                        rte_cpu_to_le_64(RTE_MBUF_DATA_DMA_ADDR_DEFAULT(nmb));
-               rxdp->read.hdr_addr = dma_addr;
+               rxdp->read.hdr_addr = 0;
                rxdp->read.pkt_addr = dma_addr;
 
                /*
@@ -1450,7 +1392,6 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
                rxm->data_len = pkt_len;
                rxm->port = rxq->port_id;
 
-#ifdef RTE_NEXT_ABI
                pkt_info = rte_le_to_cpu_32(rxd.wb.lower.lo_dword.hs_rss.
                                                                pkt_info);
                /* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */
@@ -1462,16 +1403,6 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
                        ixgbe_rxd_pkt_info_to_pkt_flags(pkt_info);
                rxm->ol_flags = pkt_flags;
                rxm->packet_type = ixgbe_rxd_pkt_info_to_pkt_type(pkt_info);
-#else /* RTE_NEXT_ABI */
-               hlen_type_rss = rte_le_to_cpu_32(rxd.wb.lower.lo_dword.data);
-               /* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */
-               rxm->vlan_tci = rte_le_to_cpu_16(rxd.wb.upper.vlan);
-
-               pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss);
-               pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr);
-               pkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);
-               rxm->ol_flags = pkt_flags;
-#endif /* RTE_NEXT_ABI */
 
                if (likely(pkt_flags & PKT_RX_RSS_HASH))
                        rxm->hash.rss = rte_le_to_cpu_32(
@@ -1547,7 +1478,6 @@ ixgbe_fill_cluster_head_buf(
        uint8_t port_id,
        uint32_t staterr)
 {
-#ifdef RTE_NEXT_ABI
        uint16_t pkt_info;
        uint64_t pkt_flags;
 
@@ -1563,23 +1493,6 @@ ixgbe_fill_cluster_head_buf(
        pkt_flags |= ixgbe_rxd_pkt_info_to_pkt_flags(pkt_info);
        head->ol_flags = pkt_flags;
        head->packet_type = ixgbe_rxd_pkt_info_to_pkt_type(pkt_info);
-#else /* RTE_NEXT_ABI */
-       uint32_t hlen_type_rss;
-       uint64_t pkt_flags;
-
-       head->port = port_id;
-
-       /*
-        * The vlan_tci field is only valid when PKT_RX_VLAN_PKT is
-        * set in the pkt_flags field.
-        */
-       head->vlan_tci = rte_le_to_cpu_16(desc->wb.upper.vlan);
-       hlen_type_rss = rte_le_to_cpu_32(desc->wb.lower.lo_dword.data);
-       pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss);
-       pkt_flags |= rx_desc_status_to_pkt_flags(staterr);
-       pkt_flags |= rx_desc_error_to_pkt_flags(staterr);
-       head->ol_flags = pkt_flags;
-#endif /* RTE_NEXT_ABI */
 
        if (likely(pkt_flags & PKT_RX_RSS_HASH))
                head->hash.rss = rte_le_to_cpu_32(desc->wb.lower.hi_dword.rss);
@@ -1753,7 +1666,7 @@ next_desc:
                        rxe->mbuf = nmb;
 
                        rxm->data_off = RTE_PKTMBUF_HEADROOM;
-                       rxdp->read.hdr_addr = dma;
+                       rxdp->read.hdr_addr = 0;
                        rxdp->read.pkt_addr = dma;
                } else
                        rxe->mbuf = NULL;
@@ -2734,11 +2647,13 @@ ixgbe_rss_disable(struct rte_eth_dev *dev)
 {
        struct ixgbe_hw *hw;
        uint32_t mrqc;
+       uint32_t mrqc_reg;
 
        hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-       mrqc = IXGBE_READ_REG(hw, IXGBE_MRQC);
+       mrqc_reg = ixgbe_mrqc_reg_get(hw->mac.type);
+       mrqc = IXGBE_READ_REG(hw, mrqc_reg);
        mrqc &= ~IXGBE_MRQC_RSSEN;
-       IXGBE_WRITE_REG(hw, IXGBE_MRQC, mrqc);
+       IXGBE_WRITE_REG(hw, mrqc_reg, mrqc);
 }
 
 static void
@@ -2749,6 +2664,11 @@ ixgbe_hw_rss_hash_set(struct ixgbe_hw *hw, struct rte_eth_rss_conf *rss_conf)
        uint32_t rss_key;
        uint64_t rss_hf;
        uint16_t i;
+       uint32_t mrqc_reg;
+       uint32_t rssrk_reg;
+
+       mrqc_reg = ixgbe_mrqc_reg_get(hw->mac.type);
+       rssrk_reg = ixgbe_rssrk_reg_get(hw->mac.type, 0);
 
        hash_key = rss_conf->rss_key;
        if (hash_key != NULL) {
@@ -2758,7 +2678,7 @@ ixgbe_hw_rss_hash_set(struct ixgbe_hw *hw, struct rte_eth_rss_conf *rss_conf)
                        rss_key |= hash_key[(i * 4) + 1] << 8;
                        rss_key |= hash_key[(i * 4) + 2] << 16;
                        rss_key |= hash_key[(i * 4) + 3] << 24;
-                       IXGBE_WRITE_REG_ARRAY(hw, IXGBE_RSSRK(0), i, rss_key);
+                       IXGBE_WRITE_REG_ARRAY(hw, rssrk_reg, i, rss_key);
                }
        }
 
@@ -2783,7 +2703,7 @@ ixgbe_hw_rss_hash_set(struct ixgbe_hw *hw, struct rte_eth_rss_conf *rss_conf)
                mrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_UDP;
        if (rss_hf & ETH_RSS_IPV6_UDP_EX)
                mrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP;
-       IXGBE_WRITE_REG(hw, IXGBE_MRQC, mrqc);
+       IXGBE_WRITE_REG(hw, mrqc_reg, mrqc);
 }
 
 int
@@ -2793,9 +2713,17 @@ ixgbe_dev_rss_hash_update(struct rte_eth_dev *dev,
        struct ixgbe_hw *hw;
        uint32_t mrqc;
        uint64_t rss_hf;
+       uint32_t mrqc_reg;
 
        hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
+       if (!ixgbe_rss_update_sp(hw->mac.type)) {
+               PMD_DRV_LOG(ERR, "RSS hash update is not supported on this "
+                       "NIC.");
+               return -ENOTSUP;
+       }
+       mrqc_reg = ixgbe_mrqc_reg_get(hw->mac.type);
+
        /*
         * Excerpt from section 7.1.2.8 Receive-Side Scaling (RSS):
         *     "RSS enabling cannot be done dynamically while it must be
@@ -2806,7 +2734,7 @@ ixgbe_dev_rss_hash_update(struct rte_eth_dev *dev,
         * disabled at initialization time.
         */
        rss_hf = rss_conf->rss_hf & IXGBE_RSS_OFFLOAD_ALL;
-       mrqc = IXGBE_READ_REG(hw, IXGBE_MRQC);
+       mrqc = IXGBE_READ_REG(hw, mrqc_reg);
        if (!(mrqc & IXGBE_MRQC_RSSEN)) { /* RSS disabled */
                if (rss_hf != 0) /* Enable RSS */
                        return -(EINVAL);
@@ -2829,13 +2757,17 @@ ixgbe_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
        uint32_t rss_key;
        uint64_t rss_hf;
        uint16_t i;
+       uint32_t mrqc_reg;
+       uint32_t rssrk_reg;
 
        hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+       mrqc_reg = ixgbe_mrqc_reg_get(hw->mac.type);
+       rssrk_reg = ixgbe_rssrk_reg_get(hw->mac.type, 0);
        hash_key = rss_conf->rss_key;
        if (hash_key != NULL) {
                /* Return RSS hash key */
                for (i = 0; i < 10; i++) {
-                       rss_key = IXGBE_READ_REG_ARRAY(hw, IXGBE_RSSRK(0), i);
+                       rss_key = IXGBE_READ_REG_ARRAY(hw, rssrk_reg, i);
                        hash_key[(i * 4)] = rss_key & 0x000000FF;
                        hash_key[(i * 4) + 1] = (rss_key >> 8) & 0x000000FF;
                        hash_key[(i * 4) + 2] = (rss_key >> 16) & 0x000000FF;
@@ -2844,7 +2776,7 @@ ixgbe_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
        }
 
        /* Get RSS functions configured in MRQC register */
-       mrqc = IXGBE_READ_REG(hw, IXGBE_MRQC);
+       mrqc = IXGBE_READ_REG(hw, mrqc_reg);
        if ((mrqc & IXGBE_MRQC_RSSEN) == 0) { /* RSS is disabled */
                rss_conf->rss_hf = 0;
                return 0;
@@ -2880,22 +2812,28 @@ ixgbe_rss_configure(struct rte_eth_dev *dev)
        uint32_t reta;
        uint16_t i;
        uint16_t j;
+       uint16_t sp_reta_size;
+       uint32_t reta_reg;
 
        PMD_INIT_FUNC_TRACE();
        hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
+       sp_reta_size = ixgbe_reta_size_get(hw->mac.type);
+
        /*
         * Fill in redirection table
         * The byte-swap is needed because NIC registers are in
         * little-endian order.
         */
        reta = 0;
-       for (i = 0, j = 0; i < 128; i++, j++) {
+       for (i = 0, j = 0; i < sp_reta_size; i++, j++) {
+               reta_reg = ixgbe_reta_reg_get(hw->mac.type, i);
+
                if (j == dev->data->nb_rx_queues)
                        j = 0;
                reta = (reta << 8) | j;
                if ((i & 3) == 3)
-                       IXGBE_WRITE_REG(hw, IXGBE_RETA(i >> 2),
+                       IXGBE_WRITE_REG(hw, reta_reg,
                                        rte_bswap32(reta));
        }
 
@@ -2915,6 +2853,7 @@ ixgbe_rss_configure(struct rte_eth_dev *dev)
 
 #define NUM_VFTA_REGISTERS 128
 #define NIC_RX_BUFFER_SIZE 0x200
+#define X550_RX_BUFFER_SIZE 0x180
 
 static void
 ixgbe_vmdq_dcb_configure(struct rte_eth_dev *dev)
@@ -2943,7 +2882,15 @@ ixgbe_vmdq_dcb_configure(struct rte_eth_dev *dev)
         * RXPBSIZE
         * split rx buffer up into sections, each for 1 traffic class
         */
-       pbsize = (uint16_t)(NIC_RX_BUFFER_SIZE / nb_tcs);
+       switch (hw->mac.type) {
+       case ixgbe_mac_X550:
+       case ixgbe_mac_X550EM_x:
+               pbsize = (uint16_t)(X550_RX_BUFFER_SIZE / nb_tcs);
+               break;
+       default:
+               pbsize = (uint16_t)(NIC_RX_BUFFER_SIZE / nb_tcs);
+               break;
+       }
        for (i = 0 ; i < nb_tcs; i++) {
                uint32_t rxpbsize = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(i));
                rxpbsize &= (~(0x3FF << IXGBE_RXPBSIZE_SHIFT));
@@ -2981,7 +2928,7 @@ ixgbe_vmdq_dcb_configure(struct rte_eth_dev *dev)
                 * mapping is done with 3 bits per priority,
                 * so shift by i*3 each time
                 */
-               queue_mapping |= ((cfg->dcb_queue[i] & 0x07) << (i * 3));
+               queue_mapping |= ((cfg->dcb_tc[i] & 0x07) << (i * 3));
 
        IXGBE_WRITE_REG(hw, IXGBE_RTRUP2TC, queue_mapping);
 
@@ -3116,7 +3063,7 @@ ixgbe_vmdq_dcb_rx_config(struct rte_eth_dev *dev,
        }
        /* User Priority to Traffic Class mapping */
        for (i = 0; i < ETH_DCB_NUM_USER_PRIORITIES; i++) {
-               j = vmdq_rx_conf->dcb_queue[i];
+               j = vmdq_rx_conf->dcb_tc[i];
                tc = &dcb_config->tc_config[j];
                tc->path[IXGBE_DCB_RX_CONFIG].up_to_tc_bitmap =
                                                (uint8_t)(1 << j);
@@ -3144,7 +3091,7 @@ ixgbe_dcb_vt_tx_config(struct rte_eth_dev *dev,
 
        /* User Priority to Traffic Class mapping */
        for (i = 0; i < ETH_DCB_NUM_USER_PRIORITIES; i++) {
-               j = vmdq_tx_conf->dcb_queue[i];
+               j = vmdq_tx_conf->dcb_tc[i];
                tc = &dcb_config->tc_config[j];
                tc->path[IXGBE_DCB_TX_CONFIG].up_to_tc_bitmap =
                                                (uint8_t)(1 << j);
@@ -3166,7 +3113,7 @@ ixgbe_dcb_rx_config(struct rte_eth_dev *dev,
 
        /* User Priority to Traffic Class mapping */
        for (i = 0; i < ETH_DCB_NUM_USER_PRIORITIES; i++) {
-               j = rx_conf->dcb_queue[i];
+               j = rx_conf->dcb_tc[i];
                tc = &dcb_config->tc_config[j];
                tc->path[IXGBE_DCB_RX_CONFIG].up_to_tc_bitmap =
                                                (uint8_t)(1 << j);
@@ -3187,7 +3134,7 @@ ixgbe_dcb_tx_config(struct rte_eth_dev *dev,
 
        /* User Priority to Traffic Class mapping */
        for (i = 0; i < ETH_DCB_NUM_USER_PRIORITIES; i++) {
-               j = tx_conf->dcb_queue[i];
+               j = tx_conf->dcb_tc[i];
                tc = &dcb_config->tc_config[j];
                tc->path[IXGBE_DCB_TX_CONFIG].up_to_tc_bitmap =
                                                (uint8_t)(1 << j);
@@ -3317,7 +3264,7 @@ ixgbe_dcb_hw_configure(struct rte_eth_dev *dev,
 {
        int     ret = 0;
        uint8_t i,pfc_en,nb_tcs;
-       uint16_t pbsize;
+       uint16_t pbsize, rx_buffer_size;
        uint8_t config_dcb_rx = 0;
        uint8_t config_dcb_tx = 0;
        uint8_t tsa[IXGBE_DCB_MAX_TRAFFIC_CLASS] = {0};
@@ -3408,9 +3355,19 @@ ixgbe_dcb_hw_configure(struct rte_eth_dev *dev,
                }
        }
 
+       switch (hw->mac.type) {
+       case ixgbe_mac_X550:
+       case ixgbe_mac_X550EM_x:
+               rx_buffer_size = X550_RX_BUFFER_SIZE;
+               break;
+       default:
+               rx_buffer_size = NIC_RX_BUFFER_SIZE;
+               break;
+       }
+
        if(config_dcb_rx) {
                /* Set RX buffer size */
-               pbsize = (uint16_t)(NIC_RX_BUFFER_SIZE / nb_tcs);
+               pbsize = (uint16_t)(rx_buffer_size / nb_tcs);
                uint32_t rxpbsize = pbsize << IXGBE_RXPBSIZE_SHIFT;
                for (i = 0 ; i < nb_tcs; i++) {
                        IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), rxpbsize);
@@ -3466,7 +3423,7 @@ ixgbe_dcb_hw_configure(struct rte_eth_dev *dev,
 
        /* Check if the PFC is supported */
        if(dev->data->dev_conf.dcb_capability_en & ETH_DCB_PFC_SUPPORT) {
-               pbsize = (uint16_t) (NIC_RX_BUFFER_SIZE / nb_tcs);
+               pbsize = (uint16_t)(rx_buffer_size / nb_tcs);
                for (i = 0; i < nb_tcs; i++) {
                        /*
                        * If the TC count is 8,and the default high_water is 48,
@@ -3666,7 +3623,7 @@ ixgbe_alloc_rx_queue_mbufs(struct ixgbe_rx_queue *rxq)
                dma_addr =
                        rte_cpu_to_le_64(RTE_MBUF_DATA_DMA_ADDR_DEFAULT(mbuf));
                rxd = &rxq->rx_ring[i];
-               rxd->read.hdr_addr = dma_addr;
+               rxd->read.hdr_addr = 0;
                rxd->read.pkt_addr = dma_addr;
                rxe[i].mbuf = mbuf;
        }
@@ -4008,7 +3965,9 @@ ixgbe_set_rx_function(struct rte_eth_dev *dev)
         */
        } else if (adapter->rx_vec_allowed) {
                PMD_INIT_LOG(DEBUG, "Vector rx enabled, please make sure RX "
-                                  "burst size no less than 32.");
+                                   "burst size no less than %d (port=%d).",
+                            RTE_IXGBE_DESCS_PER_LOOP,
+                            dev->data->port_id);
 
                dev->rx_pkt_burst = ixgbe_recv_pkts_vec;
        } else if (adapter->rx_bulk_alloc_allowed) {