162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file is part of wl12xx 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2012 Texas Instruments. All rights reserved. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef __WL12XX_SCAN_H__ 962306a36Sopenharmony_ci#define __WL12XX_SCAN_H__ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "../wlcore/wlcore.h" 1262306a36Sopenharmony_ci#include "../wlcore/cmd.h" 1362306a36Sopenharmony_ci#include "../wlcore/scan.h" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define WL12XX_MAX_CHANNELS_5GHZ 23 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistruct basic_scan_params { 1862306a36Sopenharmony_ci /* Scan option flags (WL1271_SCAN_OPT_*) */ 1962306a36Sopenharmony_ci __le16 scan_options; 2062306a36Sopenharmony_ci u8 role_id; 2162306a36Sopenharmony_ci /* Number of scan channels in the list (maximum 30) */ 2262306a36Sopenharmony_ci u8 n_ch; 2362306a36Sopenharmony_ci /* This field indicates the number of probe requests to send 2462306a36Sopenharmony_ci per channel for an active scan */ 2562306a36Sopenharmony_ci u8 n_probe_reqs; 2662306a36Sopenharmony_ci u8 tid_trigger; 2762306a36Sopenharmony_ci u8 ssid_len; 2862306a36Sopenharmony_ci u8 use_ssid_list; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci /* Rate bit field for sending the probes */ 3162306a36Sopenharmony_ci __le32 tx_rate; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci u8 ssid[IEEE80211_MAX_SSID_LEN]; 3462306a36Sopenharmony_ci /* Band to scan */ 3562306a36Sopenharmony_ci u8 band; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci u8 scan_tag; 3862306a36Sopenharmony_ci u8 padding2[2]; 3962306a36Sopenharmony_ci} __packed; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct basic_scan_channel_params { 4262306a36Sopenharmony_ci /* Duration in TU to wait for frames on a channel for active scan */ 4362306a36Sopenharmony_ci __le32 min_duration; 4462306a36Sopenharmony_ci __le32 max_duration; 4562306a36Sopenharmony_ci __le32 bssid_lsb; 4662306a36Sopenharmony_ci __le16 bssid_msb; 4762306a36Sopenharmony_ci u8 early_termination; 4862306a36Sopenharmony_ci u8 tx_power_att; 4962306a36Sopenharmony_ci u8 channel; 5062306a36Sopenharmony_ci /* FW internal use only! */ 5162306a36Sopenharmony_ci u8 dfs_candidate; 5262306a36Sopenharmony_ci u8 activity_detected; 5362306a36Sopenharmony_ci u8 pad; 5462306a36Sopenharmony_ci} __packed; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_cistruct wl1271_cmd_scan { 5762306a36Sopenharmony_ci struct wl1271_cmd_header header; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci struct basic_scan_params params; 6062306a36Sopenharmony_ci struct basic_scan_channel_params channels[WL1271_SCAN_MAX_CHANNELS]; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci /* src mac address */ 6362306a36Sopenharmony_ci u8 addr[ETH_ALEN]; 6462306a36Sopenharmony_ci u8 padding[2]; 6562306a36Sopenharmony_ci} __packed; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_cistruct wl1271_cmd_sched_scan_config { 6862306a36Sopenharmony_ci struct wl1271_cmd_header header; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci __le32 intervals[SCAN_MAX_CYCLE_INTERVALS]; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci s8 rssi_threshold; /* for filtering (in dBm) */ 7362306a36Sopenharmony_ci s8 snr_threshold; /* for filtering (in dB) */ 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci u8 cycles; /* maximum number of scan cycles */ 7662306a36Sopenharmony_ci u8 report_after; /* report when this number of results are received */ 7762306a36Sopenharmony_ci u8 terminate; /* stop scanning after reporting */ 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci u8 tag; 8062306a36Sopenharmony_ci u8 bss_type; /* for filtering */ 8162306a36Sopenharmony_ci u8 filter_type; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci u8 ssid_len; /* For SCAN_SSID_FILTER_SPECIFIC */ 8462306a36Sopenharmony_ci u8 ssid[IEEE80211_MAX_SSID_LEN]; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci u8 n_probe_reqs; /* Number of probes requests per channel */ 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci u8 passive[SCAN_MAX_BANDS]; 8962306a36Sopenharmony_ci u8 active[SCAN_MAX_BANDS]; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci u8 dfs; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci u8 n_pactive_ch; /* number of pactive (passive until fw detects energy) 9462306a36Sopenharmony_ci channels in BG band */ 9562306a36Sopenharmony_ci u8 role_id; 9662306a36Sopenharmony_ci u8 padding[1]; 9762306a36Sopenharmony_ci struct conn_scan_ch_params channels_2[MAX_CHANNELS_2GHZ]; 9862306a36Sopenharmony_ci struct conn_scan_ch_params channels_5[WL12XX_MAX_CHANNELS_5GHZ]; 9962306a36Sopenharmony_ci struct conn_scan_ch_params channels_4[MAX_CHANNELS_4GHZ]; 10062306a36Sopenharmony_ci} __packed; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_cistruct wl1271_cmd_sched_scan_start { 10362306a36Sopenharmony_ci struct wl1271_cmd_header header; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci u8 tag; 10662306a36Sopenharmony_ci u8 role_id; 10762306a36Sopenharmony_ci u8 padding[2]; 10862306a36Sopenharmony_ci} __packed; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_cistruct wl1271_cmd_sched_scan_stop { 11162306a36Sopenharmony_ci struct wl1271_cmd_header header; 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci u8 tag; 11462306a36Sopenharmony_ci u8 role_id; 11562306a36Sopenharmony_ci u8 padding[2]; 11662306a36Sopenharmony_ci} __packed; 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ciint wl12xx_scan_start(struct wl1271 *wl, struct wl12xx_vif *wlvif, 11962306a36Sopenharmony_ci struct cfg80211_scan_request *req); 12062306a36Sopenharmony_ciint wl12xx_scan_stop(struct wl1271 *wl, struct wl12xx_vif *wlvif); 12162306a36Sopenharmony_civoid wl12xx_scan_completed(struct wl1271 *wl, struct wl12xx_vif *wlvif); 12262306a36Sopenharmony_ciint wl12xx_sched_scan_start(struct wl1271 *wl, struct wl12xx_vif *wlvif, 12362306a36Sopenharmony_ci struct cfg80211_sched_scan_request *req, 12462306a36Sopenharmony_ci struct ieee80211_scan_ies *ies); 12562306a36Sopenharmony_civoid wl12xx_scan_sched_scan_stop(struct wl1271 *wl, struct wl12xx_vif *wlvif); 12662306a36Sopenharmony_ci#endif 127