decl.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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. #ifndef _MWIFIEX_DECL_H_
  20. #define _MWIFIEX_DECL_H_
  21. #undef pr_fmt
  22. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  23. #include <linux/wait.h>
  24. #include <linux/timer.h>
  25. #include <linux/ieee80211.h>
  26. #include <uapi/linux/if_arp.h>
  27. #include <net/mac80211.h>
  28. #define MWIFIEX_BSS_COEX_COUNT 2
  29. #define MWIFIEX_MAX_BSS_NUM (3)
  30. #define MWIFIEX_DMA_ALIGN_SZ 64
  31. #define MWIFIEX_RX_HEADROOM 64
  32. #define MAX_TXPD_SZ 32
  33. #define INTF_HDR_ALIGN 4
  34. #define MWIFIEX_MIN_DATA_HEADER_LEN (MWIFIEX_DMA_ALIGN_SZ + INTF_HDR_ALIGN + \
  35. MAX_TXPD_SZ)
  36. #define MWIFIEX_MGMT_FRAME_HEADER_SIZE 8 /* sizeof(pkt_type)
  37. * + sizeof(tx_control)
  38. */
  39. #define MWIFIEX_MAX_TX_BASTREAM_SUPPORTED 2
  40. #define MWIFIEX_MAX_RX_BASTREAM_SUPPORTED 16
  41. #define MWIFIEX_MAX_TDLS_PEER_SUPPORTED 8
  42. #define MWIFIEX_STA_AMPDU_DEF_TXWINSIZE 64
  43. #define MWIFIEX_STA_AMPDU_DEF_RXWINSIZE 64
  44. #define MWIFIEX_STA_COEX_AMPDU_DEF_RXWINSIZE 16
  45. #define MWIFIEX_UAP_AMPDU_DEF_TXWINSIZE 32
  46. #define MWIFIEX_UAP_COEX_AMPDU_DEF_RXWINSIZE 16
  47. #define MWIFIEX_UAP_AMPDU_DEF_RXWINSIZE 16
  48. #define MWIFIEX_11AC_STA_AMPDU_DEF_TXWINSIZE 64
  49. #define MWIFIEX_11AC_STA_AMPDU_DEF_RXWINSIZE 64
  50. #define MWIFIEX_11AC_UAP_AMPDU_DEF_TXWINSIZE 64
  51. #define MWIFIEX_11AC_UAP_AMPDU_DEF_RXWINSIZE 64
  52. #define MWIFIEX_DEFAULT_BLOCK_ACK_TIMEOUT 0xffff
  53. #define MWIFIEX_RATE_BITMAP_MCS0 32
  54. #define MWIFIEX_RX_DATA_BUF_SIZE (4 * 1024)
  55. #define MWIFIEX_RX_CMD_BUF_SIZE (2 * 1024)
  56. #define MAX_BEACON_PERIOD (4000)
  57. #define MIN_BEACON_PERIOD (50)
  58. #define MAX_DTIM_PERIOD (100)
  59. #define MIN_DTIM_PERIOD (1)
  60. #define MWIFIEX_RTS_MIN_VALUE (0)
  61. #define MWIFIEX_RTS_MAX_VALUE (2347)
  62. #define MWIFIEX_FRAG_MIN_VALUE (256)
  63. #define MWIFIEX_FRAG_MAX_VALUE (2346)
  64. #define MWIFIEX_WMM_VERSION 0x01
  65. #define MWIFIEX_WMM_SUBTYPE 0x01
  66. #define MWIFIEX_RETRY_LIMIT 14
  67. #define MWIFIEX_SDIO_BLOCK_SIZE 256
  68. #define MWIFIEX_BUF_FLAG_REQUEUED_PKT BIT(0)
  69. #define MWIFIEX_BUF_FLAG_BRIDGED_PKT BIT(1)
  70. #define MWIFIEX_BUF_FLAG_TDLS_PKT BIT(2)
  71. #define MWIFIEX_BUF_FLAG_EAPOL_TX_STATUS BIT(3)
  72. #define MWIFIEX_BUF_FLAG_ACTION_TX_STATUS BIT(4)
  73. #define MWIFIEX_BUF_FLAG_AGGR_PKT BIT(5)
  74. #define MWIFIEX_BRIDGED_PKTS_THR_HIGH 1024
  75. #define MWIFIEX_BRIDGED_PKTS_THR_LOW 128
  76. #define MWIFIEX_TDLS_DISABLE_LINK 0x00
  77. #define MWIFIEX_TDLS_ENABLE_LINK 0x01
  78. #define MWIFIEX_TDLS_CREATE_LINK 0x02
  79. #define MWIFIEX_TDLS_CONFIG_LINK 0x03
  80. #define MWIFIEX_TDLS_RSSI_HIGH 50
  81. #define MWIFIEX_TDLS_RSSI_LOW 55
  82. #define MWIFIEX_TDLS_MAX_FAIL_COUNT 4
  83. #define MWIFIEX_AUTO_TDLS_IDLE_TIME 10
  84. /* 54M rates, index from 0 to 11 */
  85. #define MWIFIEX_RATE_INDEX_MCS0 12
  86. /* 12-27=MCS0-15(BW20) */
  87. #define MWIFIEX_BW20_MCS_NUM 15
  88. /* Rate index for OFDM 0 */
  89. #define MWIFIEX_RATE_INDEX_OFDM0 4
  90. #define MWIFIEX_MAX_STA_NUM 1
  91. #define MWIFIEX_MAX_UAP_NUM 1
  92. #define MWIFIEX_MAX_P2P_NUM 1
  93. #define MWIFIEX_A_BAND_START_FREQ 5000
  94. /* SDIO Aggr data packet special info */
  95. #define SDIO_MAX_AGGR_BUF_SIZE (256 * 255)
  96. #define BLOCK_NUMBER_OFFSET 15
  97. #define SDIO_HEADER_OFFSET 28
  98. enum mwifiex_bss_type {
  99. MWIFIEX_BSS_TYPE_STA = 0,
  100. MWIFIEX_BSS_TYPE_UAP = 1,
  101. MWIFIEX_BSS_TYPE_P2P = 2,
  102. MWIFIEX_BSS_TYPE_ANY = 0xff,
  103. };
  104. enum mwifiex_bss_role {
  105. MWIFIEX_BSS_ROLE_STA = 0,
  106. MWIFIEX_BSS_ROLE_UAP = 1,
  107. MWIFIEX_BSS_ROLE_ANY = 0xff,
  108. };
  109. enum mwifiex_tdls_status {
  110. TDLS_NOT_SETUP = 0,
  111. TDLS_SETUP_INPROGRESS,
  112. TDLS_SETUP_COMPLETE,
  113. TDLS_SETUP_FAILURE,
  114. TDLS_LINK_TEARDOWN,
  115. };
  116. enum mwifiex_tdls_error_code {
  117. TDLS_ERR_NO_ERROR = 0,
  118. TDLS_ERR_INTERNAL_ERROR,
  119. TDLS_ERR_MAX_LINKS_EST,
  120. TDLS_ERR_LINK_EXISTS,
  121. TDLS_ERR_LINK_NONEXISTENT,
  122. TDLS_ERR_PEER_STA_UNREACHABLE = 25,
  123. };
  124. #define BSS_ROLE_BIT_MASK BIT(0)
  125. #define GET_BSS_ROLE(priv) ((priv)->bss_role & BSS_ROLE_BIT_MASK)
  126. enum mwifiex_data_frame_type {
  127. MWIFIEX_DATA_FRAME_TYPE_ETH_II = 0,
  128. MWIFIEX_DATA_FRAME_TYPE_802_11,
  129. };
  130. struct mwifiex_fw_image {
  131. u8 *helper_buf;
  132. u32 helper_len;
  133. u8 *fw_buf;
  134. u32 fw_len;
  135. };
  136. struct mwifiex_802_11_ssid {
  137. u32 ssid_len;
  138. u8 ssid[IEEE80211_MAX_SSID_LEN];
  139. };
  140. struct mwifiex_wait_queue {
  141. wait_queue_head_t wait;
  142. int status;
  143. };
  144. struct mwifiex_rxinfo {
  145. struct sk_buff *parent;
  146. u8 bss_num;
  147. u8 bss_type;
  148. u8 use_count;
  149. u8 buf_type;
  150. };
  151. struct mwifiex_txinfo {
  152. u32 status_code;
  153. u8 flags;
  154. u8 bss_num;
  155. u8 bss_type;
  156. u8 aggr_num;
  157. u32 pkt_len;
  158. u8 ack_frame_id;
  159. u64 cookie;
  160. };
  161. enum mwifiex_wmm_ac_e {
  162. WMM_AC_BK,
  163. WMM_AC_BE,
  164. WMM_AC_VI,
  165. WMM_AC_VO
  166. } __packed;
  167. struct ieee_types_wmm_ac_parameters {
  168. u8 aci_aifsn_bitmap;
  169. u8 ecw_bitmap;
  170. __le16 tx_op_limit;
  171. } __packed;
  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. struct mwifiex_arp_eth_header {
  181. struct arphdr hdr;
  182. u8 ar_sha[ETH_ALEN];
  183. u8 ar_sip[4];
  184. u8 ar_tha[ETH_ALEN];
  185. u8 ar_tip[4];
  186. } __packed;
  187. struct mwifiex_chan_stats {
  188. u8 chan_num;
  189. u8 bandcfg;
  190. u8 flags;
  191. s8 noise;
  192. u16 total_bss;
  193. u16 cca_scan_dur;
  194. u16 cca_busy_dur;
  195. } __packed;
  196. #define MWIFIEX_HIST_MAX_SAMPLES 1048576
  197. #define MWIFIEX_MAX_RX_RATES 44
  198. #define MWIFIEX_MAX_AC_RX_RATES 74
  199. #define MWIFIEX_MAX_SNR 256
  200. #define MWIFIEX_MAX_NOISE_FLR 256
  201. #define MWIFIEX_MAX_SIG_STRENGTH 256
  202. struct mwifiex_histogram_data {
  203. atomic_t rx_rate[MWIFIEX_MAX_AC_RX_RATES];
  204. atomic_t snr[MWIFIEX_MAX_SNR];
  205. atomic_t noise_flr[MWIFIEX_MAX_NOISE_FLR];
  206. atomic_t sig_str[MWIFIEX_MAX_SIG_STRENGTH];
  207. atomic_t num_samples;
  208. };
  209. struct mwifiex_iface_comb {
  210. u8 sta_intf;
  211. u8 uap_intf;
  212. u8 p2p_intf;
  213. };
  214. struct mwifiex_radar_params {
  215. struct cfg80211_chan_def *chandef;
  216. u32 cac_time_ms;
  217. } __packed;
  218. struct mwifiex_11h_intf_state {
  219. bool is_11h_enabled;
  220. bool is_11h_active;
  221. } __packed;
  222. #endif /* !_MWIFIEX_DECL_H_ */