1 /* 2 * Marvell Wireless LAN device driver: generic data structures and APIs 3 * 4 * Copyright (C) 2011-2014, Marvell International Ltd. 5 * 6 * This software file (the "File") is distributed by Marvell International 7 * Ltd. under the terms of the GNU General Public License Version 2, June 1991 8 * (the "License"). You may use, redistribute and/or modify this File in 9 * accordance with the terms and conditions of the License, a copy of which 10 * is available by writing to the Free Software Foundation, Inc., 11 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the 12 * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 13 * 14 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 16 * ARE EXPRESSLY DISCLAIMED. The License provides additional details about 17 * this warranty disclaimer. 18 */ 19 20 #ifndef _MWIFIEX_DECL_H_ 21 #define _MWIFIEX_DECL_H_ 22 23 #undef pr_fmt 24 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 25 26 #include <linux/wait.h> 27 #include <linux/timer.h> 28 #include <linux/ieee80211.h> 29 #include <uapi/linux/if_arp.h> 30 #include <net/mac80211.h> 31 32 33 #define MWIFIEX_MAX_BSS_NUM (3) 34 35 #define MWIFIEX_MIN_DATA_HEADER_LEN 36 /* sizeof(mwifiex_txpd) 36 * + 4 byte alignment 37 */ 38 #define MWIFIEX_MGMT_FRAME_HEADER_SIZE 8 /* sizeof(pkt_type) 39 * + sizeof(tx_control) 40 */ 41 42 #define MWIFIEX_MAX_TX_BASTREAM_SUPPORTED 2 43 #define MWIFIEX_MAX_RX_BASTREAM_SUPPORTED 16 44 45 #define MWIFIEX_STA_AMPDU_DEF_TXWINSIZE 64 46 #define MWIFIEX_STA_AMPDU_DEF_RXWINSIZE 64 47 #define MWIFIEX_UAP_AMPDU_DEF_TXWINSIZE 32 48 #define MWIFIEX_UAP_AMPDU_DEF_RXWINSIZE 16 49 #define MWIFIEX_11AC_STA_AMPDU_DEF_TXWINSIZE 64 50 #define MWIFIEX_11AC_STA_AMPDU_DEF_RXWINSIZE 64 51 #define MWIFIEX_11AC_UAP_AMPDU_DEF_TXWINSIZE 64 52 #define MWIFIEX_11AC_UAP_AMPDU_DEF_RXWINSIZE 64 53 54 #define MWIFIEX_DEFAULT_BLOCK_ACK_TIMEOUT 0xffff 55 56 #define MWIFIEX_RATE_BITMAP_MCS0 32 57 58 #define MWIFIEX_RX_DATA_BUF_SIZE (4 * 1024) 59 #define MWIFIEX_RX_CMD_BUF_SIZE (2 * 1024) 60 61 #define MAX_BEACON_PERIOD (4000) 62 #define MIN_BEACON_PERIOD (50) 63 #define MAX_DTIM_PERIOD (100) 64 #define MIN_DTIM_PERIOD (1) 65 66 #define MWIFIEX_RTS_MIN_VALUE (0) 67 #define MWIFIEX_RTS_MAX_VALUE (2347) 68 #define MWIFIEX_FRAG_MIN_VALUE (256) 69 #define MWIFIEX_FRAG_MAX_VALUE (2346) 70 #define MWIFIEX_WMM_VERSION 0x01 71 #define MWIFIEX_WMM_SUBTYPE 0x01 72 73 #define MWIFIEX_RETRY_LIMIT 14 74 #define MWIFIEX_SDIO_BLOCK_SIZE 256 75 76 #define MWIFIEX_BUF_FLAG_REQUEUED_PKT BIT(0) 77 #define MWIFIEX_BUF_FLAG_BRIDGED_PKT BIT(1) 78 #define MWIFIEX_BUF_FLAG_TDLS_PKT BIT(2) 79 80 #define MWIFIEX_BRIDGED_PKTS_THR_HIGH 1024 81 #define MWIFIEX_BRIDGED_PKTS_THR_LOW 128 82 83 #define MWIFIEX_TDLS_DISABLE_LINK 0x00 84 #define MWIFIEX_TDLS_ENABLE_LINK 0x01 85 #define MWIFIEX_TDLS_CREATE_LINK 0x02 86 #define MWIFIEX_TDLS_CONFIG_LINK 0x03 87 88 enum mwifiex_bss_type { 89 MWIFIEX_BSS_TYPE_STA = 0, 90 MWIFIEX_BSS_TYPE_UAP = 1, 91 MWIFIEX_BSS_TYPE_P2P = 2, 92 MWIFIEX_BSS_TYPE_ANY = 0xff, 93 }; 94 95 enum mwifiex_bss_role { 96 MWIFIEX_BSS_ROLE_STA = 0, 97 MWIFIEX_BSS_ROLE_UAP = 1, 98 MWIFIEX_BSS_ROLE_ANY = 0xff, 99 }; 100 101 enum mwifiex_tdls_status { 102 TDLS_NOT_SETUP = 0, 103 TDLS_SETUP_INPROGRESS, 104 TDLS_SETUP_COMPLETE, 105 TDLS_SETUP_FAILURE, 106 TDLS_LINK_TEARDOWN, 107 }; 108 109 enum mwifiex_tdls_error_code { 110 TDLS_ERR_NO_ERROR = 0, 111 TDLS_ERR_INTERNAL_ERROR, 112 TDLS_ERR_MAX_LINKS_EST, 113 TDLS_ERR_LINK_EXISTS, 114 TDLS_ERR_LINK_NONEXISTENT, 115 TDLS_ERR_PEER_STA_UNREACHABLE = 25, 116 }; 117 118 #define BSS_ROLE_BIT_MASK BIT(0) 119 120 #define GET_BSS_ROLE(priv) ((priv)->bss_role & BSS_ROLE_BIT_MASK) 121 122 enum mwifiex_data_frame_type { 123 MWIFIEX_DATA_FRAME_TYPE_ETH_II = 0, 124 MWIFIEX_DATA_FRAME_TYPE_802_11, 125 }; 126 127 struct mwifiex_fw_image { 128 u8 *helper_buf; 129 u32 helper_len; 130 u8 *fw_buf; 131 u32 fw_len; 132 }; 133 134 struct mwifiex_802_11_ssid { 135 u32 ssid_len; 136 u8 ssid[IEEE80211_MAX_SSID_LEN]; 137 }; 138 139 struct mwifiex_wait_queue { 140 wait_queue_head_t wait; 141 int status; 142 }; 143 144 struct mwifiex_rxinfo { 145 u8 bss_num; 146 u8 bss_type; 147 struct sk_buff *parent; 148 u8 use_count; 149 }; 150 151 struct mwifiex_txinfo { 152 u32 status_code; 153 u8 flags; 154 u8 bss_num; 155 u8 bss_type; 156 u32 pkt_len; 157 }; 158 159 enum mwifiex_wmm_ac_e { 160 WMM_AC_BK, 161 WMM_AC_BE, 162 WMM_AC_VI, 163 WMM_AC_VO 164 } __packed; 165 166 struct ieee_types_wmm_ac_parameters { 167 u8 aci_aifsn_bitmap; 168 u8 ecw_bitmap; 169 __le16 tx_op_limit; 170 } __packed; 171 172 struct mwifiex_types_wmm_info { 173 u8 oui[4]; 174 u8 subtype; 175 u8 version; 176 u8 qos_info; 177 u8 reserved; 178 struct ieee_types_wmm_ac_parameters ac_params[IEEE80211_NUM_ACS]; 179 } __packed; 180 181 struct mwifiex_arp_eth_header { 182 struct arphdr hdr; 183 u8 ar_sha[ETH_ALEN]; 184 u8 ar_sip[4]; 185 u8 ar_tha[ETH_ALEN]; 186 u8 ar_tip[4]; 187 } __packed; 188 #endif /* !_MWIFIEX_DECL_H_ */ 189