mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-11 18:09:27 +07:00
ath11k: Add support for 6g scan hint
Add support for 6Ghz short ssid and bssid hint mechanism as part of scan command. Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20200603001724.12161-9-pradeepc@codeaurora.org
This commit is contained in:
parent
bff621fd11
commit
74601ecfef
@ -2005,6 +2005,8 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,
|
||||
int i, ret, len;
|
||||
u32 *tmp_ptr;
|
||||
u8 extraie_len_with_pad = 0;
|
||||
struct hint_short_ssid *s_ssid = NULL;
|
||||
struct hint_bssid *hint_bssid = NULL;
|
||||
|
||||
len = sizeof(*cmd);
|
||||
|
||||
@ -2026,6 +2028,14 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,
|
||||
roundup(params->extraie.len, sizeof(u32));
|
||||
len += extraie_len_with_pad;
|
||||
|
||||
if (params->num_hint_bssid)
|
||||
len += TLV_HDR_SIZE +
|
||||
params->num_hint_bssid * sizeof(struct hint_bssid);
|
||||
|
||||
if (params->num_hint_s_ssid)
|
||||
len += TLV_HDR_SIZE +
|
||||
params->num_hint_s_ssid * sizeof(struct hint_short_ssid);
|
||||
|
||||
skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, len);
|
||||
if (!skb)
|
||||
return -ENOMEM;
|
||||
@ -2126,6 +2136,68 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,
|
||||
|
||||
ptr += extraie_len_with_pad;
|
||||
|
||||
if (params->num_hint_s_ssid) {
|
||||
len = params->num_hint_s_ssid * sizeof(struct hint_short_ssid);
|
||||
tlv = ptr;
|
||||
tlv->header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_ARRAY_FIXED_STRUCT) |
|
||||
FIELD_PREP(WMI_TLV_LEN, len);
|
||||
ptr += TLV_HDR_SIZE;
|
||||
s_ssid = ptr;
|
||||
for (i = 0; i < params->num_hint_s_ssid; ++i) {
|
||||
s_ssid->freq_flags = params->hint_s_ssid[i].freq_flags;
|
||||
s_ssid->short_ssid = params->hint_s_ssid[i].short_ssid;
|
||||
s_ssid++;
|
||||
}
|
||||
ptr += len;
|
||||
}
|
||||
|
||||
if (params->num_hint_bssid) {
|
||||
len = params->num_hint_bssid * sizeof(struct hint_bssid);
|
||||
tlv = ptr;
|
||||
tlv->header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_ARRAY_FIXED_STRUCT) |
|
||||
FIELD_PREP(WMI_TLV_LEN, len);
|
||||
ptr += TLV_HDR_SIZE;
|
||||
hint_bssid = ptr;
|
||||
for (i = 0; i < params->num_hint_bssid; ++i) {
|
||||
hint_bssid->freq_flags =
|
||||
params->hint_bssid[i].freq_flags;
|
||||
ether_addr_copy(¶ms->hint_bssid[i].bssid.addr[0],
|
||||
&hint_bssid->bssid.addr[0]);
|
||||
hint_bssid++;
|
||||
}
|
||||
}
|
||||
|
||||
len = params->num_hint_s_ssid * sizeof(struct hint_short_ssid);
|
||||
tlv = ptr;
|
||||
tlv->header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_ARRAY_FIXED_STRUCT) |
|
||||
FIELD_PREP(WMI_TLV_LEN, len);
|
||||
ptr += TLV_HDR_SIZE;
|
||||
if (params->num_hint_s_ssid) {
|
||||
s_ssid = ptr;
|
||||
for (i = 0; i < params->num_hint_s_ssid; ++i) {
|
||||
s_ssid->freq_flags = params->hint_s_ssid[i].freq_flags;
|
||||
s_ssid->short_ssid = params->hint_s_ssid[i].short_ssid;
|
||||
s_ssid++;
|
||||
}
|
||||
}
|
||||
ptr += len;
|
||||
|
||||
len = params->num_hint_bssid * sizeof(struct hint_bssid);
|
||||
tlv = ptr;
|
||||
tlv->header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_ARRAY_FIXED_STRUCT) |
|
||||
FIELD_PREP(WMI_TLV_LEN, len);
|
||||
ptr += TLV_HDR_SIZE;
|
||||
if (params->num_hint_bssid) {
|
||||
hint_bssid = ptr;
|
||||
for (i = 0; i < params->num_hint_bssid; ++i) {
|
||||
hint_bssid->freq_flags =
|
||||
params->hint_bssid[i].freq_flags;
|
||||
ether_addr_copy(¶ms->hint_bssid[i].bssid.addr[0],
|
||||
&hint_bssid->bssid.addr[0]);
|
||||
hint_bssid++;
|
||||
}
|
||||
}
|
||||
|
||||
ret = ath11k_wmi_cmd_send(wmi, skb,
|
||||
WMI_START_SCAN_CMDID);
|
||||
if (ret) {
|
||||
|
@ -50,6 +50,14 @@ struct wmi_tlv {
|
||||
#define WMI_MAX_MEM_REQS 32
|
||||
#define ATH11K_MAX_HW_LISTEN_INTERVAL 5
|
||||
|
||||
#define WLAN_SCAN_MAX_HINT_S_SSID 10
|
||||
#define WLAN_SCAN_MAX_HINT_BSSID 10
|
||||
#define MAX_RNR_BSS 5
|
||||
|
||||
#define WLAN_SCAN_MAX_HINT_S_SSID 10
|
||||
#define WLAN_SCAN_MAX_HINT_BSSID 10
|
||||
#define MAX_RNR_BSS 5
|
||||
|
||||
#define WLAN_SCAN_PARAMS_MAX_SSID 16
|
||||
#define WLAN_SCAN_PARAMS_MAX_BSSID 4
|
||||
#define WLAN_SCAN_PARAMS_MAX_IE_LEN 256
|
||||
@ -3105,6 +3113,16 @@ enum {
|
||||
((flag) |= (((mode) << WMI_SCAN_DWELL_MODE_SHIFT) & \
|
||||
WMI_SCAN_DWELL_MODE_MASK))
|
||||
|
||||
struct hint_short_ssid {
|
||||
u32 freq_flags;
|
||||
u32 short_ssid;
|
||||
};
|
||||
|
||||
struct hint_bssid {
|
||||
u32 freq_flags;
|
||||
struct wmi_mac_addr bssid;
|
||||
};
|
||||
|
||||
struct scan_req_params {
|
||||
u32 scan_id;
|
||||
u32 scan_req_id;
|
||||
@ -3184,6 +3202,10 @@ struct scan_req_params {
|
||||
struct element_info extraie;
|
||||
struct element_info htcap;
|
||||
struct element_info vhtcap;
|
||||
u32 num_hint_s_ssid;
|
||||
u32 num_hint_bssid;
|
||||
struct hint_short_ssid hint_s_ssid[WLAN_SCAN_MAX_HINT_S_SSID];
|
||||
struct hint_bssid hint_bssid[WLAN_SCAN_MAX_HINT_BSSID];
|
||||
};
|
||||
|
||||
struct wmi_ssid_arg {
|
||||
|
Loading…
Reference in New Issue
Block a user