162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file is part of wl18xx 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2012 Texas Instruments. All rights reserved. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef __WL18XX_SCAN_H__ 962306a36Sopenharmony_ci#define __WL18XX_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_cistruct tracking_ch_params { 1662306a36Sopenharmony_ci struct conn_scan_ch_params channel; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci __le32 bssid_lsb; 1962306a36Sopenharmony_ci __le16 bssid_msb; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci u8 padding[2]; 2262306a36Sopenharmony_ci} __packed; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* probe request rate */ 2562306a36Sopenharmony_cienum 2662306a36Sopenharmony_ci{ 2762306a36Sopenharmony_ci WL18XX_SCAN_RATE_1 = 0, 2862306a36Sopenharmony_ci WL18XX_SCAN_RATE_5_5 = 1, 2962306a36Sopenharmony_ci WL18XX_SCAN_RATE_6 = 2, 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#define WL18XX_MAX_CHANNELS_5GHZ 32 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct wl18xx_cmd_scan_params { 3562306a36Sopenharmony_ci struct wl1271_cmd_header header; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci u8 role_id; 3862306a36Sopenharmony_ci u8 scan_type; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci s8 rssi_threshold; /* for filtering (in dBm) */ 4162306a36Sopenharmony_ci s8 snr_threshold; /* for filtering (in dB) */ 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci u8 bss_type; /* for filtering */ 4462306a36Sopenharmony_ci u8 ssid_from_list; /* use ssid from configured ssid list */ 4562306a36Sopenharmony_ci u8 filter; /* forward only results with matching ssids */ 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci /* 4862306a36Sopenharmony_ci * add broadcast ssid in addition to the configured ssids. 4962306a36Sopenharmony_ci * the driver should add dummy entry for it (?). 5062306a36Sopenharmony_ci */ 5162306a36Sopenharmony_ci u8 add_broadcast; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci u8 urgency; 5462306a36Sopenharmony_ci u8 protect; /* ??? */ 5562306a36Sopenharmony_ci u8 n_probe_reqs; /* Number of probes requests per channel */ 5662306a36Sopenharmony_ci u8 terminate_after; /* early terminate scan operation */ 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci u8 passive[SCAN_MAX_BANDS]; /* number of passive scan channels */ 5962306a36Sopenharmony_ci u8 active[SCAN_MAX_BANDS]; /* number of active scan channels */ 6062306a36Sopenharmony_ci u8 dfs; /* number of dfs channels in 5ghz */ 6162306a36Sopenharmony_ci u8 passive_active; /* number of passive before active channels 2.4ghz */ 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci __le16 short_cycles_msec; 6462306a36Sopenharmony_ci __le16 long_cycles_msec; 6562306a36Sopenharmony_ci u8 short_cycles_count; 6662306a36Sopenharmony_ci u8 total_cycles; /* 0 - infinite */ 6762306a36Sopenharmony_ci u8 padding[2]; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci union { 7062306a36Sopenharmony_ci struct { 7162306a36Sopenharmony_ci struct conn_scan_ch_params channels_2[MAX_CHANNELS_2GHZ]; 7262306a36Sopenharmony_ci struct conn_scan_ch_params channels_5[WL18XX_MAX_CHANNELS_5GHZ]; 7362306a36Sopenharmony_ci struct conn_scan_ch_params channels_4[MAX_CHANNELS_4GHZ]; 7462306a36Sopenharmony_ci }; 7562306a36Sopenharmony_ci struct tracking_ch_params channels_tracking[WL1271_SCAN_MAX_CHANNELS]; 7662306a36Sopenharmony_ci } ; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci u8 ssid[IEEE80211_MAX_SSID_LEN]; 7962306a36Sopenharmony_ci u8 ssid_len; /* For SCAN_SSID_FILTER_SPECIFIC */ 8062306a36Sopenharmony_ci u8 tag; 8162306a36Sopenharmony_ci u8 rate; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci /* send SCAN_REPORT_EVENT in periodic scans after each cycle 8462306a36Sopenharmony_ci * if number of results >= report_threshold. Must be 0 for 8562306a36Sopenharmony_ci * non periodic scans 8662306a36Sopenharmony_ci */ 8762306a36Sopenharmony_ci u8 report_threshold; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci /* Should periodic scan stop after a report event was created. 9062306a36Sopenharmony_ci * Must be 0 for non periodic scans. 9162306a36Sopenharmony_ci */ 9262306a36Sopenharmony_ci u8 terminate_on_report; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci u8 padding1[3]; 9562306a36Sopenharmony_ci} __packed; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_cistruct wl18xx_cmd_scan_stop { 9862306a36Sopenharmony_ci struct wl1271_cmd_header header; 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci u8 role_id; 10162306a36Sopenharmony_ci u8 scan_type; 10262306a36Sopenharmony_ci u8 padding[2]; 10362306a36Sopenharmony_ci} __packed; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ciint wl18xx_scan_start(struct wl1271 *wl, struct wl12xx_vif *wlvif, 10662306a36Sopenharmony_ci struct cfg80211_scan_request *req); 10762306a36Sopenharmony_ciint wl18xx_scan_stop(struct wl1271 *wl, struct wl12xx_vif *wlvif); 10862306a36Sopenharmony_civoid wl18xx_scan_completed(struct wl1271 *wl, struct wl12xx_vif *wlvif); 10962306a36Sopenharmony_ciint wl18xx_sched_scan_start(struct wl1271 *wl, struct wl12xx_vif *wlvif, 11062306a36Sopenharmony_ci struct cfg80211_sched_scan_request *req, 11162306a36Sopenharmony_ci struct ieee80211_scan_ies *ies); 11262306a36Sopenharmony_civoid wl18xx_scan_sched_scan_stop(struct wl1271 *wl, struct wl12xx_vif *wlvif); 11362306a36Sopenharmony_ci#endif 114