/** @file mlanoffload.h * * @brief This files contains mlanutl offload command handling. * * Copyright (C) 2008-2019, Marvell International Ltd. * * This software file (the "File") is distributed by Marvell International * Ltd. under the terms of the GNU General Public License Version 2, June 1991 * (the "License"). You may use, redistribute and/or modify this File in * accordance with the terms and conditions of the License, a copy of which * is available by writing to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE * ARE EXPRESSLY DISCLAIMED. The License provides additional details about * this warranty disclaimer. * */ /************************************************************************ Change log: 08/11/2009: initial version ************************************************************************/ #ifndef _MLANOFFLOAD_H_ #define _MLANOFFLOAD_H_ #ifndef MAX /** Find maximum value */ #define MAX(a, b) ((a) > (b) ? (a) : (b)) #endif /* MAX */ /** Key length */ #define KEY_LEN 32 /** Phrase length */ #define PHRASE_LEN 32 /** WEP Key count */ #define WEP_KEY_CNT 4 /* Bitmap for OFFLoad Enable - Feature*/ #ifdef BIG_ENDIAN_SUPPORT /** Roaming Feature */ #define PROFILE_DB_FEATURE_ROAMING 0x8000 /** CCX Feature */ #define PROFILE_DB_FEATURE_CCX 0x4000 /** UNUSED Feature */ #define PROFILE_DB_FEATURE_UNUSED 0x2000 /** adhoc/infra mode */ #define PROFILE_DB_FEATURE_MODE 0x1000 #else /** Roaming Feature */ #define PROFILE_DB_FEATURE_ROAMING 0x0001 /** CCX Feature */ #define PROFILE_DB_FEATURE_CCX 0x0002 /** UNUSED Feature */ #define PROFILE_DB_FEATURE_UNUSED 0x0004 /** adhoc/infra mode */ #define PROFILE_DB_FEATURE_MODE 0x0008 #endif /* Bitmap for profile AKMP Support */ #ifdef BIG_ENDIAN_SUPPORT /** Key Management EAP */ #define PROFILE_DB_KEY_MGMT_IEEE8021X 0x8000 /** Key Management PSK */ #define PROFILE_DB_KEY_MGMT_PSK 0x4000 /** Key Management NONE */ #define PROFILE_DB_KEY_MGMT_NONE 0x2000 /** Key Management CCKM */ #define PROFILE_DB_KEY_MGMT_CCKM 0x1000 /** Key Management UNUSED */ #define PROFILE_DB_KEY_MGMT_UNUSED 0x0800 /** Key Management FT 802.1x */ #define PROFILE_DB_KEY_MGMT_FT_IEEE8021X 0x0400 /** Key Management FT PSK */ #define PROFILE_DB_KEY_MGMT_FT_PSK 0x0200 /** Key Management SHA256 802.1x */ #define PROFILE_DB_KEY_MGMT_SHA256_IEEE8021X 0x0100 /** Key Management SHA256 PSK*/ #define PROFILE_DB_KEY_MGMT_SHA256_PSK 0x0080 #else /** Key Management EAP */ #define PROFILE_DB_KEY_MGMT_IEEE8021X 0x0001 /** Key Management PSK */ #define PROFILE_DB_KEY_MGMT_PSK 0x0002 /** Key Management NONE */ #define PROFILE_DB_KEY_MGMT_NONE 0x0004 /** Key Management CCKM */ #define PROFILE_DB_KEY_MGMT_CCKM 0x0008 /** Key Management UNUSED */ #define PROFILE_DB_KEY_MGMT_UNUSED 0x0010 /** Key Management FT 802.1x */ #define PROFILE_DB_KEY_MGMT_FT_IEEE8021X 0x0020 /** Key Management FT PSK */ #define PROFILE_DB_KEY_MGMT_FT_PSK 0x0040 /** Key Management SHA256 802.1x */ #define PROFILE_DB_KEY_MGMT_SHA256_IEEE8021X 0x0080 /** Key Management SHA256 PSK*/ #define PROFILE_DB_KEY_MGMT_SHA256_PSK 0x0100 #endif /* Bitmap for profile Encryption protocol support */ #ifdef BIG_ENDIAN_SUPPORT /** Encryption protocol noRsn */ #define PROFILE_DB_PROTO_NO_RSN 0x8000 /** Encryption protocol static wep */ #define PROFILE_DB_PROTO_WEP_STATIC 0x4000 /** Encryption protocol dynamic wep */ #define PROFILE_DB_PROTO_WEP_DYNAMIC 0x2000 /** Encryption protocol WPA */ #define PROFILE_DB_PROTO_WPA 0x1000 /** Encryption protocol WPA-none * Ad-hoc Networks */ #define PROFILE_DB_PROTO_WPA_NONE 0x0800 /** Encryption protocol WPA2 */ #define PROFILE_DB_PROTO_WPA2 0x0400 /** Encryption protocol CCKM */ #define PROFILE_DB_PROTO_CCKM 0x0200 #else /** Encryption protocol noRsn */ #define PROFILE_DB_PROTO_NO_RSN 0x0001 /** Encryption protocol static wep */ #define PROFILE_DB_PROTO_WEP_STATIC 0x0002 /** Encryption protocol dynamic wep */ #define PROFILE_DB_PROTO_WEP_DYNAMIC 0x0004 /** Encryption protocol WPA */ #define PROFILE_DB_PROTO_WPA 0x0008 /** Encryption protocol WPA-none * Ad-hoc Networks */ #define PROFILE_DB_PROTO_WPA_NONE 0x0010 /** Encryption protocol WPA2 */ #define PROFILE_DB_PROTO_WPA2 0x0020 /** Encryption protocol CCKM */ #define PROFILE_DB_PROTO_CCKM 0x0040 #endif #ifdef BIG_ENDIAN_SUPPORT /** Cipher wep40 */ #define PROFILE_DB_CIPHER_WEP40 0x80 /** Cipher wep104 */ #define PROFILE_DB_CIPHER_WEP104 0x40 /** Cipher tkip */ #define PROFILE_DB_CIPHER_TKIP 0x20 /** Cipher ccmp */ #define PROFILE_DB_CIPHER_CCMP 0x10 #else /** Cipher wep40 */ #define PROFILE_DB_CIPHER_WEP40 0x01 /** Cipher wep104 */ #define PROFILE_DB_CIPHER_WEP104 0x02 /** Cipher tkip */ #define PROFILE_DB_CIPHER_TKIP 0x04 /** Cipher ccmp */ #define PROFILE_DB_CIPHER_CCMP 0x08 #endif typedef struct { /** Header */ MrvlIEtypesHeader_t header; t_u32 mode; /**< Mode */ t_u32 max_off_channel; /**< Maximum off-channel measurement duration (ms) */ t_u32 max_on_channel; /**< Maximum on-channel measurement duration (ms) */ } __ATTRIB_PACK__ MrvlIETypes_MeasTiming_t; typedef struct { /** Action Set or get */ t_u16 action; /** TLV buffer starts here */ t_u8 tlv_buffer[1]; /* * MrvlIETypes_MeasTiming_t */ } __ATTRIB_PACK__ HostCmd_DS_MEASUREMENT_Timing; /** helper structure for profile parsing */ typedef struct { /** SSID name string */ t_u8 ssid[IW_ESSID_MAX_SIZE + 1]; /** SSID len */ t_u32 ssid_len; /** BSSID network name */ t_u8 bssid[ETH_ALEN]; /** passphrase configured */ t_s8 passphrase[PHRASE_LEN]; /** passphrase length */ t_u32 passphrase_len; /** Pre-shared key config flag */ int psk_config; /** Pre-shared key */ t_u8 psk[KEY_LEN]; /** wep keys */ t_u8 wep_key[WEP_KEY_CNT][KEY_LEN]; /** wep keys lengths */ t_u8 wep_key_len[WEP_KEY_CNT]; /** wep key index */ int wep_key_idx; /** protocol fields */ t_u16 protocol; /** pairwise Cipher values */ t_u8 pairwise_cipher; /** Group Cipher values */ t_u8 groupwise_cipher; /** key management */ t_u16 key_mgmt; /** offload specific parameter(roaming) */ t_u16 roaming; /** offload specific parameter */ t_u16 reserved; /** offload specific parameter--ccx */ t_u16 ccx; /** offload specific parameter--mode */ t_u16 mode; } profile_entry_t; typedef struct { #ifdef BIG_ENDIAN_SUPPORT /** Reserved */ t_u8 Reserved:3; /** Channel not measured */ t_u8 Unmeasured:1; /** Radar detected */ t_u8 Radar:1; /** Unidentified signal received */ t_u8 Unidentified:1; /** OFDM Preamble received */ t_u8 OFDM_Preamble:1; /** BSS found */ t_u8 BSS:1; #else /** BSS found */ t_u8 BSS:1; /** OFDM Preamble received */ t_u8 OFDM_Preamble:1; /** Unidentified signal received */ t_u8 Unidentified:1; /** Radar detected */ t_u8 Radar:1; /** Channel not measured */ t_u8 Unmeasured:1; /** Reserved */ t_u8 Reserved:3; #endif } __ATTRIB_PACK__ IEEEtypes_DFS_Map_t; typedef struct { MrvlIEtypesHeader_t Header; /**< Header */ t_u8 scanReqId; /**< Scan request id assigned in table */ } __ATTRIB_PACK__ MrvlIEtypes_ChanRptBcn_t; typedef struct { MrvlIEtypesHeader_t Header; /**< Header */ IEEEtypes_DFS_Map_t map; /**< IEEE 802.11h basic meas report */ } __ATTRIB_PACK__ MrvlIEtypes_ChanRpt11hBasic_t; typedef struct { MrvlIEtypesHeader_t Header; /**< Header */ t_u8 sourceAddr[ETH_ALEN]; /**< Source MAC */ t_u8 bssid[ETH_ALEN]; /**< BSSID MAC */ t_s16 rssi; /**< Avg RSSI of frames */ t_u16 frameCnt; /**< # of frames */ } __ATTRIB_PACK__ MrvlIEtypes_ChanRptFrame_t; typedef struct { t_u8 modGroup; t_u8 txPower; } __ATTRIB_PACK__ MrvlChanTrpcEntry_t; typedef struct { MrvlIEtypesHeader_t header; /**< Header */ MrvlChannelDesc_t chanDesc; MrvlChanTrpcEntry_t chanTrpcEntry[1]; } __ATTRIB_PACK__ MrvlIEtypes_ChanTrpcCfg_t; typedef struct { t_u16 action; /**< CMD Action Get/Set*/ t_u16 reserved; t_u8 tlv_buffer[1];/** MrvlIEtypes_ChanTrpcCfg_t TLVs */ } __ATTRIB_PACK__ HostCmd_DS_CHAN_TRPC_CONFIG; typedef struct { t_u8 controlSelect; t_u8 controlBitmap[1]; /* Variable length # of byte bitmaps */ } __ATTRIB_PACK__ HostCmd_DS_OFFLOAD_FEATURE_CONTROL; #define IAPP_DATA_MAX 1000 /** * @brief Enumeration for the command result from an IAPP Proxy command */ typedef enum { IAPP_PROXY_RESULT_SUCCESS = 0, IAPP_PROXY_RESULT_EXEC_FAILURE = 1, IAPP_PROXY_RESULT_TIMEOUT = 2, IAPP_PROXY_RESULT_DATA_INVALID = 3, } __ATTRIB_PACK__ mlan_iapp_proxy_result_e; typedef struct { mlan_iapp_proxy_result_e commandResult; /**< Firmware execution result */ t_u32 timeout_ms; /**< Timeout value in milliseconds */ t_u8 iappType; t_u8 iappSubType; t_u32 iappDataLen; t_u8 iappData[IAPP_DATA_MAX]; } __ATTRIB_PACK__ HostCmd_DS_IAPP_PROXY; typedef struct { /** Action: GET/SET */ t_u16 Action; /** Reserved */ t_u16 Reserved; /** Association timeout */ t_u32 AssocTimeout; /** Reassociation timeout */ t_u32 ReassocTimeout; /** Hand shake timeout */ t_u32 HandShakeTimeout; /** Frame exchange timeout */ t_u32 FrameExchangeTimeout; /** Deauth of old AP in millisec; 0 to disable */ t_u32 PriorApDeauthDelay; /** Maximum time after a disconnect where a reassoc frame will be sent */ t_u32 ReassocDiscMax; } __ATTRIB_PACK__ HostCmd_DS_AssociationTiming_t; /** 16 bit unsigned integer */ typedef t_u16 IEEEtypes_AId_t; /** 16 bit unsigned integer */ typedef t_u16 IEEEtypes_StatusCode_t; typedef struct { /** Capability information */ IEEEtypes_CapInfo_t Capability; /** Association response status code */ IEEEtypes_StatusCode_t StatusCode; /** Association ID */ IEEEtypes_AId_t AId; /** IE data buffer */ t_u8 IEBuffer[1]; } __ATTRIB_PACK__ IEEEtypes_AssocRsp_t; /** Maximum number of AC QOS queues available in the driver/firmware */ #define MAX_AC_QUEUES 4 /** timing select structure */ typedef struct { char *str; /**< Timing mode string */ int match_len; /**< match length */ t_u8 sel; /**< flag */ } timing_sel_t; /** ENUM definition: reg_chan_table */ typedef enum { REGTABLE_DEFAULT = 0, REGTABLE_ESS = 1, REGTABLE_USER = 2, REGTABLE_MULTIDOMAIN = 3, REGTABLE_MAX = 0xFFFF, } reg_chan_table_e; /** Sub-command callback */ typedef int (*sub_cmd_callback_t) (int argc, char *argv[]); /** Sub-command execution data */ typedef struct { char *str; /**< Command string */ int match_len; /**< Length */ int display; /**< display as valid cmd */ sub_cmd_callback_t callback; /**< Sub-command callback */ } sub_cmd_exec_t; /** HostCmd_CMD_802_11_RF_TX_POWER */ typedef struct { t_u16 action; t_s16 current_level; t_s8 max_power; t_s8 min_power; } __ATTRIB_PACK__ HostCmd_DS_802_11_RF_TX_POWER; /** HostCmd_CMD_802_11_AUTHENTICATE */ typedef struct { /** MAC address */ t_u8 MacAddr[ETH_ALEN]; /** Authentication type */ t_u8 AuthType; } __ATTRIB_PACK__ HostCmd_DS_802_11_AUTHENTICATE; boolean reg_class_table_select(char *tableStr, reg_chan_table_e *pTable); int process_sub_cmd(sub_cmd_exec_t *sub_cmd, int num_sub_cmds, int argc, char *argv[]); int process_regclass(int argc, char *argv[]); int process_scanagent(int argc, char *argv[]); int process_measurement(int argc, char *argv[]); int process_profile_entry(int argc, char *argv[]); int process_get_ra_config(int argc, char *argv[]); int process_set_ra_config(int argc, char *argv[]); int process_chanrpt(int argc, char *argv[]); int process_assoc_timing(int argc, char *argv[]); int process_get_assocrsp(int argc, char *argv[]); int process_link_stats(int argc, char *argv[]); int process_opchan(int argc, char *argv[]); int process_changroup(int argc, char *argv[]); int process_fcontrol(int argc, char *argv[]); int process_iapp(int argc, char *argv[]); int process_rf_tx_power(int argc, char *argv[]); int process_authenticate(int argc, char *argv[]); int process_txpowdisp(int argc, char *argv[]); #endif /* _MLANOFFLOAD_H_ */