net/i40e: fix Rx packet statistics
[dpdk.git] / drivers / net / hinic / hinic_pmd_ethdev.c
index 1d6b710..cd4dad8 100644 (file)
 
 #define HINIC_VLAN_FILTER_EN           (1U << 0)
 
-#define HINIC_MTU_TO_PKTLEN(mtu)       \
-       ((mtu) + ETH_HLEN + ETH_CRC_LEN)
-
-#define HINIC_PKTLEN_TO_MTU(pktlen)    \
-       ((pktlen) - (ETH_HLEN + ETH_CRC_LEN))
-
-/* The max frame size with default MTU */
-#define HINIC_ETH_MAX_LEN (RTE_ETHER_MTU + ETH_HLEN + ETH_CRC_LEN)
-
 /* lro numer limit for one packet */
 #define HINIC_LRO_WQE_NUM_DEFAULT      8
 
@@ -1084,12 +1075,14 @@ init_qp_fail:
 /**
  * DPDK callback to release the receive queue.
  *
- * @param queue
- *   Generic receive queue pointer.
+ * @param dev
+ *   Pointer to Ethernet device structure.
+ * @param qid
+ *   Receive queue index.
  */
-static void hinic_rx_queue_release(void *queue)
+static void hinic_rx_queue_release(struct rte_eth_dev *dev, uint16_t qid)
 {
-       struct hinic_rxq *rxq = queue;
+       struct hinic_rxq *rxq = dev->data->rx_queues[qid];
        struct hinic_nic_dev *nic_dev;
 
        if (!rxq) {
@@ -1116,12 +1109,14 @@ static void hinic_rx_queue_release(void *queue)
 /**
  * DPDK callback to release the transmit queue.
  *
- * @param queue
- *   Generic transmit queue pointer.
+ * @param dev
+ *   Pointer to Ethernet device structure.
+ * @param qid
+ *   Transmit queue index.
  */
-static void hinic_tx_queue_release(void *queue)
+static void hinic_tx_queue_release(struct rte_eth_dev *dev, uint16_t qid)
 {
-       struct hinic_txq *txq = queue;
+       struct hinic_txq *txq = dev->data->tx_queues[qid];
        struct hinic_nic_dev *nic_dev;
 
        if (!txq) {
@@ -1617,6 +1612,9 @@ static int hinic_vlan_filter_set(struct rte_eth_dev *dev,
        if (vlan_id > RTE_ETHER_MAX_VLAN_ID)
                return -EINVAL;
 
+       if (vlan_id == 0)
+               return 0;
+
        func_id = hinic_global_func_id(nic_dev->hwdev);
 
        if (enable) {
@@ -2365,10 +2363,8 @@ static int hinic_set_mac_addr(struct rte_eth_dev *dev,
 
        rte_ether_addr_copy(addr, &nic_dev->default_addr);
 
-       PMD_DRV_LOG(INFO, "Set new mac address %02x:%02x:%02x:%02x:%02x:%02x",
-                   addr->addr_bytes[0], addr->addr_bytes[1],
-                   addr->addr_bytes[2], addr->addr_bytes[3],
-                   addr->addr_bytes[4], addr->addr_bytes[5]);
+       PMD_DRV_LOG(INFO, "Set new mac address " RTE_ETHER_ADDR_PRT_FMT,
+                   RTE_ETHER_ADDR_BYTES(addr));
 
        return 0;
 }
@@ -2504,42 +2500,20 @@ allmulti:
 }
 
 /**
- * DPDK callback to manage filter control operations
+ * DPDK callback to get flow operations
  *
  * @param dev
  *   Pointer to Ethernet device structure.
- * @param filter_type
- *   Filter type, which just supports generic type.
- * @param filter_op
- *   Filter operation to perform.
- * @param arg
+ * @param ops
  *   Pointer to operation-specific structure.
  *
  * @return
  *   0 on success, negative error value otherwise.
  */
-static int hinic_dev_filter_ctrl(struct rte_eth_dev *dev,
-                    enum rte_filter_type filter_type,
-                    enum rte_filter_op filter_op,
-                    void *arg)
+static int hinic_dev_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+                                 const struct rte_flow_ops **ops)
 {
-       struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
-       int func_id = hinic_global_func_id(nic_dev->hwdev);
-
-       switch (filter_type) {
-       case RTE_ETH_FILTER_GENERIC:
-               if (filter_op != RTE_ETH_FILTER_GET)
-                       return -EINVAL;
-               *(const void **)arg = &hinic_flow_ops;
-               break;
-       default:
-               PMD_DRV_LOG(INFO, "Filter type (%d) not supported",
-                       filter_type);
-               return -EINVAL;
-       }
-
-       PMD_DRV_LOG(INFO, "Set filter_ctrl succeed, func_id: 0x%x, filter_type: 0x%x,"
-                       "filter_op: 0x%x.", func_id, filter_type, filter_op);
+       *ops = &hinic_flow_ops;
        return 0;
 }
 
@@ -3047,7 +3021,7 @@ static const struct eth_dev_ops hinic_pmd_ops = {
        .mac_addr_remove               = hinic_mac_addr_remove,
        .mac_addr_add                  = hinic_mac_addr_add,
        .set_mc_addr_list              = hinic_set_mc_addr_list,
-       .filter_ctrl                   = hinic_dev_filter_ctrl,
+       .flow_ops_get                  = hinic_dev_flow_ops_get,
 };
 
 static const struct eth_dev_ops hinic_pmd_vf_ops = {
@@ -3082,7 +3056,11 @@ static const struct eth_dev_ops hinic_pmd_vf_ops = {
        .mac_addr_remove               = hinic_mac_addr_remove,
        .mac_addr_add                  = hinic_mac_addr_add,
        .set_mc_addr_list              = hinic_set_mc_addr_list,
-       .filter_ctrl                   = hinic_dev_filter_ctrl,
+       .flow_ops_get                  = hinic_dev_flow_ops_get,
+};
+
+static const struct eth_dev_ops hinic_dev_sec_ops = {
+       .dev_infos_get                 = hinic_dev_infos_get,
 };
 
 static int hinic_func_init(struct rte_eth_dev *eth_dev)
@@ -3099,6 +3077,7 @@ static int hinic_func_init(struct rte_eth_dev *eth_dev)
 
        /* EAL is SECONDARY and eth_dev is already created */
        if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
+               eth_dev->dev_ops = &hinic_dev_sec_ops;
                PMD_DRV_LOG(INFO, "Initialize %s in secondary process",
                            eth_dev->data->name);
 
@@ -3283,4 +3262,4 @@ static struct rte_pci_driver rte_hinic_pmd = {
 
 RTE_PMD_REGISTER_PCI(net_hinic, rte_hinic_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(net_hinic, pci_id_hinic_map);
-RTE_LOG_REGISTER(hinic_logtype, pmd.net.hinic, INFO);
+RTE_LOG_REGISTER_DEFAULT(hinic_logtype, INFO);