Separate IB_GID_TYPE_IB and IB_GID_TYPE_ROCE to two different values, so
enum ib_gid_type will match the gid types of the new query GID table API
which will be introduced in the following patches.
This change in enum ib_gid_type requires to change also enum
rdma_network_type by separating RDMA_NETWORK_IB and RDMA_NETWORK_ROCE_V1
values.
Link: https://lore.kernel.org/r/20200923165015.2491894-3-leon@kernel.org
Signed-off-by: Avihai Horon <avihaih@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
 }
 
 static const char * const gid_type_str[] = {
+       /* IB/RoCE v1 value is set for IB_GID_TYPE_IB and IB_GID_TYPE_ROCE for
+        * user space compatibility reasons.
+        */
        [IB_GID_TYPE_IB]        = "IB/RoCE v1",
+       [IB_GID_TYPE_ROCE]      = "IB/RoCE v1",
        [IB_GID_TYPE_ROCE_UDP_ENCAP]    = "RoCE v2",
 };
 
 
        if (!rdma_is_port_valid(cma_dev->device, port))
                return -EINVAL;
 
+       if (default_gid_type == IB_GID_TYPE_IB &&
+           rdma_protocol_roce_eth_encap(cma_dev->device, port))
+               default_gid_type = IB_GID_TYPE_ROCE;
+
        supported_gids = roce_gid_type_mask_support(cma_dev->device, port);
 
        if (!(supported_gids & 1 << default_gid_type))
 
 {
        struct cma_device *cma_dev;
        struct cma_dev_port_group *group;
-       int gid_type = ib_cache_gid_parse_type_str(buf);
+       int gid_type;
        ssize_t ret;
 
-       if (gid_type < 0)
-               return -EINVAL;
-
        ret = cma_configfs_params_get(item, &cma_dev, &group);
        if (ret)
                return ret;
 
+       gid_type = ib_cache_gid_parse_type_str(buf);
+       if (gid_type < 0)
+               return -EINVAL;
+
        ret = cma_set_default_gid_type(cma_dev, group->port_num, gid_type);
 
        cma_configfs_params_put(cma_dev);
 
                                       (struct in6_addr *)dgid);
                return 0;
        } else if (net_type == RDMA_NETWORK_IPV6 ||
-                  net_type == RDMA_NETWORK_IB) {
+                  net_type == RDMA_NETWORK_IB || RDMA_NETWORK_ROCE_V1) {
                *dgid = hdr->ibgrh.dgid;
                *sgid = hdr->ibgrh.sgid;
                return 0;
 
 
        switch (roce_packet_type) {
        case MLX5_CQE_ROCE_L3_HEADER_TYPE_GRH:
-               wc->network_hdr_type = RDMA_NETWORK_IB;
+               wc->network_hdr_type = RDMA_NETWORK_ROCE_V1;
                break;
        case MLX5_CQE_ROCE_L3_HEADER_TYPE_IPV6:
                wc->network_hdr_type = RDMA_NETWORK_IPV6;
 
                         unsigned int index, const union ib_gid *gid,
                         const struct ib_gid_attr *attr)
 {
-       enum ib_gid_type gid_type = IB_GID_TYPE_IB;
+       enum ib_gid_type gid_type = IB_GID_TYPE_ROCE;
        u16 vlan_id = 0xffff;
        u8 roce_version = 0;
        u8 roce_l3_type = 0;
        }
 
        switch (gid_type) {
-       case IB_GID_TYPE_IB:
+       case IB_GID_TYPE_ROCE:
                roce_version = MLX5_ROCE_VERSION_1;
                break;
        case IB_GID_TYPE_ROCE_UDP_ENCAP:
 
                SET_FIELD(qp_params->modify_flags,
                          QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1);
                break;
-       case RDMA_NETWORK_IB:
+       case RDMA_NETWORK_ROCE_V1:
                memcpy(&qp_params->sgid.bytes[0], &gid_attr->gid.raw[0],
                       sizeof(qp_params->sgid));
                memcpy(&qp_params->dgid.bytes[0],
                          QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1);
                qp_params->roce_mode = ROCE_V2_IPV4;
                break;
+       default:
+               return -EINVAL;
        }
 
        for (i = 0; i < 4; i++) {
 
 extern union ib_gid zgid;
 
 enum ib_gid_type {
-       /* If link layer is Ethernet, this is RoCE V1 */
        IB_GID_TYPE_IB        = 0,
-       IB_GID_TYPE_ROCE      = 0,
-       IB_GID_TYPE_ROCE_UDP_ENCAP = 1,
+       IB_GID_TYPE_ROCE      = 1,
+       IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
        IB_GID_TYPE_SIZE
 };
 
 
 enum rdma_network_type {
        RDMA_NETWORK_IB,
-       RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB,
+       RDMA_NETWORK_ROCE_V1,
        RDMA_NETWORK_IPV4,
        RDMA_NETWORK_IPV6
 };
        if (network_type == RDMA_NETWORK_IPV4 ||
            network_type == RDMA_NETWORK_IPV6)
                return IB_GID_TYPE_ROCE_UDP_ENCAP;
-
-       /* IB_GID_TYPE_IB same as RDMA_NETWORK_ROCE_V1 */
-       return IB_GID_TYPE_IB;
+       else if (network_type == RDMA_NETWORK_ROCE_V1)
+               return IB_GID_TYPE_ROCE;
+       else
+               return IB_GID_TYPE_IB;
 }
 
 static inline enum rdma_network_type
        if (attr->gid_type == IB_GID_TYPE_IB)
                return RDMA_NETWORK_IB;
 
+       if (attr->gid_type == IB_GID_TYPE_ROCE)
+               return RDMA_NETWORK_ROCE_V1;
+
        if (ipv6_addr_v4mapped((struct in6_addr *)&attr->gid))
                return RDMA_NETWORK_IPV4;
        else