1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2022 Microsoft Corporation. All rights reserved. 4 */ 5 6 #ifndef _MANA_IB_H_ 7 #define _MANA_IB_H_ 8 9 #include <rdma/ib_verbs.h> 10 #include <rdma/ib_mad.h> 11 #include <rdma/iter.h> 12 #include <rdma/mana-abi.h> 13 #include <rdma/uverbs_ioctl.h> 14 #include <linux/dmapool.h> 15 16 #include <net/mana/mana.h> 17 #include "shadow_queue.h" 18 #include "counters.h" 19 20 #define PAGE_SZ_BM \ 21 (SZ_4K | SZ_8K | SZ_16K | SZ_32K | SZ_64K | SZ_128K | SZ_256K | \ 22 SZ_512K | SZ_1M | SZ_2M) 23 24 /* MANA doesn't have any limit for MR size */ 25 #define MANA_IB_MAX_MR_SIZE U64_MAX 26 27 /* Send queue ID mask */ 28 #define MANA_SENDQ_MASK BIT(31) 29 30 /* 31 * The hardware limit of number of MRs is greater than maximum number of MRs 32 * that can possibly represent in 24 bits 33 */ 34 #define MANA_IB_MAX_MR 0xFFFFFFu 35 36 /* 37 * The CA timeout is approx. 260ms (4us * 2^(DELAY)) 38 */ 39 #define MANA_CA_ACK_DELAY 16 40 41 /* 42 * The buffer used for writing AV 43 */ 44 #define MANA_AV_BUFFER_SIZE 64 45 46 #define MANA_GSI_QPN (1) 47 48 struct mana_ib_adapter_caps { 49 u32 max_sq_id; 50 u32 max_rq_id; 51 u32 max_cq_id; 52 u32 max_qp_count; 53 u32 max_cq_count; 54 u32 max_mr_count; 55 u32 max_pd_count; 56 u32 max_inbound_read_limit; 57 u32 max_outbound_read_limit; 58 u32 mw_count; 59 u32 max_srq_count; 60 u32 max_qp_wr; 61 u32 max_send_sge_count; 62 u32 max_recv_sge_count; 63 u32 max_inline_data_size; 64 u64 feature_flags; 65 u64 page_size_cap; 66 }; 67 68 struct mana_ib_queue { 69 struct ib_umem *umem; 70 struct gdma_queue *kmem; 71 u64 gdma_region; 72 u64 id; 73 }; 74 75 struct mana_ib_dev { 76 struct ib_device ib_dev; 77 struct gdma_dev *gdma_dev; 78 mana_handle_t adapter_handle; 79 struct gdma_queue *fatal_err_eq; 80 struct gdma_queue **eqs; 81 struct xarray qp_table_wq; 82 struct mana_ib_adapter_caps adapter_caps; 83 struct dma_pool *av_pool; 84 netdevice_tracker dev_tracker; 85 struct notifier_block nb; 86 }; 87 88 struct mana_ib_wq { 89 struct ib_wq ibwq; 90 struct mana_ib_queue queue; 91 int wqe; 92 u32 wq_buf_size; 93 mana_handle_t rx_object; 94 }; 95 96 struct mana_ib_pd { 97 struct ib_pd ibpd; 98 u32 pdn; 99 mana_handle_t pd_handle; 100 101 /* Mutex for sharing access to vport_use_count */ 102 struct mutex vport_mutex; 103 int vport_use_count; 104 105 bool tx_shortform_allowed; 106 u32 tx_vp_offset; 107 }; 108 109 struct mana_ib_av { 110 u8 dest_ip[16]; 111 u8 dest_mac[ETH_ALEN]; 112 u16 udp_src_port; 113 u8 src_ip[16]; 114 u32 hop_limit : 8; 115 u32 reserved1 : 12; 116 u32 dscp : 6; 117 u32 reserved2 : 5; 118 u32 is_ipv6 : 1; 119 u32 reserved3 : 32; 120 }; 121 122 struct mana_ib_ah { 123 struct ib_ah ibah; 124 struct mana_ib_av *av; 125 dma_addr_t dma_handle; 126 }; 127 128 struct mana_ib_mw { 129 struct ib_mw ibmw; 130 mana_handle_t mw_handle; 131 }; 132 133 struct mana_ib_mr { 134 struct ib_mr ibmr; 135 struct ib_umem *umem; 136 mana_handle_t mr_handle; 137 }; 138 139 struct mana_ib_dm { 140 struct ib_dm ibdm; 141 mana_handle_t dm_handle; 142 }; 143 144 struct mana_ib_cq { 145 struct ib_cq ibcq; 146 struct mana_ib_queue queue; 147 /* protects CQ polling */ 148 spinlock_t cq_lock; 149 struct list_head list_send_qp; 150 struct list_head list_recv_qp; 151 int cqe; 152 u32 comp_vector; 153 mana_handle_t cq_handle; 154 }; 155 156 enum mana_rc_queue_type { 157 MANA_RC_SEND_QUEUE_REQUESTER = 0, 158 MANA_RC_SEND_QUEUE_RESPONDER, 159 MANA_RC_SEND_QUEUE_FMR, 160 MANA_RC_RECV_QUEUE_REQUESTER, 161 MANA_RC_RECV_QUEUE_RESPONDER, 162 MANA_RC_QUEUE_TYPE_MAX, 163 }; 164 165 struct mana_ib_rc_qp { 166 struct mana_ib_queue queues[MANA_RC_QUEUE_TYPE_MAX]; 167 }; 168 169 enum mana_ud_queue_type { 170 MANA_UD_SEND_QUEUE = 0, 171 MANA_UD_RECV_QUEUE, 172 MANA_UD_QUEUE_TYPE_MAX, 173 }; 174 175 struct mana_ib_ud_qp { 176 struct mana_ib_queue queues[MANA_UD_QUEUE_TYPE_MAX]; 177 u32 sq_psn; 178 }; 179 180 struct mana_ib_qp { 181 struct ib_qp ibqp; 182 183 mana_handle_t qp_handle; 184 union { 185 struct mana_ib_queue raw_sq; 186 struct mana_ib_rc_qp rc_qp; 187 struct mana_ib_ud_qp ud_qp; 188 }; 189 190 /* The port on the IB device, starting with 1 */ 191 u32 port; 192 193 struct list_head cq_send_list; 194 struct list_head cq_recv_list; 195 struct shadow_queue shadow_rq; 196 struct shadow_queue shadow_sq; 197 198 refcount_t refcount; 199 struct completion free; 200 }; 201 202 struct mana_ib_ucontext { 203 struct ib_ucontext ibucontext; 204 u32 doorbell; 205 }; 206 207 struct mana_ib_rwq_ind_table { 208 struct ib_rwq_ind_table ib_ind_table; 209 }; 210 211 enum mana_ib_command_code { 212 MANA_IB_GET_ADAPTER_CAP = 0x30001, 213 MANA_IB_CREATE_ADAPTER = 0x30002, 214 MANA_IB_DESTROY_ADAPTER = 0x30003, 215 MANA_IB_CONFIG_IP_ADDR = 0x30004, 216 MANA_IB_CONFIG_MAC_ADDR = 0x30005, 217 MANA_IB_CREATE_UD_QP = 0x30006, 218 MANA_IB_DESTROY_UD_QP = 0x30007, 219 MANA_IB_CREATE_CQ = 0x30008, 220 MANA_IB_DESTROY_CQ = 0x30009, 221 MANA_IB_CREATE_RC_QP = 0x3000a, 222 MANA_IB_DESTROY_RC_QP = 0x3000b, 223 MANA_IB_SET_QP_STATE = 0x3000d, 224 MANA_IB_QUERY_VF_COUNTERS = 0x30022, 225 MANA_IB_QUERY_DEVICE_COUNTERS = 0x30023, 226 }; 227 228 struct mana_ib_query_adapter_caps_req { 229 struct gdma_req_hdr hdr; 230 }; /*HW Data */ 231 232 enum mana_ib_adapter_features { 233 MANA_IB_FEATURE_CLIENT_ERROR_CQE_SUPPORT = BIT(4), 234 MANA_IB_FEATURE_DEV_COUNTERS_SUPPORT = BIT(5), 235 MANA_IB_FEATURE_MULTI_PORTS_SUPPORT = BIT(6), 236 }; 237 238 struct mana_ib_query_adapter_caps_resp { 239 struct gdma_resp_hdr hdr; 240 u32 max_sq_id; 241 u32 max_rq_id; 242 u32 max_cq_id; 243 u32 max_qp_count; 244 u32 max_cq_count; 245 u32 max_mr_count; 246 u32 max_pd_count; 247 u32 max_inbound_read_limit; 248 u32 max_outbound_read_limit; 249 u32 mw_count; 250 u32 max_srq_count; 251 u32 max_requester_sq_size; 252 u32 max_responder_sq_size; 253 u32 max_requester_rq_size; 254 u32 max_responder_rq_size; 255 u32 max_send_sge_count; 256 u32 max_recv_sge_count; 257 u32 max_inline_data_size; 258 u64 feature_flags; 259 }; /* HW Data */ 260 261 enum mana_ib_adapter_features_request { 262 MANA_IB_FEATURE_CLIENT_ERROR_CQE_REQUEST = BIT(1), 263 }; /*HW Data */ 264 265 struct mana_rnic_create_adapter_req { 266 struct gdma_req_hdr hdr; 267 u32 notify_eq_id; 268 u32 reserved; 269 u64 feature_flags; 270 }; /*HW Data */ 271 272 struct mana_rnic_create_adapter_resp { 273 struct gdma_resp_hdr hdr; 274 mana_handle_t adapter; 275 }; /* HW Data */ 276 277 struct mana_rnic_destroy_adapter_req { 278 struct gdma_req_hdr hdr; 279 mana_handle_t adapter; 280 }; /*HW Data */ 281 282 struct mana_rnic_destroy_adapter_resp { 283 struct gdma_resp_hdr hdr; 284 }; /* HW Data */ 285 286 enum mana_ib_addr_op { 287 ADDR_OP_ADD = 1, 288 ADDR_OP_REMOVE = 2, 289 }; 290 291 enum sgid_entry_type { 292 SGID_TYPE_IPV4 = 1, 293 SGID_TYPE_IPV6 = 2, 294 }; 295 296 struct mana_rnic_config_addr_req { 297 struct gdma_req_hdr hdr; 298 mana_handle_t adapter; 299 enum mana_ib_addr_op op; 300 enum sgid_entry_type sgid_type; 301 u8 ip_addr[16]; 302 }; /* HW Data */ 303 304 struct mana_rnic_config_addr_resp { 305 struct gdma_resp_hdr hdr; 306 }; /* HW Data */ 307 308 struct mana_rnic_config_mac_addr_req { 309 struct gdma_req_hdr hdr; 310 mana_handle_t adapter; 311 enum mana_ib_addr_op op; 312 u8 mac_addr[ETH_ALEN]; 313 u8 reserved[6]; 314 }; /* HW Data */ 315 316 struct mana_rnic_config_mac_addr_resp { 317 struct gdma_resp_hdr hdr; 318 }; /* HW Data */ 319 320 struct mana_rnic_create_cq_req { 321 struct gdma_req_hdr hdr; 322 mana_handle_t adapter; 323 u64 gdma_region; 324 u32 eq_id; 325 u32 doorbell_page; 326 }; /* HW Data */ 327 328 struct mana_rnic_create_cq_resp { 329 struct gdma_resp_hdr hdr; 330 mana_handle_t cq_handle; 331 u32 cq_id; 332 u32 reserved; 333 }; /* HW Data */ 334 335 struct mana_rnic_destroy_cq_req { 336 struct gdma_req_hdr hdr; 337 mana_handle_t adapter; 338 mana_handle_t cq_handle; 339 }; /* HW Data */ 340 341 struct mana_rnic_destroy_cq_resp { 342 struct gdma_resp_hdr hdr; 343 }; /* HW Data */ 344 345 enum mana_rnic_create_rc_flags { 346 MANA_RC_FLAG_NO_FMR = 2, 347 }; 348 349 struct mana_rnic_create_qp_req { 350 struct gdma_req_hdr hdr; 351 mana_handle_t adapter; 352 mana_handle_t pd_handle; 353 mana_handle_t send_cq_handle; 354 mana_handle_t recv_cq_handle; 355 u64 dma_region[MANA_RC_QUEUE_TYPE_MAX]; 356 u64 deprecated[2]; 357 u64 flags; 358 u32 doorbell_page; 359 u32 max_send_wr; 360 u32 max_recv_wr; 361 u32 max_send_sge; 362 u32 max_recv_sge; 363 u32 reserved; 364 }; /* HW Data */ 365 366 struct mana_rnic_create_qp_resp { 367 struct gdma_resp_hdr hdr; 368 mana_handle_t rc_qp_handle; 369 u32 queue_ids[MANA_RC_QUEUE_TYPE_MAX]; 370 u32 reserved; 371 }; /* HW Data*/ 372 373 struct mana_rnic_destroy_rc_qp_req { 374 struct gdma_req_hdr hdr; 375 mana_handle_t adapter; 376 mana_handle_t rc_qp_handle; 377 }; /* HW Data */ 378 379 struct mana_rnic_destroy_rc_qp_resp { 380 struct gdma_resp_hdr hdr; 381 }; /* HW Data */ 382 383 struct mana_rnic_create_udqp_req { 384 struct gdma_req_hdr hdr; 385 mana_handle_t adapter; 386 mana_handle_t pd_handle; 387 mana_handle_t send_cq_handle; 388 mana_handle_t recv_cq_handle; 389 u64 dma_region[MANA_UD_QUEUE_TYPE_MAX]; 390 u32 qp_type; 391 u32 doorbell_page; 392 u32 max_send_wr; 393 u32 max_recv_wr; 394 u32 max_send_sge; 395 u32 max_recv_sge; 396 }; /* HW Data */ 397 398 struct mana_rnic_create_udqp_resp { 399 struct gdma_resp_hdr hdr; 400 mana_handle_t qp_handle; 401 u32 queue_ids[MANA_UD_QUEUE_TYPE_MAX]; 402 }; /* HW Data*/ 403 404 struct mana_rnic_destroy_udqp_req { 405 struct gdma_req_hdr hdr; 406 mana_handle_t adapter; 407 mana_handle_t qp_handle; 408 }; /* HW Data */ 409 410 struct mana_rnic_destroy_udqp_resp { 411 struct gdma_resp_hdr hdr; 412 }; /* HW Data */ 413 414 struct mana_ib_ah_attr { 415 u8 src_addr[16]; 416 u8 dest_addr[16]; 417 u8 src_mac[ETH_ALEN]; 418 u8 dest_mac[ETH_ALEN]; 419 u8 src_addr_type; 420 u8 dest_addr_type; 421 u8 hop_limit; 422 u8 traffic_class; 423 u16 src_port; 424 u16 dest_port; 425 u32 flow_label; 426 }; 427 428 struct mana_rnic_set_qp_state_req { 429 struct gdma_req_hdr hdr; 430 mana_handle_t adapter; 431 mana_handle_t qp_handle; 432 u64 attr_mask; 433 u32 qp_state; 434 u32 path_mtu; 435 u32 rq_psn; 436 u32 sq_psn; 437 u32 dest_qpn; 438 u32 max_dest_rd_atomic; 439 u32 retry_cnt; 440 u32 rnr_retry; 441 u32 min_rnr_timer; 442 u32 rate_limit; 443 struct mana_ib_ah_attr ah_attr; 444 u64 reserved1; 445 u32 qkey; 446 u32 qp_access_flags; 447 u8 local_ack_timeout; 448 u8 max_rd_atomic; 449 u16 reserved2; 450 u32 reserved3; 451 }; /* HW Data */ 452 453 struct mana_rnic_set_qp_state_resp { 454 struct gdma_resp_hdr hdr; 455 }; /* HW Data */ 456 457 enum WQE_OPCODE_TYPES { 458 WQE_TYPE_UD_SEND = 0, 459 WQE_TYPE_UD_RECV = 8, 460 }; /* HW DATA */ 461 462 struct rdma_send_oob { 463 u32 wqe_type : 5; 464 u32 fence : 1; 465 u32 signaled : 1; 466 u32 solicited : 1; 467 u32 psn : 24; 468 469 u32 ssn_or_rqpn : 24; 470 u32 reserved1 : 8; 471 union { 472 struct { 473 u32 remote_qkey; 474 u32 immediate; 475 u32 reserved1; 476 u32 reserved2; 477 } ud_send; 478 }; 479 }; /* HW DATA */ 480 481 struct mana_rdma_cqe { 482 union { 483 struct { 484 u8 cqe_type; 485 u8 data[GDMA_COMP_DATA_SIZE - 1]; 486 }; 487 struct { 488 u32 cqe_type : 8; 489 u32 vendor_error : 9; 490 u32 reserved1 : 15; 491 u32 sge_offset : 5; 492 u32 tx_wqe_offset : 27; 493 } ud_send; 494 struct { 495 u32 cqe_type : 8; 496 u32 reserved1 : 24; 497 u32 msg_len; 498 u32 src_qpn : 24; 499 u32 reserved2 : 8; 500 u32 imm_data; 501 u32 rx_wqe_offset; 502 } ud_recv; 503 }; 504 }; /* HW DATA */ 505 506 struct mana_rnic_query_vf_cntrs_req { 507 struct gdma_req_hdr hdr; 508 mana_handle_t adapter; 509 }; /* HW Data */ 510 511 struct mana_rnic_query_vf_cntrs_resp { 512 struct gdma_resp_hdr hdr; 513 u64 requester_timeout; 514 u64 requester_oos_nak; 515 u64 requester_rnr_nak; 516 u64 responder_rnr_nak; 517 u64 responder_oos; 518 u64 responder_dup_request; 519 u64 requester_implicit_nak; 520 u64 requester_readresp_psn_mismatch; 521 u64 nak_inv_req; 522 u64 nak_access_err; 523 u64 nak_opp_err; 524 u64 nak_inv_read; 525 u64 responder_local_len_err; 526 u64 requestor_local_prot_err; 527 u64 responder_rem_access_err; 528 u64 responder_local_qp_err; 529 u64 responder_malformed_wqe; 530 u64 general_hw_err; 531 u64 requester_rnr_nak_retries_exceeded; 532 u64 requester_retries_exceeded; 533 u64 total_fatal_err; 534 u64 received_cnps; 535 u64 num_qps_congested; 536 u64 rate_inc_events; 537 u64 num_qps_recovered; 538 u64 current_rate; 539 u64 dup_rx_req; 540 u64 tx_bytes; 541 u64 rx_bytes; 542 u64 rx_send_req; 543 u64 rx_write_req; 544 u64 rx_read_req; 545 u64 tx_pkt; 546 u64 rx_pkt; 547 }; /* HW Data */ 548 549 struct mana_rnic_query_device_cntrs_req { 550 struct gdma_req_hdr hdr; 551 mana_handle_t adapter; 552 }; /* HW Data */ 553 554 struct mana_rnic_query_device_cntrs_resp { 555 struct gdma_resp_hdr hdr; 556 u32 sent_cnps; 557 u32 received_ecns; 558 u32 reserved1; 559 u32 received_cnp_count; 560 u32 qp_congested_events; 561 u32 qp_recovered_events; 562 u32 rate_inc_events; 563 u32 reserved2; 564 }; /* HW Data */ 565 566 static inline struct gdma_context *mdev_to_gc(struct mana_ib_dev *mdev) 567 { 568 return mdev->gdma_dev->gdma_context; 569 } 570 571 static inline struct mana_ib_qp *mana_get_qp_ref(struct mana_ib_dev *mdev, 572 u32 qid, bool is_sq) 573 { 574 struct mana_ib_qp *qp; 575 unsigned long flag; 576 577 if (is_sq) 578 qid |= MANA_SENDQ_MASK; 579 580 xa_lock_irqsave(&mdev->qp_table_wq, flag); 581 qp = xa_load(&mdev->qp_table_wq, qid); 582 if (qp) 583 refcount_inc(&qp->refcount); 584 xa_unlock_irqrestore(&mdev->qp_table_wq, flag); 585 return qp; 586 } 587 588 static inline void mana_put_qp_ref(struct mana_ib_qp *qp) 589 { 590 if (refcount_dec_and_test(&qp->refcount)) 591 complete(&qp->free); 592 } 593 594 static inline bool mana_ib_is_rnic(struct mana_ib_dev *mdev) 595 { 596 return mdev->gdma_dev->dev_id.type == GDMA_DEVICE_MANA_IB; 597 } 598 599 static inline struct net_device *mana_ib_get_netdev(struct ib_device *ibdev, u32 port) 600 { 601 struct mana_ib_dev *mdev = container_of(ibdev, struct mana_ib_dev, ib_dev); 602 struct gdma_context *gc = mdev_to_gc(mdev); 603 struct mana_context *mc = gc->mana.driver_data; 604 605 if (port < 1 || port > mc->num_ports) 606 return NULL; 607 return mc->ports[port - 1]; 608 } 609 610 static inline void copy_in_reverse(u8 *dst, const u8 *src, u32 size) 611 { 612 u32 i; 613 614 for (i = 0; i < size; i++) 615 dst[size - 1 - i] = src[i]; 616 } 617 618 int mana_ib_install_cq_cb(struct mana_ib_dev *mdev, struct mana_ib_cq *cq); 619 void mana_ib_remove_cq_cb(struct mana_ib_dev *mdev, struct mana_ib_cq *cq); 620 621 int mana_ib_create_zero_offset_dma_region(struct mana_ib_dev *dev, struct ib_umem *umem, 622 mana_handle_t *gdma_region); 623 624 int mana_ib_create_dma_region(struct mana_ib_dev *dev, struct ib_umem *umem, 625 mana_handle_t *gdma_region, u64 virt); 626 627 int mana_ib_gd_destroy_dma_region(struct mana_ib_dev *dev, 628 mana_handle_t gdma_region); 629 630 int mana_ib_create_kernel_queue(struct mana_ib_dev *mdev, u32 size, enum gdma_queue_type type, 631 struct mana_ib_queue *queue); 632 int mana_ib_create_queue(struct mana_ib_dev *mdev, u64 addr, u32 size, 633 struct mana_ib_queue *queue); 634 void mana_ib_destroy_queue(struct mana_ib_dev *mdev, struct mana_ib_queue *queue); 635 636 struct ib_wq *mana_ib_create_wq(struct ib_pd *pd, 637 struct ib_wq_init_attr *init_attr, 638 struct ib_udata *udata); 639 640 int mana_ib_modify_wq(struct ib_wq *wq, struct ib_wq_attr *wq_attr, 641 u32 wq_attr_mask, struct ib_udata *udata); 642 643 int mana_ib_destroy_wq(struct ib_wq *ibwq, struct ib_udata *udata); 644 645 int mana_ib_create_rwq_ind_table(struct ib_rwq_ind_table *ib_rwq_ind_table, 646 struct ib_rwq_ind_table_init_attr *init_attr, 647 struct ib_udata *udata); 648 649 int mana_ib_destroy_rwq_ind_table(struct ib_rwq_ind_table *ib_rwq_ind_tbl); 650 651 struct ib_mr *mana_ib_get_dma_mr(struct ib_pd *ibpd, int access_flags); 652 653 struct ib_mr *mana_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, 654 u64 iova, int access_flags, 655 struct ib_dmah *dmah, 656 struct ib_udata *udata); 657 658 int mana_ib_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata); 659 660 int mana_ib_create_qp(struct ib_qp *qp, struct ib_qp_init_attr *qp_init_attr, 661 struct ib_udata *udata); 662 663 int mana_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, 664 int attr_mask, struct ib_udata *udata); 665 666 int mana_ib_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata); 667 668 int mana_ib_cfg_vport(struct mana_ib_dev *dev, u32 port_id, 669 struct mana_ib_pd *pd, u32 doorbell_id); 670 void mana_ib_uncfg_vport(struct mana_ib_dev *dev, struct mana_ib_pd *pd, 671 u32 port); 672 673 int mana_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr, 674 struct uverbs_attr_bundle *attrs); 675 676 int mana_ib_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata); 677 678 int mana_ib_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata); 679 int mana_ib_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata); 680 681 int mana_ib_alloc_ucontext(struct ib_ucontext *ibcontext, 682 struct ib_udata *udata); 683 void mana_ib_dealloc_ucontext(struct ib_ucontext *ibcontext); 684 685 int mana_ib_mmap(struct ib_ucontext *ibcontext, struct vm_area_struct *vma); 686 687 int mana_ib_get_port_immutable(struct ib_device *ibdev, u32 port_num, 688 struct ib_port_immutable *immutable); 689 int mana_ib_query_device(struct ib_device *ibdev, struct ib_device_attr *props, 690 struct ib_udata *uhw); 691 int mana_ib_query_port(struct ib_device *ibdev, u32 port, 692 struct ib_port_attr *props); 693 int mana_ib_query_gid(struct ib_device *ibdev, u32 port, int index, 694 union ib_gid *gid); 695 696 void mana_ib_disassociate_ucontext(struct ib_ucontext *ibcontext); 697 698 int mana_ib_gd_query_adapter_caps(struct mana_ib_dev *mdev); 699 int mana_eth_query_adapter_caps(struct mana_ib_dev *mdev); 700 701 int mana_ib_create_eqs(struct mana_ib_dev *mdev); 702 703 void mana_ib_destroy_eqs(struct mana_ib_dev *mdev); 704 705 int mana_ib_gd_create_rnic_adapter(struct mana_ib_dev *mdev); 706 707 int mana_ib_gd_destroy_rnic_adapter(struct mana_ib_dev *mdev); 708 709 int mana_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index, u16 *pkey); 710 711 enum rdma_link_layer mana_ib_get_link_layer(struct ib_device *device, u32 port_num); 712 713 int mana_ib_gd_add_gid(const struct ib_gid_attr *attr, void **context); 714 715 int mana_ib_gd_del_gid(const struct ib_gid_attr *attr, void **context); 716 717 int mana_ib_gd_config_mac(struct mana_ib_dev *mdev, enum mana_ib_addr_op op, u8 *mac); 718 719 int mana_ib_gd_create_cq(struct mana_ib_dev *mdev, struct mana_ib_cq *cq, u32 doorbell); 720 721 int mana_ib_gd_destroy_cq(struct mana_ib_dev *mdev, struct mana_ib_cq *cq); 722 723 int mana_ib_gd_create_rc_qp(struct mana_ib_dev *mdev, struct mana_ib_qp *qp, 724 struct ib_qp_init_attr *attr, u32 doorbell, u64 flags); 725 int mana_ib_gd_destroy_rc_qp(struct mana_ib_dev *mdev, struct mana_ib_qp *qp); 726 727 int mana_ib_gd_create_ud_qp(struct mana_ib_dev *mdev, struct mana_ib_qp *qp, 728 struct ib_qp_init_attr *attr, u32 doorbell, u32 type); 729 int mana_ib_gd_destroy_ud_qp(struct mana_ib_dev *mdev, struct mana_ib_qp *qp); 730 731 int mana_ib_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr, 732 struct ib_udata *udata); 733 int mana_ib_destroy_ah(struct ib_ah *ah, u32 flags); 734 735 int mana_ib_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr, 736 const struct ib_recv_wr **bad_wr); 737 int mana_ib_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr, 738 const struct ib_send_wr **bad_wr); 739 740 void mana_drain_gsi_sqs(struct mana_ib_dev *mdev); 741 int mana_ib_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc); 742 int mana_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags); 743 744 int mana_ib_alloc_mw(struct ib_mw *mw, struct ib_udata *udata); 745 int mana_ib_dealloc_mw(struct ib_mw *mw); 746 747 struct ib_mr *mana_ib_reg_user_mr_dmabuf(struct ib_pd *ibpd, u64 start, u64 length, 748 u64 iova, int fd, int mr_access_flags, 749 struct ib_dmah *dmah, 750 struct uverbs_attr_bundle *attrs); 751 752 struct ib_dm *mana_ib_alloc_dm(struct ib_device *dev, struct ib_ucontext *context, 753 struct ib_dm_alloc_attr *attr, struct uverbs_attr_bundle *attrs); 754 int mana_ib_dealloc_dm(struct ib_dm *dm, struct uverbs_attr_bundle *attrs); 755 struct ib_mr *mana_ib_reg_dm_mr(struct ib_pd *pd, struct ib_dm *dm, struct ib_dm_mr_attr *attr, 756 struct uverbs_attr_bundle *attrs); 757 758 #endif 759