Currently the CNSS (Connectivity Subsystem) QMI feature is assigned to
qmi_wlanfw_host_cap_req_msg_v01 request directly, this prevents chip-specific
CNSS features from being added easily.
Solve this by adding a new field qmi_cnss_feature_bitmap to hw_params so
chip-specific CNSS features can be assigned to this field and later assigned to
qmi_wlanfw_host_cap_req_msg_v01 request.
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4
Signed-off-by: Carl Huang <quic_cjhuang@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230404032057.3236122-2-quic_cjhuang@quicinc.com
 
                .hal_ops = &hal_qcn9274_ops,
 
+               .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01),
        },
        {
                .name = "wcn7850 hw2.0",
                .wmi_init = ath12k_wmi_init_wcn7850,
 
                .hal_ops = &hal_wcn7850_ops,
+
+               .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01),
        },
        {
                .name = "qcn9274 hw2.0",
                .wmi_init = ath12k_wmi_init_qcn9274,
 
                .hal_ops = &hal_qcn9274_ops,
+
+               .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01),
        },
 };
 
 
                         struct ath12k_wmi_resource_config_arg *config);
 
        const struct hal_ops *hal_ops;
+
+       u64 qmi_cnss_feature_bitmap;
 };
 
 struct ath12k_hw_ops {
 
        req.cal_done_valid = 1;
        req.cal_done = ab->qmi.cal_done;
 
-       req.feature_list_valid = 1;
-       req.feature_list = BIT(CNSS_QDSS_CFG_MISS_V01);
+       if (ab->hw_params->qmi_cnss_feature_bitmap) {
+               req.feature_list_valid = 1;
+               req.feature_list = ab->hw_params->qmi_cnss_feature_bitmap;
+       }
 
        /* BRINGUP: here we are piggybacking a lot of stuff using
         * internal_sleep_clock, should it be split?