wifi: ath12k: add multi-link flag in peer create command

Driver should indicate to firmware whether a peer is multi-link or not in peer
create command using multi-link flag. Add changes to support
WMI_TAG_MLO_PEER_CREATE_PARAMS in WMI_PEER_CREATE_CMDID.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
Signed-off-by: Harshitha Prem <quic_hprem@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Link: https://patch.msgid.link/20241101151705.165987-7-kvalo@kernel.org
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
This commit is contained in:
Sriram R
2024-11-01 17:17:03 +02:00
committed by Jeff Johnson
parent 7fd8b4cbde
commit 0660e1e2ed
3 changed files with 32 additions and 6 deletions

View File

@@ -4969,8 +4969,9 @@ static int ath12k_mac_station_add(struct ath12k *ar,
}
peer_param.vdev_id = arvif->vdev_id;
peer_param.peer_addr = sta->addr;
peer_param.peer_addr = arsta->addr;
peer_param.peer_type = WMI_PEER_TYPE_DEFAULT;
peer_param.ml_enabled = sta->mlo;
ret = ath12k_peer_create(ar, arvif, sta, &peer_param);
if (ret) {
@@ -7005,7 +7006,7 @@ int ath12k_mac_vdev_create(struct ath12k *ar, struct ath12k_link_vif *arvif)
struct ath12k_vif *ahvif = arvif->ahvif;
struct ieee80211_vif *vif = ath12k_ahvif_to_vif(ahvif);
struct ath12k_wmi_vdev_create_arg vdev_arg = {0};
struct ath12k_wmi_peer_create_arg peer_param;
struct ath12k_wmi_peer_create_arg peer_param = {0};
struct ieee80211_bss_conf *link_conf;
u32 param_id, param_value;
u16 nss;

View File

@@ -1230,9 +1230,14 @@ int ath12k_wmi_send_peer_create_cmd(struct ath12k *ar,
struct ath12k_wmi_pdev *wmi = ar->wmi;
struct wmi_peer_create_cmd *cmd;
struct sk_buff *skb;
int ret;
int ret, len;
struct wmi_peer_create_mlo_params *ml_param;
void *ptr;
struct wmi_tlv *tlv;
skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd));
len = sizeof(*cmd) + TLV_HDR_SIZE + sizeof(*ml_param);
skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, len);
if (!skb)
return -ENOMEM;
@@ -1244,9 +1249,23 @@ int ath12k_wmi_send_peer_create_cmd(struct ath12k *ar,
cmd->peer_type = cpu_to_le32(arg->peer_type);
cmd->vdev_id = cpu_to_le32(arg->vdev_id);
ptr = skb->data + sizeof(*cmd);
tlv = ptr;
tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_STRUCT,
sizeof(*ml_param));
ptr += TLV_HDR_SIZE;
ml_param = ptr;
ml_param->tlv_header =
ath12k_wmi_tlv_cmd_hdr(WMI_TAG_MLO_PEER_CREATE_PARAMS,
sizeof(*ml_param));
if (arg->ml_enabled)
ml_param->flags = cpu_to_le32(ATH12K_WMI_FLAG_MLO_ENABLED);
ptr += sizeof(*ml_param);
ath12k_dbg(ar->ab, ATH12K_DBG_WMI,
"WMI peer create vdev_id %d peer_addr %pM\n",
arg->vdev_id, arg->peer_addr);
"WMI peer create vdev_id %d peer_addr %pM ml_flags 0x%x\n",
arg->vdev_id, arg->peer_addr, ml_param->flags);
ret = ath12k_wmi_cmd_send(wmi, skb, WMI_PEER_CREATE_CMDID);
if (ret) {

View File

@@ -3015,6 +3015,12 @@ struct ath12k_wmi_peer_create_arg {
const u8 *peer_addr;
u32 peer_type;
u32 vdev_id;
bool ml_enabled;
};
struct wmi_peer_create_mlo_params {
__le32 tlv_header;
__le32 flags;
};
struct ath12k_wmi_pdev_set_regdomain_arg {