/* SPDX-License-Identifier: GPL-2.0 */ /* Copyright(c) 2024 Huawei Technologies Co., Ltd */ #ifndef HINIC_RDMA_H__ #define HINIC_RDMA_H__ #define RDMA_ROCE_ENABLE 1 #define RDMA_IWARP_ENABLE 1 #define RDMA_ROCE_DISABLE 0 #define RDMA_IWARP_DISABLE 0 #define RDMA_MPT_DISABLED 0 /* has no mpt entry */ #define RDMA_MPT_EN_SW 1 /* has mpt, state INVALID */ #define RDMA_MPT_EN_HW 2 /* has mpt, state FREE or VALID */ #define RDMA_MPT_FIX_BUG_LKEY 0 struct mutex; struct tag_cqm_qpc_mpt; struct tag_cqm_object; struct net_device; struct rdma_gid_entry; #include "hinic3_cqm.h" enum mtt_check_type_e { MTT_CHECK_TYPE_0 = 0, MTT_CHECK_TYPE_1 }; enum mtt_data_type_e { MTT_DMTT_TYPE = 0, MTT_CMTT_TYPE }; enum rdma_ib_access { RDMA_IB_ACCESS_LOCAL_WRITE = 1, RDMA_IB_ACCESS_REMOTE_WRITE = (1 << 1), RDMA_IB_ACCESS_REMOTE_READ = (1 << 2), RDMA_IB_ACCESS_REMOTE_ATOMIC = (1 << 3), RDMA_IB_ACCESS_MW_BIND = (1 << 4), RDMA_IB_ACCESS_ZERO_BASED = (1 << 5), RDMA_IB_ACCESS_ON_DEMAND = (1 << 6), }; struct rdma_gid_entry { union { u8 raw[16]; struct { __be64 subnet_prefix; __be64 interface_id; } global; }; union { struct { u32 rsvd : 7; u32 is_vroce : 1; u32 cvlan : 12; /* 内层vlan customer vlan */ u32 svlan : 12; /* 外层vlan */ } bs; u32 value; } dw4; union { u32 hdr_len_value; }; union { struct { /* 0:没有vlan; 1:一层vlan; 2: 2层vlan; 3:stag */ u16 tag : 2; u16 tunnel : 1; // rsvd for ppe, don't use. 'tunnel' u16 gid_type : 2; u16 ppe_rsvd1 : 1; u16 outer_tag : 2; // rsvd for ppe, don't use. 'outer_tag' u16 ppe_rsvd3 : 1; // rsvd for ppe, don't use. 'stag' u16 gid_update : 1; u16 rsvd : 6; } bs; u16 value; } dw6_h; u8 smac[6]; }; struct rdma_comp_resource { struct mutex mutex; /* gid_entry使用的互斥量 */ __be64 node_guid; /* 与ibdev中的node_guid一致 */ struct rdma_gid_entry **gid_table; /* gid_entry在rdma组件初始化时分配内存 */ }; struct rdma_mpt { u32 mpt_index; /* 封装cqm提供的mpt_index */ void *vaddr; /* 封装cqm提供的mpt_entry的虚拟地址 */ void *mpt_object; /* 封装的cqm提供的指针 */ }; struct rdma_mtt_seg { u32 offset; /* 分配连续索引的首个索引 */ u32 order; /* mtt索引个数为1<