drv_types.h 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2017 Realtek Corporation.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of version 2 of the GNU General Public License as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. *
  14. *****************************************************************************/
  15. /*-------------------------------------------------------------------------------
  16. For type defines and data structure defines
  17. --------------------------------------------------------------------------------*/
  18. #ifndef __DRV_TYPES_H__
  19. #define __DRV_TYPES_H__
  20. #include <drv_conf.h>
  21. #include <basic_types.h>
  22. #include <osdep_service.h>
  23. #include <rtw_byteorder.h>
  24. #include <wlan_bssdef.h>
  25. #include <wifi.h>
  26. #include <ieee80211.h>
  27. #ifdef CONFIG_ARP_KEEP_ALIVE
  28. #include <net/neighbour.h>
  29. #include <net/arp.h>
  30. #endif
  31. #ifdef PLATFORM_OS_XP
  32. #include <drv_types_xp.h>
  33. #endif
  34. #ifdef PLATFORM_OS_CE
  35. #include <drv_types_ce.h>
  36. #endif
  37. #ifdef PLATFORM_LINUX
  38. #include <drv_types_linux.h>
  39. #endif
  40. enum _NIC_VERSION {
  41. RTL8711_NIC,
  42. RTL8712_NIC,
  43. RTL8713_NIC,
  44. RTL8716_NIC
  45. };
  46. typedef struct _ADAPTER _adapter, ADAPTER, *PADAPTER;
  47. #include <rtw_debug.h>
  48. #include <cmn_info/rtw_sta_info.h>
  49. #include <rtw_rf.h>
  50. #include "../core/rtw_chplan.h"
  51. #ifdef CONFIG_80211N_HT
  52. #include <rtw_ht.h>
  53. #endif
  54. #ifdef CONFIG_80211AC_VHT
  55. #include <rtw_vht.h>
  56. #endif
  57. #ifdef CONFIG_INTEL_WIDI
  58. #include <rtw_intel_widi.h>
  59. #endif
  60. #include <rtw_cmd.h>
  61. #include <cmd_osdep.h>
  62. #include <rtw_security.h>
  63. #include <rtw_xmit.h>
  64. #include <xmit_osdep.h>
  65. #include <rtw_recv.h>
  66. #include <rtw_rm.h>
  67. #ifdef CONFIG_BEAMFORMING
  68. #include <rtw_beamforming.h>
  69. #endif
  70. #include <recv_osdep.h>
  71. #include <rtw_efuse.h>
  72. #include <rtw_sreset.h>
  73. #include <hal_intf.h>
  74. #include <hal_com.h>
  75. #include<hal_com_h2c.h>
  76. #include <hal_com_led.h>
  77. #include "../hal/hal_dm.h"
  78. #include <rtw_qos.h>
  79. #include <rtw_pwrctrl.h>
  80. #include <rtw_mlme.h>
  81. #include <mlme_osdep.h>
  82. #include <rtw_io.h>
  83. #include <rtw_ioctl.h>
  84. #include <rtw_ioctl_set.h>
  85. #include <rtw_ioctl_query.h>
  86. #include <rtw_ioctl_rtl.h>
  87. #include <osdep_intf.h>
  88. #include <rtw_eeprom.h>
  89. #include <sta_info.h>
  90. #include <rtw_event.h>
  91. #include <rtw_mlme_ext.h>
  92. #include <rtw_mi.h>
  93. #include <rtw_ap.h>
  94. #ifdef CONFIG_RTW_MESH
  95. #include "../core/mesh/rtw_mesh.h"
  96. #endif
  97. #include <rtw_efuse.h>
  98. #include <rtw_version.h>
  99. #include <rtw_odm.h>
  100. #ifdef CONFIG_PREALLOC_RX_SKB_BUFFER
  101. #include <rtw_mem.h>
  102. #endif
  103. #include <rtw_p2p.h>
  104. #ifdef CONFIG_TDLS
  105. #include <rtw_tdls.h>
  106. #endif /* CONFIG_TDLS */
  107. #ifdef CONFIG_WAPI_SUPPORT
  108. #include <rtw_wapi.h>
  109. #endif /* CONFIG_WAPI_SUPPORT */
  110. #ifdef CONFIG_MP_INCLUDED
  111. #include <rtw_mp.h>
  112. #endif /* CONFIG_MP_INCLUDED */
  113. #ifdef CONFIG_BR_EXT
  114. #include <rtw_br_ext.h>
  115. #endif /* CONFIG_BR_EXT */
  116. #ifdef CONFIG_IOL
  117. #include <rtw_iol.h>
  118. #endif /* CONFIG_IOL */
  119. #include <ip.h>
  120. #include <if_ether.h>
  121. #include <ethernet.h>
  122. #include <circ_buf.h>
  123. #include <rtw_android.h>
  124. #include <rtw_btcoex_wifionly.h>
  125. #include <rtw_btcoex.h>
  126. #ifdef CONFIG_MCC_MODE
  127. #include <rtw_mcc.h>
  128. #endif /*CONFIG_MCC_MODE */
  129. #ifdef CONFIG_RTW_REPEATER_SON
  130. #include <rtw_rson.h>
  131. #endif /*CONFIG_RTW_REPEATER_SON */
  132. #define SPEC_DEV_ID_NONE BIT(0)
  133. #define SPEC_DEV_ID_DISABLE_HT BIT(1)
  134. #define SPEC_DEV_ID_ENABLE_PS BIT(2)
  135. #define SPEC_DEV_ID_RF_CONFIG_1T1R BIT(3)
  136. #define SPEC_DEV_ID_RF_CONFIG_2T2R BIT(4)
  137. #define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5)
  138. struct specific_device_id {
  139. u32 flags;
  140. u16 idVendor;
  141. u16 idProduct;
  142. };
  143. struct registry_priv {
  144. u8 chip_version;
  145. u8 rfintfs;
  146. u8 lbkmode;
  147. u8 hci;
  148. NDIS_802_11_SSID ssid;
  149. u8 network_mode; /* infra, ad-hoc, auto */
  150. u8 channel;/* ad-hoc support requirement */
  151. u8 wireless_mode;/* A, B, G, auto */
  152. u8 scan_mode;/* active, passive */
  153. u8 radio_enable;
  154. u8 preamble;/* long, short, auto */
  155. u8 vrtl_carrier_sense;/* Enable, Disable, Auto */
  156. u8 vcs_type;/* RTS/CTS, CTS-to-self */
  157. u16 rts_thresh;
  158. u16 frag_thresh;
  159. u8 adhoc_tx_pwr;
  160. u8 soft_ap;
  161. u8 power_mgnt;
  162. u8 ips_mode;
  163. u8 lps_level;
  164. u8 lps_chk_by_tp;
  165. u8 smart_ps;
  166. #ifdef CONFIG_WMMPS_STA
  167. u8 wmm_smart_ps;
  168. #endif /* CONFIG_WMMPS_STA */
  169. u8 usb_rxagg_mode;
  170. u8 dynamic_agg_enable;
  171. u8 long_retry_lmt;
  172. u8 short_retry_lmt;
  173. u16 busy_thresh;
  174. u16 max_bss_cnt;
  175. u8 ack_policy;
  176. u8 mp_mode;
  177. #if defined(CONFIG_MP_INCLUDED) && defined(CONFIG_RTW_CUSTOMER_STR)
  178. u8 mp_customer_str;
  179. #endif
  180. u8 mp_dm;
  181. u8 software_encrypt;
  182. u8 software_decrypt;
  183. #ifdef CONFIG_TX_EARLY_MODE
  184. u8 early_mode;
  185. #endif
  186. u8 acm_method;
  187. /* WMM */
  188. u8 wmm_enable;
  189. #ifdef CONFIG_WMMPS_STA
  190. /* uapsd (unscheduled automatic power-save delivery) = a kind of wmmps */
  191. u8 uapsd_max_sp_len;
  192. /* BIT0: AC_VO UAPSD, BIT1: AC_VI UAPSD, BIT2: AC_BK UAPSD, BIT3: AC_BE UAPSD */
  193. u8 uapsd_ac_enable;
  194. #endif /* CONFIG_WMMPS_STA */
  195. WLAN_BSSID_EX dev_network;
  196. u8 tx_bw_mode;
  197. #ifdef CONFIG_AP_MODE
  198. u8 bmc_tx_rate;
  199. #endif
  200. #ifdef CONFIG_80211N_HT
  201. u8 ht_enable;
  202. /* 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160MHz */
  203. /* 2.4G use bit 0 ~ 3, 5G use bit 4 ~ 7 */
  204. /* 0x21 means enable 2.4G 40MHz & 5G 80MHz */
  205. u8 bw_mode;
  206. u8 ampdu_enable;/* for tx */
  207. u8 rx_stbc;
  208. u8 rx_ampdu_amsdu;/* Rx A-MPDU Supports A-MSDU is permitted */
  209. u8 tx_ampdu_amsdu;/* Tx A-MPDU Supports A-MSDU is permitted */
  210. u8 rx_ampdu_sz_limit_by_nss_bw[4][4]; /* 1~4SS, BW20~BW160 */
  211. /* Short GI support Bit Map */
  212. /* BIT0 - 20MHz, 1: support, 0: non-support */
  213. /* BIT1 - 40MHz, 1: support, 0: non-support */
  214. /* BIT2 - 80MHz, 1: support, 0: non-support */
  215. /* BIT3 - 160MHz, 1: support, 0: non-support */
  216. u8 short_gi;
  217. /* BIT0: Enable VHT LDPC Rx, BIT1: Enable VHT LDPC Tx, BIT4: Enable HT LDPC Rx, BIT5: Enable HT LDPC Tx */
  218. u8 ldpc_cap;
  219. /* BIT0: Enable VHT STBC Rx, BIT1: Enable VHT STBC Tx, BIT4: Enable HT STBC Rx, BIT5: Enable HT STBC Tx */
  220. u8 stbc_cap;
  221. /*
  222. * BIT0: Enable VHT SU Beamformer
  223. * BIT1: Enable VHT SU Beamformee
  224. * BIT2: Enable VHT MU Beamformer, depend on VHT SU Beamformer
  225. * BIT3: Enable VHT MU Beamformee, depend on VHT SU Beamformee
  226. * BIT4: Enable HT Beamformer
  227. * BIT5: Enable HT Beamformee
  228. */
  229. u8 beamform_cap;
  230. u8 beamformer_rf_num;
  231. u8 beamformee_rf_num;
  232. #endif /* CONFIG_80211N_HT */
  233. #ifdef CONFIG_80211AC_VHT
  234. u8 vht_enable; /* 0:disable, 1:enable, 2:auto */
  235. u8 ampdu_factor;
  236. u8 vht_rx_mcs_map[2];
  237. #endif /* CONFIG_80211AC_VHT */
  238. u8 lowrate_two_xmit;
  239. u8 rf_config ;
  240. u8 low_power ;
  241. u8 wifi_spec;/* !turbo_mode */
  242. u8 special_rf_path; /* 0: 2T2R ,1: only turn on path A 1T1R */
  243. char alpha2[2];
  244. u8 channel_plan;
  245. u8 excl_chs[MAX_CHANNEL_NUM];
  246. u8 full_ch_in_p2p_handshake; /* 0: reply only softap channel, 1: reply full channel list*/
  247. #ifdef CONFIG_BT_COEXIST
  248. u8 btcoex;
  249. u8 bt_iso;
  250. u8 bt_sco;
  251. u8 bt_ampdu;
  252. u8 ant_num;
  253. u8 single_ant_path;
  254. #endif
  255. BOOLEAN bAcceptAddbaReq;
  256. u8 antdiv_cfg;
  257. u8 antdiv_type;
  258. u8 drv_ant_band_switch;
  259. u8 switch_usb_mode;
  260. u8 usbss_enable;/* 0:disable,1:enable */
  261. u8 hwpdn_mode;/* 0:disable,1:enable,2:decide by EFUSE config */
  262. u8 hwpwrp_detect;/* 0:disable,1:enable */
  263. u8 hw_wps_pbc;/* 0:disable,1:enable */
  264. #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
  265. char adaptor_info_caching_file_path[PATH_LENGTH_MAX];
  266. #endif
  267. #ifdef CONFIG_LAYER2_ROAMING
  268. u8 max_roaming_times; /* the max number driver will try to roaming */
  269. #endif
  270. #ifdef CONFIG_IOL
  271. u8 fw_iol; /* enable iol without other concern */
  272. #endif
  273. #ifdef CONFIG_80211D
  274. u8 enable80211d;
  275. #endif
  276. u8 ifname[16];
  277. u8 if2name[16];
  278. u8 notch_filter;
  279. /* for pll reference clock selction */
  280. u8 pll_ref_clk_sel;
  281. /* define for tx power adjust */
  282. #ifdef CONFIG_TXPWR_LIMIT
  283. u8 RegEnableTxPowerLimit;
  284. #endif
  285. u8 RegEnableTxPowerByRate;
  286. u8 target_tx_pwr_valid;
  287. s8 target_tx_pwr_2g[RF_PATH_MAX][RATE_SECTION_NUM];
  288. #ifdef CONFIG_IEEE80211_BAND_5GHZ
  289. s8 target_tx_pwr_5g[RF_PATH_MAX][RATE_SECTION_NUM - 1];
  290. #endif
  291. u8 tsf_update_pause_factor;
  292. u8 tsf_update_restore_factor;
  293. s8 TxBBSwing_2G;
  294. s8 TxBBSwing_5G;
  295. u8 AmplifierType_2G;
  296. u8 AmplifierType_5G;
  297. u8 bEn_RFE;
  298. u8 RFE_Type;
  299. u8 PowerTracking_Type;
  300. u8 GLNA_Type;
  301. u8 check_fw_ps;
  302. u8 RegPwrTrimEnable;
  303. #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
  304. u8 load_phy_file;
  305. u8 RegDecryptCustomFile;
  306. #endif
  307. #ifdef CONFIG_CONCURRENT_MODE
  308. u8 virtual_iface_num;
  309. #endif
  310. u8 qos_opt_enable;
  311. u8 hiq_filter;
  312. u8 adaptivity_en;
  313. u8 adaptivity_mode;
  314. s8 adaptivity_th_l2h_ini;
  315. s8 adaptivity_th_edcca_hl_diff;
  316. u8 boffefusemask;
  317. BOOLEAN bFileMaskEfuse;
  318. #ifdef CONFIG_RTW_ACS
  319. u8 acs_auto_scan;
  320. u8 acs_mode;
  321. #endif
  322. #ifdef CONFIG_BACKGROUND_NOISE_MONITOR
  323. u8 nm_mode;
  324. #endif
  325. u32 reg_rxgain_offset_2g;
  326. u32 reg_rxgain_offset_5gl;
  327. u32 reg_rxgain_offset_5gm;
  328. u32 reg_rxgain_offset_5gh;
  329. #ifdef CONFIG_DFS_MASTER
  330. u8 dfs_region_domain;
  331. #endif
  332. #ifdef CONFIG_MCC_MODE
  333. u8 en_mcc;
  334. u32 rtw_mcc_single_tx_cri;
  335. u32 rtw_mcc_ap_bw20_target_tx_tp;
  336. u32 rtw_mcc_ap_bw40_target_tx_tp;
  337. u32 rtw_mcc_ap_bw80_target_tx_tp;
  338. u32 rtw_mcc_sta_bw20_target_tx_tp;
  339. u32 rtw_mcc_sta_bw40_target_tx_tp;
  340. u32 rtw_mcc_sta_bw80_target_tx_tp;
  341. s8 rtw_mcc_policy_table_idx;
  342. u8 rtw_mcc_duration;
  343. u8 rtw_mcc_enable_runtime_duration;
  344. #endif /* CONFIG_MCC_MODE */
  345. #ifdef CONFIG_RTW_NAPI
  346. u8 en_napi;
  347. #ifdef CONFIG_RTW_NAPI_DYNAMIC
  348. u32 napi_threshold; /* unit: Mbps */
  349. #endif /* CONFIG_RTW_NAPI_DYNAMIC */
  350. #ifdef CONFIG_RTW_GRO
  351. u8 en_gro;
  352. #endif /* CONFIG_RTW_GRO */
  353. #endif /* CONFIG_RTW_NAPI */
  354. #ifdef CONFIG_WOWLAN
  355. u8 wakeup_event;
  356. #endif
  357. #ifdef CONFIG_SUPPORT_TRX_SHARED
  358. u8 trx_share_mode;
  359. #endif
  360. u8 check_hw_status;
  361. u32 pci_aspm_config;
  362. u8 iqk_fw_offload;
  363. u8 ch_switch_offload;
  364. #ifdef CONFIG_TDLS
  365. u8 en_tdls;
  366. #endif
  367. #ifdef CONFIG_ADVANCE_OTA
  368. u8 adv_ota;
  369. #endif
  370. #ifdef CONFIG_FW_OFFLOAD_PARAM_INIT
  371. u8 fw_param_init;
  372. #endif
  373. #ifdef CONFIG_DYNAMIC_SOML
  374. u8 dyn_soml_en;
  375. u8 dyn_soml_train_num;
  376. u8 dyn_soml_interval;
  377. u8 dyn_soml_period;
  378. u8 dyn_soml_delay;
  379. #endif
  380. #ifdef CONFIG_FW_HANDLE_TXBCN
  381. u8 fw_tbtt_rpt;
  382. #endif
  383. #ifdef DBG_LA_MODE
  384. u8 la_mode_en;
  385. #endif
  386. };
  387. /* For registry parameters */
  388. #define RGTRY_OFT(field) ((ULONG)FIELD_OFFSET(struct registry_priv, field))
  389. #define RGTRY_SZ(field) sizeof(((struct registry_priv *) 0)->field)
  390. #define GetRegAmplifierType2G(_Adapter) (_Adapter->registrypriv.AmplifierType_2G)
  391. #define GetRegAmplifierType5G(_Adapter) (_Adapter->registrypriv.AmplifierType_5G)
  392. #define GetRegTxBBSwing_2G(_Adapter) (_Adapter->registrypriv.TxBBSwing_2G)
  393. #define GetRegTxBBSwing_5G(_Adapter) (_Adapter->registrypriv.TxBBSwing_5G)
  394. #define GetRegbENRFEType(_Adapter) (_Adapter->registrypriv.bEn_RFE)
  395. #define GetRegRFEType(_Adapter) (_Adapter->registrypriv.RFE_Type)
  396. #define GetRegGLNAType(_Adapter) (_Adapter->registrypriv.GLNA_Type)
  397. #define GetRegPowerTrackingType(_Adapter) (_Adapter->registrypriv.PowerTracking_Type)
  398. #define BSSID_OFT(field) ((ULONG)FIELD_OFFSET(WLAN_BSSID_EX, field))
  399. #define BSSID_SZ(field) sizeof(((PWLAN_BSSID_EX) 0)->field)
  400. #define BW_MODE_2G(bw_mode) ((bw_mode) & 0x0F)
  401. #define BW_MODE_5G(bw_mode) ((bw_mode) >> 4)
  402. #ifdef CONFIG_80211N_HT
  403. #define REGSTY_BW_2G(regsty) BW_MODE_2G((regsty)->bw_mode)
  404. #define REGSTY_BW_5G(regsty) BW_MODE_5G((regsty)->bw_mode)
  405. #else
  406. #define REGSTY_BW_2G(regsty) CHANNEL_WIDTH_20
  407. #define REGSTY_BW_5G(regsty) CHANNEL_WIDTH_20
  408. #endif
  409. #define REGSTY_IS_BW_2G_SUPPORT(regsty, bw) (REGSTY_BW_2G((regsty)) >= (bw))
  410. #define REGSTY_IS_BW_5G_SUPPORT(regsty, bw) (REGSTY_BW_5G((regsty)) >= (bw))
  411. #define REGSTY_IS_11AC_ENABLE(regsty) ((regsty)->vht_enable != 0)
  412. #define REGSTY_IS_11AC_AUTO(regsty) ((regsty)->vht_enable == 2)
  413. typedef struct rtw_if_operations {
  414. int __must_check (*read)(struct dvobj_priv *d, unsigned int addr, void *buf,
  415. size_t len, bool fixed);
  416. int __must_check (*write)(struct dvobj_priv *d, unsigned int addr, void *buf,
  417. size_t len, bool fixed);
  418. } RTW_IF_OPS, *PRTW_IF_OPS;
  419. #ifdef CONFIG_SDIO_HCI
  420. #include <drv_types_sdio.h>
  421. #define INTF_DATA SDIO_DATA
  422. #define INTF_OPS PRTW_IF_OPS
  423. #elif defined(CONFIG_GSPI_HCI)
  424. #include <drv_types_gspi.h>
  425. #define INTF_DATA GSPI_DATA
  426. #elif defined(CONFIG_PCI_HCI)
  427. #include <drv_types_pci.h>
  428. #endif
  429. #ifdef CONFIG_CONCURRENT_MODE
  430. #define is_primary_adapter(adapter) (adapter->adapter_type == PRIMARY_ADAPTER)
  431. #define is_vir_adapter(adapter) (adapter->adapter_type == VIRTUAL_ADAPTER)
  432. #define get_hw_port(adapter) (adapter->hw_port)
  433. #else
  434. #define is_primary_adapter(adapter) (1)
  435. #define is_vir_adapter(adapter) (0)
  436. #define get_hw_port(adapter) (HW_PORT0)
  437. #endif
  438. #define GET_PRIMARY_ADAPTER(padapter) (((_adapter *)padapter)->dvobj->padapters[IFACE_ID0])
  439. #define GET_IFACE_NUMS(padapter) (((_adapter *)padapter)->dvobj->iface_nums)
  440. #define GET_ADAPTER(padapter, iface_id) (((_adapter *)padapter)->dvobj->padapters[iface_id])
  441. #define GetDefaultAdapter(padapter) padapter
  442. enum _IFACE_ID {
  443. IFACE_ID0, /*PRIMARY_ADAPTER*/
  444. IFACE_ID1,
  445. IFACE_ID2,
  446. IFACE_ID3,
  447. IFACE_ID4,
  448. IFACE_ID5,
  449. IFACE_ID6,
  450. IFACE_ID7,
  451. IFACE_ID_MAX,
  452. };
  453. #define VIF_START_ID 1
  454. #ifdef CONFIG_DBG_COUNTER
  455. struct rx_logs {
  456. u32 intf_rx;
  457. u32 intf_rx_err_recvframe;
  458. u32 intf_rx_err_skb;
  459. u32 intf_rx_report;
  460. u32 core_rx;
  461. u32 core_rx_pre;
  462. u32 core_rx_pre_ver_err;
  463. u32 core_rx_pre_mgmt;
  464. u32 core_rx_pre_mgmt_err_80211w;
  465. u32 core_rx_pre_mgmt_err;
  466. u32 core_rx_pre_ctrl;
  467. u32 core_rx_pre_ctrl_err;
  468. u32 core_rx_pre_data;
  469. u32 core_rx_pre_data_wapi_seq_err;
  470. u32 core_rx_pre_data_wapi_key_err;
  471. u32 core_rx_pre_data_handled;
  472. u32 core_rx_pre_data_err;
  473. u32 core_rx_pre_data_unknown;
  474. u32 core_rx_pre_unknown;
  475. u32 core_rx_enqueue;
  476. u32 core_rx_dequeue;
  477. u32 core_rx_post;
  478. u32 core_rx_post_decrypt;
  479. u32 core_rx_post_decrypt_wep;
  480. u32 core_rx_post_decrypt_tkip;
  481. u32 core_rx_post_decrypt_aes;
  482. u32 core_rx_post_decrypt_wapi;
  483. u32 core_rx_post_decrypt_hw;
  484. u32 core_rx_post_decrypt_unknown;
  485. u32 core_rx_post_decrypt_err;
  486. u32 core_rx_post_defrag_err;
  487. u32 core_rx_post_portctrl_err;
  488. u32 core_rx_post_indicate;
  489. u32 core_rx_post_indicate_in_oder;
  490. u32 core_rx_post_indicate_reoder;
  491. u32 core_rx_post_indicate_err;
  492. u32 os_indicate;
  493. u32 os_indicate_ap_mcast;
  494. u32 os_indicate_ap_forward;
  495. u32 os_indicate_ap_self;
  496. u32 os_indicate_err;
  497. u32 os_netif_ok;
  498. u32 os_netif_err;
  499. };
  500. struct tx_logs {
  501. u32 os_tx;
  502. u32 os_tx_err_up;
  503. u32 os_tx_err_xmit;
  504. u32 os_tx_m2u;
  505. u32 os_tx_m2u_ignore_fw_linked;
  506. u32 os_tx_m2u_ignore_self;
  507. u32 os_tx_m2u_entry;
  508. u32 os_tx_m2u_entry_err_xmit;
  509. u32 os_tx_m2u_entry_err_skb;
  510. u32 os_tx_m2u_stop;
  511. u32 core_tx;
  512. u32 core_tx_err_pxmitframe;
  513. u32 core_tx_err_brtx;
  514. u32 core_tx_upd_attrib;
  515. u32 core_tx_upd_attrib_adhoc;
  516. u32 core_tx_upd_attrib_sta;
  517. u32 core_tx_upd_attrib_ap;
  518. u32 core_tx_upd_attrib_unknown;
  519. u32 core_tx_upd_attrib_dhcp;
  520. u32 core_tx_upd_attrib_icmp;
  521. u32 core_tx_upd_attrib_active;
  522. u32 core_tx_upd_attrib_err_ucast_sta;
  523. u32 core_tx_upd_attrib_err_ucast_ap_link;
  524. u32 core_tx_upd_attrib_err_sta;
  525. u32 core_tx_upd_attrib_err_link;
  526. u32 core_tx_upd_attrib_err_sec;
  527. u32 core_tx_ap_enqueue_warn_fwstate;
  528. u32 core_tx_ap_enqueue_warn_sta;
  529. u32 core_tx_ap_enqueue_warn_nosta;
  530. u32 core_tx_ap_enqueue_warn_link;
  531. u32 core_tx_ap_enqueue_warn_trigger;
  532. u32 core_tx_ap_enqueue_mcast;
  533. u32 core_tx_ap_enqueue_ucast;
  534. u32 core_tx_ap_enqueue;
  535. u32 intf_tx;
  536. u32 intf_tx_pending_ac;
  537. u32 intf_tx_pending_fw_under_survey;
  538. u32 intf_tx_pending_fw_under_linking;
  539. u32 intf_tx_pending_xmitbuf;
  540. u32 intf_tx_enqueue;
  541. u32 core_tx_enqueue;
  542. u32 core_tx_enqueue_class;
  543. u32 core_tx_enqueue_class_err_sta;
  544. u32 core_tx_enqueue_class_err_nosta;
  545. u32 core_tx_enqueue_class_err_fwlink;
  546. u32 intf_tx_direct;
  547. u32 intf_tx_direct_err_coalesce;
  548. u32 intf_tx_dequeue;
  549. u32 intf_tx_dequeue_err_coalesce;
  550. u32 intf_tx_dump_xframe;
  551. u32 intf_tx_dump_xframe_err_txdesc;
  552. u32 intf_tx_dump_xframe_err_port;
  553. };
  554. struct int_logs {
  555. u32 all;
  556. u32 err;
  557. u32 tbdok;
  558. u32 tbder;
  559. u32 bcnderr;
  560. u32 bcndma;
  561. u32 bcndma_e;
  562. u32 rx;
  563. u32 rx_rdu;
  564. u32 rx_fovw;
  565. u32 txfovw;
  566. u32 mgntok;
  567. u32 highdok;
  568. u32 bkdok;
  569. u32 bedok;
  570. u32 vidok;
  571. u32 vodok;
  572. };
  573. #endif /* CONFIG_DBG_COUNTER */
  574. struct debug_priv {
  575. u32 dbg_sdio_free_irq_error_cnt;
  576. u32 dbg_sdio_alloc_irq_error_cnt;
  577. u32 dbg_sdio_free_irq_cnt;
  578. u32 dbg_sdio_alloc_irq_cnt;
  579. u32 dbg_sdio_deinit_error_cnt;
  580. u32 dbg_sdio_init_error_cnt;
  581. u32 dbg_suspend_error_cnt;
  582. u32 dbg_suspend_cnt;
  583. u32 dbg_resume_cnt;
  584. u32 dbg_resume_error_cnt;
  585. u32 dbg_deinit_fail_cnt;
  586. u32 dbg_carddisable_cnt;
  587. u32 dbg_carddisable_error_cnt;
  588. u32 dbg_ps_insuspend_cnt;
  589. u32 dbg_dev_unload_inIPS_cnt;
  590. u32 dbg_wow_leave_ps_fail_cnt;
  591. u32 dbg_scan_pwr_state_cnt;
  592. u32 dbg_downloadfw_pwr_state_cnt;
  593. u32 dbg_fw_read_ps_state_fail_cnt;
  594. u32 dbg_leave_ips_fail_cnt;
  595. u32 dbg_leave_lps_fail_cnt;
  596. u32 dbg_h2c_leave32k_fail_cnt;
  597. u32 dbg_diswow_dload_fw_fail_cnt;
  598. u32 dbg_enwow_dload_fw_fail_cnt;
  599. u32 dbg_ips_drvopen_fail_cnt;
  600. u32 dbg_poll_fail_cnt;
  601. u32 dbg_rpwm_toogle_cnt;
  602. u32 dbg_rpwm_timeout_fail_cnt;
  603. u32 dbg_sreset_cnt;
  604. u32 dbg_fw_mem_dl_error_cnt;
  605. u64 dbg_rx_fifo_last_overflow;
  606. u64 dbg_rx_fifo_curr_overflow;
  607. u64 dbg_rx_fifo_diff_overflow;
  608. };
  609. struct rtw_traffic_statistics {
  610. /* tx statistics */
  611. u64 tx_bytes;
  612. u64 tx_pkts;
  613. u64 tx_drop;
  614. u64 cur_tx_bytes;
  615. u64 last_tx_bytes;
  616. u32 cur_tx_tp; /* Tx throughput in Mbps. */
  617. /* rx statistics */
  618. u64 rx_bytes;
  619. u64 rx_pkts;
  620. u64 rx_drop;
  621. u64 cur_rx_bytes;
  622. u64 last_rx_bytes;
  623. u32 cur_rx_tp; /* Rx throughput in Mbps. */
  624. };
  625. #define SEC_CAP_CHK_BMC BIT0
  626. #define SEC_STATUS_STA_PK_GK_CONFLICT_DIS_BMC_SEARCH BIT0
  627. struct sec_cam_bmp {
  628. u32 m0;
  629. #if (SEC_CAM_ENT_NUM_SW_LIMIT > 32)
  630. u32 m1;
  631. #endif
  632. #if (SEC_CAM_ENT_NUM_SW_LIMIT > 64)
  633. u32 m2;
  634. #endif
  635. #if (SEC_CAM_ENT_NUM_SW_LIMIT > 96)
  636. u32 m3;
  637. #endif
  638. };
  639. struct cam_ctl_t {
  640. _lock lock;
  641. u8 sec_cap;
  642. u32 flags;
  643. u8 num;
  644. struct sec_cam_bmp used;
  645. _mutex sec_cam_access_mutex;
  646. };
  647. struct sec_cam_ent {
  648. u16 ctrl;
  649. u8 mac[ETH_ALEN];
  650. u8 key[16];
  651. };
  652. #define KEY_FMT "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
  653. #define KEY_ARG(x) ((u8 *)(x))[0], ((u8 *)(x))[1], ((u8 *)(x))[2], ((u8 *)(x))[3], ((u8 *)(x))[4], ((u8 *)(x))[5], \
  654. ((u8 *)(x))[6], ((u8 *)(x))[7], ((u8 *)(x))[8], ((u8 *)(x))[9], ((u8 *)(x))[10], ((u8 *)(x))[11], \
  655. ((u8 *)(x))[12], ((u8 *)(x))[13], ((u8 *)(x))[14], ((u8 *)(x))[15]
  656. #define RTW_DEFAULT_MGMT_MACID 1
  657. struct macid_bmp {
  658. u32 m0;
  659. #if (MACID_NUM_SW_LIMIT > 32)
  660. u32 m1;
  661. #endif
  662. #if (MACID_NUM_SW_LIMIT > 64)
  663. u32 m2;
  664. #endif
  665. #if (MACID_NUM_SW_LIMIT > 96)
  666. u32 m3;
  667. #endif
  668. };
  669. #ifdef CONFIG_CLIENT_PORT_CFG
  670. struct clt_port_t{
  671. _lock lock;
  672. u8 bmp;
  673. s8 num;
  674. };
  675. #define get_clt_num(adapter) (adapter_to_dvobj(adapter)->clt_port.num)
  676. #endif
  677. struct macid_ctl_t {
  678. _lock lock;
  679. u8 num;
  680. struct macid_bmp used;
  681. struct macid_bmp bmc;
  682. struct macid_bmp if_g[CONFIG_IFACE_NUMBER];
  683. struct macid_bmp ch_g[2]; /* 2 ch concurrency */
  684. u8 iface_bmc[CONFIG_IFACE_NUMBER]; /* bmc TX macid for each iface*/
  685. u8 h2c_msr[MACID_NUM_SW_LIMIT];
  686. u8 bw[MACID_NUM_SW_LIMIT];
  687. u8 vht_en[MACID_NUM_SW_LIMIT];
  688. u32 rate_bmp0[MACID_NUM_SW_LIMIT];
  689. u32 rate_bmp1[MACID_NUM_SW_LIMIT];
  690. struct sta_info *sta[MACID_NUM_SW_LIMIT]; /* corresponding stainfo when macid is not shared */
  691. /* macid sleep registers */
  692. u16 reg_sleep_m0;
  693. #if (MACID_NUM_SW_LIMIT > 32)
  694. u16 reg_sleep_m1;
  695. #endif
  696. #if (MACID_NUM_SW_LIMIT > 64)
  697. u16 reg_sleep_m2;
  698. #endif
  699. #if (MACID_NUM_SW_LIMIT > 96)
  700. u16 reg_sleep_m3;
  701. #endif
  702. };
  703. /* used for rf_ctl_t.rate_bmp_cck_ofdm */
  704. #define RATE_BMP_CCK 0x000F
  705. #define RATE_BMP_OFDM 0xFFF0
  706. #define RATE_BMP_HAS_CCK(_bmp_cck_ofdm) (_bmp_cck_ofdm & RATE_BMP_CCK)
  707. #define RATE_BMP_HAS_OFDM(_bmp_cck_ofdm) (_bmp_cck_ofdm & RATE_BMP_OFDM)
  708. #define RATE_BMP_GET_CCK(_bmp_cck_ofdm) (_bmp_cck_ofdm & RATE_BMP_CCK)
  709. #define RATE_BMP_GET_OFDM(_bmp_cck_ofdm) ((_bmp_cck_ofdm & RATE_BMP_OFDM) >> 4)
  710. /* used for rf_ctl_t.rate_bmp_ht_by_bw */
  711. #define RATE_BMP_HT_1SS 0x000000FF
  712. #define RATE_BMP_HT_2SS 0x0000FF00
  713. #define RATE_BMP_HT_3SS 0x00FF0000
  714. #define RATE_BMP_HT_4SS 0xFF000000
  715. #define RATE_BMP_HAS_HT_1SS(_bmp_ht) (_bmp_ht & RATE_BMP_HT_1SS)
  716. #define RATE_BMP_HAS_HT_2SS(_bmp_ht) (_bmp_ht & RATE_BMP_HT_2SS)
  717. #define RATE_BMP_HAS_HT_3SS(_bmp_ht) (_bmp_ht & RATE_BMP_HT_3SS)
  718. #define RATE_BMP_HAS_HT_4SS(_bmp_ht) (_bmp_ht & RATE_BMP_HT_4SS)
  719. #define RATE_BMP_GET_HT_1SS(_bmp_ht) (_bmp_ht & RATE_BMP_HT_1SS)
  720. #define RATE_BMP_GET_HT_2SS(_bmp_ht) ((_bmp_ht & RATE_BMP_HT_2SS) >> 8)
  721. #define RATE_BMP_GET_HT_3SS(_bmp_ht) ((_bmp_ht & RATE_BMP_HT_3SS) >> 16)
  722. #define RATE_BMP_GET_HT_4SS(_bmp_ht) ((_bmp_ht & RATE_BMP_HT_4SS) >> 24)
  723. /* used for rf_ctl_t.rate_bmp_vht_by_bw */
  724. #define RATE_BMP_VHT_1SS 0x000003FF
  725. #define RATE_BMP_VHT_2SS 0x000FFC00
  726. #define RATE_BMP_VHT_3SS 0x3FF00000
  727. #define RATE_BMP_HAS_VHT_1SS(_bmp_vht) (_bmp_vht & RATE_BMP_VHT_1SS)
  728. #define RATE_BMP_HAS_VHT_2SS(_bmp_vht) (_bmp_vht & RATE_BMP_VHT_2SS)
  729. #define RATE_BMP_HAS_VHT_3SS(_bmp_vht) (_bmp_vht & RATE_BMP_VHT_3SS)
  730. #define RATE_BMP_GET_VHT_1SS(_bmp_vht) (_bmp_vht & RATE_BMP_VHT_1SS)
  731. #define RATE_BMP_GET_VHT_2SS(_bmp_vht) ((_bmp_vht & RATE_BMP_VHT_2SS) >> 10)
  732. #define RATE_BMP_GET_VHT_3SS(_bmp_vht) ((_bmp_vht & RATE_BMP_VHT_3SS) >> 20)
  733. #define TXPWR_LMT_REF_VHT_FROM_HT BIT0
  734. #define TXPWR_LMT_REF_HT_FROM_VHT BIT1
  735. #define TXPWR_LMT_HAS_CCK_1T BIT0
  736. #define TXPWR_LMT_HAS_CCK_2T BIT1
  737. #define TXPWR_LMT_HAS_CCK_3T BIT2
  738. #define TXPWR_LMT_HAS_CCK_4T BIT3
  739. #define TXPWR_LMT_HAS_OFDM_1T BIT4
  740. #define TXPWR_LMT_HAS_OFDM_2T BIT5
  741. #define TXPWR_LMT_HAS_OFDM_3T BIT6
  742. #define TXPWR_LMT_HAS_OFDM_4T BIT7
  743. #define OFFCHS_NONE 0
  744. #define OFFCHS_LEAVING_OP 1
  745. #define OFFCHS_LEAVE_OP 2
  746. #define OFFCHS_BACKING_OP 3
  747. struct rf_ctl_t {
  748. const struct country_chplan *country_ent;
  749. u8 ChannelPlan;
  750. u8 max_chan_nums;
  751. RT_CHANNEL_INFO channel_set[MAX_CHANNEL_NUM];
  752. struct p2p_channels channel_list;
  753. _mutex offch_mutex;
  754. u8 offch_state;
  755. /* used for debug or by tx power limit */
  756. u16 rate_bmp_cck_ofdm; /* 20MHz */
  757. u32 rate_bmp_ht_by_bw[2]; /* 20MHz, 40MHz. 4SS supported */
  758. u32 rate_bmp_vht_by_bw[4]; /* 20MHz, 40MHz, 80MHz, 160MHz. up to 3SS supported */
  759. /* used by tx power limit */
  760. u8 highest_ht_rate_bw_bmp;
  761. u8 highest_vht_rate_bw_bmp;
  762. #ifdef CONFIG_TXPWR_LIMIT
  763. _mutex txpwr_lmt_mutex;
  764. _list reg_exc_list;
  765. u8 regd_exc_num;
  766. _list txpwr_lmt_list;
  767. u8 txpwr_regd_num;
  768. const char *regd_name;
  769. u8 txpwr_lmt_2g_cck_ofdm_state;
  770. #ifdef CONFIG_IEEE80211_BAND_5GHZ
  771. u8 txpwr_lmt_5g_cck_ofdm_state;
  772. u8 txpwr_lmt_5g_20_40_ref;
  773. #endif
  774. #endif
  775. u8 ch_sel_same_band_prefer;
  776. #ifdef CONFIG_DFS
  777. u8 csa_ch;
  778. #ifdef CONFIG_DFS_MASTER
  779. _timer radar_detect_timer;
  780. bool radar_detect_by_others;
  781. u8 radar_detect_enabled;
  782. bool radar_detected;
  783. u8 radar_detect_ch;
  784. u8 radar_detect_bw;
  785. u8 radar_detect_offset;
  786. systime cac_start_time;
  787. systime cac_end_time;
  788. u8 cac_force_stop;
  789. #ifdef CONFIG_DFS_SLAVE_WITH_RADAR_DETECT
  790. u8 dfs_slave_with_rd;
  791. #endif
  792. u8 dfs_ch_sel_d_flags;
  793. u8 dbg_dfs_fake_radar_detect_cnt;
  794. u8 dbg_dfs_radar_detect_trigger_non;
  795. u8 dbg_dfs_choose_dfs_ch_first;
  796. #endif /* CONFIG_DFS_MASTER */
  797. #endif /* CONFIG_DFS */
  798. };
  799. #define RTW_CAC_STOPPED 0
  800. #ifdef CONFIG_DFS_MASTER
  801. #define IS_CAC_STOPPED(rfctl) ((rfctl)->cac_end_time == RTW_CAC_STOPPED)
  802. #define IS_CH_WAITING(rfctl) (!IS_CAC_STOPPED(rfctl) && rtw_time_after((rfctl)->cac_end_time, rtw_get_current_time()))
  803. #define IS_UNDER_CAC(rfctl) (IS_CH_WAITING(rfctl) && rtw_time_after(rtw_get_current_time(), (rfctl)->cac_start_time))
  804. #define IS_RADAR_DETECTED(rfctl) ((rfctl)->radar_detected)
  805. #else
  806. #define IS_CAC_STOPPED(rfctl) 1
  807. #define IS_CH_WAITING(rfctl) 0
  808. #define IS_UNDER_CAC(rfctl) 0
  809. #define IS_RADAR_DETECTED(rfctl) 0
  810. #endif /* CONFIG_DFS_MASTER */
  811. #ifdef CONFIG_DFS_SLAVE_WITH_RADAR_DETECT
  812. #define IS_DFS_SLAVE_WITH_RD(rfctl) ((rfctl)->dfs_slave_with_rd)
  813. #else
  814. #define IS_DFS_SLAVE_WITH_RD(rfctl) 0
  815. #endif
  816. #ifdef CONFIG_MBSSID_CAM
  817. #define TOTAL_MBID_CAM_NUM 8
  818. #define INVALID_CAM_ID 0xFF
  819. struct mbid_cam_ctl_t {
  820. _lock lock;
  821. u8 bitmap;
  822. ATOMIC_T mbid_entry_num;
  823. };
  824. struct mbid_cam_cache {
  825. u8 iface_id;
  826. /*u8 role;*/ /*WIFI_STATION_STATE or WIFI_AP_STATE*/
  827. u8 mac_addr[ETH_ALEN];
  828. };
  829. #endif /*CONFIG_MBSSID_CAM*/
  830. #ifdef RTW_HALMAC
  831. struct halmac_indicator {
  832. struct submit_ctx *sctx;
  833. u8 *buffer;
  834. u32 buf_size;
  835. u32 ret_size;
  836. u32 status;
  837. };
  838. struct halmacpriv {
  839. /* flags */
  840. /* For asynchronous functions */
  841. struct halmac_indicator *indicator;
  842. /* Hardware parameters */
  843. #ifdef CONFIG_SDIO_HCI
  844. /* Store hardware tx queue page number setting */
  845. u16 txpage[HW_QUEUE_ENTRY];
  846. #endif /* CONFIG_SDIO_HCI */
  847. };
  848. #endif /* RTW_HALMAC */
  849. #ifdef CONFIG_FW_MULTI_PORT_SUPPORT
  850. /*info for H2C-0x2C*/
  851. struct dft_info {
  852. u8 port_id;
  853. u8 mac_id;
  854. };
  855. #endif
  856. #ifdef CONFIG_HW_P0_TSF_SYNC
  857. struct tsf_info {
  858. u8 sync_port;/*port_x's tsf sync to port_0*/
  859. u8 offset; /*tsf timer offset*/
  860. };
  861. #endif
  862. struct dvobj_priv {
  863. /*-------- below is common data --------*/
  864. u8 chip_type;
  865. u8 HardwareType;
  866. u8 interface_type;/*USB,SDIO,SPI,PCI*/
  867. ATOMIC_T bSurpriseRemoved;
  868. ATOMIC_T bDriverStopped;
  869. s32 processing_dev_remove;
  870. struct debug_priv drv_dbg;
  871. _mutex hw_init_mutex;
  872. _mutex h2c_fwcmd_mutex;
  873. #ifdef CONFIG_RTW_CUSTOMER_STR
  874. _mutex customer_str_mutex;
  875. struct submit_ctx *customer_str_sctx;
  876. u8 customer_str[RTW_CUSTOMER_STR_LEN];
  877. #endif
  878. _mutex setch_mutex;
  879. _mutex setbw_mutex;
  880. _mutex rf_read_reg_mutex;
  881. #ifdef CONFIG_SDIO_INDIRECT_ACCESS
  882. _mutex sd_indirect_access_mutex;
  883. #endif
  884. #ifdef CONFIG_SYSON_INDIRECT_ACCESS
  885. _mutex syson_indirect_access_mutex; /* System On Reg R/W */
  886. #endif
  887. unsigned char oper_channel; /* saved channel info when call set_channel_bw */
  888. unsigned char oper_bwmode;
  889. unsigned char oper_ch_offset;/* PRIME_CHNL_OFFSET */
  890. systime on_oper_ch_time;
  891. _adapter *padapters[CONFIG_IFACE_NUMBER];/*IFACE_ID_MAX*/
  892. u8 iface_nums; /* total number of ifaces used runtime */
  893. struct mi_state iface_state;
  894. #ifdef CONFIG_AP_MODE
  895. #ifdef CONFIG_SUPPORT_MULTI_BCN
  896. u8 nr_ap_if; /* total interface number of ap /go /mesh / nan mode. */
  897. u16 inter_bcn_space; /* unit:ms */
  898. _queue ap_if_q;
  899. u8 vap_map;
  900. u8 fw_bcn_offload;
  901. u8 vap_tbtt_rpt_map;
  902. #endif /*CONFIG_SUPPORT_MULTI_BCN*/
  903. #ifdef CONFIG_RTW_REPEATER_SON
  904. struct rtw_rson_struct rson_data;
  905. #endif
  906. #endif
  907. #ifdef CONFIG_CLIENT_PORT_CFG
  908. struct clt_port_t clt_port;
  909. #endif
  910. #ifdef CONFIG_HW_P0_TSF_SYNC
  911. struct tsf_info p0_tsf;
  912. #endif
  913. systime periodic_tsf_update_etime;
  914. _timer periodic_tsf_update_end_timer;
  915. struct macid_ctl_t macid_ctl;
  916. struct cam_ctl_t cam_ctl;
  917. struct sec_cam_ent cam_cache[SEC_CAM_ENT_NUM_SW_LIMIT];
  918. #ifdef CONFIG_MBSSID_CAM
  919. struct mbid_cam_ctl_t mbid_cam_ctl;
  920. struct mbid_cam_cache mbid_cam_cache[TOTAL_MBID_CAM_NUM];
  921. #endif
  922. struct rf_ctl_t rf_ctl;
  923. /* For 92D, DMDP have 2 interface. */
  924. u8 InterfaceNumber;
  925. u8 NumInterfaces;
  926. /* In /Out Pipe information */
  927. int RtInPipe[2];
  928. int RtOutPipe[4];
  929. u8 Queue2Pipe[HW_QUEUE_ENTRY];/* for out pipe mapping */
  930. u8 irq_alloc;
  931. ATOMIC_T continual_io_error;
  932. ATOMIC_T disable_func;
  933. u8 xmit_block;
  934. _lock xmit_block_lock;
  935. struct pwrctrl_priv pwrctl_priv;
  936. struct rtw_traffic_statistics traffic_stat;
  937. #ifdef PLATFORM_LINUX
  938. _thread_hdl_ rtnl_lock_holder;
  939. #if defined(CONFIG_IOCTL_CFG80211) && defined(RTW_SINGLE_WIPHY)
  940. struct wiphy *wiphy;
  941. #endif
  942. #endif /* PLATFORM_LINUX */
  943. #ifdef CONFIG_SWTIMER_BASED_TXBCN
  944. _timer txbcn_timer;
  945. #endif
  946. _timer dynamic_chk_timer; /* dynamic/periodic check timer */
  947. #ifdef CONFIG_RTW_NAPI_DYNAMIC
  948. u8 en_napi_dynamic;
  949. #endif /* CONFIG_RTW_NAPI_DYNAMIC */
  950. #ifdef RTW_HALMAC
  951. void *halmac;
  952. struct halmacpriv hmpriv;
  953. #endif /* RTW_HALMAC */
  954. #ifdef CONFIG_FW_MULTI_PORT_SUPPORT
  955. /*info for H2C-0x2C*/
  956. struct dft_info dft;
  957. #endif
  958. #ifdef CONFIG_RTW_WIFI_HAL
  959. u32 nodfs;
  960. #endif
  961. /*-------- below is for SDIO INTERFACE --------*/
  962. #ifdef INTF_DATA
  963. INTF_DATA intf_data;
  964. #endif
  965. #ifdef INTF_OPS
  966. INTF_OPS intf_ops;
  967. #endif
  968. /*-------- below is for USB INTERFACE --------*/
  969. #ifdef CONFIG_USB_HCI
  970. u8 usb_speed; /* 1.1, 2.0 or 3.0 */
  971. u8 nr_endpoint;
  972. u8 RtNumInPipes;
  973. u8 RtNumOutPipes;
  974. int ep_num[6]; /* endpoint number */
  975. int RegUsbSS;
  976. _sema usb_suspend_sema;
  977. #ifdef CONFIG_USB_VENDOR_REQ_MUTEX
  978. _mutex usb_vendor_req_mutex;
  979. #endif
  980. #ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
  981. u8 *usb_alloc_vendor_req_buf;
  982. u8 *usb_vendor_req_buf;
  983. #endif
  984. #ifdef PLATFORM_WINDOWS
  985. /* related device objects */
  986. PDEVICE_OBJECT pphysdevobj;/* pPhysDevObj; */
  987. PDEVICE_OBJECT pfuncdevobj;/* pFuncDevObj; */
  988. PDEVICE_OBJECT pnextdevobj;/* pNextDevObj; */
  989. u8 nextdevstacksz;/* unsigned char NextDeviceStackSize; */ /* = (CHAR)CEdevice->pUsbDevObj->StackSize + 1; */
  990. /* urb for control diescriptor request */
  991. #ifdef PLATFORM_OS_XP
  992. struct _URB_CONTROL_DESCRIPTOR_REQUEST descriptor_urb;
  993. PUSB_CONFIGURATION_DESCRIPTOR pconfig_descriptor;/* UsbConfigurationDescriptor; */
  994. #endif
  995. #ifdef PLATFORM_OS_CE
  996. WCHAR active_path[MAX_ACTIVE_REG_PATH]; /* adapter regpath */
  997. USB_EXTENSION usb_extension;
  998. _nic_hdl pipehdls_r8192c[0x10];
  999. #endif
  1000. u32 config_descriptor_len;/* ULONG UsbConfigurationDescriptorLength; */
  1001. #endif/* PLATFORM_WINDOWS */
  1002. #ifdef PLATFORM_LINUX
  1003. struct usb_interface *pusbintf;
  1004. struct usb_device *pusbdev;
  1005. #endif/* PLATFORM_LINUX */
  1006. #ifdef PLATFORM_FREEBSD
  1007. struct usb_interface *pusbintf;
  1008. struct usb_device *pusbdev;
  1009. #endif/* PLATFORM_FREEBSD */
  1010. #endif/* CONFIG_USB_HCI */
  1011. /*-------- below is for PCIE INTERFACE --------*/
  1012. #ifdef CONFIG_PCI_HCI
  1013. #ifdef PLATFORM_LINUX
  1014. struct pci_dev *ppcidev;
  1015. /* PCI MEM map */
  1016. unsigned long pci_mem_end; /* shared mem end */
  1017. unsigned long pci_mem_start; /* shared mem start */
  1018. /* PCI IO map */
  1019. unsigned long pci_base_addr; /* device I/O address */
  1020. #ifdef RTK_129X_PLATFORM
  1021. unsigned long ctrl_start;
  1022. /* PCI MASK addr */
  1023. unsigned long mask_addr;
  1024. /* PCI TRANSLATE addr */
  1025. unsigned long tran_addr;
  1026. _lock io_reg_lock;
  1027. #endif
  1028. /* PciBridge */
  1029. struct pci_priv pcipriv;
  1030. unsigned int irq; /* get from pci_dev.irq, store to net_device.irq */
  1031. u16 irqline;
  1032. u8 irq_enabled;
  1033. RT_ISR_CONTENT isr_content;
  1034. _lock irq_th_lock;
  1035. /* ASPM */
  1036. u8 const_pci_aspm;
  1037. u8 const_amdpci_aspm;
  1038. u8 const_hwsw_rfoff_d3;
  1039. u8 const_support_pciaspm;
  1040. /* pci-e bridge */
  1041. u8 const_hostpci_aspm_setting;
  1042. /* pci-e device */
  1043. u8 const_devicepci_aspm_setting;
  1044. u8 b_support_aspm; /* If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00. */
  1045. u8 b_support_backdoor;
  1046. u8 bdma64;
  1047. #endif/* PLATFORM_LINUX */
  1048. #endif/* CONFIG_PCI_HCI */
  1049. #ifdef CONFIG_MCC_MODE
  1050. struct mcc_obj_priv mcc_objpriv;
  1051. #endif /*CONFIG_MCC_MODE */
  1052. };
  1053. #define DEV_STA_NUM(_dvobj) MSTATE_STA_NUM(&((_dvobj)->iface_state))
  1054. #define DEV_STA_LD_NUM(_dvobj) MSTATE_STA_LD_NUM(&((_dvobj)->iface_state))
  1055. #define DEV_STA_LG_NUM(_dvobj) MSTATE_STA_LG_NUM(&((_dvobj)->iface_state))
  1056. #define DEV_TDLS_LD_NUM(_dvobj) MSTATE_TDLS_LD_NUM(&((_dvobj)->iface_state))
  1057. #define DEV_AP_NUM(_dvobj) MSTATE_AP_NUM(&((_dvobj)->iface_state))
  1058. #define DEV_AP_STARTING_NUM(_dvobj) MSTATE_AP_STARTING_NUM(&((_dvobj)->iface_state))
  1059. #define DEV_AP_LD_NUM(_dvobj) MSTATE_AP_LD_NUM(&((_dvobj)->iface_state))
  1060. #define DEV_ADHOC_NUM(_dvobj) MSTATE_ADHOC_NUM(&((_dvobj)->iface_state))
  1061. #define DEV_ADHOC_LD_NUM(_dvobj) MSTATE_ADHOC_LD_NUM(&((_dvobj)->iface_state))
  1062. #define DEV_MESH_NUM(_dvobj) MSTATE_MESH_NUM(&((_dvobj)->iface_state))
  1063. #define DEV_MESH_LD_NUM(_dvobj) MSTATE_MESH_LD_NUM(&((_dvobj)->iface_state))
  1064. #define DEV_P2P_DV_NUM(_dvobj) MSTATE_P2P_DV_NUM(&((_dvobj)->iface_state))
  1065. #define DEV_P2P_GC_NUM(_dvobj) MSTATE_P2P_GC_NUM(&((_dvobj)->iface_state))
  1066. #define DEV_P2P_GO_NUM(_dvobj) MSTATE_P2P_GO_NUM(&((_dvobj)->iface_state))
  1067. #define DEV_SCAN_NUM(_dvobj) MSTATE_SCAN_NUM(&((_dvobj)->iface_state))
  1068. #define DEV_WPS_NUM(_dvobj) MSTATE_WPS_NUM(&((_dvobj)->iface_state))
  1069. #define DEV_ROCH_NUM(_dvobj) MSTATE_ROCH_NUM(&((_dvobj)->iface_state))
  1070. #define DEV_MGMT_TX_NUM(_dvobj) MSTATE_MGMT_TX_NUM(&((_dvobj)->iface_state))
  1071. #define DEV_U_CH(_dvobj) MSTATE_U_CH(&((_dvobj)->iface_state))
  1072. #define DEV_U_BW(_dvobj) MSTATE_U_BW(&((_dvobj)->iface_state))
  1073. #define DEV_U_OFFSET(_dvobj) MSTATE_U_OFFSET(&((_dvobj)->iface_state))
  1074. #define dvobj_to_pwrctl(dvobj) (&(dvobj->pwrctl_priv))
  1075. #define pwrctl_to_dvobj(pwrctl) container_of(pwrctl, struct dvobj_priv, pwrctl_priv)
  1076. #define dvobj_to_macidctl(dvobj) (&(dvobj->macid_ctl))
  1077. #define dvobj_to_sec_camctl(dvobj) (&(dvobj->cam_ctl))
  1078. #define dvobj_to_regsty(dvobj) (&(dvobj->padapters[IFACE_ID0]->registrypriv))
  1079. #if defined(CONFIG_IOCTL_CFG80211) && defined(RTW_SINGLE_WIPHY)
  1080. #define dvobj_to_wiphy(dvobj) ((dvobj)->wiphy)
  1081. #endif
  1082. #define dvobj_to_rfctl(dvobj) (&(dvobj->rf_ctl))
  1083. #define rfctl_to_dvobj(rfctl) container_of((rfctl), struct dvobj_priv, rf_ctl)
  1084. static inline void dev_set_surprise_removed(struct dvobj_priv *dvobj)
  1085. {
  1086. ATOMIC_SET(&dvobj->bSurpriseRemoved, _TRUE);
  1087. }
  1088. static inline void dev_clr_surprise_removed(struct dvobj_priv *dvobj)
  1089. {
  1090. ATOMIC_SET(&dvobj->bSurpriseRemoved, _FALSE);
  1091. }
  1092. static inline void dev_set_drv_stopped(struct dvobj_priv *dvobj)
  1093. {
  1094. ATOMIC_SET(&dvobj->bDriverStopped, _TRUE);
  1095. }
  1096. static inline void dev_clr_drv_stopped(struct dvobj_priv *dvobj)
  1097. {
  1098. ATOMIC_SET(&dvobj->bDriverStopped, _FALSE);
  1099. }
  1100. #define dev_is_surprise_removed(dvobj) (ATOMIC_READ(&dvobj->bSurpriseRemoved) == _TRUE)
  1101. #define dev_is_drv_stopped(dvobj) (ATOMIC_READ(&dvobj->bDriverStopped) == _TRUE)
  1102. #ifdef PLATFORM_LINUX
  1103. static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
  1104. {
  1105. /* todo: get interface type from dvobj and the return the dev accordingly */
  1106. #ifdef RTW_DVOBJ_CHIP_HW_TYPE
  1107. #endif
  1108. #ifdef CONFIG_USB_HCI
  1109. return &dvobj->pusbintf->dev;
  1110. #endif
  1111. #ifdef CONFIG_SDIO_HCI
  1112. return &dvobj->intf_data.func->dev;
  1113. #endif
  1114. #ifdef CONFIG_GSPI_HCI
  1115. return &dvobj->intf_data.func->dev;
  1116. #endif
  1117. #ifdef CONFIG_PCI_HCI
  1118. return &dvobj->ppcidev->dev;
  1119. #endif
  1120. }
  1121. #endif
  1122. _adapter *dvobj_get_port0_adapter(struct dvobj_priv *dvobj);
  1123. _adapter *dvobj_get_unregisterd_adapter(struct dvobj_priv *dvobj);
  1124. _adapter *dvobj_get_adapter_by_addr(struct dvobj_priv *dvobj, u8 *addr);
  1125. #define dvobj_get_primary_adapter(dvobj) ((dvobj)->padapters[IFACE_ID0])
  1126. enum _hw_port {
  1127. HW_PORT0,
  1128. HW_PORT1,
  1129. HW_PORT2,
  1130. HW_PORT3,
  1131. HW_PORT4,
  1132. MAX_HW_PORT,
  1133. };
  1134. #ifdef CONFIG_CLIENT_PORT_CFG
  1135. enum _client_port {
  1136. CLT_PORT0 = HW_PORT1,
  1137. CLT_PORT1 = HW_PORT2,
  1138. CLT_PORT2 = HW_PORT3,
  1139. CLT_PORT3 = HW_PORT4,
  1140. CLT_PORT_INVALID = HW_PORT0,
  1141. };
  1142. #define MAX_CLIENT_PORT_NUM 4
  1143. #define get_clt_port(adapter) (adapter->client_port)
  1144. #endif
  1145. enum _ADAPTER_TYPE {
  1146. PRIMARY_ADAPTER,
  1147. VIRTUAL_ADAPTER,
  1148. MAX_ADAPTER = 0xFF,
  1149. };
  1150. typedef enum _DRIVER_STATE {
  1151. DRIVER_NORMAL = 0,
  1152. DRIVER_DISAPPEAR = 1,
  1153. DRIVER_REPLACE_DONGLE = 2,
  1154. } DRIVER_STATE;
  1155. #ifdef CONFIG_RTW_NAPI
  1156. enum _NAPI_STATE {
  1157. NAPI_DISABLE = 0,
  1158. NAPI_ENABLE = 1,
  1159. };
  1160. #endif
  1161. #ifdef CONFIG_INTEL_PROXIM
  1162. struct proxim {
  1163. bool proxim_support;
  1164. bool proxim_on;
  1165. void *proximity_priv;
  1166. int (*proxim_rx)(_adapter *padapter,
  1167. union recv_frame *precv_frame);
  1168. u8(*proxim_get_var)(_adapter *padapter, u8 type);
  1169. };
  1170. #endif /* CONFIG_INTEL_PROXIM */
  1171. #ifdef CONFIG_MAC_LOOPBACK_DRIVER
  1172. typedef struct loopbackdata {
  1173. _sema sema;
  1174. _thread_hdl_ lbkthread;
  1175. u8 bstop;
  1176. u32 cnt;
  1177. u16 size;
  1178. u16 txsize;
  1179. u8 txbuf[0x8000];
  1180. u16 rxsize;
  1181. u8 rxbuf[0x8000];
  1182. u8 msg[100];
  1183. } LOOPBACKDATA, *PLOOPBACKDATA;
  1184. #endif
  1185. #define ADAPTER_TX_BW_2G(adapter) BW_MODE_2G((adapter)->driver_tx_bw_mode)
  1186. #define ADAPTER_TX_BW_5G(adapter) BW_MODE_5G((adapter)->driver_tx_bw_mode)
  1187. struct _ADAPTER {
  1188. int DriverState;/* for disable driver using module, use dongle to replace module. */
  1189. int pid[3];/* process id from UI, 0:wps, 1:hostapd, 2:dhcpcd */
  1190. int bDongle;/* build-in module or external dongle */
  1191. #if defined(CONFIG_AP_MODE) && defined(CONFIG_SUPPORT_MULTI_BCN)
  1192. _list list;
  1193. u8 vap_id;
  1194. #endif
  1195. struct dvobj_priv *dvobj;
  1196. struct mlme_priv mlmepriv;
  1197. struct mlme_ext_priv mlmeextpriv;
  1198. struct cmd_priv cmdpriv;
  1199. struct evt_priv evtpriv;
  1200. #ifdef CONFIG_RTW_80211K
  1201. struct rm_priv rmpriv;
  1202. #endif
  1203. /* struct io_queue *pio_queue; */
  1204. struct io_priv iopriv;
  1205. struct xmit_priv xmitpriv;
  1206. struct recv_priv recvpriv;
  1207. struct sta_priv stapriv;
  1208. struct security_priv securitypriv;
  1209. _lock security_key_mutex; /* add for CONFIG_IEEE80211W, none 11w also can use */
  1210. struct registry_priv registrypriv;
  1211. #ifdef CONFIG_RTW_NAPI
  1212. struct napi_struct napi;
  1213. u8 napi_state;
  1214. #endif
  1215. #ifdef CONFIG_MP_INCLUDED
  1216. struct mp_priv mppriv;
  1217. #endif
  1218. #ifdef CONFIG_AP_MODE
  1219. struct hostapd_priv *phostapdpriv;
  1220. #endif
  1221. #ifdef CONFIG_IOCTL_CFG80211
  1222. #ifdef CONFIG_P2P
  1223. struct cfg80211_wifidirect_info cfg80211_wdinfo;
  1224. #endif /* CONFIG_P2P */
  1225. #endif /* CONFIG_IOCTL_CFG80211 */
  1226. u32 setband;
  1227. ATOMIC_T bandskip;
  1228. #ifdef CONFIG_P2P
  1229. struct wifidirect_info wdinfo;
  1230. #endif /* CONFIG_P2P */
  1231. #ifdef CONFIG_TDLS
  1232. struct tdls_info tdlsinfo;
  1233. #endif /* CONFIG_TDLS */
  1234. #ifdef CONFIG_WAPI_SUPPORT
  1235. u8 WapiSupport;
  1236. RT_WAPI_T wapiInfo;
  1237. #endif
  1238. #ifdef CONFIG_RTW_REPEATER_SON
  1239. u8 rtw_rson_scanstage;
  1240. #endif
  1241. #ifdef CONFIG_WFD
  1242. struct wifi_display_info wfd_info;
  1243. #endif /* CONFIG_WFD */
  1244. #ifdef CONFIG_BT_COEXIST_SOCKET_TRX
  1245. struct bt_coex_info coex_info;
  1246. #endif /* CONFIG_BT_COEXIST_SOCKET_TRX */
  1247. ERROR_CODE LastError; /* <20130613, Kordan> Only the functions associated with MP records the error code by now. */
  1248. PVOID HalData;
  1249. u32 hal_data_sz;
  1250. struct hal_ops hal_func;
  1251. u32 IsrContent;
  1252. u32 ImrContent;
  1253. u8 EepromAddressSize;
  1254. u8 bDriverIsGoingToUnload;
  1255. u8 init_adpt_in_progress;
  1256. u8 bHaltInProgress;
  1257. #ifdef CONFIG_GPIO_API
  1258. u8 pre_gpio_pin;
  1259. struct gpio_int_priv {
  1260. u8 interrupt_mode;
  1261. u8 interrupt_enable_mask;
  1262. void (*callback[8])(u8 level);
  1263. } gpiointpriv;
  1264. #endif
  1265. _thread_hdl_ cmdThread;
  1266. #ifdef CONFIG_EVENT_THREAD_MODE
  1267. _thread_hdl_ evtThread;
  1268. #endif
  1269. #ifdef CONFIG_XMIT_THREAD_MODE
  1270. _thread_hdl_ xmitThread;
  1271. #endif
  1272. #ifdef CONFIG_RECV_THREAD_MODE
  1273. _thread_hdl_ recvThread;
  1274. #endif
  1275. u8 registered;
  1276. #ifndef PLATFORM_LINUX
  1277. NDIS_STATUS(*dvobj_init)(struct dvobj_priv *dvobj);
  1278. void (*dvobj_deinit)(struct dvobj_priv *dvobj);
  1279. #endif
  1280. void (*intf_start)(_adapter *adapter);
  1281. void (*intf_stop)(_adapter *adapter);
  1282. #ifdef PLATFORM_WINDOWS
  1283. _nic_hdl hndis_adapter;/* hNdisAdapter(NDISMiniportAdapterHandle); */
  1284. _nic_hdl hndis_config;/* hNdisConfiguration; */
  1285. NDIS_STRING fw_img;
  1286. u32 NdisPacketFilter;
  1287. u8 MCList[MAX_MCAST_LIST_NUM][6];
  1288. u32 MCAddrCount;
  1289. #endif /* end of PLATFORM_WINDOWS */
  1290. #ifdef PLATFORM_LINUX
  1291. _nic_hdl pnetdev;
  1292. char old_ifname[IFNAMSIZ];
  1293. /* used by rtw_rereg_nd_name related function */
  1294. struct rereg_nd_name_data {
  1295. _nic_hdl old_pnetdev;
  1296. char old_ifname[IFNAMSIZ];
  1297. u8 old_ips_mode;
  1298. u8 old_bRegUseLed;
  1299. } rereg_nd_name_priv;
  1300. u8 ndev_unregistering;
  1301. int bup;
  1302. struct net_device_stats stats;
  1303. struct iw_statistics iwstats;
  1304. struct proc_dir_entry *dir_dev;/* for proc directory */
  1305. struct proc_dir_entry *dir_odm;
  1306. #ifdef CONFIG_MCC_MODE
  1307. struct proc_dir_entry *dir_mcc;
  1308. #endif /* CONFIG_MCC_MODE */
  1309. #ifdef CONFIG_IOCTL_CFG80211
  1310. struct wireless_dev *rtw_wdev;
  1311. struct rtw_wdev_priv wdev_data;
  1312. #if !defined(RTW_SINGLE_WIPHY)
  1313. struct wiphy *wiphy;
  1314. #endif
  1315. #endif /* CONFIG_IOCTL_CFG80211 */
  1316. #endif /* PLATFORM_LINUX */
  1317. #ifdef PLATFORM_FREEBSD
  1318. _nic_hdl pifp;
  1319. int bup;
  1320. _lock glock;
  1321. #endif /* PLATFORM_FREEBSD */
  1322. u8 mac_addr[ETH_ALEN];
  1323. int net_closed;
  1324. u8 netif_up;
  1325. u8 bLinkInfoDump;
  1326. /* Added by Albert 2012/10/26 */
  1327. /* The driver will show up the desired channel number when this flag is 1. */
  1328. u8 bNotifyChannelChange;
  1329. u8 bsta_tp_dump;
  1330. #ifdef CONFIG_P2P
  1331. /* Added by Albert 2012/12/06 */
  1332. /* The driver will show the current P2P status when the upper application reads it. */
  1333. u8 bShowGetP2PState;
  1334. #endif
  1335. #ifdef CONFIG_AUTOSUSPEND
  1336. u8 bDisableAutosuspend;
  1337. #endif
  1338. u8 isprimary; /* is primary adapter or not */
  1339. /* notes:
  1340. ** if isprimary is true, the adapter_type value is 0, iface_id is IFACE_ID0 for PRIMARY_ADAPTER
  1341. ** if isprimary is false, the adapter_type value is 1, iface_id is IFACE_ID1 for VIRTUAL_ADAPTER
  1342. ** refer to iface_id if iface_nums>2 and isprimary is false and the adapter_type value is 0xff.*/
  1343. u8 adapter_type;/*be used in Multi-interface to recognize whether is PRIMARY_ADAPTER or not(PRIMARY_ADAPTER/VIRTUAL_ADAPTER) .*/
  1344. u8 hw_port; /*interface port type, it depends on HW port */
  1345. #ifdef CONFIG_CLIENT_PORT_CFG
  1346. u8 client_id;
  1347. u8 client_port;
  1348. #endif
  1349. /*struct tsf_info tsf;*//*reserve define for 8814B*/
  1350. /*extend to support multi interface*/
  1351. u8 iface_id;
  1352. #ifdef CONFIG_BR_EXT
  1353. _lock br_ext_lock;
  1354. /* unsigned int macclone_completed; */
  1355. struct nat25_network_db_entry *nethash[NAT25_HASH_SIZE];
  1356. int pppoe_connection_in_progress;
  1357. unsigned char pppoe_addr[MACADDRLEN];
  1358. unsigned char scdb_mac[MACADDRLEN];
  1359. unsigned char scdb_ip[4];
  1360. struct nat25_network_db_entry *scdb_entry;
  1361. unsigned char br_mac[MACADDRLEN];
  1362. unsigned char br_ip[4];
  1363. struct br_ext_info ethBrExtInfo;
  1364. #endif /* CONFIG_BR_EXT */
  1365. #ifdef CONFIG_INTEL_PROXIM
  1366. /* intel Proximity, should be alloc mem
  1367. * in intel Proximity module and can only
  1368. * be used in intel Proximity mode */
  1369. struct proxim proximity;
  1370. #endif /* CONFIG_INTEL_PROXIM */
  1371. #ifdef CONFIG_MAC_LOOPBACK_DRIVER
  1372. PLOOPBACKDATA ploopback;
  1373. #endif
  1374. #ifdef CONFIG_AP_MODE
  1375. u8 bmc_tx_rate;
  1376. #endif
  1377. /* for debug purpose */
  1378. u8 fix_rate;
  1379. u8 fix_bw;
  1380. u8 data_fb; /* data rate fallback, valid only when fix_rate is not 0xff */
  1381. u8 power_offset;
  1382. u8 driver_tx_bw_mode;
  1383. u8 rsvd_page_offset;
  1384. u8 rsvd_page_num;
  1385. #ifdef CONFIG_SUPPORT_FIFO_DUMP
  1386. u8 fifo_sel;
  1387. u32 fifo_addr;
  1388. u32 fifo_size;
  1389. #endif
  1390. u8 driver_vcs_en; /* Enable=1, Disable=0 driver control vrtl_carrier_sense for tx */
  1391. u8 driver_vcs_type;/* force 0:disable VCS, 1:RTS-CTS, 2:CTS-to-self when vcs_en=1. */
  1392. u8 driver_ampdu_spacing;/* driver control AMPDU Density for peer sta's rx */
  1393. u8 driver_rx_ampdu_factor;/* 0xff: disable drv ctrl, 0:8k, 1:16k, 2:32k, 3:64k; */
  1394. u8 driver_rx_ampdu_spacing; /* driver control Rx AMPDU Density */
  1395. u8 fix_rx_ampdu_accept;
  1396. u8 fix_rx_ampdu_size; /* 0~127, TODO:consider each sta and each TID */
  1397. #ifdef CONFIG_TX_AMSDU
  1398. u8 tx_amsdu;
  1399. u16 tx_amsdu_rate;
  1400. #endif
  1401. u8 driver_tx_max_agg_num; /*fix tx desc max agg num , 0xff: disable drv ctrl*/
  1402. #ifdef DBG_RX_COUNTER_DUMP
  1403. u8 dump_rx_cnt_mode;/*BIT0:drv,BIT1:mac,BIT2:phy*/
  1404. u32 drv_rx_cnt_ok;
  1405. u32 drv_rx_cnt_crcerror;
  1406. u32 drv_rx_cnt_drop;
  1407. #endif
  1408. #ifdef CONFIG_DBG_COUNTER
  1409. struct rx_logs rx_logs;
  1410. struct tx_logs tx_logs;
  1411. struct int_logs int_logs;
  1412. #endif
  1413. #ifdef CONFIG_MCC_MODE
  1414. struct mcc_adapter_priv mcc_adapterpriv;
  1415. #endif /* CONFIG_MCC_MODE */
  1416. #ifdef CONFIG_RTW_MESH
  1417. struct rtw_mesh_cfg mesh_cfg;
  1418. struct rtw_mesh_info mesh_info;
  1419. _timer mesh_path_timer;
  1420. _timer mesh_path_root_timer;
  1421. _timer mesh_atlm_param_req_timer; /* airtime link metrics param request timer */
  1422. _workitem mesh_work;
  1423. unsigned long wrkq_flags;
  1424. #endif /* CONFIG_RTW_MESH */
  1425. };
  1426. #define adapter_to_dvobj(adapter) ((adapter)->dvobj)
  1427. #define adapter_to_regsty(adapter) dvobj_to_regsty(adapter_to_dvobj((adapter)))
  1428. #define adapter_to_pwrctl(adapter) dvobj_to_pwrctl(adapter_to_dvobj((adapter)))
  1429. #define adapter_wdev_data(adapter) (&((adapter)->wdev_data))
  1430. #if defined(RTW_SINGLE_WIPHY)
  1431. #define adapter_to_wiphy(adapter) dvobj_to_wiphy(adapter_to_dvobj(adapter))
  1432. #else
  1433. #define adapter_to_wiphy(adapter) ((adapter)->wiphy)
  1434. #endif
  1435. #define adapter_to_rfctl(adapter) dvobj_to_rfctl(adapter_to_dvobj((adapter)))
  1436. #define adapter_to_macidctl(adapter) dvobj_to_macidctl(adapter_to_dvobj((adapter)))
  1437. #define adapter_mac_addr(adapter) (adapter->mac_addr)
  1438. #ifdef CONFIG_RTW_CFGVENDOR_RANDOM_MAC_OUI
  1439. #define adapter_pno_mac_addr(adapter) \
  1440. ((adapter_wdev_data(adapter))->pno_mac_addr)
  1441. #endif
  1442. #define adapter_to_chset(adapter) (adapter_to_rfctl((adapter))->channel_set)
  1443. #define mlme_to_adapter(mlme) container_of((mlme), struct _ADAPTER, mlmepriv)
  1444. #define tdls_info_to_adapter(tdls) container_of((tdls), struct _ADAPTER, tdlsinfo)
  1445. #define rtw_get_chip_type(adapter) (((PADAPTER)adapter)->dvobj->chip_type)
  1446. #define rtw_get_hw_type(adapter) (((PADAPTER)adapter)->dvobj->HardwareType)
  1447. #define rtw_get_intf_type(adapter) (((PADAPTER)adapter)->dvobj->interface_type)
  1448. #define rtw_get_mi_nums(adapter) (((PADAPTER)adapter)->dvobj->iface_nums)
  1449. static inline void rtw_set_surprise_removed(_adapter *padapter)
  1450. {
  1451. dev_set_surprise_removed(adapter_to_dvobj(padapter));
  1452. }
  1453. static inline void rtw_clr_surprise_removed(_adapter *padapter)
  1454. {
  1455. dev_clr_surprise_removed(adapter_to_dvobj(padapter));
  1456. }
  1457. static inline void rtw_set_drv_stopped(_adapter *padapter)
  1458. {
  1459. dev_set_drv_stopped(adapter_to_dvobj(padapter));
  1460. }
  1461. static inline void rtw_clr_drv_stopped(_adapter *padapter)
  1462. {
  1463. dev_clr_drv_stopped(adapter_to_dvobj(padapter));
  1464. }
  1465. #define rtw_is_surprise_removed(padapter) (dev_is_surprise_removed(adapter_to_dvobj(padapter)))
  1466. #define rtw_is_drv_stopped(padapter) (dev_is_drv_stopped(adapter_to_dvobj(padapter)))
  1467. /*
  1468. * Function disabled.
  1469. * */
  1470. #define DF_TX_BIT BIT0 /*write_port_cancel*/
  1471. #define DF_RX_BIT BIT1 /*read_port_cancel*/
  1472. #define DF_IO_BIT BIT2
  1473. /* #define RTW_DISABLE_FUNC(padapter, func) (ATOMIC_ADD(&adapter_to_dvobj(padapter)->disable_func, (func))) */
  1474. /* #define RTW_ENABLE_FUNC(padapter, func) (ATOMIC_SUB(&adapter_to_dvobj(padapter)->disable_func, (func))) */
  1475. __inline static void RTW_DISABLE_FUNC(_adapter *padapter, int func_bit)
  1476. {
  1477. int df = ATOMIC_READ(&adapter_to_dvobj(padapter)->disable_func);
  1478. df |= func_bit;
  1479. ATOMIC_SET(&adapter_to_dvobj(padapter)->disable_func, df);
  1480. }
  1481. __inline static void RTW_ENABLE_FUNC(_adapter *padapter, int func_bit)
  1482. {
  1483. int df = ATOMIC_READ(&adapter_to_dvobj(padapter)->disable_func);
  1484. df &= ~(func_bit);
  1485. ATOMIC_SET(&adapter_to_dvobj(padapter)->disable_func, df);
  1486. }
  1487. #define RTW_CANNOT_RUN(padapter) \
  1488. (rtw_is_surprise_removed(padapter) || \
  1489. rtw_is_drv_stopped(padapter))
  1490. #define RTW_IS_FUNC_DISABLED(padapter, func_bit) (ATOMIC_READ(&adapter_to_dvobj(padapter)->disable_func) & (func_bit))
  1491. #define RTW_CANNOT_IO(padapter) \
  1492. (rtw_is_surprise_removed(padapter) || \
  1493. RTW_IS_FUNC_DISABLED((padapter), DF_IO_BIT))
  1494. #define RTW_CANNOT_RX(padapter) \
  1495. (RTW_CANNOT_RUN(padapter) || \
  1496. RTW_IS_FUNC_DISABLED((padapter), DF_RX_BIT))
  1497. #define RTW_CANNOT_TX(padapter) \
  1498. (RTW_CANNOT_RUN(padapter) || \
  1499. RTW_IS_FUNC_DISABLED((padapter), DF_TX_BIT))
  1500. #ifdef CONFIG_PNO_SUPPORT
  1501. int rtw_parse_ssid_list_tlv(char **list_str, pno_ssid_t *ssid, int max, int *bytes_left);
  1502. int rtw_dev_pno_set(struct net_device *net, pno_ssid_t *ssid, int num,
  1503. int pno_time, int pno_repeat, int pno_freq_expo_max);
  1504. #ifdef CONFIG_PNO_SET_DEBUG
  1505. void rtw_dev_pno_debug(struct net_device *net);
  1506. #endif /* CONFIG_PNO_SET_DEBUG */
  1507. #endif /* CONFIG_PNO_SUPPORT */
  1508. int rtw_suspend_free_assoc_resource(_adapter *padapter);
  1509. #ifdef CONFIG_WOWLAN
  1510. int rtw_suspend_wow(_adapter *padapter);
  1511. int rtw_resume_process_wow(_adapter *padapter);
  1512. #endif
  1513. /* HCI Related header file */
  1514. #ifdef CONFIG_USB_HCI
  1515. #include <usb_osintf.h>
  1516. #include <usb_ops.h>
  1517. #include <usb_hal.h>
  1518. #endif
  1519. #ifdef CONFIG_SDIO_HCI
  1520. #include <sdio_osintf.h>
  1521. #include <sdio_ops.h>
  1522. #include <sdio_hal.h>
  1523. #endif
  1524. #ifdef CONFIG_GSPI_HCI
  1525. #include <gspi_osintf.h>
  1526. #include <gspi_ops.h>
  1527. #include <gspi_hal.h>
  1528. #endif
  1529. #ifdef CONFIG_PCI_HCI
  1530. #include <pci_osintf.h>
  1531. #include <pci_ops.h>
  1532. #include <pci_hal.h>
  1533. #endif
  1534. #endif /* __DRV_TYPES_H__ */