mlx5: reorder Rx/Tx queue structure
[dpdk.git] / drivers / net / mlx5 / mlx5_mac.c
index c7927c1..edb05ad 100644 (file)
@@ -120,8 +120,8 @@ hash_rxq_del_mac_flow(struct hash_rxq *hash_rxq, unsigned int mac_index,
              (*mac)[0], (*mac)[1], (*mac)[2], (*mac)[3], (*mac)[4], (*mac)[5],
              mac_index,
              vlan_index);
-       claim_zero(ibv_destroy_flow(hash_rxq->mac_flow
-                                   [mac_index][vlan_index]));
+       claim_zero(ibv_exp_destroy_flow(hash_rxq->mac_flow
+                                       [mac_index][vlan_index]));
        hash_rxq->mac_flow[mac_index][vlan_index] = NULL;
 }
 
@@ -212,8 +212,7 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)
        priv_lock(priv);
        DEBUG("%p: removing MAC address from index %" PRIu32,
              (void *)dev, index);
-       /* Last array entry is reserved for broadcast. */
-       if (index >= (RTE_DIM(priv->mac) - 1))
+       if (index >= RTE_DIM(priv->mac))
                goto end;
        priv_mac_addr_del(priv, index);
 end:
@@ -237,14 +236,14 @@ static int
 hash_rxq_add_mac_flow(struct hash_rxq *hash_rxq, unsigned int mac_index,
                      unsigned int vlan_index)
 {
-       struct ibv_flow *flow;
+       struct ibv_exp_flow *flow;
        struct priv *priv = hash_rxq->priv;
        const uint8_t (*mac)[ETHER_ADDR_LEN] =
                        (const uint8_t (*)[ETHER_ADDR_LEN])
                        priv->mac[mac_index].addr_bytes;
-       FLOW_ATTR_SPEC_ETH(data, hash_rxq_flow_attr(hash_rxq, NULL, 0));
-       struct ibv_flow_attr *attr = &data->attr;
-       struct ibv_flow_spec_eth *spec = &data->spec;
+       FLOW_ATTR_SPEC_ETH(data, priv_flow_attr(priv, NULL, 0, hash_rxq->type));
+       struct ibv_exp_flow_attr *attr = &data->attr;
+       struct ibv_exp_flow_spec_eth *spec = &data->spec;
        unsigned int vlan_enabled = !!priv->vlan_filter_n;
        unsigned int vlan_id = priv->vlan_filter[vlan_index];
 
@@ -257,12 +256,12 @@ hash_rxq_add_mac_flow(struct hash_rxq *hash_rxq, unsigned int mac_index,
         * This layout is expected by libibverbs.
         */
        assert(((uint8_t *)attr + sizeof(*attr)) == (uint8_t *)spec);
-       hash_rxq_flow_attr(hash_rxq, attr, sizeof(data));
+       priv_flow_attr(priv, attr, sizeof(data), hash_rxq->type);
        /* The first specification must be Ethernet. */
-       assert(spec->type == IBV_FLOW_SPEC_ETH);
+       assert(spec->type == IBV_EXP_FLOW_SPEC_ETH);
        assert(spec->size == sizeof(*spec));
-       *spec = (struct ibv_flow_spec_eth){
-               .type = IBV_FLOW_SPEC_ETH,
+       *spec = (struct ibv_exp_flow_spec_eth){
+               .type = IBV_EXP_FLOW_SPEC_ETH,
                .size = sizeof(*spec),
                .val = {
                        .dst_mac = {
@@ -286,7 +285,7 @@ hash_rxq_add_mac_flow(struct hash_rxq *hash_rxq, unsigned int mac_index,
              vlan_id);
        /* Create related flow. */
        errno = 0;
-       flow = ibv_create_flow(hash_rxq->qp, attr);
+       flow = ibv_exp_create_flow(hash_rxq->qp, attr);
        if (flow == NULL) {
                /* It's not clear whether errno is always set in this case. */
                ERROR("%p: flow configuration failed, errno=%d: %s",
@@ -479,8 +478,7 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac_addr,
        priv_lock(priv);
        DEBUG("%p: adding MAC address at index %" PRIu32,
              (void *)dev, index);
-       /* Last array entry is reserved for broadcast. */
-       if (index >= (RTE_DIM(priv->mac) - 1))
+       if (index >= RTE_DIM(priv->mac))
                goto end;
        priv_mac_addr_add(priv, index,
                          (const uint8_t (*)[ETHER_ADDR_LEN])
@@ -488,3 +486,19 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac_addr,
 end:
        priv_unlock(priv);
 }
+
+/**
+ * DPDK callback to set primary MAC address.
+ *
+ * @param dev
+ *   Pointer to Ethernet device structure.
+ * @param mac_addr
+ *   MAC address to register.
+ */
+void
+mlx5_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr)
+{
+       DEBUG("%p: setting primary MAC address", (void *)dev);
+       mlx5_mac_addr_remove(dev, 0);
+       mlx5_mac_addr_add(dev, mac_addr, 0, 0);
+}