1252190Srpaulo/*
2252190Srpaulo * IEEE 802.11v WNM related functions and structures
3252190Srpaulo * Copyright (c) 2011-2012, Qualcomm Atheros, Inc.
4252190Srpaulo *
5252190Srpaulo * This software may be distributed under the terms of the BSD license.
6252190Srpaulo * See README for more details.
7252190Srpaulo */
8252190Srpaulo
9252190Srpaulo#ifndef WNM_STA_H
10252190Srpaulo#define WNM_STA_H
11252190Srpaulo
12281806Srpaulostruct measurement_pilot {
13281806Srpaulo	u8 measurement_pilot;
14281806Srpaulo	u8 subelem_len;
15281806Srpaulo	u8 subelems[255];
16281806Srpaulo};
17252190Srpaulo
18281806Srpaulostruct multiple_bssid {
19281806Srpaulo	u8 max_bssid_indicator;
20281806Srpaulo	u8 subelem_len;
21281806Srpaulo	u8 subelems[255];
22281806Srpaulo};
23281806Srpaulo
24281806Srpaulostruct neighbor_report {
25281806Srpaulo	u8 bssid[ETH_ALEN];
26281806Srpaulo	u32 bssid_info;
27281806Srpaulo	u8 regulatory_class;
28281806Srpaulo	u8 channel_number;
29281806Srpaulo	u8 phy_type;
30281806Srpaulo	u8 preference; /* valid if preference_present=1 */
31281806Srpaulo	u16 tsf_offset; /* valid if tsf_present=1 */
32281806Srpaulo	u16 beacon_int; /* valid if tsf_present=1 */
33281806Srpaulo	char country[2]; /* valid if country_present=1 */
34281806Srpaulo	u8 rm_capab[5]; /* valid if rm_capab_present=1 */
35281806Srpaulo	u16 bearing; /* valid if bearing_present=1 */
36281806Srpaulo	u16 rel_height; /* valid if bearing_present=1 */
37281806Srpaulo	u32 distance; /* valid if bearing_present=1 */
38281806Srpaulo	u64 bss_term_tsf; /* valid if bss_term_present=1 */
39281806Srpaulo	u16 bss_term_dur; /* valid if bss_term_present=1 */
40281806Srpaulo	unsigned int preference_present:1;
41281806Srpaulo	unsigned int tsf_present:1;
42281806Srpaulo	unsigned int country_present:1;
43281806Srpaulo	unsigned int rm_capab_present:1;
44281806Srpaulo	unsigned int bearing_present:1;
45281806Srpaulo	unsigned int bss_term_present:1;
46346981Scy	unsigned int acceptable:1;
47346981Scy#ifdef CONFIG_MBO
48346981Scy	unsigned int is_first:1;
49346981Scy#endif /* CONFIG_MBO */
50281806Srpaulo	struct measurement_pilot *meas_pilot;
51281806Srpaulo	struct multiple_bssid *mul_bssid;
52281806Srpaulo	int freq;
53281806Srpaulo};
54281806Srpaulo
55281806Srpaulo
56252190Srpauloint ieee802_11_send_wnmsleep_req(struct wpa_supplicant *wpa_s,
57252190Srpaulo				 u8 action, u16 intval, struct wpabuf *tfs_req);
58252190Srpaulo
59252190Srpaulovoid ieee802_11_rx_wnm_action(struct wpa_supplicant *wpa_s,
60281806Srpaulo			      const struct ieee80211_mgmt *mgmt, size_t len);
61252190Srpaulo
62281806Srpauloint wnm_send_bss_transition_mgmt_query(struct wpa_supplicant *wpa_s,
63346981Scy				       u8 query_reason,
64346981Scy				       const char *btm_candidates,
65346981Scy				       int cand_list);
66346981Scy
67281806Srpaulovoid wnm_deallocate_memory(struct wpa_supplicant *wpa_s);
68346981Scyint wnm_send_coloc_intf_report(struct wpa_supplicant *wpa_s, u8 dialog_token,
69346981Scy			       const struct wpabuf *elems);
70346981Scyvoid wnm_set_coloc_intf_elems(struct wpa_supplicant *wpa_s,
71346981Scy			      struct wpabuf *elems);
72281806Srpaulo
73281806Srpaulo
74281806Srpaulo#ifdef CONFIG_WNM
75281806Srpaulo
76281806Srpauloint wnm_scan_process(struct wpa_supplicant *wpa_s, int reply_on_fail);
77346981Scyvoid wnm_clear_coloc_intf_reporting(struct wpa_supplicant *wpa_s);
78281806Srpaulo
79281806Srpaulo#else /* CONFIG_WNM */
80281806Srpaulo
81281806Srpaulostatic inline int wnm_scan_process(struct wpa_supplicant *wpa_s,
82281806Srpaulo				   int reply_on_fail)
83281806Srpaulo{
84281806Srpaulo	return 0;
85281806Srpaulo}
86281806Srpaulo
87346981Scystatic inline void wnm_clear_coloc_intf_reporting(struct wpa_supplicant *wpa_s)
88346981Scy{
89346981Scy}
90346981Scy
91281806Srpaulo#endif /* CONFIG_WNM */
92281806Srpaulo
93252190Srpaulo#endif /* WNM_STA_H */
94