@@ -486,20 +486,17 @@ int mana_ib_get_port_immutable(struct ib_device *ibdev, u32 port_num,
486486int mana_ib_query_device (struct ib_device * ibdev , struct ib_device_attr * props ,
487487 struct ib_udata * uhw )
488488{
489- props -> max_qp = MANA_MAX_NUM_QUEUES ;
490- props -> max_qp_wr = MAX_SEND_BUFFERS_PER_QUEUE ;
491-
492- /*
493- * max_cqe could be potentially much bigger.
494- * As this version of driver only support RAW QP, set it to the same
495- * value as max_qp_wr
496- */
497- props -> max_cqe = MAX_SEND_BUFFERS_PER_QUEUE ;
498-
489+ struct mana_ib_dev * dev = container_of (ibdev ,
490+ struct mana_ib_dev , ib_dev );
491+
492+ props -> max_qp = dev -> adapter_caps .max_qp_count ;
493+ props -> max_qp_wr = dev -> adapter_caps .max_qp_wr ;
494+ props -> max_cq = dev -> adapter_caps .max_cq_count ;
495+ props -> max_cqe = dev -> adapter_caps .max_qp_wr ;
496+ props -> max_mr = dev -> adapter_caps .max_mr_count ;
499497 props -> max_mr_size = MANA_IB_MAX_MR_SIZE ;
500- props -> max_mr = MANA_IB_MAX_MR ;
501- props -> max_send_sge = MAX_TX_WQE_SGL_ENTRIES ;
502- props -> max_recv_sge = MAX_RX_WQE_SGL_ENTRIES ;
498+ props -> max_send_sge = dev -> adapter_caps .max_send_sge_count ;
499+ props -> max_recv_sge = dev -> adapter_caps .max_recv_sge_count ;
503500
504501 return 0 ;
505502}
@@ -521,3 +518,45 @@ int mana_ib_query_gid(struct ib_device *ibdev, u32 port, int index,
521518void mana_ib_disassociate_ucontext (struct ib_ucontext * ibcontext )
522519{
523520}
521+
522+ int mana_ib_gd_query_adapter_caps (struct mana_ib_dev * dev )
523+ {
524+ struct mana_ib_adapter_caps * caps = & dev -> adapter_caps ;
525+ struct mana_ib_query_adapter_caps_resp resp = {};
526+ struct mana_ib_query_adapter_caps_req req = {};
527+ int err ;
528+
529+ mana_gd_init_req_hdr (& req .hdr , MANA_IB_GET_ADAPTER_CAP , sizeof (req ),
530+ sizeof (resp ));
531+ req .hdr .resp .msg_version = GDMA_MESSAGE_V3 ;
532+ req .hdr .dev_id = dev -> gdma_dev -> dev_id ;
533+
534+ err = mana_gd_send_request (dev -> gdma_dev -> gdma_context , sizeof (req ),
535+ & req , sizeof (resp ), & resp );
536+
537+ if (err ) {
538+ ibdev_err (& dev -> ib_dev ,
539+ "Failed to query adapter caps err %d" , err );
540+ return err ;
541+ }
542+
543+ caps -> max_sq_id = resp .max_sq_id ;
544+ caps -> max_rq_id = resp .max_rq_id ;
545+ caps -> max_cq_id = resp .max_cq_id ;
546+ caps -> max_qp_count = resp .max_qp_count ;
547+ caps -> max_cq_count = resp .max_cq_count ;
548+ caps -> max_mr_count = resp .max_mr_count ;
549+ caps -> max_pd_count = resp .max_pd_count ;
550+ caps -> max_inbound_read_limit = resp .max_inbound_read_limit ;
551+ caps -> max_outbound_read_limit = resp .max_outbound_read_limit ;
552+ caps -> mw_count = resp .mw_count ;
553+ caps -> max_srq_count = resp .max_srq_count ;
554+ caps -> max_qp_wr = min_t (u32 ,
555+ resp .max_requester_sq_size / GDMA_MAX_SQE_SIZE ,
556+ resp .max_requester_rq_size / GDMA_MAX_RQE_SIZE );
557+ caps -> max_inline_data_size = resp .max_inline_data_size ;
558+ caps -> max_send_sge_count = resp .max_send_sge_count ;
559+ caps -> max_recv_sge_count = resp .max_recv_sge_count ;
560+
561+ return 0 ;
562+ }
0 commit comments