This source file includes following definitions.
- ib_u64_get
 
- ib_u64_put
 
- get_ib_reth_vaddr
 
- put_ib_reth_vaddr
 
- get_ib_ateth_vaddr
 
- put_ib_ateth_vaddr
 
- get_ib_ateth_swap
 
- put_ib_ateth_swap
 
- get_ib_ateth_compare
 
- put_ib_ateth_compare
 
- ib_get_lnh
 
- ib_get_sc
 
- ib_is_sc5
 
- ib_get_sl
 
- ib_get_dlid
 
- ib_get_slid
 
- ib_get_lver
 
- ib_get_len
 
- ib_get_qkey
 
- ib_get_sqpn
 
- ib_bth_get_pad
 
- ib_bth_get_pkey
 
- ib_bth_get_opcode
 
- ib_bth_get_ackreq
 
- ib_bth_get_migreq
 
- ib_bth_get_se
 
- ib_bth_get_psn
 
- ib_bth_get_qpn
 
- ib_bth_get_becn
 
- ib_bth_get_fecn
 
- ib_bth_get_tver
 
- ib_bth_is_solicited
 
- ib_bth_is_migration
 
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 
  43 
  44 
  45 
  46 
  47 
  48 #ifndef IB_HDRS_H
  49 #define IB_HDRS_H
  50 
  51 #include <linux/types.h>
  52 #include <asm/unaligned.h>
  53 #include <rdma/ib_verbs.h>
  54 
  55 #define IB_SEQ_NAK      (3 << 29)
  56 
  57 
  58 #define IB_RNR_NAK                      0x20
  59 #define IB_NAK_PSN_ERROR                0x60
  60 #define IB_NAK_INVALID_REQUEST          0x61
  61 #define IB_NAK_REMOTE_ACCESS_ERROR      0x62
  62 #define IB_NAK_REMOTE_OPERATIONAL_ERROR 0x63
  63 #define IB_NAK_INVALID_RD_REQUEST       0x64
  64 
  65 #define IB_BTH_REQ_ACK          BIT(31)
  66 #define IB_BTH_SOLICITED        BIT(23)
  67 #define IB_BTH_MIG_REQ          BIT(22)
  68 
  69 #define IB_GRH_VERSION          6
  70 #define IB_GRH_VERSION_MASK     0xF
  71 #define IB_GRH_VERSION_SHIFT    28
  72 #define IB_GRH_TCLASS_MASK      0xFF
  73 #define IB_GRH_TCLASS_SHIFT     20
  74 #define IB_GRH_FLOW_MASK        0xFFFFF
  75 #define IB_GRH_FLOW_SHIFT       0
  76 #define IB_GRH_NEXT_HDR         0x1B
  77 #define IB_FECN_SHIFT 31
  78 #define IB_FECN_MASK 1
  79 #define IB_FECN_SMASK BIT(IB_FECN_SHIFT)
  80 #define IB_BECN_SHIFT 30
  81 #define IB_BECN_MASK 1
  82 #define IB_BECN_SMASK BIT(IB_BECN_SHIFT)
  83 
  84 #define IB_AETH_CREDIT_SHIFT    24
  85 #define IB_AETH_CREDIT_MASK     0x1F
  86 #define IB_AETH_CREDIT_INVAL    0x1F
  87 #define IB_AETH_NAK_SHIFT       29
  88 #define IB_MSN_MASK             0xFFFFFF
  89 
  90 struct ib_reth {
  91         __be64 vaddr;        
  92         __be32 rkey;
  93         __be32 length;
  94 } __packed;
  95 
  96 struct ib_atomic_eth {
  97         __be64 vaddr;        
  98         __be32 rkey;
  99         __be64 swap_data;    
 100         __be64 compare_data; 
 101 } __packed;
 102 
 103 #include <rdma/tid_rdma_defs.h>
 104 
 105 union ib_ehdrs {
 106         struct {
 107                 __be32 deth[2];
 108                 __be32 imm_data;
 109         } ud;
 110         struct {
 111                 struct ib_reth reth;
 112                 __be32 imm_data;
 113         } rc;
 114         struct {
 115                 __be32 aeth;
 116                 __be64 atomic_ack_eth; 
 117         } __packed at;
 118         __be32 imm_data;
 119         __be32 aeth;
 120         __be32 ieth;
 121         struct ib_atomic_eth atomic_eth;
 122         
 123         union {
 124                 struct tid_rdma_read_req r_req;
 125                 struct tid_rdma_read_resp r_rsp;
 126                 struct tid_rdma_write_req w_req;
 127                 struct tid_rdma_write_resp w_rsp;
 128                 struct tid_rdma_write_data w_data;
 129                 struct tid_rdma_resync resync;
 130                 struct tid_rdma_ack ack;
 131         } tid_rdma;
 132 }  __packed;
 133 
 134 struct ib_other_headers {
 135         __be32 bth[3];
 136         union ib_ehdrs u;
 137 } __packed;
 138 
 139 struct ib_header {
 140         __be16 lrh[4];
 141         union {
 142                 struct {
 143                         struct ib_grh grh;
 144                         struct ib_other_headers oth;
 145                 } l;
 146                 struct ib_other_headers oth;
 147         } u;
 148 } __packed;
 149 
 150 
 151 
 152 static inline u64 ib_u64_get(__be64 *p)
 153 {
 154         return get_unaligned_be64(p);
 155 }
 156 
 157 static inline void ib_u64_put(u64 val, __be64 *p)
 158 {
 159         put_unaligned_be64(val, p);
 160 }
 161 
 162 static inline u64 get_ib_reth_vaddr(struct ib_reth *reth)
 163 {
 164         return ib_u64_get(&reth->vaddr);
 165 }
 166 
 167 static inline void put_ib_reth_vaddr(u64 val, struct ib_reth *reth)
 168 {
 169         ib_u64_put(val, &reth->vaddr);
 170 }
 171 
 172 static inline u64 get_ib_ateth_vaddr(struct ib_atomic_eth *ateth)
 173 {
 174         return ib_u64_get(&ateth->vaddr);
 175 }
 176 
 177 static inline void put_ib_ateth_vaddr(u64 val, struct ib_atomic_eth *ateth)
 178 {
 179         ib_u64_put(val, &ateth->vaddr);
 180 }
 181 
 182 static inline u64 get_ib_ateth_swap(struct ib_atomic_eth *ateth)
 183 {
 184         return ib_u64_get(&ateth->swap_data);
 185 }
 186 
 187 static inline void put_ib_ateth_swap(u64 val, struct ib_atomic_eth *ateth)
 188 {
 189         ib_u64_put(val, &ateth->swap_data);
 190 }
 191 
 192 static inline u64 get_ib_ateth_compare(struct ib_atomic_eth *ateth)
 193 {
 194         return ib_u64_get(&ateth->compare_data);
 195 }
 196 
 197 static inline void put_ib_ateth_compare(u64 val, struct ib_atomic_eth *ateth)
 198 {
 199         ib_u64_put(val, &ateth->compare_data);
 200 }
 201 
 202 
 203 
 204 
 205 #define IB_LNH_MASK             3
 206 #define IB_SC_MASK              0xf
 207 #define IB_SC_SHIFT             12
 208 #define IB_SC5_MASK             0x10
 209 #define IB_SL_MASK              0xf
 210 #define IB_SL_SHIFT             4
 211 #define IB_SL_SHIFT             4
 212 #define IB_LVER_MASK    0xf
 213 #define IB_LVER_SHIFT   8
 214 
 215 static inline u8 ib_get_lnh(struct ib_header *hdr)
 216 {
 217         return (be16_to_cpu(hdr->lrh[0]) & IB_LNH_MASK);
 218 }
 219 
 220 static inline u8 ib_get_sc(struct ib_header *hdr)
 221 {
 222         return ((be16_to_cpu(hdr->lrh[0]) >> IB_SC_SHIFT) & IB_SC_MASK);
 223 }
 224 
 225 static inline bool ib_is_sc5(u16 sc5)
 226 {
 227         return !!(sc5 & IB_SC5_MASK);
 228 }
 229 
 230 static inline u8 ib_get_sl(struct ib_header *hdr)
 231 {
 232         return ((be16_to_cpu(hdr->lrh[0]) >> IB_SL_SHIFT) & IB_SL_MASK);
 233 }
 234 
 235 static inline u16 ib_get_dlid(struct ib_header *hdr)
 236 {
 237         return (be16_to_cpu(hdr->lrh[1]));
 238 }
 239 
 240 static inline u16 ib_get_slid(struct ib_header *hdr)
 241 {
 242         return (be16_to_cpu(hdr->lrh[3]));
 243 }
 244 
 245 static inline u8 ib_get_lver(struct ib_header *hdr)
 246 {
 247         return (u8)((be16_to_cpu(hdr->lrh[0]) >> IB_LVER_SHIFT) &
 248                    IB_LVER_MASK);
 249 }
 250 
 251 static inline u16 ib_get_len(struct ib_header *hdr)
 252 {
 253         return (u16)(be16_to_cpu(hdr->lrh[2]));
 254 }
 255 
 256 static inline u32 ib_get_qkey(struct ib_other_headers *ohdr)
 257 {
 258         return be32_to_cpu(ohdr->u.ud.deth[0]);
 259 }
 260 
 261 static inline u32 ib_get_sqpn(struct ib_other_headers *ohdr)
 262 {
 263         return ((be32_to_cpu(ohdr->u.ud.deth[1])) & IB_QPN_MASK);
 264 }
 265 
 266 
 267 
 268 
 269 #define IB_BTH_OPCODE_MASK      0xff
 270 #define IB_BTH_OPCODE_SHIFT     24
 271 #define IB_BTH_PAD_MASK 3
 272 #define IB_BTH_PKEY_MASK        0xffff
 273 #define IB_BTH_PAD_SHIFT        20
 274 #define IB_BTH_A_MASK           1
 275 #define IB_BTH_A_SHIFT          31
 276 #define IB_BTH_M_MASK           1
 277 #define IB_BTH_M_SHIFT          22
 278 #define IB_BTH_SE_MASK          1
 279 #define IB_BTH_SE_SHIFT 23
 280 #define IB_BTH_TVER_MASK        0xf
 281 #define IB_BTH_TVER_SHIFT       16
 282 
 283 static inline u8 ib_bth_get_pad(struct ib_other_headers *ohdr)
 284 {
 285         return ((be32_to_cpu(ohdr->bth[0]) >> IB_BTH_PAD_SHIFT) &
 286                    IB_BTH_PAD_MASK);
 287 }
 288 
 289 static inline u16 ib_bth_get_pkey(struct ib_other_headers *ohdr)
 290 {
 291         return (be32_to_cpu(ohdr->bth[0]) & IB_BTH_PKEY_MASK);
 292 }
 293 
 294 static inline u8 ib_bth_get_opcode(struct ib_other_headers *ohdr)
 295 {
 296         return ((be32_to_cpu(ohdr->bth[0]) >> IB_BTH_OPCODE_SHIFT) &
 297                    IB_BTH_OPCODE_MASK);
 298 }
 299 
 300 static inline u8 ib_bth_get_ackreq(struct ib_other_headers *ohdr)
 301 {
 302         return (u8)((be32_to_cpu(ohdr->bth[2]) >> IB_BTH_A_SHIFT) &
 303                    IB_BTH_A_MASK);
 304 }
 305 
 306 static inline u8 ib_bth_get_migreq(struct ib_other_headers *ohdr)
 307 {
 308         return (u8)((be32_to_cpu(ohdr->bth[0]) >> IB_BTH_M_SHIFT) &
 309                     IB_BTH_M_MASK);
 310 }
 311 
 312 static inline u8 ib_bth_get_se(struct ib_other_headers *ohdr)
 313 {
 314         return (u8)((be32_to_cpu(ohdr->bth[0]) >> IB_BTH_SE_SHIFT) &
 315                     IB_BTH_SE_MASK);
 316 }
 317 
 318 static inline u32 ib_bth_get_psn(struct ib_other_headers *ohdr)
 319 {
 320         return (u32)(be32_to_cpu(ohdr->bth[2]));
 321 }
 322 
 323 static inline u32 ib_bth_get_qpn(struct ib_other_headers *ohdr)
 324 {
 325         return (u32)((be32_to_cpu(ohdr->bth[1])) & IB_QPN_MASK);
 326 }
 327 
 328 static inline bool ib_bth_get_becn(struct ib_other_headers *ohdr)
 329 {
 330         return (ohdr->bth[1]) & cpu_to_be32(IB_BECN_SMASK);
 331 }
 332 
 333 static inline bool ib_bth_get_fecn(struct ib_other_headers *ohdr)
 334 {
 335         return (ohdr->bth[1]) & cpu_to_be32(IB_FECN_SMASK);
 336 }
 337 
 338 static inline u8 ib_bth_get_tver(struct ib_other_headers *ohdr)
 339 {
 340         return (u8)((be32_to_cpu(ohdr->bth[0]) >> IB_BTH_TVER_SHIFT)  &
 341                     IB_BTH_TVER_MASK);
 342 }
 343 
 344 static inline bool ib_bth_is_solicited(struct ib_other_headers *ohdr)
 345 {
 346         return ohdr->bth[0] & cpu_to_be32(IB_BTH_SOLICITED);
 347 }
 348 
 349 static inline bool ib_bth_is_migration(struct ib_other_headers *ohdr)
 350 {
 351         return ohdr->bth[0] & cpu_to_be32(IB_BTH_MIG_REQ);
 352 }
 353 #endif