Commit 58e8ecda authored by Karthikeyan Periyasamy's avatar Karthikeyan Periyasamy Committed by Kalle Valo
Browse files

wifi: ath12k: extend the link capable flag



Link capability categorized as Single Link Operation (SLO) and Multi Link
Operation (MLO).

 - Intra-device SLO/MLO refers to links present within a device
 - Inter-device SLO/MLO refers to links present across multiple devices

Currently, driver uses a boolean variable to represent intra-device SLO/MLO
capability. To accommodate inter-device SLO/MLO capabilities within the
same variable, modify the existing variable name and type. Define a new
enumeration for the link capabilities to accommodate both intra-device
and inter-device scenarios. Populate the enum based on the supported
capabilities.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00188-QCAHKSWPL_SILICONZ-1

Signed-off-by: default avatarKarthikeyan Periyasamy <quic_periyasa@quicinc.com>
Acked-by: default avatarJeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
Link: https://msgid.link/20240403042056.1504209-2-quic_periyasa@quicinc.com
parent 231a4c89
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1232,7 +1232,7 @@ struct ath12k_base *ath12k_core_alloc(struct device *dev, size_t priv_size,
	ab->dev = dev;
	ab->hif.bus = bus;
	ab->qmi.num_radios = U8_MAX;
	ab->slo_capable = true;
	ab->mlo_capable_flags = ATH12K_INTRA_DEVICE_MLO_SUPPORT;

	return ab;

+20 −3
Original line number Diff line number Diff line
@@ -695,6 +695,21 @@ struct ath12k_soc_dp_stats {
	struct ath12k_soc_dp_tx_err_stats tx_err;
};

/**
 * enum ath12k_link_capable_flags - link capable flags
 *
 * Single/Multi link capability information
 *
 * @ATH12K_INTRA_DEVICE_MLO_SUPPORT: SLO/MLO form between the radio, where all
 *	the links (radios) present within a device.
 * @ATH12K_INTER_DEVICE_MLO_SUPPORT: SLO/MLO form between the radio, where all
 *	the links (radios) present across the devices.
 */
enum ath12k_link_capable_flags {
	ATH12K_INTRA_DEVICE_MLO_SUPPORT	= BIT(0),
	ATH12K_INTER_DEVICE_MLO_SUPPORT	= BIT(1),
};

/* Master structure to hold the hw data which may be used in core module */
struct ath12k_base {
	enum ath12k_hw_rev hw_rev;
@@ -853,10 +868,12 @@ struct ath12k_base {

	const struct hal_rx_ops *hal_rx_ops;

	/* slo_capable denotes if the single/multi link operation
	 * is supported within the same chip (SoC).
	/* mlo_capable_flags denotes the single/multi link operation
	 * capabilities of the Device.
	 *
	 * See enum ath12k_link_capable_flags
	 */
	bool slo_capable;
	u8 mlo_capable_flags;

	/* must be last */
	u8 drv_priv[] __aligned(sizeof(void *));
+1 −1
Original line number Diff line number Diff line
@@ -385,7 +385,7 @@ int ath12k_mhi_register(struct ath12k_pci *ab_pci)
				   "failed to read board id\n");
		} else if (board_id & OTP_VALID_DUALMAC_BOARD_ID_MASK) {
			dualmac = true;
			ab->slo_capable = false;
			ab->mlo_capable_flags = 0;
			ath12k_dbg(ab, ATH12K_DBG_BOOT,
				   "dualmac fw selected for board id: %x\n", board_id);
		}
+1 −1
Original line number Diff line number Diff line
@@ -2124,7 +2124,7 @@ static void ath12k_qmi_phy_cap_send(struct ath12k_base *ab)
	struct qmi_txn txn;
	int ret;

	if (!ab->slo_capable)
	if (!ab->mlo_capable_flags)
		goto out;

	ret = qmi_txn_init(&ab->qmi.handle, &txn,