net/mlx5: add free on completion queue
[dpdk.git] / drivers / net / hinic / base / hinic_pmd_cfg.c
index 61537b1..aa883e0 100644 (file)
@@ -8,6 +8,7 @@
 #include "hinic_pmd_mgmt.h"
 #include "hinic_pmd_eqs.h"
 #include "hinic_pmd_cfg.h"
+#include "hinic_pmd_mbox.h"
 
 bool hinic_support_nic(struct hinic_hwdev *hwdev, struct nic_service_cap *cap)
 {
@@ -122,6 +123,10 @@ static void hinic_parse_pub_res_cap(struct service_cap *cap,
                cap->vf_id_start = dev_cap->vf_id_start;
                cap->max_sqs = dev_cap->nic_max_sq + 1;
                cap->max_rqs = dev_cap->nic_max_rq + 1;
+       } else {
+               cap->max_vf = 0;
+               cap->max_sqs = dev_cap->nic_max_sq;
+               cap->max_rqs = dev_cap->nic_max_rq;
        }
 
        cap->chip_svc_type = CFG_SVC_NIC_BIT0;
@@ -180,6 +185,28 @@ static int get_cap_from_fw(struct hinic_hwdev *dev, enum func_type type)
        return 0;
 }
 
+static int get_cap_from_pf(struct hinic_hwdev *dev, enum func_type type)
+{
+       int err;
+       u16 in_len, out_len;
+       struct hinic_dev_cap dev_cap;
+
+       memset(&dev_cap, 0, sizeof(dev_cap));
+       in_len = sizeof(dev_cap);
+       out_len = in_len;
+       err = hinic_mbox_to_pf(dev, HINIC_MOD_CFGM, HINIC_CFG_MBOX_CAP,
+                              &dev_cap, in_len, &dev_cap, &out_len,
+                              CFG_MAX_CMD_TIMEOUT);
+       if (err || dev_cap.mgmt_msg_head.status || !out_len) {
+               PMD_DRV_LOG(ERR, "Get capability from PF failed, err: %d, status: %d, out_len: %d",
+                               err, dev_cap.mgmt_msg_head.status, out_len);
+               return -EFAULT;
+       }
+
+       parse_dev_cap(dev, &dev_cap, type);
+       return 0;
+}
+
 static int get_dev_cap(struct hinic_hwdev *dev)
 {
        int err;
@@ -194,6 +221,14 @@ static int get_dev_cap(struct hinic_hwdev *dev)
                        return err;
                }
                break;
+       case TYPE_VF:
+               err = get_cap_from_pf(dev, type);
+               if (err) {
+                       PMD_DRV_LOG(ERR, "Get VF capability failed, err: %d",
+                                       err);
+                       return err;
+               }
+               break;
        default:
                PMD_DRV_LOG(ERR, "Unsupported PCI function type");
                return -EINVAL;