/*!
 *  @file	wilc_wfi_cfgoperations.h
 *  @brief	Definitions for the network module
 *  @author	syounan
 *  @sa		wilc_oswrapper.h top level OS wrapper file
 *  @date	31 Aug 2010
 *  @version	1.0
 */
#ifndef NM_WFI_CFGOPERATIONS
#define NM_WFI_CFGOPERATIONS
#include "wilc_wfi_netdevice.h"

#ifdef WILC_FULLY_HOSTING_AP
#include "wilc_host_ap.h"
#endif


/* The following macros describe the bitfield map used by the firmware to determine its 11i mode */
#define NO_ENCRYPT			0
#define ENCRYPT_ENABLED	(1 << 0)
#define WEP					(1 << 1)
#define WEP_EXTENDED		(1 << 2)
#define WPA					(1 << 3)
#define WPA2				(1 << 4)
#define AES					(1 << 5)
#define TKIP					(1 << 6)

#ifdef WILC_P2P
/* #define	USE_SUPPLICANT_GO_INTENT */

/*Public action frame index IDs*/
#define		FRAME_TYPE_ID					0
#define		ACTION_CAT_ID					24
#define		ACTION_SUBTYPE_ID				25
#define		P2P_PUB_ACTION_SUBTYPE          30

/*Public action frame Attribute IDs*/
#define		ACTION_FRAME					0xd0
#define		GO_INTENT_ATTR_ID			0x04
#define		CHANLIST_ATTR_ID		0x0b
#define		OPERCHAN_ATTR_ID                0x11
#ifdef	USE_SUPPLICANT_GO_INTENT
#define	GROUP_BSSID_ATTR_ID			0x07
#endif
#define		PUB_ACTION_ATTR_ID			0x04
#define		P2PELEM_ATTR_ID                     0xdd

/*Public action subtype values*/
#define		GO_NEG_REQ					0x00
#define		GO_NEG_RSP					0x01
#define		GO_NEG_CONF					0x02
#define		P2P_INV_REQ                         0x03
#define		P2P_INV_RSP				0x04
#define		PUBLIC_ACT_VENDORSPEC		0x09
#define		GAS_INTIAL_REQ					0x0a
#define		GAS_INTIAL_RSP					0x0b

#define		INVALID_CHANNEL					0
#ifdef	USE_SUPPLICANT_GO_INTENT
#define		SUPPLICANT_GO_INTENT			6
#define		GET_GO_INTENT(a)				(((a) >> 1) & 0x0f)
#define		GET_TIE_BREAKER(a)			(((a)) & 0x01)
#else
/* #define FORCE_P2P_CLIENT */
#endif
#endif

#define nl80211_SCAN_RESULT_EXPIRE	(3 * HZ)
#define SCAN_RESULT_EXPIRE				(40 * HZ)

static const u32 cipher_suites[] = {
	WLAN_CIPHER_SUITE_WEP40,
	WLAN_CIPHER_SUITE_WEP104,
	WLAN_CIPHER_SUITE_TKIP,
	WLAN_CIPHER_SUITE_CCMP,
	WLAN_CIPHER_SUITE_AES_CMAC,
};

static const struct ieee80211_txrx_stypes
	wilc_wfi_cfg80211_mgmt_types[NUM_NL80211_IFTYPES] = {
	[NL80211_IFTYPE_STATION] = {
		.tx = 0xffff,
		.rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
			BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
	},
	[NL80211_IFTYPE_AP] = {
		.tx = 0xffff,
		.rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
			BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
			BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
			BIT(IEEE80211_STYPE_DISASSOC >> 4) |
			BIT(IEEE80211_STYPE_AUTH >> 4) |
			BIT(IEEE80211_STYPE_DEAUTH >> 4) |
			BIT(IEEE80211_STYPE_ACTION >> 4)
	},
	[NL80211_IFTYPE_P2P_CLIENT] = {
		.tx = 0xffff,
		.rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
			BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
			BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
			BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
			BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
			BIT(IEEE80211_STYPE_DISASSOC >> 4) |
			BIT(IEEE80211_STYPE_AUTH >> 4) |
			BIT(IEEE80211_STYPE_DEAUTH >> 4)
	}
};

/* Time to stay on the channel */
#define WILC_WFI_DWELL_PASSIVE 100
#define WILC_WFI_DWELL_ACTIVE  40

struct wireless_dev *WILC_WFI_CfgAlloc(void);
struct wireless_dev *WILC_WFI_WiphyRegister(struct net_device *net);
void WILC_WFI_WiphyFree(struct net_device *net);
int WILC_WFI_update_stats(struct wiphy *wiphy, u32 pktlen, u8 changed);
int WILC_WFI_DeInitHostInt(struct net_device *net);
int WILC_WFI_InitHostInt(struct net_device *net);
void WILC_WFI_monitor_rx(uint8_t *buff, uint32_t size);
int WILC_WFI_deinit_mon_interface(void);
struct net_device *WILC_WFI_init_mon_interface(const char *name, struct net_device *real_dev);

#ifdef TCP_ENHANCEMENTS
#define TCP_ACK_FILTER_LINK_SPEED_THRESH 54
#define DEFAULT_LINK_SPEED 72
void Enable_TCP_ACK_Filter(bool value);
#endif

#endif
