diff options
Diffstat (limited to 'drivers/staging/ks7010/ks_hostif.h')
-rw-r--r-- | drivers/staging/ks7010/ks_hostif.h | 617 |
1 files changed, 617 insertions, 0 deletions
diff --git a/drivers/staging/ks7010/ks_hostif.h b/drivers/staging/ks7010/ks_hostif.h new file mode 100644 index 0000000000..c62a494ed6 --- /dev/null +++ b/drivers/staging/ks7010/ks_hostif.h @@ -0,0 +1,617 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Driver for KeyStream wireless LAN + * + * Copyright (c) 2005-2008 KeyStream Corp. + * Copyright (C) 2009 Renesas Technology Corp. + */ + +#ifndef _KS_HOSTIF_H_ +#define _KS_HOSTIF_H_ + +#include <linux/compiler.h> +#include <linux/ieee80211.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_POWER_MGMT_REQ 0xE004 +#define HIF_POWER_MGMT_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 alignment Little Endian + */ + +struct hostif_hdr { + __le16 size; + __le16 event; +} __packed; + +struct hostif_data_request { + struct hostif_hdr header; + __le16 auth_type; +#define TYPE_DATA 0x0000 +#define TYPE_AUTH 0x0001 + __le16 reserved; + u8 data[]; +} __packed; + +#define TYPE_PMK1 0x0001 +#define TYPE_GMK1 0x0002 +#define TYPE_GMK2 0x0003 + +#define CHANNEL_LIST_MAX_SIZE 14 +struct channel_list { + u8 size; + u8 body[CHANNEL_LIST_MAX_SIZE]; + u8 pad; +} __packed; + +/** + * enum mib_attribute - Management Information Base attribute + * Attribute value used for accessing and updating MIB + * + * @DOT11_MAC_ADDRESS: MAC Address (R) + * @DOT11_PRODUCT_VERSION: FirmWare Version (R) + * @DOT11_RTS_THRESHOLD: RTS Threshold (R/W) + * @DOT11_FRAGMENTATION_THRESHOLD: Fragment Threshold (R/W) + * @DOT11_PRIVACY_INVOKED: WEP ON/OFF (W) + * @DOT11_WEP_DEFAULT_KEY_ID: WEP Index (W) + * @DOT11_WEP_DEFAULT_KEY_VALUE1: WEP Key#1(TKIP AES: PairwiseTemporalKey) (W) + * @DOT11_WEP_DEFAULT_KEY_VALUE2: WEP Key#2(TKIP AES: GroupKey1) (W) + * @DOT11_WEP_DEFAULT_KEY_VALUE3: WEP Key#3(TKIP AES: GroupKey2) (W) + * @DOT11_WEP_DEFAULT_KEY_VALUE4: WEP Key#4 (W) + * @DOT11_WEP_LIST: WEP LIST + * @DOT11_DESIRED_SSID: SSID + * @DOT11_CURRENT_CHANNEL: channel set + * @DOT11_OPERATION_RATE_SET: rate set + * @LOCAL_AP_SEARCH_INTERVAL: AP search interval (R/W) + * @LOCAL_CURRENTADDRESS: MAC Address change (W) + * @LOCAL_MULTICAST_ADDRESS: Multicast Address (W) + * @LOCAL_MULTICAST_FILTER: Multicast Address Filter enable/disable (W) + * @LOCAL_SEARCHED_AP_LIST: AP list (R) + * @LOCAL_LINK_AP_STATUS: Link AP status (R) + * @LOCAL_PACKET_STATISTICS: tx,rx packets statistics + * @LOCAL_AP_SCAN_LIST_TYPE_SET: AP_SCAN_LIST_TYPE + * @DOT11_RSN_ENABLED: WPA enable/disable (W) + * @LOCAL_RSN_MODE: RSN mode WPA/WPA2 (W) + * @DOT11_RSN_CONFIG_MULTICAST_CIPHER: GroupKeyCipherSuite (W) + * @DOT11_RSN_CONFIG_UNICAST_CIPHER: PairwiseKeyCipherSuite (W) + * @DOT11_RSN_CONFIG_AUTH_SUITE: AuthenticationKeyManagementSuite (W) + * @DOT11_RSN_CONFIG_VERSION: RSN version (W) + * @LOCAL_RSN_CONFIG_ALL: RSN CONFIG ALL (W) + * @DOT11_PMK_TSC: PMK_TSC (W) + * @DOT11_GMK1_TSC: GMK1_TSC (W) + * @DOT11_GMK2_TSC: GMK2_TSC (W) + * @DOT11_GMK3_TSC: GMK3_TSC + * @LOCAL_PMK: Pairwise Master Key cache (W) + * @LOCAL_REGION: Region setting + * @LOCAL_WPS_ENABLE: WiFi Protected Setup + * @LOCAL_WPS_PROBE_REQ: WPS Probe Request + * @LOCAL_GAIN: Carrer sense threshold for demo ato show + * @LOCAL_EEPROM_SUM: EEPROM checksum information + */ +enum mib_attribute { + DOT11_MAC_ADDRESS = 0x21010100, + DOT11_PRODUCT_VERSION = 0x31024100, + DOT11_RTS_THRESHOLD = 0x21020100, + DOT11_FRAGMENTATION_THRESHOLD = 0x21050100, + DOT11_PRIVACY_INVOKED = 0x15010100, + DOT11_WEP_DEFAULT_KEY_ID = 0x15020100, + DOT11_WEP_DEFAULT_KEY_VALUE1 = 0x13020101, + DOT11_WEP_DEFAULT_KEY_VALUE2 = 0x13020102, + DOT11_WEP_DEFAULT_KEY_VALUE3 = 0x13020103, + DOT11_WEP_DEFAULT_KEY_VALUE4 = 0x13020104, + DOT11_WEP_LIST = 0x13020100, + DOT11_DESIRED_SSID = 0x11090100, + DOT11_CURRENT_CHANNEL = 0x45010100, + DOT11_OPERATION_RATE_SET = 0x11110100, + LOCAL_AP_SEARCH_INTERVAL = 0xF1010100, + LOCAL_CURRENTADDRESS = 0xF1050100, + LOCAL_MULTICAST_ADDRESS = 0xF1060100, + LOCAL_MULTICAST_FILTER = 0xF1060200, + LOCAL_SEARCHED_AP_LIST = 0xF1030100, + LOCAL_LINK_AP_STATUS = 0xF1040100, + LOCAL_PACKET_STATISTICS = 0xF1020100, + LOCAL_AP_SCAN_LIST_TYPE_SET = 0xF1030200, + DOT11_RSN_ENABLED = 0x15070100, + LOCAL_RSN_MODE = 0x56010100, + DOT11_RSN_CONFIG_MULTICAST_CIPHER = 0x51040100, + DOT11_RSN_CONFIG_UNICAST_CIPHER = 0x52020100, + DOT11_RSN_CONFIG_AUTH_SUITE = 0x53020100, + DOT11_RSN_CONFIG_VERSION = 0x51020100, + LOCAL_RSN_CONFIG_ALL = 0x5F010100, + DOT11_PMK_TSC = 0x55010100, + DOT11_GMK1_TSC = 0x55010101, + DOT11_GMK2_TSC = 0x55010102, + DOT11_GMK3_TSC = 0x55010103, + LOCAL_PMK = 0x58010100, + LOCAL_REGION = 0xF10A0100, + LOCAL_WPS_ENABLE = 0xF10B0100, + LOCAL_WPS_PROBE_REQ = 0xF10C0100, + LOCAL_GAIN = 0xF10D0100, + LOCAL_EEPROM_SUM = 0xF10E0100 +}; + +struct hostif_mib_get_request { + struct hostif_hdr header; + __le32 mib_attribute; +} __packed; + +/** + * enum mib_data_type - Message Information Base data type. + * @MIB_VALUE_TYPE_NULL: NULL type + * @MIB_VALUE_TYPE_INT: INTEGER type + * @MIB_VALUE_TYPE_BOOL: BOOL type + * @MIB_VALUE_TYPE_COUNT32: unused + * @MIB_VALUE_TYPE_OSTRING: Chunk of memory + */ +enum mib_data_type { + MIB_VALUE_TYPE_NULL = 0, + MIB_VALUE_TYPE_INT, + MIB_VALUE_TYPE_BOOL, + MIB_VALUE_TYPE_COUNT32, + MIB_VALUE_TYPE_OSTRING +}; + +struct hostif_mib_value { + __le16 size; + __le16 type; + u8 body[]; +} __packed; + +struct hostif_mib_get_confirm_t { + struct hostif_hdr header; + __le32 mib_status; +#define MIB_SUCCESS 0 +#define MIB_INVALID 1 +#define MIB_READ_ONLY 2 +#define MIB_WRITE_ONLY 3 + __le32 mib_attribute; + struct hostif_mib_value mib_value; +} __packed; + +struct hostif_mib_set_request_t { + struct hostif_hdr header; + __le32 mib_attribute; + struct hostif_mib_value mib_value; +} __packed; + +struct hostif_power_mgmt_request { + struct hostif_hdr header; + __le32 mode; +#define POWER_ACTIVE 1 +#define POWER_SAVE 2 + __le32 wake_up; +#define SLEEP_FALSE 0 +#define SLEEP_TRUE 1 /* not used */ + __le32 receive_dtims; +#define DTIM_FALSE 0 +#define DTIM_TRUE 1 +} __packed; + +enum power_mgmt_mode_type { + POWER_MGMT_ACTIVE, + POWER_MGMT_SAVE1, + POWER_MGMT_SAVE2 +}; + +#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_start_request { + struct hostif_hdr header; + __le16 mode; +#define MODE_PSEUDO_ADHOC 0 +#define MODE_INFRASTRUCTURE 1 +#define MODE_AP 2 /* not used */ +#define MODE_ADHOC 3 +} __packed; + +struct ssid { + u8 size; + u8 body[IEEE80211_MAX_SSID_LEN]; + u8 ssid_pad; +} __packed; + +#define RATE_SET_MAX_SIZE 16 +struct rate_set8 { + u8 size; + u8 body[8]; + u8 rate_pad; +} __packed; + +struct fh_parms { + __le16 dwell_time; + u8 hop_set; + u8 hop_pattern; + u8 hop_index; +} __packed; + +struct ds_parms { + u8 channel; +} __packed; + +struct cf_parms { + u8 count; + u8 period; + __le16 max_duration; + __le16 dur_remaining; +} __packed; + +struct ibss_parms { + __le16 atim_window; +} __packed; + +struct rsn_t { + u8 size; +#define RSN_BODY_SIZE 64 + u8 body[RSN_BODY_SIZE]; +} __packed; + +struct erp_params_t { + u8 erp_info; +} __packed; + +struct rate_set16 { + u8 size; + u8 body[16]; + u8 rate_pad; +} __packed; + +struct ap_info { + u8 bssid[6]; /* +00 */ + u8 rssi; /* +06 */ + u8 sq; /* +07 */ + u8 noise; /* +08 */ + u8 pad0; /* +09 */ + __le16 beacon_period; /* +10 */ + __le16 capability; /* +12 */ + u8 frame_type; /* +14 */ + u8 ch_info; /* +15 */ + __le16 body_size; /* +16 */ + u8 body[1024]; /* +18 */ + /* +1032 */ +} __packed; + +struct link_ap_info { + u8 bssid[6]; /* +00 */ + u8 rssi; /* +06 */ + u8 sq; /* +07 */ + u8 noise; /* +08 */ + u8 pad0; /* +09 */ + __le16 beacon_period; /* +10 */ + __le16 capability; /* +12 */ + struct rate_set8 rate_set; /* +14 */ + struct fh_parms fh_parameter; /* +24 */ + struct ds_parms ds_parameter; /* +29 */ + struct cf_parms cf_parameter; /* +30 */ + struct ibss_parms ibss_parameter; /* +36 */ + struct erp_params_t erp_parameter; /* +38 */ + u8 pad1; /* +39 */ + struct rate_set8 ext_rate_set; /* +40 */ + u8 DTIM_period; /* +50 */ + u8 rsn_mode; /* +51 */ +#define RSN_MODE_NONE 0 +#define RSN_MODE_WPA 1 +#define RSN_MODE_WPA2 2 + struct { + u8 size; /* +52 */ + u8 body[128]; /* +53 */ + } __packed rsn; +} __packed; + +#define RESULT_CONNECT 0 +#define RESULT_DISCONNECT 1 + +struct hostif_stop_request { + struct hostif_hdr header; +} __packed; + +#define D_11B_ONLY_MODE 0 +#define D_11G_ONLY_MODE 1 +#define D_11BG_COMPATIBLE_MODE 2 +#define D_11A_ONLY_MODE 3 + +#define CTS_MODE_FALSE 0 +#define CTS_MODE_TRUE 1 + +struct hostif_request { + __le16 phy_type; + __le16 cts_mode; + __le16 scan_type; + __le16 capability; + struct rate_set16 rate_set; +} __packed; + +/** + * struct hostif_ps_adhoc_set_request - pseudo adhoc mode + * @capability: bit5 : preamble + * bit6 : pbcc - Not supported always 0 + * bit10 : ShortSlotTime + * bit13 : DSSS-OFDM - Not supported always 0 + */ +struct hostif_ps_adhoc_set_request { + struct hostif_hdr header; + struct hostif_request request; + __le16 channel; +} __packed; + +#define AUTH_TYPE_OPEN_SYSTEM 0 +#define AUTH_TYPE_SHARED_KEY 1 + +/** + * struct hostif_infrastructure_set_request + * @capability: bit5 : preamble + * bit6 : pbcc - Not supported always 0 + * bit10 : ShortSlotTime + * bit13 : DSSS-OFDM - Not supported always 0 + */ +struct hostif_infrastructure_set_request { + struct hostif_hdr header; + struct hostif_request request; + struct ssid ssid; + __le16 beacon_lost_count; + __le16 auth_type; + struct channel_list channel_list; + u8 bssid[ETH_ALEN]; +} __packed; + +/** + * struct hostif_adhoc_set_request + * @capability: bit5 : preamble + * bit6 : pbcc - Not supported always 0 + * bit10 : ShortSlotTime + * bit13 : DSSS-OFDM - Not supported always 0 + */ +struct hostif_adhoc_set_request { + struct hostif_hdr header; + struct hostif_request request; + struct ssid ssid; + __le16 channel; +} __packed; + +/** + * struct hostif_adhoc_set2_request + * @capability: bit5 : preamble + * bit6 : pbcc - Not supported always 0 + * bit10 : ShortSlotTime + * bit13 : DSSS-OFDM - Not supported always 0 + */ +struct hostif_adhoc_set2_request { + struct hostif_hdr header; + struct hostif_request request; + __le16 reserved; + struct ssid ssid; + struct channel_list channel_list; + u8 bssid[ETH_ALEN]; +} __packed; + +struct association_request { + u8 type; + u8 pad; + __le16 capability; + __le16 listen_interval; + u8 ap_address[6]; + __le16 req_ies_size; +} __packed; + +struct association_response { + u8 type; + u8 pad; + __le16 capability; + __le16 status; + __le16 association_id; + __le16 resp_ies_size; +} __packed; + +struct hostif_bss_scan_request { + struct hostif_hdr header; + u8 scan_type; +#define ACTIVE_SCAN 0 +#define PASSIVE_SCAN 1 + u8 pad[3]; + __le32 ch_time_min; + __le32 ch_time_max; + struct channel_list channel_list; + struct ssid ssid; +} __packed; + +struct hostif_phy_information_request { + struct hostif_hdr header; + __le16 type; +#define NORMAL_TYPE 0 +#define TIME_TYPE 1 + __le16 time; /* unit 100ms */ +} __packed; + +enum sleep_mode_type { + SLP_ACTIVE, + SLP_SLEEP +}; + +struct hostif_sleep_request { + struct hostif_hdr header; +} __packed; + +struct hostif_mic_failure_request { + struct hostif_hdr header; + __le16 failure_count; + __le16 timer; +} __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 ((u8)(10 / 5)) /* 11b 11g basic rate */ +#define TX_RATE_2M ((u8)(20 / 5)) /* 11b 11g basic rate */ +#define TX_RATE_5M ((u8)(55 / 5)) /* 11g basic rate */ +#define TX_RATE_11M ((u8)(110 / 5)) /* 11g basic rate */ + +/* 11g rate */ +#define TX_RATE_6M ((u8)(60 / 5)) /* 11g basic rate */ +#define TX_RATE_12M ((u8)(120 / 5)) /* 11g basic rate */ +#define TX_RATE_24M ((u8)(240 / 5)) /* 11g basic rate */ +#define TX_RATE_9M ((u8)(90 / 5)) +#define TX_RATE_18M ((u8)(180 / 5)) +#define TX_RATE_36M ((u8)(360 / 5)) +#define TX_RATE_48M ((u8)(480 / 5)) +#define TX_RATE_54M ((u8)(540 / 5)) + +static inline bool is_11b_rate(u8 rate) +{ + return (((rate & RATE_MASK) == TX_RATE_1M) || + ((rate & RATE_MASK) == TX_RATE_2M) || + ((rate & RATE_MASK) == TX_RATE_5M) || + ((rate & RATE_MASK) == TX_RATE_11M)); +} + +static inline bool is_ofdm_rate(u8 rate) +{ + return (((rate & RATE_MASK) == TX_RATE_6M) || + ((rate & RATE_MASK) == TX_RATE_12M) || + ((rate & RATE_MASK) == TX_RATE_24M) || + ((rate & RATE_MASK) == TX_RATE_9M) || + ((rate & RATE_MASK) == TX_RATE_18M) || + ((rate & RATE_MASK) == TX_RATE_36M) || + ((rate & RATE_MASK) == TX_RATE_48M) || + ((rate & RATE_MASK) == TX_RATE_54M)); +} + +static inline bool is_11bg_rate(u8 rate) +{ + return (is_11b_rate(rate) || is_ofdm_rate(rate)); +} + +static inline bool is_ofdm_ext_rate(u8 rate) +{ + return (((rate & RATE_MASK) == TX_RATE_9M) || + ((rate & RATE_MASK) == TX_RATE_18M) || + ((rate & RATE_MASK) == TX_RATE_36M) || + ((rate & RATE_MASK) == TX_RATE_48M) || + ((rate & RATE_MASK) == TX_RATE_54M)); +} + +enum connect_status_type { + CONNECT_STATUS, + DISCONNECT_STATUS +}; + +enum preamble_type { + LONG_PREAMBLE, + SHORT_PREAMBLE +}; + +enum multicast_filter_type { + MCAST_FILTER_MCAST, + MCAST_FILTER_MCASTALL, + MCAST_FILTER_PROMISC, +}; + +#define NIC_MAX_MCAST_LIST 32 + +#define HIF_EVENT_MASK 0xE800 + +static inline bool is_hif_ind(unsigned short event) +{ + return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) && + (((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))); +} + +static inline bool is_hif_conf(unsigned short event) +{ + return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) && + ((event & ~HIF_EVENT_MASK) > 0x0000) && + ((event & ~HIF_EVENT_MASK) < 0x0012) && + !is_hif_ind(event)); +} + +#ifdef __KERNEL__ + +#include "ks_wlan.h" + +/* function prototype */ +int hostif_data_request(struct ks_wlan_private *priv, struct sk_buff *skb); +void hostif_receive(struct ks_wlan_private *priv, unsigned char *p, + unsigned int size); +void hostif_sme_enqueue(struct ks_wlan_private *priv, u16 event); +int hostif_init(struct ks_wlan_private *priv); +void hostif_exit(struct ks_wlan_private *priv); +int ks_wlan_hw_tx(struct ks_wlan_private *priv, void *p, unsigned long size, + void (*complete_handler)(struct ks_wlan_private *priv, + struct sk_buff *skb), + struct sk_buff *skb); +void send_packet_complete(struct ks_wlan_private *priv, struct sk_buff *skb); + +void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv); +int ks_wlan_hw_power_save(struct ks_wlan_private *priv); + +#define KS7010_SIZE_ALIGNMENT 32 + +static inline size_t hif_align_size(size_t size) +{ + return ALIGN(size, KS7010_SIZE_ALIGNMENT); +} + +#endif /* __KERNEL__ */ + +#endif /* _KS_HOSTIF_H_ */ |