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