/*
 *   Driver for KeyStream wireless LAN
 *   
 *   Copyright (c) 2005-2008 KeyStream Corp.
 *   Copyright (C) 2009 Renesas Technology Corp.
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License version 2 as
 *   published by the Free Software Foundation.
 */

#ifndef _KS_HOSTIF_H_
#define _KS_HOSTIF_H_
/*
 * HOST-MAC I/F events
 */
#define HIF_DATA_REQ		0xE001
#define HIF_DATA_IND		0xE801
#define HIF_MIB_GET_REQ		0xE002
#define HIF_MIB_GET_CONF	0xE802
#define HIF_MIB_SET_REQ		0xE003
#define HIF_MIB_SET_CONF	0xE803
#define HIF_POWERMGT_REQ	0xE004
#define HIF_POWERMGT_CONF	0xE804
#define HIF_START_REQ		0xE005
#define HIF_START_CONF		0xE805
#define HIF_CONNECT_IND		0xE806
#define HIF_STOP_REQ		0xE006
#define HIF_STOP_CONF		0xE807
#define HIF_PS_ADH_SET_REQ	0xE007
#define HIF_PS_ADH_SET_CONF	0xE808
#define HIF_INFRA_SET_REQ	0xE008
#define HIF_INFRA_SET_CONF	0xE809
#define HIF_ADH_SET_REQ		0xE009
#define HIF_ADH_SET_CONF	0xE80A
#define HIF_AP_SET_REQ		0xE00A
#define HIF_AP_SET_CONF		0xE80B
#define HIF_ASSOC_INFO_IND	0xE80C
#define HIF_MIC_FAILURE_REQ	0xE00B
#define HIF_MIC_FAILURE_CONF	0xE80D
#define HIF_SCAN_REQ		0xE00C
#define HIF_SCAN_CONF		0xE80E
#define HIF_PHY_INFO_REQ	0xE00D
#define HIF_PHY_INFO_CONF	0xE80F
#define HIF_SLEEP_REQ		0xE00E
#define HIF_SLEEP_CONF		0xE810
#define HIF_PHY_INFO_IND	0xE811
#define HIF_SCAN_IND		0xE812
#define HIF_INFRA_SET2_REQ	0xE00F
#define HIF_INFRA_SET2_CONF	0xE813
#define HIF_ADH_SET2_REQ	0xE010
#define HIF_ADH_SET2_CONF	0xE814

#define HIF_REQ_MAX		0xE010

/*
 * HOST-MAC I/F data structure
 * Byte alignmet Little Endian
 */

struct hostif_hdr {
	uint16_t size;
	uint16_t event;
} __attribute__ ((packed));

struct hostif_data_request_t {
	struct hostif_hdr header;
	uint16_t auth_type;
#define TYPE_DATA 0x0000
#define TYPE_AUTH 0x0001
	uint16_t reserved;
	uint8_t data[0];
} __attribute__ ((packed));

struct hostif_data_indication_t {
	struct hostif_hdr header;
	uint16_t auth_type;
/* #define TYPE_DATA 0x0000 */
#define TYPE_PMK1 0x0001
#define TYPE_GMK1 0x0002
#define TYPE_GMK2 0x0003
	uint16_t reserved;
	uint8_t data[0];
} __attribute__ ((packed));

#define CHANNEL_LIST_MAX_SIZE 14
struct channel_list_t {
	uint8_t size;
	uint8_t body[CHANNEL_LIST_MAX_SIZE];
	uint8_t pad;
} __attribute__ ((packed));

/* MIB Attribute */
#define DOT11_MAC_ADDRESS                 0x21010100	/* MAC Address (R) */
#define DOT11_PRODUCT_VERSION             0x31024100	/* FirmWare Version (R) */
#define DOT11_RTS_THRESHOLD               0x21020100	/* RTS Threshold (R/W) */
#define DOT11_FRAGMENTATION_THRESHOLD     0x21050100	/* Fragment Threshold (R/W) */
#define DOT11_PRIVACY_INVOKED             0x15010100	/* WEP ON/OFF (W) */
#define DOT11_WEP_DEFAULT_KEY_ID          0x15020100	/* WEP Index (W) */
#define DOT11_WEP_DEFAULT_KEY_VALUE1      0x13020101	/* WEP Key#1(TKIP AES: PairwiseTemporalKey) (W) */
#define DOT11_WEP_DEFAULT_KEY_VALUE2      0x13020102	/* WEP Key#2(TKIP AES: GroupKey1) (W) */
#define DOT11_WEP_DEFAULT_KEY_VALUE3      0x13020103	/* WEP Key#3(TKIP AES: GroupKey2) (W) */
#define DOT11_WEP_DEFAULT_KEY_VALUE4      0x13020104	/* WEP Key#4 (W) */
#define DOT11_WEP_LIST                    0x13020100	/* WEP LIST */
#define	DOT11_DESIRED_SSID		  0x11090100	/* SSID */
#define	DOT11_CURRENT_CHANNEL		  0x45010100	/* channel set */
#define	DOT11_OPERATION_RATE_SET	  0x11110100	/* rate set */

#define LOCAL_AP_SEARCH_INTEAVAL          0xF1010100	/* AP search interval (R/W) */
#define LOCAL_CURRENTADDRESS              0xF1050100	/* MAC Adress change (W) */
#define LOCAL_MULTICAST_ADDRESS           0xF1060100	/* Multicast Adress (W) */
#define LOCAL_MULTICAST_FILTER            0xF1060200	/* Multicast Adress Filter enable/disable (W) */
#define LOCAL_SEARCHED_AP_LIST            0xF1030100	/* AP list (R) */
#define LOCAL_LINK_AP_STATUS              0xF1040100	/* Link AP status (R) */
#define	LOCAL_PACKET_STATISTICS		  0xF1020100	/* tx,rx packets statistics */
#define LOCAL_AP_SCAN_LIST_TYPE_SET	  0xF1030200	/* AP_SCAN_LIST_TYPE */

#define DOT11_RSN_ENABLED                 0x15070100	/* WPA enable/disable (W) */
#define LOCAL_RSN_MODE                    0x56010100	/* RSN mode WPA/WPA2 (W) */
#define DOT11_RSN_CONFIG_MULTICAST_CIPHER 0x51040100	/* GroupKeyCipherSuite (W) */
#define DOT11_RSN_CONFIG_UNICAST_CIPHER   0x52020100	/* PairwiseKeyCipherSuite (W) */
#define DOT11_RSN_CONFIG_AUTH_SUITE       0x53020100	/* AuthenticationKeyManagementSuite (W) */
#define DOT11_RSN_CONFIG_VERSION          0x51020100	/* RSN version (W) */
#define LOCAL_RSN_CONFIG_ALL              0x5F010100	/* RSN CONFIG ALL (W) */
#define DOT11_PMK_TSC                     0x55010100	/* PMK_TSC (W) */
#define DOT11_GMK1_TSC                    0x55010101	/* GMK1_TSC (W) */
#define DOT11_GMK2_TSC                    0x55010102	/* GMK2_TSC (W) */
#define DOT11_GMK3_TSC   		  0x55010103	/* GMK3_TSC */
#define LOCAL_PMK                         0x58010100	/* Pairwise Master Key cache (W) */

#define LOCAL_REGION                      0xF10A0100	/* Region setting */

#ifdef WPS
#define LOCAL_WPS_ENABLE                  0xF10B0100	/* WiFi Protected Setup */
#define LOCAL_WPS_PROBE_REQ               0xF10C0100	/* WPS Probe Request */
#endif /* WPS */

#define LOCAL_GAIN                        0xF10D0100	/* Carrer sense threshold for demo ato show */
#define LOCAL_EEPROM_SUM                  0xF10E0100	/* EEPROM checksum information */

struct hostif_mib_get_request_t {
	struct hostif_hdr header;
	uint32_t mib_attribute;
} __attribute__ ((packed));

struct hostif_mib_value_t {
	uint16_t size;
	uint16_t type;
#define MIB_VALUE_TYPE_NULL     0
#define MIB_VALUE_TYPE_INT      1
#define MIB_VALUE_TYPE_BOOL     2
#define MIB_VALUE_TYPE_COUNT32  3
#define MIB_VALUE_TYPE_OSTRING  4
	uint8_t body[0];
} __attribute__ ((packed));

struct hostif_mib_get_confirm_t {
	struct hostif_hdr header;
	uint32_t mib_status;
#define MIB_SUCCESS    0
#define MIB_INVALID    1
#define MIB_READ_ONLY  2
#define MIB_WRITE_ONLY 3
	uint32_t mib_attribute;
	struct hostif_mib_value_t mib_value;
} __attribute__ ((packed));

struct hostif_mib_set_request_t {
	struct hostif_hdr header;
	uint32_t mib_attribute;
	struct hostif_mib_value_t mib_value;
} __attribute__ ((packed));

struct hostif_mib_set_confirm_t {
	struct hostif_hdr header;
	uint32_t mib_status;
	uint32_t mib_attribute;
} __attribute__ ((packed));

struct hostif_power_mngmt_request_t {
	struct hostif_hdr header;
	uint32_t mode;
#define POWER_ACTIVE  1
#define POWER_SAVE    2
	uint32_t wake_up;
#define SLEEP_FALSE 0
#define SLEEP_TRUE  1	/* not used */
	uint32_t receiveDTIMs;
#define DTIM_FALSE 0
#define DTIM_TRUE  1
} __attribute__ ((packed));

/* power management mode */
enum {
	POWMGT_ACTIVE_MODE = 0,
	POWMGT_SAVE1_MODE,
	POWMGT_SAVE2_MODE
};

#define	RESULT_SUCCESS            0
#define	RESULT_INVALID_PARAMETERS 1
#define	RESULT_NOT_SUPPORTED      2
/* #define	RESULT_ALREADY_RUNNING    3 */
#define	RESULT_ALREADY_RUNNING    7

struct hostif_power_mngmt_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
} __attribute__ ((packed));

struct hostif_start_request_t {
	struct hostif_hdr header;
	uint16_t mode;
#define MODE_PSEUDO_ADHOC   0
#define MODE_INFRASTRUCTURE 1
#define MODE_AP             2	/* not used */
#define MODE_ADHOC          3
} __attribute__ ((packed));

struct hostif_start_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
} __attribute__ ((packed));

#define SSID_MAX_SIZE 32
struct ssid_t {
	uint8_t size;
	uint8_t body[SSID_MAX_SIZE];
	uint8_t ssid_pad;
} __attribute__ ((packed));

#define RATE_SET_MAX_SIZE 16
struct rate_set8_t {
	uint8_t size;
	uint8_t body[8];
	uint8_t rate_pad;
} __attribute__ ((packed));

struct FhParms_t {
	uint16_t dwellTime;
	uint8_t hopSet;
	uint8_t hopPattern;
	uint8_t hopIndex;
} __attribute__ ((packed));

struct DsParms_t {
	uint8_t channel;
} __attribute__ ((packed));

struct CfParms_t {
	uint8_t count;
	uint8_t period;
	uint16_t maxDuration;
	uint16_t durRemaining;
} __attribute__ ((packed));

struct IbssParms_t {
	uint16_t atimWindow;
} __attribute__ ((packed));

struct rsn_t {
	uint8_t size;
#define RSN_BODY_SIZE 64
	uint8_t body[RSN_BODY_SIZE];
} __attribute__ ((packed));

struct ErpParams_t {
	uint8_t erp_info;
} __attribute__ ((packed));

struct rate_set16_t {
	uint8_t size;
	uint8_t body[16];
	uint8_t rate_pad;
} __attribute__ ((packed));

struct ap_info_t {
	uint8_t bssid[6];	/* +00 */
	uint8_t rssi;	/* +06 */
	uint8_t sq;	/* +07 */
	uint8_t noise;	/* +08 */
	uint8_t pad0;	/* +09 */
	uint16_t beacon_period;	/* +10 */
	uint16_t capability;	/* +12 */
#define BSS_CAP_ESS             (1<<0)
#define BSS_CAP_IBSS            (1<<1)
#define BSS_CAP_CF_POLABLE      (1<<2)
#define BSS_CAP_CF_POLL_REQ     (1<<3)
#define BSS_CAP_PRIVACY         (1<<4)
#define BSS_CAP_SHORT_PREAMBLE  (1<<5)
#define BSS_CAP_PBCC            (1<<6)
#define BSS_CAP_CHANNEL_AGILITY (1<<7)
#define BSS_CAP_SHORT_SLOT_TIME (1<<10)
#define BSS_CAP_DSSS_OFDM       (1<<13)
	uint8_t frame_type;	/* +14 */
	uint8_t ch_info;	/* +15 */
#define FRAME_TYPE_BEACON	0x80
#define FRAME_TYPE_PROBE_RESP	0x50
	uint16_t body_size;	/* +16 */
	uint8_t body[1024];	/* +18 */
	/* +1032 */
} __attribute__ ((packed));

struct link_ap_info_t {
	uint8_t bssid[6];	/* +00 */
	uint8_t rssi;	/* +06 */
	uint8_t sq;	/* +07 */
	uint8_t noise;	/* +08 */
	uint8_t pad0;	/* +09 */
	uint16_t beacon_period;	/* +10 */
	uint16_t capability;	/* +12 */
	struct rate_set8_t rate_set;	/* +14 */
	struct FhParms_t fh_parameter;	/* +24 */
	struct DsParms_t ds_parameter;	/* +29 */
	struct CfParms_t cf_parameter;	/* +30 */
	struct IbssParms_t ibss_parameter;	/* +36 */
	struct ErpParams_t erp_parameter;	/* +38 */
	uint8_t pad1;	/* +39 */
	struct rate_set8_t ext_rate_set;	/* +40 */
	uint8_t DTIM_period;	/* +50 */
	uint8_t rsn_mode;	/* +51 */
#define RSN_MODE_NONE	0
#define RSN_MODE_WPA	1
#define RSN_MODE_WPA2	2
	struct {
		uint8_t size;	/* +52 */
		uint8_t body[128];	/* +53 */
	} __attribute__ ((packed)) rsn;
} __attribute__ ((packed));

struct hostif_connect_indication_t {
	struct hostif_hdr header;
	uint16_t connect_code;
#define RESULT_CONNECT    0
#define RESULT_DISCONNECT 1
	struct link_ap_info_t link_ap_info;
} __attribute__ ((packed));

struct hostif_stop_request_t {
	struct hostif_hdr header;
} __attribute__ ((packed));

struct hostif_stop_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
} __attribute__ ((packed));

struct hostif_ps_adhoc_set_request_t {
	struct hostif_hdr header;
	uint16_t phy_type;
#define D_11B_ONLY_MODE		0
#define D_11G_ONLY_MODE		1
#define D_11BG_COMPATIBLE_MODE	2
#define D_11A_ONLY_MODE		3
	uint16_t cts_mode;
#define CTS_MODE_FALSE	0
#define CTS_MODE_TRUE	1
	uint16_t channel;
	struct rate_set16_t rate_set;
	uint16_t capability;	/* bit5:preamble bit6:pbcc pbcc not supported always 0 
				 * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
	uint16_t scan_type;
} __attribute__ ((packed));

struct hostif_ps_adhoc_set_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
} __attribute__ ((packed));

struct hostif_infrastructure_set_request_t {
	struct hostif_hdr header;
	uint16_t phy_type;
	uint16_t cts_mode;
	struct rate_set16_t rate_set;
	struct ssid_t ssid;
	uint16_t capability;	/* bit5:preamble bit6:pbcc pbcc not supported always 0 
				 * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
	uint16_t beacon_lost_count;
	uint16_t auth_type;
#define AUTH_TYPE_OPEN_SYSTEM 0
#define AUTH_TYPE_SHARED_KEY  1
	struct channel_list_t channel_list;
	uint16_t scan_type;
} __attribute__ ((packed));

struct hostif_infrastructure_set2_request_t {
	struct hostif_hdr header;
	uint16_t phy_type;
	uint16_t cts_mode;
	struct rate_set16_t rate_set;
	struct ssid_t ssid;
	uint16_t capability;	/* bit5:preamble bit6:pbcc pbcc not supported always 0 
				 * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
	uint16_t beacon_lost_count;
	uint16_t auth_type;
#define AUTH_TYPE_OPEN_SYSTEM 0
#define AUTH_TYPE_SHARED_KEY  1
	struct channel_list_t channel_list;
	uint16_t scan_type;
	uint8_t bssid[ETH_ALEN];
} __attribute__ ((packed));

struct hostif_infrastructure_set_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
} __attribute__ ((packed));

struct hostif_adhoc_set_request_t {
	struct hostif_hdr header;
	uint16_t phy_type;
	uint16_t cts_mode;
	uint16_t channel;
	struct rate_set16_t rate_set;
	struct ssid_t ssid;
	uint16_t capability;	/* bit5:preamble bit6:pbcc pbcc not supported always 0 
				 * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
	uint16_t scan_type;
} __attribute__ ((packed));

struct hostif_adhoc_set2_request_t {
	struct hostif_hdr header;
	uint16_t phy_type;
	uint16_t cts_mode;
	uint16_t reserved;
	struct rate_set16_t rate_set;
	struct ssid_t ssid;
	uint16_t capability;	/* bit5:preamble bit6:pbcc pbcc not supported always 0 
				 * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
	uint16_t scan_type;
	struct channel_list_t channel_list;
	uint8_t bssid[ETH_ALEN];
} __attribute__ ((packed));

struct hostif_adhoc_set_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
} __attribute__ ((packed));

struct last_associate_t {
	uint8_t type;
	uint8_t status;
} __attribute__ ((packed));

struct association_request_t {
	uint8_t type;
#define FRAME_TYPE_ASSOC_REQ	0x00
#define FRAME_TYPE_REASSOC_REQ	0x20
	uint8_t pad;
	uint16_t capability;
	uint16_t listen_interval;
	uint8_t ap_address[6];
	uint16_t reqIEs_size;
} __attribute__ ((packed));

struct association_response_t {
	uint8_t type;
#define FRAME_TYPE_ASSOC_RESP	0x10
#define FRAME_TYPE_REASSOC_RESP	0x30
	uint8_t pad;
	uint16_t capability;
	uint16_t status;
	uint16_t association_id;
	uint16_t respIEs_size;
} __attribute__ ((packed));

struct hostif_associate_indication_t {
	struct hostif_hdr header;
	struct association_request_t assoc_req;
	struct association_response_t assoc_resp;
	/* followed by (reqIEs_size + respIEs_size) octets of data */
	/* reqIEs data *//* respIEs data */
} __attribute__ ((packed));

struct hostif_bss_scan_request_t {
	struct hostif_hdr header;
	uint8_t scan_type;
#define ACTIVE_SCAN  0
#define PASSIVE_SCAN 1
	uint8_t pad[3];
	uint32_t ch_time_min;
	uint32_t ch_time_max;
	struct channel_list_t channel_list;
	struct ssid_t ssid;
} __attribute__ ((packed));

struct hostif_bss_scan_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
	uint16_t reserved;
} __attribute__ ((packed));

struct hostif_phy_information_request_t {
	struct hostif_hdr header;
	uint16_t type;
#define NORMAL_TYPE	0
#define TIME_TYPE	1
	uint16_t time;	/* unit 100ms */
} __attribute__ ((packed));

struct hostif_phy_information_confirm_t {
	struct hostif_hdr header;
	uint8_t rssi;
	uint8_t sq;
	uint8_t noise;
	uint8_t link_speed;
	uint32_t tx_frame;
	uint32_t rx_frame;
	uint32_t tx_error;
	uint32_t rx_error;
} __attribute__ ((packed));

/* sleep mode */
#define SLP_ACTIVE  0
#define SLP_SLEEP   1
struct hostif_sleep_request_t {
	struct hostif_hdr header;
} __attribute__ ((packed));

struct hostif_sleep_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
} __attribute__ ((packed));

struct hostif_mic_failure_request_t {
	struct hostif_hdr header;
	uint16_t failure_count;
	uint16_t timer;
} __attribute__ ((packed));

struct hostif_mic_failure_confirm_t {
	struct hostif_hdr header;
	uint16_t result_code;
} __attribute__ ((packed));

#define BASIC_RATE	0x80
#define RATE_MASK	0x7F

#define TX_RATE_AUTO      0xff
#define TX_RATE_1M_FIXED  0
#define TX_RATE_2M_FIXED  1
#define TX_RATE_1_2M_AUTO 2
#define TX_RATE_5M_FIXED  3
#define TX_RATE_11M_FIXED 4

#define TX_RATE_FULL_AUTO	0
#define TX_RATE_11_AUTO		1
#define TX_RATE_11B_AUTO	2
#define TX_RATE_11BG_AUTO	3
#define TX_RATE_MANUAL_AUTO	4
#define TX_RATE_FIXED		5

/* 11b rate */
#define TX_RATE_1M	(uint8_t)(10/5)	/* 11b 11g basic rate */
#define TX_RATE_2M	(uint8_t)(20/5)	/* 11b 11g basic rate */
#define TX_RATE_5M	(uint8_t)(55/5)	/* 11g basic rate */
#define TX_RATE_11M	(uint8_t)(110/5)	/* 11g basic rate */

/* 11g rate */
#define TX_RATE_6M	(uint8_t)(60/5)	/* 11g basic rate */
#define TX_RATE_12M	(uint8_t)(120/5)	/* 11g basic rate */
#define TX_RATE_24M	(uint8_t)(240/5)	/* 11g basic rate */
#define TX_RATE_9M	(uint8_t)(90/5)
#define TX_RATE_18M	(uint8_t)(180/5)
#define TX_RATE_36M	(uint8_t)(360/5)
#define TX_RATE_48M	(uint8_t)(480/5)
#define TX_RATE_54M	(uint8_t)(540/5)

#define IS_11B_RATE(A) (((A&RATE_MASK)==TX_RATE_1M)||((A&RATE_MASK)==TX_RATE_2M)||\
                        ((A&RATE_MASK)==TX_RATE_5M)||((A&RATE_MASK)==TX_RATE_11M))

#define IS_OFDM_RATE(A) (((A&RATE_MASK)==TX_RATE_6M)||((A&RATE_MASK)==TX_RATE_12M)||\
                        ((A&RATE_MASK)==TX_RATE_24M)||((A&RATE_MASK)==TX_RATE_9M)||\
                        ((A&RATE_MASK)==TX_RATE_18M)||((A&RATE_MASK)==TX_RATE_36M)||\
                        ((A&RATE_MASK)==TX_RATE_48M)||((A&RATE_MASK)==TX_RATE_54M))

#define IS_11BG_RATE(A) (IS_11B_RATE(A)||IS_OFDM_RATE(A))

#define IS_OFDM_EXT_RATE(A)  (((A&RATE_MASK)==TX_RATE_9M)||((A&RATE_MASK)==TX_RATE_18M)||\
                             ((A&RATE_MASK)==TX_RATE_36M)||((A&RATE_MASK)==TX_RATE_48M)||\
                             ((A&RATE_MASK)==TX_RATE_54M))

enum {
	CONNECT_STATUS = 0,
	DISCONNECT_STATUS
};

/* preamble type */
enum {
	LONG_PREAMBLE = 0,
	SHORT_PREAMBLE
};

/* multicast filter */
#define MCAST_FILTER_MCAST    0
#define MCAST_FILTER_MCASTALL 1
#define MCAST_FILTER_PROMISC  2

#define NIC_MAX_MCAST_LIST 32

/* macro function */
#define HIF_EVENT_MASK 0xE800
#define IS_HIF_IND(_EVENT)  ((_EVENT&HIF_EVENT_MASK)==0xE800  && \
                             ((_EVENT&~HIF_EVENT_MASK)==0x0001 || \
                              (_EVENT&~HIF_EVENT_MASK)==0x0006 || \
                              (_EVENT&~HIF_EVENT_MASK)==0x000C || \
                              (_EVENT&~HIF_EVENT_MASK)==0x0011 || \
                              (_EVENT&~HIF_EVENT_MASK)==0x0012))

#define IS_HIF_CONF(_EVENT) ((_EVENT&HIF_EVENT_MASK)==0xE800  && \
                             (_EVENT&~HIF_EVENT_MASK)>0x0000  && \
                             (_EVENT&~HIF_EVENT_MASK)<0x0012  && \
                             !IS_HIF_IND(_EVENT) )

#ifdef __KERNEL__

#include "ks_wlan.h"

/* function prototype */
extern int hostif_data_request(struct ks_wlan_private *priv,
			       struct sk_buff *packet);
extern void hostif_receive(struct ks_wlan_private *priv, unsigned char *p,
			   unsigned int size);
extern void hostif_sme_enqueue(struct ks_wlan_private *priv, uint16_t event);
extern int hostif_init(struct ks_wlan_private *priv);
extern void hostif_exit(struct ks_wlan_private *priv);

static
inline int hif_align_size(int size)
{
#ifdef	KS_ATOM
	if (size < 1024)
		size = 1024;
#endif
#ifdef	DEVICE_ALIGNMENT
	return (size % DEVICE_ALIGNMENT) ? size + DEVICE_ALIGNMENT -
	    (size % DEVICE_ALIGNMENT) : size;
#else
	return size;
#endif
}

#endif /* __KERNEL__ */

#endif /* _KS_HOSTIF_H_ */
