/*SH0
*******************************************************************************
**                                                                           **
**         Copyright (c) 2016 Quantenna Communications, Inc.                 **
**                            All Rights Reserved                            **
**                                                                           **
**  File        : ieee80211_bsa.h                                            **
**  Description : Quantenna Band steering defines                            **
**                                                                           **
**  This module implements portions of the IEEE Std 802.11z specification,   **
** as well as a proprietary discovery mechanism.                             **
**                                                                           **
*******************************************************************************
**                                                                           **
**  Redistribution and use in source and binary forms, with or without       **
**  modification, are permitted provided that the following conditions       **
**  are met:                                                                 **
**  1. Redistributions of source code must retain the above copyright        **
**     notice, this list of conditions and the following disclaimer.         **
**  2. Redistributions in binary form must reproduce the above copyright     **
**     notice, this list of conditions and the following disclaimer in the   **
**     documentation and/or other materials provided with the distribution.  **
**  3. The name of the author may not be used to endorse or promote products **
**     derived from this software without specific prior written permission. **
**                                                                           **
**  Alternatively, this software may be distributed under the terms of the   **
**  GNU General Public License ("GPL") version 2, or (at your option) any    **
**  later version as published by the Free Software Foundation.              **
**                                                                           **
**  In the case this software is distributed under the GPL license,          **
**  you should have received a copy of the GNU General Public License        **
**  along with this software; if not, write to the Free Software             **
**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  **
**                                                                           **
**  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR       **
**  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES**
**  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  **
**  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,         **
**  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT **
**  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,**
**  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    **
**  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT      **
**  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF **
**  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.        **
**                                                                           **
*******************************************************************************
EH0*/

#ifndef _NET80211_IEEE80211_BSA_H_
#define _NET80211_IEEE80211_BSA_H_

#define BSA_STATUS_ACTIVE		1
#define BSA_STATUS_INACTIVE		0

#define BSA_PROBE_EVENT_REQ		3
#define BSA_CONNECT_COMPLETE_EVENT	4
#define BSA_EVENT_BSS_TRANS_STATUS	8
#define IEEE80211_MAX_EVENT_DATA_LEN	256
#define CAPABILITY_INFOMATION		12

#define BSA_EVENT_DEAUTH 5
#define BSA_EVENT_DISASSOC 6

#define	BSA_HT_NOT_SUPPORTED		0
#define	BSA_HT_SUPPORTED		2
#define BSA_VHT_NOT_SUPPORTED		0
#define	BSA_VHT_SUPPORTED		1
#define	BSA_WNM_NOT_SUPPORTED		0
#define	BSA_WNM_SUPPORTED		1
#define	BSA_MU_NOT_SUPPORTED		0
#define	BSA_MU_SUPPORTED		1

#define BSA_VHT_MCSMAP_NOT_SUPPORT 0xC000
#define BSA_VHT_MCSMAP_MASK		0xC000
#define DEFAULT_BANDWIDTH		40

#define BSA_MACFILTER_HASHSIZE		32

#define	BSA_MACFILTER_HASH(addr)	\
	(((u_int8_t *)(addr))[IEEE80211_ADDR_LEN - 1] % BSA_MACFILTER_HASHSIZE)

enum {
	BSA_MACFILTER_OPEN = 0,
	BSA_MACFILTER_DENY = 1,
	BSA_MACFILTER_ALLOW = 2,
};

enum bsa_curr_band {
	BSA_OPER_BAND_2G = 0,
	BSA_OPER_BAND_5G = 1,
	BSA_OPER_BAND_MAX = 2,
};

enum bsa_disconnect_dir {
	BSA_DISCONNECT_SELF_GENERATED = 0,
	BSA_DISCONNECT_PEER_GENERATED = 1,
};

struct qtn_bsa_peer_event_data {
	char		bsa_name[32];
	uint8_t		bsa_bssid[IEEE80211_ADDR_LEN];
	uint16_t	bsa_event_id;
	uint32_t	offset;
}__packed;

struct qtn_bsa_probe_event_info {
	uint8_t		bsa_sta_mac[IEEE80211_ADDR_LEN];
	uint16_t	bsa_nss;
	int32_t		bsa_rssi;
	uint16_t	bsa_max_phy_rate;
	uint16_t	reserved;
	uint16_t	bsa_curr_band;
	uint16_t	bsa_channel;
	uint16_t	bsa_band_width;
	uint16_t	bsa_bss_transition;
	uint8_t		bsa_vht_capab;
	uint8_t		bsa_mu_mimo_capab;
	uint16_t	cookie_len;
	void		*cookie;
}__packed;

struct qtn_bsa_assoc_compl_event_info {
	uint8_t		bsa_sta_mac[IEEE80211_ADDR_LEN];
	uint16_t	reserved;
	int32_t		bsa_rssi;
	uint16_t	bsa_nss;
	uint16_t	bsa_max_phy_rate;
	uint16_t	bsa_curr_band;
	uint16_t	bsa_channel;
	uint32_t	bsa_band_width;
	uint8_t		bsa_bss_transition_support;
	uint8_t		bsa_vht_capab;
	uint8_t		bsa_mu_mimo_capab;
}__packed;

struct qtn_bsa_disconnect_event_info {
	uint8_t         bsa_sta_mac[IEEE80211_ADDR_LEN];
	uint16_t        reason_code;
	uint8_t         direction;
}__packed;

struct bsa_deny_sta {
	LIST_ENTRY(bsa_deny_sta) list;
	uint8_t  bsa_macaddr[IEEE80211_ADDR_LEN];
};

uint32_t ieee80211_wlan_vht_mcs_streams(uint16_t mcsmap);
uint32_t ieee80211_wlan_vht_rxstreams(struct ieee80211_ie_vhtcap *vhtcap);
uint32_t ieee80211_wlan_ht_rx_maxrate(struct ieee80211_ie_htcap *htcap, uint32_t *rx_ss);
uint32_t ieee80211_wlan_vht_rx_maxrate(struct ieee80211_ie_vhtcap *vhtcap);
/* probe and assoc complete event sent to bsa peer entity*/
int ieee80211_bsa_probe_event_send(struct ieee80211vap *vap,struct sk_buff *skb,
					uint8_t *bssid,uint8_t *sta_mac, int rssi);
int ieee80211_bsa_disconnect_event_send(struct ieee80211vap *vap, struct ieee80211_node *ni,
                                        uint16_t reason_code, uint8_t fc_subtype, uint8_t direction);
int ieee80211_bsa_connect_complete_event_send(struct ieee80211vap *vap,struct ieee80211_node *ni);
int ieee80211_bsa_macfilter_check(struct ieee80211vap *vap, uint8_t mac[IEEE80211_ADDR_LEN]);
#endif  /* BSA_IEEE80211_H */
