nic_tx.h 72 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700
  1. /*
  2. ** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic_tx.h#1
  3. */
  4. /*! \file nic_tx.h
  5. \brief Functions that provide TX operation in NIC's point of view.
  6. This file provides TX functions which are responsible for both Hardware and
  7. Software Resource Management and keep their Synchronization.
  8. */
  9. /*
  10. ** Log: nic_tx.h
  11. **
  12. ** 09 16 2014 eason.tsai
  13. ** [ALPS01728937] [Need Patch] [Volunteer Patch] MET support
  14. ** MET support
  15. **
  16. ** 08 19 2013 terry.wu
  17. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  18. ** 1. Enable TC resource adjust feature
  19. ** 2. Set Non-QoS data frame to TC5
  20. **
  21. ** 08 13 2013 terry.wu
  22. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  23. ** 1. Assign TXD.PID by wlan index
  24. ** 2. Some bug fix
  25. **
  26. ** 08 09 2013 cp.wu
  27. ** [BORA00002253] [MT6630 Wi-Fi][Driver][Firmware] Add NLO and timeout mechanism to SCN module
  28. ** 1. integrate scheduled scan functionality
  29. ** 2. condition compilation for linux-3.4 & linux-3.8 compatibility
  30. ** 3. correct CMD queue access to reduce lock scope
  31. **
  32. ** 08 09 2013 terry.wu
  33. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  34. ** 1. Add new TX done result code "TX_RESULT_QUEUE_CLEARANCE"
  35. ** 2. Fix runtime warning for wrong memory mode of kfree mgmt pool
  36. ** 3. Fix memory dump command
  37. **
  38. ** 08 05 2013 terry.wu
  39. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  40. ** 1. Add SW rate definition
  41. ** 2. Add HW default rate selection logic from FW
  42. **
  43. ** 08 02 2013 terry.wu
  44. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  45. ** 1. Set VI/VO Tx life time to no limitation
  46. ** 2. Set VI/VO Tx retry limit to 7
  47. **
  48. ** 07 18 2013 terry.wu
  49. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  50. ** 1. Update TxDesc PF bit setting rule
  51. ** 2. Remove unnecessary QM function
  52. **
  53. ** 07 10 2013 terry.wu
  54. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  55. ** Disable IP/TCP/UDP checksum temporally for 1st connection
  56. **
  57. ** 07 04 2013 terry.wu
  58. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  59. ** Update for 1st Connection.
  60. **
  61. ** 06 27 2013 terry.wu
  62. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  63. ** Refine management frame Tx function
  64. **
  65. ** 06 26 2013 terry.wu
  66. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  67. ** Update Tx DESC definition to lateset version
  68. **
  69. ** 06 25 2013 terry.wu
  70. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  71. ** Update for 1st connection
  72. **
  73. ** 06 19 2013 terry.wu
  74. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  75. ** Update for 1st connection. Set TC4 default resource value for FW_DL cmd
  76. **
  77. ** 03 29 2013 cp.wu
  78. ** [BORA00002227] [MT6630 Wi-Fi][Driver] Update for Makefile and HIFSYS modifications
  79. ** 1. remove unused HIF definitions
  80. ** 2. enable NDIS 5.1 build success
  81. **
  82. ** 03 19 2013 terry.wu
  83. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  84. ** .
  85. **
  86. ** 03 14 2013 terry.wu
  87. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  88. ** Update packet remaining Tx time
  89. **
  90. ** 03 12 2013 terry.wu
  91. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  92. ** Update Tx utility function for management frame
  93. **
  94. ** 03 05 2013 terry.wu
  95. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  96. ** .
  97. **
  98. ** 03 04 2013 terry.wu
  99. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  100. ** .
  101. **
  102. ** 02 25 2013 terry.wu
  103. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  104. ** <saved by Perforce>
  105. **
  106. ** 02 01 2013 cp.wu
  107. ** [BORA00002227] [MT6630 Wi-Fi][Driver] Update for Makefile and HIFSYS modifications
  108. ** 1. eliminate MT5931/MT6620/MT6628 logic
  109. ** 2. add firmware download control sequence
  110. **
  111. ** 01 22 2013 cp.wu
  112. ** [BORA00002253] [MT6630 Wi-Fi][Driver][Firmware] Add NLO and timeout mechanism to SCN module
  113. ** modification for ucBssIndex migration
  114. **
  115. ** 01 21 2013 terry.wu
  116. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  117. ** Update TX path based on new ucBssIndex modifications.
  118. **
  119. ** 01 17 2013 cm.chang
  120. ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
  121. ** Use ucBssIndex to replace eNetworkTypeIndex
  122. **
  123. ** 01 15 2013 terry.wu
  124. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  125. ** Update Tx done resource release mechanism.
  126. **
  127. ** 12 27 2012 terry.wu
  128. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  129. ** Update MQM index mapping mechanism
  130. ** 1. TID to ACI
  131. ** 2. ACI to SW TxQ
  132. ** 3. ACI to network TC resource
  133. **
  134. ** 12 26 2012 terry.wu
  135. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  136. ** Update TXD format based on latest release.
  137. **
  138. ** 12 21 2012 terry.wu
  139. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  140. ** Update TxD template feature.
  141. **
  142. ** 12 19 2012 terry.wu
  143. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  144. ** Add Tx desc composing function
  145. **
  146. ** 12 18 2012 terry.wu
  147. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  148. ** Page count resource management.
  149. **
  150. ** 10 25 2012 cp.wu
  151. ** [BORA00002227] [MT6630 Wi-Fi][Driver] Update for Makefile and HIFSYS modifications
  152. ** HIFSYS update: TX done counter is now separated into 16 sets.
  153. **
  154. ** 09 17 2012 cm.chang
  155. ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
  156. ** Duplicate source from MT6620 v2.3 driver branch
  157. ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
  158. *
  159. * 11 18 2011 eddie.chen
  160. * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog)
  161. * Add log counter for tx
  162. *
  163. * 11 10 2011 eddie.chen
  164. * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog)
  165. * Add TX_DONE status detail information.
  166. *
  167. * 08 15 2011 cp.wu
  168. * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree
  169. * add MT6628-specific definitions.
  170. *
  171. * 04 12 2011 cp.wu
  172. * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing
  173. * frame dropping cases for TC4 path
  174. * 1. add nicTxGetResource() API for QM to make decisions.
  175. * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case.
  176. *
  177. * 03 21 2011 cp.wu
  178. * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer
  179. * portability improvement
  180. *
  181. * 02 16 2011 cp.wu
  182. * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking available
  183. * count and modify behavior
  184. * 1. add new API: nicTxGetFreeCmdCount()
  185. * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly
  186. *
  187. * 01 24 2011 cp.wu
  188. * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving
  189. * 1. add an extra counter for tracking pending forward frames.
  190. * 2. notify TX service thread as well when there is pending forward frame
  191. * 3. correct build errors leaded by introduction of Wi-Fi direct separation module
  192. *
  193. * 12 15 2010 yuche.tsai
  194. * NULL
  195. * Update SLT Descriptor number configure in driver.
  196. *
  197. * 11 16 2010 yarco.yang
  198. * [WCXRP00000177] [MT5931 F/W] Performance tuning for 1st connection
  199. * Update TX buffer count
  200. *
  201. * 11 03 2010 cp.wu
  202. * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection
  203. * 1) use 8 buffers for MT5931 which is equipped with less memory
  204. * 2) modify MT5931 debug level to TRACE when download is successful
  205. *
  206. * 10 18 2010 cp.wu
  207. * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore
  208. * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion
  209. * 2. shorten polling count for shorter response time
  210. * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well
  211. *
  212. * 10 06 2010 cp.wu
  213. * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning
  214. * code reorganization to improve isolation between GLUE and CORE layers.
  215. *
  216. * 09 03 2010 kevin.huang
  217. * NULL
  218. * Refine #include sequence and solve recursive/nested #include issue
  219. *
  220. * 08 30 2010 cp.wu
  221. * NULL
  222. * API added: nicTxPendingPackets(), for simplifying porting layer
  223. *
  224. * 07 26 2010 cp.wu
  225. *
  226. * change TC4 initial value from 2 to 4.
  227. *
  228. * 07 13 2010 cp.wu
  229. *
  230. * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets
  231. * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending
  232. * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under
  233. * concurrent network operation
  234. *
  235. * 07 08 2010 cp.wu
  236. *
  237. * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
  238. *
  239. * 07 06 2010 yarco.yang
  240. * [WPD00003837][MT6620]Data Path Refine
  241. * Add MGMT Packet type for HIF_TX_HEADER
  242. *
  243. * 06 23 2010 cp.wu
  244. * [WPD00003833][MT6620 and MT5931] Driver migration
  245. * integrate .
  246. *
  247. * 06 21 2010 cp.wu
  248. * [WPD00003833][MT6620 and MT5931] Driver migration
  249. * refine TX-DONE callback.
  250. *
  251. * 06 21 2010 cp.wu
  252. * [WPD00003833][MT6620 and MT5931] Driver migration
  253. * TX descriptors are now allocated once for reducing allocation overhead
  254. *
  255. * 06 21 2010 cp.wu
  256. * [WPD00003833][MT6620 and MT5931] Driver migration
  257. * specify correct value for management frames.
  258. *
  259. * 06 11 2010 cp.wu
  260. * [WPD00003833][MT6620 and MT5931] Driver migration
  261. * 1) migrate assoc.c.
  262. * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness
  263. * 3) add configuration options for CNM_MEM and RSN modules
  264. * 4) add data path for management frames
  265. * 5) eliminate rPacketInfo of MSDU_INFO_T
  266. *
  267. * 06 10 2010 cp.wu
  268. * [WPD00003833][MT6620 and MT5931] Driver migration
  269. * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate
  270. * 2) add packet type for indicating management frames
  271. *
  272. * 06 09 2010 cp.wu
  273. * [WPD00003833][MT6620 and MT5931] Driver migration
  274. * add necessary changes to driver data paths.
  275. *
  276. * 06 09 2010 cp.wu
  277. * [WPD00003833][MT6620 and MT5931] Driver migration
  278. * add TX_PACKET_MGMT to indicate the frame is coming from management modules
  279. *
  280. * 06 07 2010 cp.wu
  281. * [WPD00003833][MT6620 and MT5931] Driver migration
  282. * merge wlan_def.h.
  283. *
  284. * 06 06 2010 kevin.huang
  285. * [WPD00003832][MT6620 5931] Create driver base
  286. * [MT6620 5931] Create driver base
  287. *
  288. * 03 30 2010 cp.wu
  289. * [WPD00001943]Create WiFi test driver framework on WinXP
  290. * remove driver-land statistics.
  291. *
  292. * 03 24 2010 cp.wu
  293. * [WPD00001943]Create WiFi test driver framework on WinXP
  294. * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK
  295. * * *
  296. *
  297. * 03 10 2010 cp.wu
  298. * [WPD00001943]Create WiFi test driver framework on WinXP
  299. * code clean: removing unused variables and structure definitions
  300. *
  301. * 03 02 2010 tehuang.liu
  302. * [WPD00001943]Create WiFi test driver framework on WinXP
  303. * Redistributed the initial TC resources for normal operation
  304. *
  305. * 03 02 2010 cp.wu
  306. * [WPD00001943]Create WiFi test driver framework on WinXP
  307. * add mutex to avoid multiple access to qmTxQueue simultaneously.
  308. *
  309. * 02 23 2010 cp.wu
  310. * [WPD00001943]Create WiFi test driver framework on WinXP
  311. * add new API: wlanProcessQueuedPackets()
  312. *
  313. * 02 10 2010 cp.wu
  314. * [WPD00001943]Create WiFi test driver framework on WinXP
  315. * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c]
  316. * * * 2) firmware image length is now retrieved via NdisFileOpen
  317. * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore
  318. * * * 4) nicRxWaitResponse() revised
  319. * * * 5) another set of TQ counter default value is added for fw-download state
  320. * * * 6) Wi-Fi load address is now retrieved from registry too
  321. *
  322. * 02 09 2010 cp.wu
  323. * [WPD00001943]Create WiFi test driver framework on WinXP
  324. * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address
  325. * * * * 2. follow MSDN defined behavior when associates to another AP
  326. * * * * 3. for firmware download, packet size could be up to 2048 bytes
  327. *
  328. * 01 27 2010 cp.wu
  329. * [WPD00001943]Create WiFi test driver framework on WinXP
  330. * 1. eliminate improper variable in rHifInfo
  331. * * * * * 2. block TX/ordinary OID when RF test mode is engaged
  332. * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode
  333. * * * * * 4. correct some HAL implementation
  334. *
  335. * 01 13 2010 tehuang.liu
  336. * [WPD00001943]Create WiFi test driver framework on WinXP
  337. * Enabled the Burst_End Indication mechanism
  338. *
  339. * 12 30 2009 cp.wu
  340. * [WPD00001943]Create WiFi test driver framework on WinXP
  341. * 1) According to CMD/EVENT documentation v0.8,
  342. * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used,
  343. * * * * * and result is retrieved by get ATInfo instead
  344. * * * * * 2) add 4 counter for recording aggregation statistics
  345. ** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:53:28 GMT mtk02752
  346. ** remove unused API
  347. ** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-27 11:08:00 GMT mtk02752
  348. ** add flush for reset
  349. ** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-24 19:56:49 GMT mtk02752
  350. ** remove redundant eTC
  351. ** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 22:01:08 GMT mtk02468
  352. ** Added MSDU_INFO fields for composing HIF TX header
  353. ** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:51 GMT mtk01084
  354. ** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:35:05 GMT mtk02752
  355. ** + nicTxMsduInfoList() for sending MsduInfoList
  356. ** + NIC_TX_BUFF_COUNT_TC[0~5]
  357. ** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-17 11:07:00 GMT mtk02752
  358. ** add nicTxAdjustTcq() API
  359. ** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 22:28:30 GMT mtk02752
  360. ** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure
  361. ** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 21:44:50 GMT mtk02752
  362. ** + nicTxReturnMsduInfo()
  363. ** + nicTxFillMsduInfo()
  364. ** + rFreeMsduInfoList field in TX_CTRL
  365. ** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-16 18:00:43 GMT mtk02752
  366. ** use P_PACKET_INFO_T for prPacket to avoid inventing another new structure for packet
  367. ** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-16 15:28:49 GMT mtk02752
  368. ** add ucQueuedPacketNum for indicating how many packets are queued by per STA/AC queue
  369. ** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-16 10:52:01 GMT mtk02752
  370. ** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-14 23:39:24 GMT mtk02752
  371. ** interface structure redefine
  372. ** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-13 21:17:03 GMT mtk02752
  373. ** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-29 19:53:10 GMT mtk01084
  374. ** remove strange code by Frog
  375. ** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:04 GMT mtk01084
  376. ** update for new HW architecture design
  377. ** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-02 13:53:03 GMT mtk01725
  378. ** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:36:50 GMT mtk01461
  379. ** Add declaration of nicTxReleaseResource()
  380. ** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:58:39 GMT mtk01461
  381. ** Move CMD_INFO_T related define and function to cmd_buf.h
  382. ** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:53 GMT mtk01461
  383. ** Add function for SDIO_TX_ENHANCE
  384. ** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:33:27 GMT mtk01461
  385. ** Define constants for TX PATH and add nicTxPollingResource
  386. ** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:32 GMT mtk01461
  387. ** Update TX PATH API
  388. ** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:38 GMT mtk01426
  389. ** Init for develop
  390. **
  391. */
  392. #ifndef _NIC_TX_H
  393. #define _NIC_TX_H
  394. /*******************************************************************************
  395. * C O M P I L E R F L A G S
  396. ********************************************************************************
  397. */
  398. /*******************************************************************************
  399. * E X T E R N A L R E F E R E N C E S
  400. ********************************************************************************
  401. */
  402. /*******************************************************************************
  403. * C O N S T A N T S
  404. ********************************************************************************
  405. */
  406. #define MAC_TX_RESERVED_FIELD 0
  407. #define NIC_TX_RESOURCE_POLLING_TIMEOUT 256
  408. #define NIC_TX_RESOURCE_POLLING_DELAY_MSEC 50
  409. #define NIC_TX_CMD_INFO_RESERVED_COUNT 4
  410. /* Maximum buffer count for individual HIF TCQ */
  411. #define NIC_TX_PAGE_COUNT_TC0 (NIC_TX_BUFF_COUNT_TC0 * NIC_TX_MAX_PAGE_PER_FRAME)
  412. #define NIC_TX_PAGE_COUNT_TC1 (NIC_TX_BUFF_COUNT_TC1 * NIC_TX_MAX_PAGE_PER_FRAME)
  413. #define NIC_TX_PAGE_COUNT_TC2 (NIC_TX_BUFF_COUNT_TC2 * NIC_TX_MAX_PAGE_PER_FRAME)
  414. #define NIC_TX_PAGE_COUNT_TC3 (NIC_TX_BUFF_COUNT_TC3 * NIC_TX_MAX_PAGE_PER_FRAME)
  415. #define NIC_TX_PAGE_COUNT_TC4 (NIC_TX_BUFF_COUNT_TC4 * NIC_TX_MAX_PAGE_PER_FRAME)
  416. #define NIC_TX_PAGE_COUNT_TC5 (NIC_TX_BUFF_COUNT_TC5 * NIC_TX_MAX_PAGE_PER_FRAME)
  417. #define NIC_TX_BUFF_COUNT_TC0 1
  418. #define NIC_TX_BUFF_COUNT_TC1 36
  419. #define NIC_TX_BUFF_COUNT_TC2 1
  420. #define NIC_TX_BUFF_COUNT_TC3 1
  421. #define NIC_TX_BUFF_COUNT_TC4 2
  422. #define NIC_TX_BUFF_COUNT_TC5 1
  423. #if CFG_ENABLE_FW_DOWNLOAD
  424. #define NIC_TX_INIT_BUFF_COUNT_TC0 8
  425. #define NIC_TX_INIT_BUFF_COUNT_TC1 0
  426. #define NIC_TX_INIT_BUFF_COUNT_TC2 0
  427. #define NIC_TX_INIT_BUFF_COUNT_TC3 0
  428. #define NIC_TX_INIT_BUFF_COUNT_TC4 8
  429. #define NIC_TX_INIT_BUFF_COUNT_TC5 0
  430. #define NIC_TX_INIT_BUFF_SUM (NIC_TX_INIT_BUFF_COUNT_TC0 + \
  431. NIC_TX_INIT_BUFF_COUNT_TC1 + \
  432. NIC_TX_INIT_BUFF_COUNT_TC2 + \
  433. NIC_TX_INIT_BUFF_COUNT_TC3 + \
  434. NIC_TX_INIT_BUFF_COUNT_TC4 + \
  435. NIC_TX_INIT_BUFF_COUNT_TC5)
  436. #define NIC_TX_INIT_PAGE_COUNT_TC0 (NIC_TX_INIT_BUFF_COUNT_TC0 * NIC_TX_MAX_PAGE_PER_FRAME)
  437. #define NIC_TX_INIT_PAGE_COUNT_TC1 (NIC_TX_INIT_BUFF_COUNT_TC1 * NIC_TX_MAX_PAGE_PER_FRAME)
  438. #define NIC_TX_INIT_PAGE_COUNT_TC2 (NIC_TX_INIT_BUFF_COUNT_TC2 * NIC_TX_MAX_PAGE_PER_FRAME)
  439. #define NIC_TX_INIT_PAGE_COUNT_TC3 (NIC_TX_INIT_BUFF_COUNT_TC3 * NIC_TX_MAX_PAGE_PER_FRAME)
  440. #define NIC_TX_INIT_PAGE_COUNT_TC4 (NIC_TX_INIT_BUFF_COUNT_TC4 * NIC_TX_MAX_PAGE_PER_FRAME)
  441. #define NIC_TX_INIT_PAGE_COUNT_TC5 (NIC_TX_INIT_BUFF_COUNT_TC5 * NIC_TX_MAX_PAGE_PER_FRAME)
  442. #endif
  443. #define NIC_TX_ENABLE_SECOND_HW_QUEUE 0
  444. /* 4 TODO: The following values shall be got from FW by query CMD */
  445. /*------------------------------------------------------------------------*/
  446. /* Resource Management related information */
  447. /*------------------------------------------------------------------------*/
  448. #define NIC_TX_PAGE_SIZE_IS_POWER_OF_2 TRUE
  449. #define NIC_TX_PAGE_SIZE_IN_POWER_OF_2 7
  450. #define NIC_TX_PAGE_SIZE 128 /* in unit of bytes */
  451. /* For development only */
  452. #define NIC_TX_MAX_SIZE_PER_FRAME 1532 /* calculated by MS native 802.11 format */
  453. #define NIC_TX_MAX_PAGE_PER_FRAME \
  454. ((NIC_TX_DESC_AND_PADDING_LENGTH + NIC_TX_DESC_HEADER_PADDING_LENGTH + \
  455. NIC_TX_MAX_SIZE_PER_FRAME + NIC_TX_PAGE_SIZE - 1) / NIC_TX_PAGE_SIZE)
  456. /*------------------------------------------------------------------------*/
  457. /* Tx descriptor related information */
  458. /*------------------------------------------------------------------------*/
  459. /* Frame Buffer
  460. * |<--Tx Descriptor-->|<--Tx descriptor padding-->|<--802.3/802.11 Header-->|<--Header padding-->|<--Payload-->|
  461. */
  462. /* Tx descriptor length by format (TXD.FT) */
  463. #define NIC_TX_DESC_LONG_FORMAT_LENGTH_DW 7 /* in unit of double word */
  464. #define NIC_TX_DESC_LONG_FORMAT_LENGTH DWORD_TO_BYTE(NIC_TX_DESC_LONG_FORMAT_LENGTH_DW)
  465. #define NIC_TX_DESC_SHORT_FORMAT_LENGTH_DW 2 /* in unit of double word */
  466. #define NIC_TX_DESC_SHORT_FORMAT_LENGTH DWORD_TO_BYTE(NIC_TX_DESC_SHORT_FORMAT_LENGTH_DW)
  467. /* Tx descriptor padding length (DMA.MICR.TXDSCR_PAD) */
  468. #define NIC_TX_DESC_PADDING_LENGTH_DW 0 /* in unit of double word */
  469. #define NIC_TX_DESC_PADDING_LENGTH DWORD_TO_BYTE(NIC_TX_DESC_PADDING_LENGTH_DW)
  470. #define NIC_TX_DESC_AND_PADDING_LENGTH (NIC_TX_DESC_LONG_FORMAT_LENGTH + NIC_TX_DESC_PADDING_LENGTH)
  471. /* Tx header padding (TXD.HeaderPadding) */
  472. /* Warning!! To use MAC header padding, every Tx packet must be decomposed */
  473. #define NIC_TX_DESC_HEADER_PADDING_LENGTH 0 /* in unit of bytes */
  474. #define NIC_TX_DEFAULT_WLAN_INDEX 31 /* For Tx packets to peer who has no WLAN table index. */
  475. #define NIC_TX_DESC_PID_RESERVED 0
  476. #define NIC_TX_DESC_DRIVER_PID_MIN 1
  477. #define NIC_TX_DESC_DRIVER_PID_MAX 127
  478. #define NIC_TX_DATA_DEFAULT_RETRY_COUNT_LIMIT 7
  479. #define NIC_TX_MGMT_DEFAULT_RETRY_COUNT_LIMIT 30
  480. #define NIC_TX_AC_BE_REMAINING_TX_TIME TX_DESC_TX_TIME_NO_LIMIT /* in unit of ms */
  481. #define NIC_TX_AC_BK_REMAINING_TX_TIME TX_DESC_TX_TIME_NO_LIMIT /* in unit of ms */
  482. #define NIC_TX_AC_VO_REMAINING_TX_TIME TX_DESC_TX_TIME_NO_LIMIT /* in unit of ms */
  483. #define NIC_TX_AC_VI_REMAINING_TX_TIME TX_DESC_TX_TIME_NO_LIMIT /* in unit of ms */
  484. /*------------------------------------------------------------------------*/
  485. /* Tx descriptor field related information */
  486. /*------------------------------------------------------------------------*/
  487. /* DW 0 */
  488. #define TX_DESC_TX_BYTE_COUNT_MASK BITS(0, 15)
  489. #define TX_DESC_TX_BYTE_COUNT_OFFSET 0
  490. #define TX_DESC_ETHER_TYPE_OFFSET_MASK BITS(0, 6)
  491. #define TX_DESC_ETHER_TYPE_OFFSET_OFFSET 0
  492. #define TX_DESC_IP_CHKSUM_OFFLOAD BIT(7)
  493. #define TX_DESC_TCP_UDP_CHKSUM_OFFLOAD BIT(0)
  494. #define TX_DESC_USB_NEXT_VLD BIT(1)
  495. #define TX_DESC_USB_TX_BURST BIT(2)
  496. #define TX_DESC_QUEUE_INDEX_MASK BITS(3, 6)
  497. #define TX_DESC_QUEUE_INDEX_OFFSET 3
  498. #define TX_DESC_PORT_INDEX BIT(7)
  499. #define TX_DESC_PORT_INDEX_OFFSET 7
  500. #define PORT_INDEX_LMAC 0
  501. #define PORT_INDEX_MCU 1
  502. /* DW 1 */
  503. #define TX_DESC_WLAN_INDEX_MASK BITS(0, 7)
  504. #define TX_DESC_WLAN_INDEX_OFFSET 0
  505. #define TX_DESC_HEADER_FORMAT_MASK BITS(5, 6)
  506. #define TX_DESC_HEADER_FORMAT_OFFSET 5
  507. #define HEADER_FORMAT_NON_802_11 0 /* Non-802.11 */
  508. #define HEADER_FORMAT_COMMAND 1 /* Command */
  509. #define HEADER_FORMAT_802_11_NORMAL_MODE 2 /* 802.11 (normal mode) */
  510. #define HEADER_FORMAT_802_11_ENHANCE_MODE 3 /* 802.11 (Enhancement mode) */
  511. #define HEADER_FORMAT_802_11_MASK BIT(1)
  512. #define TX_DESC_NON_802_11_MORE_DATA BIT(0)
  513. #define TX_DESC_NON_802_11_EOSP BIT(1)
  514. #define TX_DESC_NON_802_11_REMOVE_VLAN BIT(2)
  515. #define TX_DESC_NON_802_11_VLAN_FIELD BIT(3)
  516. #define TX_DESC_NON_802_11_ETHERNET_II BIT(4)
  517. #define TX_DESC_NOR_802_11_HEADER_LENGTH_MASK BITS(0, 4)
  518. #define TX_DESC_NOR_802_11_HEADER_LENGTH_OFFSET 0
  519. #define TX_DESC_ENH_802_11_EOSP BIT(1)
  520. #define TX_DESC_ENH_802_11_AMSDU BIT(2)
  521. #define TX_DESC_FORMAT BIT(7)
  522. #define TX_DESC_SHORT_FORMAT 0
  523. #define TX_DESC_LONG_FORMAT 1
  524. #define TX_DESC_HEADER_PADDING_LENGTH_MASK BITS(0, 1)
  525. #define TX_DESC_HEADER_PADDING_LENGTH_OFFSET 0
  526. #define TX_DESC_HEADER_PADDING_MODE BIT(2)
  527. #define TX_DESC_NO_ACK BIT(3)
  528. #define TX_DESC_TID_MASK BITS(4, 6)
  529. #define TX_DESC_TID_OFFSET 4
  530. #define TX_DESC_TID_NUM 8
  531. #define TX_DESC_PROTECTED_FRAME BIT(7)
  532. #define TX_DESC_PACKET_TYPE_MASK BITS(0, 1) /* SW Field */
  533. #define TX_DESC_PACKET_TYPE_OFFSET 0
  534. #define TX_DESC_OWN_MAC_MASK BITS(2, 7)
  535. #define TX_DESC_OWN_MAC_OFFSET 2
  536. /* DW 2 */
  537. #define TX_DESC_SUB_TYPE_MASK BITS(0, 3)
  538. #define TX_DESC_SUB_TYPE_OFFSET 0
  539. #define TX_DESC_TYPE_MASK BITS(4, 5)
  540. #define TX_DESC_TYPE_OFFSET 4
  541. #define TX_DESC_NDP BIT(6)
  542. #define TX_DESC_NDPA BIT(7)
  543. #define TX_DESC_SOUNDING BIT(0)
  544. #define TX_DESC_FORCE_RTS_CTS BIT(1)
  545. #define TX_DESC_BROADCAST_MULTICAST BIT(2)
  546. #define TX_DESC_BIP_PROTECTED BIT(3)
  547. #define TX_DESC_DURATION_FIELD_CONTROL BIT(4)
  548. #define TX_DESC_HTC_EXISTS BIT(5)
  549. #define TX_DESC_FRAGMENT_MASK BITS(6, 7)
  550. #define TX_DESC_FRAGMENT_OFFSET 6
  551. #define FRAGMENT_FISRT_PACKET 1
  552. #define FRAGMENT_MIDDLE_PACKET 2
  553. #define FRAGMENT_LAST_PACKET 3
  554. #define TX_DESC_REMAINING_MAX_TX_TIME BITS(0, 7)
  555. #define TX_DESC_TX_TIME_NO_LIMIT 0
  556. /* Unit of life time calculation of Tx descriptor */
  557. #define TX_DESC_LIFE_TIME_UNIT_IN_POWER_OF_2 5
  558. #define TX_DESC_LIFE_TIME_UNIT POWER_OF_2(TX_DESC_LIFE_TIME_UNIT_IN_POWER_OF_2)
  559. #define TX_DESC_POWER_OFFSET_MASK BITS(0, 4)
  560. #define TX_DESC_BA_DISABLE BIT(5)
  561. #define TX_DESC_TIMING_MEASUREMENT BIT(6)
  562. #define TX_DESC_FIXED_RATE BIT(7)
  563. /* DW 3 */
  564. #define TX_DESC_SW_RESERVED_MASK BITS(0, 5)
  565. #define TX_DESC_SW_RESERVED_OFFSET 0
  566. #define TX_DESC_TX_COUNT_MASK BITS(6, 10)
  567. #define TX_DESC_TX_COUNT_OFFSET 6
  568. #define TX_DESC_TX_COUNT_NO_ATTEMPT 0
  569. #define TX_DESC_TX_COUNT_NO_LIMIT 31
  570. #define TX_DESC_REMAINING_TX_COUNT_MASK BITS(11, 15)
  571. #define TX_DESC_REMAINING_TX_COUNT_OFFSET 11
  572. #define TX_DESC_SEQUENCE_NUMBER BITS(0, 11)
  573. #define TX_DESC_HW_RESERVED_MASK BITS(12, 13)
  574. #define TX_DESC_HW_RESERVED_OFFSET 12
  575. #define TX_DESC_PN_IS_VALID BIT(14)
  576. #define TX_DESC_SN_IS_VALID BIT(15)
  577. /* DW 4 */
  578. #define TX_DESC_PN_PART1 BITS(0, 31)
  579. /* DW 5 */
  580. #define TX_DESC_PACKET_ID BIT(0, 7)
  581. #define TX_DESC_TX_STATUS_FORMAT BIT(0)
  582. #define TX_DESC_TX_STATUS_FORMAT_OFFSET 0
  583. #define TX_DESC_TX_STATUS_TO_MCU BIT(1)
  584. #define TX_DESC_TX_STATUS_TO_HOST BIT(2)
  585. #define TX_DESC_DA_SOURCE BIT(3)
  586. #define TX_DESC_BAR_SSN_CONTROL BIT(4)
  587. #define TX_DESC_POWER_MANAGEMENT_CONTROL BIT(5)
  588. #define TX_DESC_PN_PART2 BITS(0, 15)
  589. /* DW 6 *//* FR = 1 */
  590. #define TX_DESC_FIXED_RATE_MODE BIT(0)
  591. #define TX_DESC_ANTENNA_INDEX_MASK BITS(2, 7)
  592. #define TX_DESC_ANTENNA_INDEX_OFFSET 2
  593. #define TX_DESC_BANDWIDTH_MASK BITS(0, 2)
  594. #define TX_DESC_SPATIAL_EXTENSION BIT(3)
  595. #define TX_DESC_ANTENNA_PRIORITY BITS(4, 6)
  596. #define TX_DESC_DYNAMIC_BANDWIDTH BIT(7)
  597. #define TX_DESC_EXPLICIT_BEAMFORMING BIT(0)
  598. #define TX_DESC_IMPLICIT_BEAMFORMING BIT(1)
  599. #define TX_DESC_FIXDE_RATE_MASK BITS(2, 13)
  600. #define TX_DESC_FIXDE_RATE_OFFSET 2
  601. #define TX_DESC_LDPC BIT(14)
  602. #define TX_DESC_GUARD_INTERVAL BIT(15)
  603. #if CFG_ENABLE_PKT_LIFETIME_PROFILE
  604. #define NIC_TX_TIME_THRESHOLD 100 /* in unit of ms */
  605. #endif
  606. /*******************************************************************************
  607. * D A T A T Y P E S
  608. ********************************************************************************
  609. */
  610. /* 3 *//* Session for TX QUEUES */
  611. /* The definition in this ENUM is used to categorize packet's Traffic Class according
  612. * to the their TID(User Priority).
  613. * In order to achieve QoS goal, a particular TC should not block the process of
  614. * another packet with different TC.
  615. * In current design we will have 5 categories(TCs) of SW resource.
  616. */
  617. /* HIF Tx interrupt status queue index*/
  618. typedef enum _ENUM_HIF_TX_INDEX_T {
  619. HIF_TX_AC0_INDEX = 0, /* HIF TX: AC0 packets */
  620. HIF_TX_AC1_INDEX, /* HIF TX: AC1 packets */
  621. HIF_TX_AC2_INDEX, /* HIF TX: AC2 packets */
  622. HIF_TX_AC3_INDEX, /* HIF TX: AC3 packets */
  623. HIF_TX_AC4_INDEX, /* HIF TX: AC4 packets */
  624. HIF_TX_AC5_INDEX, /* HIF TX: AC5 packets */
  625. HIF_TX_AC6_INDEX, /* HIF TX: AC6 packets */
  626. HIF_TX_BMC_INDEX, /* HIF TX: BMC packets */
  627. HIF_TX_BCN_INDEX, /* HIF TX: BCN packets */
  628. HIF_TX_AC10_INDEX, /* HIF TX: AC10 packets */
  629. HIF_TX_AC11_INDEX, /* HIF TX: AC11 packets */
  630. HIF_TX_AC12_INDEX, /* HIF TX: AC12 packets */
  631. HIF_TX_AC13_INDEX, /* HIF TX: AC13 packets */
  632. HIF_TX_AC14_INDEX, /* HIF TX: AC14 packets */
  633. HIF_TX_FFA_INDEX, /* HIF TX: free-for-all */
  634. HIF_TX_CPU_INDEX, /* HIF TX: CPU */
  635. HIF_TX_NUM /* Maximum number of HIF TX port. */
  636. } ENUM_HIF_TX_INDEX_T;
  637. /* LMAC Tx queue index */
  638. typedef enum _ENUM_MAC_TXQ_INDEX_T {
  639. MAC_TXQ_AC0_INDEX = 0,
  640. MAC_TXQ_AC1_INDEX,
  641. MAC_TXQ_AC2_INDEX,
  642. MAC_TXQ_AC3_INDEX,
  643. MAC_TXQ_AC4_INDEX,
  644. MAC_TXQ_AC5_INDEX,
  645. MAC_TXQ_AC6_INDEX,
  646. MAC_TXQ_BMC_INDEX,
  647. MAC_TXQ_BCN_INDEX,
  648. MAC_TXQ_AC10_INDEX,
  649. MAC_TXQ_AC11_INDEX,
  650. MAC_TXQ_AC12_INDEX,
  651. MAC_TXQ_AC13_INDEX,
  652. MAC_TXQ_AC14_INDEX,
  653. MAC_TXQ_NUM
  654. } ENUM_MAC_TXQ_INDEX_T;
  655. /* MCU quque index */
  656. typedef enum _ENUM_MCU_Q_INDEX_T {
  657. MCU_Q0_INDEX = 0,
  658. MCU_Q1_INDEX,
  659. MCU_Q2_INDEX,
  660. MCU_Q3_INDEX,
  661. MCU_Q_NUM
  662. } ENUM_MCU_Q_INDEX_T;
  663. /* Tc Resource index */
  664. typedef enum _ENUM_TRAFFIC_CLASS_INDEX_T {
  665. /*First HW queue */
  666. TC0_INDEX = 0, /* HIF TX: AC0 packets */
  667. TC1_INDEX, /* HIF TX: AC1 packets */
  668. TC2_INDEX, /* HIF TX: AC2 packets */
  669. TC3_INDEX, /* HIF TX: AC3 packets */
  670. TC4_INDEX, /* HIF TX: CPU packets */
  671. TC5_INDEX, /* HIF TX: AC4 packets */
  672. /* Second HW queue */
  673. #if NIC_TX_ENABLE_SECOND_HW_QUEUE
  674. TC6_INDEX, /* HIF TX: AC10 packets */
  675. TC7_INDEX, /* HIF TX: AC11 packets */
  676. TC8_INDEX, /* HIF TX: AC12 packets */
  677. TC9_INDEX, /* HIF TX: AC13 packets */
  678. TC10_INDEX, /* HIF TX: AC14 packets */
  679. #endif
  680. TC_NUM /* Maximum number of Traffic Classes. */
  681. } ENUM_TRAFFIC_CLASS_INDEX_T;
  682. /* per-Network Tc Resource index */
  683. typedef enum _ENUM_NETWORK_TC_RESOURCE_INDEX_T {
  684. /* QoS Data frame, WMM AC index */
  685. NET_TC_WMM_AC_BE_INDEX = 0,
  686. NET_TC_WMM_AC_BK_INDEX,
  687. NET_TC_WMM_AC_VI_INDEX,
  688. NET_TC_WMM_AC_VO_INDEX,
  689. /* Mgmt frame */
  690. NET_TC_MGMT_INDEX,
  691. /* nonQoS / non StaRec frame (BMC/non-associated frame) */
  692. NET_TC_NON_STAREC_NON_QOS_INDEX,
  693. NET_TC_NUM
  694. } ENUM_NETWORK_TC_RESOURCE_INDEX_T;
  695. typedef enum _ENUM_TX_STATISTIC_COUNTER_T {
  696. TX_MPDU_TOTAL_COUNT = 0,
  697. TX_INACTIVE_BSS_DROP,
  698. TX_INACTIVE_STA_DROP,
  699. TX_FORWARD_OVERFLOW_DROP,
  700. TX_AP_BORADCAST_DROP,
  701. TX_STATISTIC_COUNTER_NUM
  702. } ENUM_TX_STATISTIC_COUNTER_T;
  703. typedef enum _ENUM_FIX_BW_T {
  704. FIX_BW_NO_FIXED = 0,
  705. FIX_BW_20 = 4,
  706. FIX_BW_40,
  707. FIX_BW_80,
  708. FIX_BW_160,
  709. FIX_BW_NUM
  710. } ENUM_FIX_BW_T;
  711. typedef enum _ENUM_MSDU_OPTION_T {
  712. MSDU_OPT_NO_ACK = BIT(0),
  713. MSDU_OPT_NO_AGGREGATE = BIT(1),
  714. MSDU_OPT_TIMING_MEASURE = BIT(2),
  715. MSDU_OPT_RCPI_NOISE_STATUS = BIT(3),
  716. /* Option by Frame Format */
  717. /* Non-80211 */
  718. MSDU_OPT_MORE_DATA = BIT(4),
  719. MSDU_OPT_REMOVE_VLAN = BIT(5), /* Remove VLAN tag if exists */
  720. /* 80211-enhanced */
  721. MSDU_OPT_AMSDU = BIT(6),
  722. /* 80211-enhanced & Non-80211 */
  723. MSDU_OPT_EOSP = BIT(7),
  724. /* Beamform */
  725. MSDU_OPT_NDP = BIT(8),
  726. MSDU_OPT_NDPA = BIT(9),
  727. MSDU_OPT_SOUNDING = BIT(10),
  728. /* Protection */
  729. MSDU_OPT_FORCE_RTS = BIT(11),
  730. /* Security */
  731. MSDU_OPT_BIP = BIT(12),
  732. MSDU_OPT_PROTECTED_FRAME = BIT(13),
  733. /* SW Field */
  734. MSDU_OPT_SW_DURATION = BIT(14),
  735. MSDU_OPT_SW_PS_BIT = BIT(15),
  736. MSDU_OPT_SW_HTC = BIT(16),
  737. MSDU_OPT_SW_BAR_SN = BIT(17),
  738. /* Manual Mode */
  739. MSDU_OPT_MANUAL_FIRST_BIT = BIT(18),
  740. MSDU_OPT_MANUAL_LIFE_TIME = MSDU_OPT_MANUAL_FIRST_BIT,
  741. MSDU_OPT_MANUAL_RETRY_LIMIT = BIT(19),
  742. MSDU_OPT_MANUAL_POWER_OFFSET = BIT(20),
  743. MSDU_OPT_MANUAL_TX_QUE = BIT(21),
  744. MSDU_OPT_MANUAL_SN = BIT(22),
  745. MSDU_OPT_MANUAL_LAST_BIT = MSDU_OPT_MANUAL_SN
  746. } ENUM_MSDU_OPTION_T;
  747. typedef enum _ENUM_MSDU_CONTROL_FLAG_T {
  748. MSDU_CONTROL_FLAG_FORCE_TX = BIT(0)
  749. } ENUM_MSDU_CONTROL_FLAG_T;
  750. typedef enum _ENUM_MSDU_RATE_MODE_T {
  751. MSDU_RATE_MODE_AUTO = 0,
  752. MSDU_RATE_MODE_MANUAL_DESC,
  753. /* The following rate mode is not implemented yet */
  754. /* DON'T use!!! */
  755. MSDU_RATE_MODE_MANUAL_CR
  756. } ENUM_MSDU_RATE_MODE_T;
  757. typedef struct _TX_TCQ_STATUS_T {
  758. /* HIF reported page count delta */
  759. UINT_16 au2TxDonePageCount[TC_NUM]; /* other TC */
  760. UINT_16 au2PreUsedPageCount[TC_NUM];
  761. UINT_16 u2AvaliablePageCount; /* FFA */
  762. UINT_8 ucNextTcIdx; /* For round-robin distribute free page count */
  763. /* distributed page count */
  764. UINT_16 au2FreePageCount[TC_NUM];
  765. UINT_16 au2MaxNumOfPage[TC_NUM];
  766. /* buffer count */
  767. UINT_16 au2FreeBufferCount[TC_NUM];
  768. UINT_16 au2MaxNumOfBuffer[TC_NUM];
  769. } TX_TCQ_STATUS_T, *P_TX_TCQ_STATUS_T;
  770. typedef struct _TX_TCQ_ADJUST_T {
  771. INT_8 acVariation[TC_NUM];
  772. } TX_TCQ_ADJUST_T, *P_TX_TCQ_ADJUST_T;
  773. typedef struct _TX_CTRL_T {
  774. UINT_32 u4TxCachedSize;
  775. PUINT_8 pucTxCached;
  776. UINT_32 u4PageSize;
  777. UINT_32 u4TotalPageNum;
  778. UINT_32 u4TotalTxRsvPageNum;
  779. /* Elements below is classified according to TC (Traffic Class) value. */
  780. TX_TCQ_STATUS_T rTc;
  781. PUINT_8 pucTxCoalescingBufPtr;
  782. QUE_T rFreeMsduInfoList;
  783. /* Management Frame Tracking */
  784. /* number of management frames to be sent */
  785. INT_32 i4TxMgmtPendingNum;
  786. /* to tracking management frames need TX done callback */
  787. QUE_T rTxMgmtTxingQueue;
  788. #if CFG_HIF_STATISTICS
  789. UINT_32 u4TotalTxAccessNum;
  790. UINT_32 u4TotalTxPacketNum;
  791. #endif
  792. UINT_32 au4Statistics[TX_STATISTIC_COUNTER_NUM];
  793. /* Number to track forwarding frames */
  794. INT_32 i4PendingFwdFrameCount;
  795. } TX_CTRL_T, *P_TX_CTRL_T;
  796. typedef enum _ENUM_TX_PACKET_TYPE_T {
  797. TX_PACKET_TYPE_DATA = 0,
  798. TX_PACKET_TYPE_MGMT,
  799. /* TX_PACKET_TYPE_1X, */
  800. X_PACKET_TYPE_NUM
  801. } ENUM_TX_PACKET_TYPE_T, *P_ENUM_TX_PACKET_TYPE_T;
  802. typedef enum _ENUM_TX_PACKET_SRC_T {
  803. TX_PACKET_OS,
  804. TX_PACKET_OS_OID,
  805. TX_PACKET_FORWARDING,
  806. TX_PACKET_MGMT,
  807. TX_PACKET_NUM
  808. } ENUM_TX_PACKET_SRC_T;
  809. /* TX Call Back Function */
  810. typedef WLAN_STATUS(*PFN_TX_DONE_HANDLER) (IN P_ADAPTER_T prAdapter,
  811. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  812. #if CFG_ENABLE_PKT_LIFETIME_PROFILE
  813. typedef struct _PKT_PROFILE_T {
  814. BOOLEAN fgIsValid;
  815. #if CFG_PRINT_PKT_LIFETIME_PROFILE
  816. BOOLEAN fgIsPrinted;
  817. UINT_16 u2IpSn;
  818. UINT_16 u2RtpSn;
  819. UINT_8 ucTcxFreeCount;
  820. #endif
  821. OS_SYSTIME rHardXmitArrivalTimestamp;
  822. OS_SYSTIME rEnqueueTimestamp;
  823. OS_SYSTIME rDequeueTimestamp;
  824. OS_SYSTIME rHifTxDoneTimestamp;
  825. } PKT_PROFILE_T, *P_PKT_PROFILE_T;
  826. #endif
  827. /* TX transactions could be divided into 4 kinds:
  828. *
  829. * 1) 802.1X / Bluetooth-over-Wi-Fi Security Frames
  830. * [CMD_INFO_T] - [prPacket] - in skb or NDIS_PACKET form
  831. *
  832. * 2) MMPDU
  833. * [CMD_INFO_T] - [prPacket] - [MSDU_INFO_T] - [prPacket] - direct buffer for frame body
  834. *
  835. * 3) Command Packets
  836. * [CMD_INFO_T] - [pucInfoBuffer] - direct buffer for content of command packet
  837. *
  838. * 4) Normal data frame
  839. * [MSDU_INFO_T] - [prPacket] - in skb or NDIS_PACKET form
  840. */
  841. /* PS_FORWARDING_TYPE_NON_PS means that the receiving STA is in Active Mode
  842. * from the perspective of host driver (maybe not synchronized with FW --> SN is needed)
  843. */
  844. struct _MSDU_INFO_T {
  845. QUE_ENTRY_T rQueEntry;
  846. P_NATIVE_PACKET prPacket; /* Pointer to packet buffer */
  847. ENUM_TX_PACKET_SRC_T eSrc; /* specify OS/FORWARD packet */
  848. UINT_8 ucUserPriority; /* QoS parameter, convert to TID */
  849. /* For composing TX descriptor header */
  850. UINT_8 ucTC; /* Traffic Class: 0~4 (HIF TX0), 5 (HIF TX1) */
  851. UINT_8 ucPacketType; /* 0: Data, 1: Management Frame */
  852. UINT_8 ucStaRecIndex; /* STA_REC index */
  853. UINT_8 ucBssIndex; /* BSS_INFO_T index */
  854. UINT_8 ucWlanIndex; /* Wlan entry index */
  855. BOOLEAN fgIs802_1x; /* TRUE: 802.1x frame */
  856. BOOLEAN fgIs802_11; /* TRUE: 802.11 header is present */
  857. BOOLEAN fgIs802_3; /* TRUE: 802.3 frame */
  858. BOOLEAN fgIsVlanExists; /* TRUE: VLAN tag is exists */
  859. /* BOOLEAN fgIsBIP; *//* Management Frame Protection */
  860. /* BOOLEAN fgIsBasicRate; *//* Force Basic Rate Transmission */
  861. /* BOOLEAN fgIsMoreData; *//* More data */
  862. /* BOOLEAN fgIsEOSP; *//* End of service period */
  863. /* Special Option */
  864. UINT_32 u4Option; /* Special option in bitmask, no ACK, etc... */
  865. INT_8 cPowerOffset; /* Per-packet power offset, in 2's complement */
  866. UINT_16 u2SwSN; /* SW assigned sequence number */
  867. UINT_8 ucRetryLimit; /* The retry limit */
  868. UINT_32 u4RemainingLifetime; /* Remaining lifetime, unit:ms */
  869. /* Control flag */
  870. UINT_8 ucControlFlag; /* Control flag in bitmask */
  871. /* Fixed Rate Option */
  872. UINT_8 ucRateMode; /* Rate mode: AUTO, MANUAL_DESC, MANUAL_CR */
  873. UINT_32 u4FixedRateOption; /* The rate option, rate code, GI, etc... */
  874. BOOLEAN fgIsTXDTemplateValid; /* There is a valid Tx descriptor for this packet */
  875. /* flattened from PACKET_INFO_T */
  876. UINT_8 ucMacHeaderLength; /* MAC header legth */
  877. UINT_8 ucLlcLength; /* w/o EtherType */
  878. UINT_16 u2FrameLength; /* Total frame length */
  879. UINT_8 aucEthDestAddr[MAC_ADDR_LEN]; /* Ethernet Destination Address */
  880. UINT_8 ucPageCount; /* Required page count for this MSDU */
  881. /* for TX done tracking */
  882. UINT_8 ucTxSeqNum; /* MGMT frame serial number */
  883. UINT_8 ucPID; /* PID */
  884. PFN_TX_DONE_HANDLER pfTxDoneHandler; /* Tx done handler */
  885. #if CFG_ENABLE_PKT_LIFETIME_PROFILE
  886. PKT_PROFILE_T rPktProfile;
  887. #endif
  888. /* To be removed */
  889. UINT_8 ucFormatID; /* 0: MAUI, Linux, Windows NDIS 5.1 */
  890. /* UINT_16 u2PalLLH; *//* PAL Logical Link Header (for BOW network) */
  891. /* UINT_16 u2AclSN; *//* ACL Sequence Number (for BOW network) */
  892. UINT_8 ucPsForwardingType; /* See ENUM_PS_FORWARDING_TYPE_T */
  893. /* UINT_8 ucPsSessionID; *//* PS Session ID specified by the FW for the STA */
  894. /* TRUE means this is the last packet of the burst for (STA, TID) */
  895. /* BOOLEAN fgIsBurstEnd; */
  896. #if CFG_M0VE_BA_TO_DRIVER
  897. UINT_8 ucTID;
  898. #endif
  899. #if CFG_SUPPORT_MULTITHREAD
  900. /* Compose TxDesc in tx_thread and place here */
  901. UINT_8 aucTxDescBuffer[NIC_TX_DESC_AND_PADDING_LENGTH];
  902. #endif
  903. };
  904. /*!A data structure which is identical with HW MAC TX DMA Descriptor */
  905. typedef struct _HW_MAC_TX_DESC_T {
  906. /* DW 0 */
  907. UINT_16 u2TxByteCount;
  908. UINT_8 ucEtherOffset; /* Ether-Type Offset, IP checksum offload */
  909. UINT_8 ucPortIdx_QueueIdx; /* UDP/TCP checksum offload, USB NextVLD/TxBURST, Queue index, Port index */
  910. /* DW 1 */
  911. UINT_8 ucWlanIdx;
  912. UINT_8 ucHeaderFormat; /* Header format, TX descriptor format */
  913. UINT_8 ucHeaderPadding; /* Header padding, no ACK, TID, Protect frame */
  914. UINT_8 ucOwnMAC;
  915. /* Long Format, the following structure is for long format ONLY */
  916. /* DW 2 */
  917. UINT_8 ucType_SubType; /* Type, Sub-type, NDP, NDPA */
  918. UINT_8 ucFrag; /* Sounding, force RTS/CTS, BMC, BIP, Duration, HTC exist, Fragment */
  919. UINT_8 ucRemainingMaxTxTime;
  920. UINT_8 ucPowerOffset; /* Power offset, Disable BA, Timing measurement, Fixed rate */
  921. /* DW 3 */
  922. UINT_16 u2TxCountLimit; /* TX count limit */
  923. UINT_16 u2SN; /* SN, HW own, PN valid, SN valid */
  924. /* DW 4 */
  925. UINT_32 u4PN1;
  926. /* DW 5 */
  927. UINT_8 ucPID;
  928. UINT_8 ucTxStatus; /* TXS format, TXS to mcu, TXS to host, DA source, BAR SSN, Power management */
  929. UINT_16 u2PN2;
  930. /* DW 6 */
  931. UINT_8 ucAntID; /* Fixed rate, Antenna ID */
  932. UINT_8 ucBandwidth; /* Bandwidth, Spatial Extension, Antenna priority, Dynamic bandwidth */
  933. UINT_16 u2FixedRate; /* Explicit/implicit beamforming, Fixed rate table, LDPC, GI */
  934. } HW_MAC_TX_DESC_T, *P_HW_MAC_TX_DESC_T, **PP_HW_MAC_TX_DESC_T;
  935. typedef struct _TX_RESOURCE_CONTROL_T {
  936. /* HW TX queue definition */
  937. UINT_8 ucDestPortIndex;
  938. UINT_8 ucDestQueueIndex;
  939. /* HIF Interrupt status index */
  940. UINT_8 ucHifTxQIndex;
  941. } TX_RESOURCE_CONTROL_T, *PTX_RESOURCE_CONTROL_T;
  942. typedef struct _TX_TC_TRAFFIC_SETTING_T {
  943. UINT_8 ucTxDescLength;
  944. UINT_32 u4RemainingTxTime;
  945. UINT_8 ucTxCountLimit;
  946. } TX_TC_TRAFFIC_SETTING_T, P_TX_TC_TRAFFIC_SETTING_T;
  947. /*******************************************************************************
  948. * P U B L I C D A T A
  949. ********************************************************************************
  950. */
  951. /*******************************************************************************
  952. * P R I V A T E D A T A
  953. ********************************************************************************
  954. */
  955. /*******************************************************************************
  956. * M A C R O S
  957. ********************************************************************************
  958. */
  959. #define TX_INC_CNT(prTxCtrl, eCounter) \
  960. {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]++; }
  961. #define TX_ADD_CNT(prTxCtrl, eCounter, u8Amount) \
  962. {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter] += (UINT_32)u8Amount; }
  963. #define TX_GET_CNT(prTxCtrl, eCounter) \
  964. (((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter])
  965. #define TX_RESET_ALL_CNTS(prTxCtrl) \
  966. {kalMemZero(&prTxCtrl->au4Statistics[0], sizeof(prTxCtrl->au4Statistics)); }
  967. #if CFG_ENABLE_PKT_LIFETIME_PROFILE
  968. #if CFG_PRINT_PKT_LIFETIME_PROFILE
  969. #define PRINT_PKT_PROFILE(_pkt_profile, _note) \
  970. { \
  971. if (!(_pkt_profile)->fgIsPrinted) { \
  972. DBGLOG(TX, TRACE, "X[%lu] E[%lu] D[%lu] HD[%lu] B[%d] RTP[%d] %s\n", \
  973. (UINT_32)((_pkt_profile)->rHardXmitArrivalTimestamp), \
  974. (UINT_32)((_pkt_profile)->rEnqueueTimestamp), \
  975. (UINT_32)((_pkt_profile)->rDequeueTimestamp), \
  976. (UINT_32)((_pkt_profile)->rHifTxDoneTimestamp), \
  977. (UINT_8)((_pkt_profile)->ucTcxFreeCount), \
  978. (UINT_16)((_pkt_profile)->u2RtpSn), \
  979. (_note))); \
  980. (_pkt_profile)->fgIsPrinted = TRUE; \
  981. } \
  982. }
  983. #else
  984. #define PRINT_PKT_PROFILE(_pkt_profile, _note)
  985. #endif
  986. #define CHK_PROFILES_DELTA(_pkt1, _pkt2, _delta) \
  987. (CHECK_FOR_TIMEOUT((_pkt1)->rHardXmitArrivalTimestamp, (_pkt2)->rHardXmitArrivalTimestamp, (_delta)) || \
  988. CHECK_FOR_TIMEOUT((_pkt1)->rEnqueueTimestamp, (_pkt2)->rEnqueueTimestamp, (_delta)) || \
  989. CHECK_FOR_TIMEOUT((_pkt1)->rDequeueTimestamp, (_pkt2)->rDequeueTimestamp, (_delta)) || \
  990. CHECK_FOR_TIMEOUT((_pkt1)->rHifTxDoneTimestamp, (_pkt2)->rHifTxDoneTimestamp, (_delta)))
  991. #define CHK_PROFILE_DELTA(_pkt, _delta) \
  992. (CHECK_FOR_TIMEOUT((_pkt)->rEnqueueTimestamp, (_pkt)->rHardXmitArrivalTimestamp, (_delta)) || \
  993. CHECK_FOR_TIMEOUT((_pkt)->rDequeueTimestamp, (_pkt)->rEnqueueTimestamp, (_delta)) || \
  994. CHECK_FOR_TIMEOUT((_pkt)->rHifTxDoneTimestamp, (_pkt)->rDequeueTimestamp, (_delta)))
  995. #endif
  996. /*------------------------------------------------------------------------------
  997. * MACRO for MSDU_INFO
  998. *------------------------------------------------------------------------------
  999. */
  1000. #define TX_SET_MMPDU nicTxSetMngPacket
  1001. #define TX_SET_DATA_PACKET nicTxSetDataPacket
  1002. /*------------------------------------------------------------------------------
  1003. * MACRO for HW_MAC_TX_DESC_T
  1004. *------------------------------------------------------------------------------
  1005. */
  1006. #define TX_DESC_GET_FIELD(_rHwMacTxDescField, _mask, _offset) \
  1007. (((_rHwMacTxDescField) & (_mask)) >> (_offset))
  1008. #define TX_DESC_SET_FIELD(_rHwMacTxDescField, _value, _mask, _offset) \
  1009. { \
  1010. (_rHwMacTxDescField) &= ~(_mask); \
  1011. (_rHwMacTxDescField) |= (((_value) << (_offset)) & (_mask)); \
  1012. }
  1013. #define HAL_MAC_TX_DESC_SET_DW(_prHwMacTxDesc, _ucOffsetInDw, _ucLengthInDw, _pucValueAddr) \
  1014. kalMemCopy((PUINT_32)(_prHwMacTxDesc) + (_ucOffsetInDw), \
  1015. (PUINT_8)(_pucValueAddr), DWORD_TO_BYTE(_ucLengthInDw))
  1016. #define HAL_MAC_TX_DESC_GET_DW(_prHwMacTxDesc, _ucOffsetInDw, _ucLengthInDw, _pucValueAddr) \
  1017. kalMemCopy((PUINT_8)(_pucValueAddr), \
  1018. (PUINT_32)(_prHwMacTxDesc) + (_ucOffsetInDw), DWORD_TO_BYTE(_ucLengthInDw))
  1019. /* DW 0 */
  1020. #define HAL_MAC_TX_DESC_GET_TX_BYTE_COUNT(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2TxByteCount)
  1021. #define HAL_MAC_TX_DESC_SET_TX_BYTE_COUNT(_prHwMacTxDesc, _u2TxByteCount) \
  1022. (((_prHwMacTxDesc)->u2TxByteCount) = ((UINT_16)_u2TxByteCount))
  1023. #define HAL_MAC_TX_DESC_GET_ETHER_TYPE_OFFSET(_prHwMacTxDesc) \
  1024. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucEtherOffset, \
  1025. TX_DESC_ETHER_TYPE_OFFSET_MASK, TX_DESC_ETHER_TYPE_OFFSET_OFFSET)
  1026. #define HAL_MAC_TX_DESC_SET_ETHER_TYPE_OFFSET(_prHwMacTxDesc, _ucEtherTypeOffset) \
  1027. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucEtherOffset), \
  1028. ((UINT_8)_ucEtherTypeOffset), TX_DESC_ETHER_TYPE_OFFSET_MASK, TX_DESC_ETHER_TYPE_OFFSET_OFFSET)
  1029. #define HAL_MAC_TX_DESC_IS_IP_CHKSUM_ENABLED(_prHwMacTxDesc) \
  1030. (((_prHwMacTxDesc)->ucEtherOffset & TX_DESC_IP_CHKSUM_OFFLOAD)?FALSE:TRUE)
  1031. #define HAL_MAC_TX_DESC_SET_IP_CHKSUM(_prHwMacTxDesc) \
  1032. ((_prHwMacTxDesc)->ucEtherOffset |= TX_DESC_IP_CHKSUM_OFFLOAD)
  1033. #define HAL_MAC_TX_DESC_UNSET_IP_CHKSUM(_prHwMacTxDesc) \
  1034. ((_prHwMacTxDesc)->ucEtherOffset &= ~TX_DESC_IP_CHKSUM_OFFLOAD)
  1035. #define HAL_MAC_TX_DESC_IS_TCP_UDP_CHKSUM_ENABLED(_prHwMacTxDesc) \
  1036. (((_prHwMacTxDesc)->ucPortIdx_QueueIdx & TX_DESC_TCP_UDP_CHKSUM_OFFLOAD)?FALSE:TRUE)
  1037. #define HAL_MAC_TX_DESC_SET_TCP_UDP_CHKSUM(_prHwMacTxDesc) \
  1038. ((_prHwMacTxDesc)->ucPortIdx_QueueIdx |= TX_DESC_TCP_UDP_CHKSUM_OFFLOAD)
  1039. #define HAL_MAC_TX_DESC_UNSET_TCP_UDP_CHKSUM(_prHwMacTxDesc) \
  1040. ((_prHwMacTxDesc)->ucPortIdx_QueueIdx &= ~TX_DESC_TCP_UDP_CHKSUM_OFFLOAD)
  1041. #define HAL_MAC_TX_DESC_IS_USB_NEXT_VLD_ENABLED(_prHwMacTxDesc) \
  1042. (((_prHwMacTxDesc)->ucEtherOffset & TX_DESC_USB_NEXT_VLD)?TRUE:FALSE)
  1043. #define HAL_MAC_TX_DESC_SET_USB_NEXT_VLD(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucEtherOffset |= TX_DESC_USB_NEXT_VLD)
  1044. #define HAL_MAC_TX_DESC_UNSET_USB_NEXT_VLD(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucEtherOffset &= ~TX_DESC_USB_NEXT_VLD)
  1045. #define HAL_MAC_TX_DESC_IS_USB_TX_BURST_ENABLED(_prHwMacTxDesc) \
  1046. (((_prHwMacTxDesc)->ucPortIdx_QueueIdx & TX_DESC_USB_TX_BURST)?TRUE:FALSE)
  1047. #define HAL_MAC_TX_DESC_SET_USB_TX_BURST(_prHwMacTxDesc) \
  1048. ((_prHwMacTxDesc)->ucPortIdx_QueueIdx |= TX_DESC_USB_TX_BURST)
  1049. #define HAL_MAC_TX_DESC_UNSET_USB_TX_BURST(_prHwMacTxDesc) \
  1050. ((_prHwMacTxDesc)->ucPortIdx_QueueIdx &= ~TX_DESC_USB_TX_BURST)
  1051. #define HAL_MAC_TX_DESC_GET_QUEUE_INDEX(_prHwMacTxDesc) \
  1052. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucPortIdx_QueueIdx, TX_DESC_QUEUE_INDEX_MASK, TX_DESC_QUEUE_INDEX_OFFSET)
  1053. #define HAL_MAC_TX_DESC_SET_QUEUE_INDEX(_prHwMacTxDesc, _ucQueueIndex) \
  1054. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucPortIdx_QueueIdx), \
  1055. ((UINT_8)_ucQueueIndex), TX_DESC_QUEUE_INDEX_MASK, TX_DESC_QUEUE_INDEX_OFFSET)
  1056. #define HAL_MAC_TX_DESC_GET_PORT_INDEX(_prHwMacTxDesc) \
  1057. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucPortIdx_QueueIdx, TX_DESC_PORT_INDEX, TX_DESC_PORT_INDEX_OFFSET)
  1058. #define HAL_MAC_TX_DESC_SET_PORT_INDEX(_prHwMacTxDesc, _ucPortIndex) \
  1059. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucPortIdx_QueueIdx), \
  1060. ((UINT_8)_ucPortIndex), TX_DESC_PORT_INDEX, TX_DESC_PORT_INDEX_OFFSET)
  1061. /* DW 1 */
  1062. #define HAL_MAC_TX_DESC_GET_WLAN_INDEX(_prHwMacTxDesc) \
  1063. ((_prHwMacTxDesc)->ucWlanIdx)
  1064. #define HAL_MAC_TX_DESC_SET_WLAN_INDEX(_prHwMacTxDesc, _ucWlanIdx) \
  1065. (((_prHwMacTxDesc)->ucWlanIdx) = (_ucWlanIdx))
  1066. #define HAL_MAC_TX_DESC_IS_LONG_FORMAT(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_FORMAT)?TRUE:FALSE)
  1067. #define HAL_MAC_TX_DESC_SET_LONG_FORMAT(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_FORMAT)
  1068. #define HAL_MAC_TX_DESC_SET_SHORT_FORMAT(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_FORMAT)
  1069. #define HAL_MAC_TX_DESC_GET_HEADER_FORMAT(_prHwMacTxDesc) \
  1070. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucHeaderFormat, \
  1071. TX_DESC_HEADER_FORMAT_MASK, TX_DESC_HEADER_FORMAT_OFFSET)
  1072. #define HAL_MAC_TX_DESC_SET_HEADER_FORMAT(_prHwMacTxDesc, _ucHdrFormat) \
  1073. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucHeaderFormat), \
  1074. ((UINT_8)_ucHdrFormat), TX_DESC_HEADER_FORMAT_MASK, TX_DESC_HEADER_FORMAT_OFFSET)
  1075. /* HF = 0x00, 802.11 normal mode */
  1076. #define HAL_MAC_TX_DESC_IS_MORE_DATA(_prHwMacTxDesc) \
  1077. (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_MORE_DATA)?TRUE:FALSE)
  1078. #define HAL_MAC_TX_DESC_SET_MORE_DATA(_prHwMacTxDesc) \
  1079. ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_MORE_DATA)
  1080. #define HAL_MAC_TX_DESC_UNSET_MORE_DATA(_prHwMacTxDesc) \
  1081. ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_MORE_DATA)
  1082. #define HAL_MAC_TX_DESC_IS_REMOVE_VLAN(_prHwMacTxDesc) \
  1083. (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_REMOVE_VLAN)?TRUE:FALSE)
  1084. #define HAL_MAC_TX_DESC_SET_REMOVE_VLAN(_prHwMacTxDesc) \
  1085. ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_REMOVE_VLAN)
  1086. #define HAL_MAC_TX_DESC_UNSET_REMOVE_VLAN(_prHwMacTxDesc) \
  1087. ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_REMOVE_VLAN)
  1088. #define HAL_MAC_TX_DESC_IS_VLAN(_prHwMacTxDesc) \
  1089. (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_VLAN_FIELD)?TRUE:FALSE)
  1090. #define HAL_MAC_TX_DESC_SET_VLAN(_prHwMacTxDesc) \
  1091. ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_VLAN_FIELD)
  1092. #define HAL_MAC_TX_DESC_UNSET_VLAN(_prHwMacTxDesc) \
  1093. ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_VLAN_FIELD)
  1094. #define HAL_MAC_TX_DESC_IS_ETHERNET_II(_prHwMacTxDesc) \
  1095. (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_ETHERNET_II)?TRUE:FALSE)
  1096. #define HAL_MAC_TX_DESC_SET_ETHERNET_II(_prHwMacTxDesc) \
  1097. ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_ETHERNET_II)
  1098. #define HAL_MAC_TX_DESC_UNSET_ETHERNET_II(_prHwMacTxDesc) \
  1099. ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_ETHERNET_II)
  1100. /* HF = 0x00/0x11, 802.11 normal/enhancement mode */
  1101. #define HAL_MAC_TX_DESC_IS_EOSP(_prHwMacTxDesc) \
  1102. (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_EOSP)?TRUE:FALSE)
  1103. #define HAL_MAC_TX_DESC_SET_EOSP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_EOSP)
  1104. #define HAL_MAC_TX_DESC_UNSET_EOSP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_EOSP)
  1105. /* HF = 0x11, 802.11 enhancement mode */
  1106. #define HAL_MAC_TX_DESC_IS_AMSDU(_prHwMacTxDesc) \
  1107. (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_ENH_802_11_AMSDU)?TRUE:FALSE)
  1108. #define HAL_MAC_TX_DESC_SET_AMSDU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_ENH_802_11_AMSDU)
  1109. #define HAL_MAC_TX_DESC_UNSET_AMSDU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_ENH_802_11_AMSDU)
  1110. /* HF = 0x10, non-802.11 */
  1111. #define HAL_MAC_TX_DESC_GET_802_11_HEADER_LENGTH(_prHwMacTxDesc) \
  1112. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucHeaderFormat, \
  1113. TX_DESC_NOR_802_11_HEADER_LENGTH_MASK, TX_DESC_NOR_802_11_HEADER_LENGTH_OFFSET)
  1114. #define HAL_MAC_TX_DESC_SET_802_11_HEADER_LENGTH(_prHwMacTxDesc, _ucHdrLength) \
  1115. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucHeaderFormat), \
  1116. ((UINT_8)_ucHdrLength), TX_DESC_NOR_802_11_HEADER_LENGTH_MASK, TX_DESC_NOR_802_11_HEADER_LENGTH_OFFSET)
  1117. #define HAL_MAC_TX_DESC_GET_HEADER_PADDING(_prHwMacTxDesc) \
  1118. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucHeaderPadding, \
  1119. TX_DESC_HEADER_PADDING_LENGTH_MASK, TX_DESC_HEADER_PADDING_LENGTH_OFFSET)
  1120. #define HAL_MAC_TX_DESC_SET_HEADER_PADDING(_prHwMacTxDesc, _ucHdrPadding) \
  1121. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucHeaderPadding), \
  1122. ((UINT_8)_ucHdrPadding), TX_DESC_HEADER_PADDING_LENGTH_MASK, TX_DESC_HEADER_PADDING_LENGTH_OFFSET)
  1123. #define HAL_MAC_TX_DESC_IS_HEADER_PADDING_IN_THE_HEAD(_prHwMacTxDesc) \
  1124. (((_prHwMacTxDesc)->ucHeaderPadding & TX_DESC_HEADER_PADDING_MODE)?TRUE:FALSE)
  1125. #define HAL_MAC_TX_DESC_SET_HEADER_PADDING_IN_THE_HEAD(_prHwMacTxDesc) \
  1126. ((_prHwMacTxDesc)->ucHeaderPadding |= TX_DESC_HEADER_PADDING_MODE)
  1127. #define HAL_MAC_TX_DESC_SET_HEADER_PADDING_IN_THE_TAIL(_prHwMacTxDesc) \
  1128. ((_prHwMacTxDesc)->ucHeaderPadding &= ~TX_DESC_HEADER_PADDING_MODE)
  1129. #define HAL_MAC_TX_DESC_IS_NO_ACK(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucHeaderPadding & TX_DESC_NO_ACK)?TRUE:FALSE)
  1130. #define HAL_MAC_TX_DESC_SET_NO_ACK(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderPadding |= TX_DESC_NO_ACK)
  1131. #define HAL_MAC_TX_DESC_UNSET_NO_ACK(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderPadding &= ~TX_DESC_NO_ACK)
  1132. #define HAL_MAC_TX_DESC_GET_TID(_prHwMacTxDesc) \
  1133. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucHeaderPadding, TX_DESC_TID_MASK, TX_DESC_TID_OFFSET)
  1134. #define HAL_MAC_TX_DESC_SET_TID(_prHwMacTxDesc, _ucTID) \
  1135. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucHeaderPadding), ((UINT_8)_ucTID), TX_DESC_TID_MASK, TX_DESC_TID_OFFSET)
  1136. #define HAL_MAC_TX_DESC_IS_PROTECTION(_prHwMacTxDesc) \
  1137. (((_prHwMacTxDesc)->ucHeaderPadding & TX_DESC_PROTECTED_FRAME)?TRUE:FALSE)
  1138. #define HAL_MAC_TX_DESC_SET_PROTECTION(_prHwMacTxDesc) \
  1139. ((_prHwMacTxDesc)->ucHeaderPadding |= TX_DESC_PROTECTED_FRAME)
  1140. #define HAL_MAC_TX_DESC_UNSET_PROTECTION(_prHwMacTxDesc) \
  1141. ((_prHwMacTxDesc)->ucHeaderPadding &= ~TX_DESC_PROTECTED_FRAME)
  1142. #define HAL_MAC_TX_DESC_GET_OWN_MAC_INDEX(_prHwMacTxDesc) \
  1143. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucOwnMAC, TX_DESC_OWN_MAC_MASK, TX_DESC_OWN_MAC_OFFSET)
  1144. #define HAL_MAC_TX_DESC_SET_OWN_MAC_INDEX(_prHwMacTxDesc, _ucOwnMacIdx) \
  1145. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucOwnMAC), ((UINT_8)_ucOwnMacIdx), \
  1146. TX_DESC_OWN_MAC_MASK, TX_DESC_OWN_MAC_OFFSET)
  1147. /* DW 2 */
  1148. #define HAL_MAC_TX_DESC_GET_SUB_TYPE(_prHwMacTxDesc) \
  1149. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucType_SubType, TX_DESC_SUB_TYPE_MASK, TX_DESC_SUB_TYPE_OFFSET)
  1150. #define HAL_MAC_TX_DESC_SET_SUB_TYPE(_prHwMacTxDesc, _ucSubType) \
  1151. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucType_SubType), \
  1152. ((UINT_8)_ucSubType), TX_DESC_SUB_TYPE_MASK, TX_DESC_SUB_TYPE_OFFSET)
  1153. #define HAL_MAC_TX_DESC_GET_TYPE(_prHwMacTxDesc) \
  1154. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucType_SubType, TX_DESC_TYPE_MASK, TX_DESC_TYPE_OFFSET)
  1155. #define HAL_MAC_TX_DESC_SET_TYPE(_prHwMacTxDesc, _ucType) \
  1156. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucType_SubType), ((UINT_8)_ucType), TX_DESC_TYPE_MASK, TX_DESC_TYPE_OFFSET)
  1157. #define HAL_MAC_TX_DESC_IS_NDP(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucType_SubType & TX_DESC_NDP)?TRUE:FALSE)
  1158. #define HAL_MAC_TX_DESC_SET_NDP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucType_SubType |= TX_DESC_NDP)
  1159. #define HAL_MAC_TX_DESC_UNSET_NDP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucType_SubType &= ~TX_DESC_NDP)
  1160. #define HAL_MAC_TX_DESC_IS_NDPA(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucType_SubType & TX_DESC_NDPA)?TRUE:FALSE)
  1161. #define HAL_MAC_TX_DESC_SET_NDPA(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucType_SubType |= TX_DESC_NDPA)
  1162. #define HAL_MAC_TX_DESC_UNSET_NDPA(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucType_SubType &= ~TX_DESC_NDPA)
  1163. #define HAL_MAC_TX_DESC_IS_SOUNDING_FRAME(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_SOUNDING)?TRUE:FALSE)
  1164. #define HAL_MAC_TX_DESC_SET_SOUNDING_FRAME(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_SOUNDING)
  1165. #define HAL_MAC_TX_DESC_UNSET_SOUNDING_FRAME(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_SOUNDING)
  1166. #define HAL_MAC_TX_DESC_IS_FORCE_RTS_CTS_EN(_prHwMacTxDesc) \
  1167. (((_prHwMacTxDesc)->ucFrag & TX_DESC_FORCE_RTS_CTS)?TRUE:FALSE)
  1168. #define HAL_MAC_TX_DESC_SET_FORCE_RTS_CTS(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_FORCE_RTS_CTS)
  1169. #define HAL_MAC_TX_DESC_UNSET_FORCE_RTS_CTS(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_FORCE_RTS_CTS)
  1170. #define HAL_MAC_TX_DESC_IS_BMC(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_BROADCAST_MULTICAST)?TRUE:FALSE)
  1171. #define HAL_MAC_TX_DESC_SET_BMC(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_BROADCAST_MULTICAST)
  1172. #define HAL_MAC_TX_DESC_UNSET_BMC(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_BROADCAST_MULTICAST)
  1173. #define HAL_MAC_TX_DESC_IS_BIP(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_BIP_PROTECTED)?TRUE:FALSE)
  1174. #define HAL_MAC_TX_DESC_SET_BIP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_BIP_PROTECTED)
  1175. #define HAL_MAC_TX_DESC_UNSET_BIP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_BIP_PROTECTED)
  1176. #define HAL_MAC_TX_DESC_IS_DURATION_CONTROL_BY_SW(_prHwMacTxDesc) \
  1177. (((_prHwMacTxDesc)->ucFrag & TX_DESC_DURATION_FIELD_CONTROL)?TRUE:FALSE)
  1178. #define HAL_MAC_TX_DESC_SET_DURATION_CONTROL_BY_SW(_prHwMacTxDesc) \
  1179. ((_prHwMacTxDesc)->ucFrag |= TX_DESC_DURATION_FIELD_CONTROL)
  1180. #define HAL_MAC_TX_DESC_SET_DURATION_CONTROL_BY_HW(_prHwMacTxDesc) \
  1181. ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_DURATION_FIELD_CONTROL)
  1182. #define HAL_MAC_TX_DESC_IS_HTC_EXIST(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_HTC_EXISTS)?TRUE:FALSE)
  1183. #define HAL_MAC_TX_DESC_SET_HTC_EXIST(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_HTC_EXISTS)
  1184. #define HAL_MAC_TX_DESC_UNSET_HTC_EXIST(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_HTC_EXISTS)
  1185. #define HAL_MAC_TX_DESC_IS_FRAG_PACKET(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_FRAGMENT_MASK)?TRUE:FALSE)
  1186. #define HAL_MAC_TX_DESC_GET_FRAG_PACKET_POS(_prHwMacTxDesc) \
  1187. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucFrag, TX_DESC_FRAGMENT_MASK, TX_DESC_FRAGMENT_OFFSET)
  1188. #define HAL_MAC_TX_DESC_SET_FRAG_PACKET_POS(_prHwMacTxDesc, _ucFragPos) \
  1189. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucFrag), \
  1190. ((UINT_8)_ucFragPos), TX_DESC_FRAGMENT_MASK, TX_DESC_FRAGMENT_OFFSET)
  1191. /* For driver */
  1192. /* in unit of 32TU */
  1193. #define HAL_MAC_TX_DESC_GET_REMAINING_LIFE_TIME(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucRemainingMaxTxTime)
  1194. #define HAL_MAC_TX_DESC_SET_REMAINING_LIFE_TIME(_prHwMacTxDesc, _ucLifeTime) \
  1195. ((_prHwMacTxDesc)->ucRemainingMaxTxTime = (_ucLifeTime))
  1196. /* in unit of ms (minimal value is about 40ms) */
  1197. #define HAL_MAC_TX_DESC_GET_REMAINING_LIFE_TIME_IN_MS(_prHwMacTxDesc) \
  1198. (TU_TO_MSEC(HAL_MAC_TX_DESC_GET_REMAINING_LIFE_TIME(_prHwMacTxDesc) << TX_DESC_LIFE_TIME_UNIT_IN_POWER_OF_2))
  1199. #define HAL_MAC_TX_DESC_SET_REMAINING_LIFE_TIME_IN_MS(_prHwMacTxDesc, _u4LifeTimeMs) \
  1200. { \
  1201. UINT_32 u4LifeTimeInUnit = \
  1202. ((MSEC_TO_USEC(_u4LifeTimeMs) / USEC_PER_TU) >> TX_DESC_LIFE_TIME_UNIT_IN_POWER_OF_2); \
  1203. if (u4LifeTimeInUnit >= BIT(8)) { \
  1204. u4LifeTimeInUnit = BITS(0, 7); \
  1205. } \
  1206. else if ((_u4LifeTimeMs != TX_DESC_TX_TIME_NO_LIMIT) \
  1207. && (u4LifeTimeInUnit == TX_DESC_TX_TIME_NO_LIMIT)) { \
  1208. u4LifeTimeInUnit = 1; \
  1209. } \
  1210. HAL_MAC_TX_DESC_SET_REMAINING_LIFE_TIME(_prHwMacTxDesc, (UINT_8)u4LifeTimeInUnit); \
  1211. }
  1212. #define HAL_MAC_TX_DESC_GET_POWER_OFFSET(_prHwMacTxDesc) \
  1213. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucPowerOffset, TX_DESC_POWER_OFFSET_MASK, 0)
  1214. #define HAL_MAC_TX_DESC_SET_POWER_OFFSET(_prHwMacTxDesc, _ucPowerOffset) \
  1215. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucPowerOffset), ((UINT_8)_ucPowerOffset), TX_DESC_POWER_OFFSET_MASK, 0)
  1216. #define HAL_MAC_TX_DESC_IS_BA_DISABLE(_prHwMacTxDesc) \
  1217. (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_BA_DISABLE)?TRUE:FALSE)
  1218. #define HAL_MAC_TX_DESC_SET_BA_DISABLE(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_BA_DISABLE)
  1219. #define HAL_MAC_TX_DESC_SET_BA_ENABLE(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_BA_DISABLE)
  1220. #define HAL_MAC_TX_DESC_IS_TIMING_MEASUREMENT(_prHwMacTxDesc) \
  1221. (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_TIMING_MEASUREMENT)?TRUE:FALSE)
  1222. #define HAL_MAC_TX_DESC_SET_TIMING_MEASUREMENT(_prHwMacTxDesc) \
  1223. ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_TIMING_MEASUREMENT)
  1224. #define HAL_MAC_TX_DESC_UNSET_TIMING_MEASUREMENT(_prHwMacTxDesc) \
  1225. ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_TIMING_MEASUREMENT)
  1226. #define HAL_MAC_TX_DESC_IS_FIXED_RATE_ENABLE(_prHwMacTxDesc) \
  1227. (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_FIXED_RATE)?TRUE:FALSE)
  1228. #define HAL_MAC_TX_DESC_SET_FIXED_RATE_ENABLE(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_FIXED_RATE)
  1229. #define HAL_MAC_TX_DESC_SET_FIXED_RATE_DISABLE(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_FIXED_RATE)
  1230. /* DW 3 */
  1231. #define HAL_MAC_TX_DESC_GET_SW_RESERVED(_prHwMacTxDesc) \
  1232. TX_DESC_GET_FIELD((_prHwMacTxDesc)->u2TxCountLimit, \
  1233. TX_DESC_SW_RESERVED_MASK, TX_DESC_SW_RESERVED_OFFSET)
  1234. #define HAL_MAC_TX_DESC_SET_SW_RESERVED(_prHwMacTxDesc, _ucSwReserved) \
  1235. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2TxCountLimit), \
  1236. ((UINT_8)_ucSwReserved), TX_DESC_SW_RESERVED_MASK, TX_DESC_SW_RESERVED_OFFSET)
  1237. #define HAL_MAC_TX_DESC_GET_TX_COUNT(_prHwMacTxDesc) \
  1238. TX_DESC_GET_FIELD((_prHwMacTxDesc)->u2TxCountLimit, \
  1239. TX_DESC_TX_COUNT_MASK, TX_DESC_TX_COUNT_OFFSET)
  1240. #define HAL_MAC_TX_DESC_SET_TX_COUNT(_prHwMacTxDesc, _ucTxCountLimit) \
  1241. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2TxCountLimit), \
  1242. ((UINT_8)_ucTxCountLimit), TX_DESC_TX_COUNT_MASK, TX_DESC_TX_COUNT_OFFSET)
  1243. #define HAL_MAC_TX_DESC_GET_REMAINING_TX_COUNT(_prHwMacTxDesc) \
  1244. TX_DESC_GET_FIELD((_prHwMacTxDesc)->u2TxCountLimit, \
  1245. TX_DESC_REMAINING_TX_COUNT_MASK, TX_DESC_REMAINING_TX_COUNT_OFFSET)
  1246. #define HAL_MAC_TX_DESC_SET_REMAINING_TX_COUNT(_prHwMacTxDesc, _ucTxCountLimit) \
  1247. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2TxCountLimit), ((UINT_8)_ucTxCountLimit), \
  1248. TX_DESC_REMAINING_TX_COUNT_MASK, TX_DESC_REMAINING_TX_COUNT_OFFSET)
  1249. #define HAL_MAC_TX_DESC_GET_SEQUENCE_NUMBER(_prHwMacTxDesc) \
  1250. TX_DESC_GET_FIELD((_prHwMacTxDesc)->u2SN, TX_DESC_SEQUENCE_NUMBER, 0)
  1251. #define HAL_MAC_TX_DESC_SET_SEQUENCE_NUMBER(_prHwMacTxDesc, _u2SN) \
  1252. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2SN), ((UINT_16)_u2SN), TX_DESC_SEQUENCE_NUMBER, 0)
  1253. #define HAL_MAC_TX_DESC_SET_HW_RESERVED(_prHwMacTxDesc, _ucHwReserved) \
  1254. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2SN), ((UINT_8)_ucHwReserved), \
  1255. TX_DESC_HW_RESERVED_MASK, TX_DESC_HW_RESERVED_OFFSET)
  1256. #define HAL_MAC_TX_DESC_IS_TXD_SN_VALID(_prHwMacTxDesc) (((_prHwMacTxDesc)->u2SN & TX_DESC_SN_IS_VALID)?TRUE:FALSE)
  1257. #define HAL_MAC_TX_DESC_SET_TXD_SN_VALID(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2SN |= TX_DESC_SN_IS_VALID)
  1258. #define HAL_MAC_TX_DESC_SET_TXD_SN_INVALID(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2SN &= ~TX_DESC_SN_IS_VALID)
  1259. #define HAL_MAC_TX_DESC_IS_TXD_PN_VALID(_prHwMacTxDesc) (((_prHwMacTxDesc)->u2SN & TX_DESC_PN_IS_VALID)?TRUE:FALSE)
  1260. #define HAL_MAC_TX_DESC_SET_TXD_PN_VALID(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2SN |= TX_DESC_PN_IS_VALID)
  1261. #define HAL_MAC_TX_DESC_SET_TXD_PN_INVALID(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2SN &= ~TX_DESC_PN_IS_VALID)
  1262. #define HAL_MAC_TX_DESC_ASSIGN_SN_BY_SW(_prHwMacTxDesc, _u2SN) \
  1263. { \
  1264. HAL_MAC_TX_DESC_SET_SEQUENCE_NUMBER(_prHwMacTxDesc, _u2SN); \
  1265. HAL_MAC_TX_DESC_SET_TXD_SN_VALID(_prHwMacTxDesc); \
  1266. }
  1267. #define HAL_MAC_TX_DESC_ASSIGN_SN_BY_HW(_prHwMacTxDesc) \
  1268. { \
  1269. HAL_MAC_TX_DESC_SET_SEQUENCE_NUMBER(_prHwMacTxDesc, 0); \
  1270. HAL_MAC_TX_DESC_SET_TXD_SN_INVALID(_prHwMacTxDesc); \
  1271. }
  1272. /* DW 4 */
  1273. #define HAL_MAC_TX_DESC_GET_PN(_prHwMacTxDesc, _u4PN_0_31, _u2PN_32_47) \
  1274. { \
  1275. ((UINT_32)_u4PN_0_31) = (_prHwMacTxDesc)->u4PN1; \
  1276. ((UINT_16)_u2PN_32_47) = (_prHwMacTxDesc)->u2PN2; \
  1277. }
  1278. #define HAL_MAC_TX_DESC_SET_PN(_prHwMacTxDesc, _u4PN_0_31, _u2PN_32_47) \
  1279. { \
  1280. (_prHwMacTxDesc)->u4PN1 = ((UINT_32)_u4PN_0_31); \
  1281. (_prHwMacTxDesc)->u2PN2 = ((UINT_16)_u2PN_32_47); \
  1282. }
  1283. #define HAL_MAC_TX_DESC_ASSIGN_PN_BY_SW(_prHwMacTxDesc, _u4PN_0_31, _u2PN_32_47) \
  1284. { \
  1285. HAL_MAC_TX_DESC_SET_PN(_prHwMacTxDesc, _u4PN_0_31, _u2PN_32_47); \
  1286. HAL_MAC_TX_DESC_SET_TXD_PN_VALID(_prHwMacTxDesc); \
  1287. }
  1288. #define HAL_MAC_TX_DESC_ASSIGN_PSN_BY_HW(_prHwMacTxDesc) \
  1289. { \
  1290. HAL_MAC_TX_DESC_SET_PN(_prHwMacTxDesc, 0, 0); \
  1291. HAL_MAC_TX_DESC_SET_TXD_PN_INVALID(_prHwMacTxDesc); \
  1292. }
  1293. /* DW 5 */
  1294. #define HAL_MAC_TX_DESC_GET_PID(_prHwMacTxDesc) \
  1295. ((_prHwMacTxDesc)->ucPID)
  1296. #define HAL_MAC_TX_DESC_SET_PID(_prHwMacTxDesc, _ucPID) \
  1297. (((_prHwMacTxDesc)->ucPID) = (_ucPID))
  1298. #define HAL_MAC_TX_DESC_GET_TXS_FORMAT(_prHwMacTxDesc) \
  1299. TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucTxStatus, TX_DESC_TX_STATUS_FORMAT, TX_DESC_TX_STATUS_FORMAT_OFFSET)
  1300. #define HAL_MAC_TX_DESC_SET_TXS_FORMAT(_prHwMacTxDesc, _ucTXSFormat) \
  1301. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucTxStatus), \
  1302. ((UINT_8)_ucTXSFormat), TX_DESC_TX_STATUS_FORMAT, TX_DESC_TX_STATUS_FORMAT_OFFSET)
  1303. #define HAL_MAC_TX_DESC_IS_TXS_TO_MCU(_prHwMacTxDesc) \
  1304. (((_prHwMacTxDesc)->ucTxStatus & TX_DESC_TX_STATUS_TO_MCU)?TRUE:FALSE)
  1305. #define HAL_MAC_TX_DESC_SET_TXS_TO_MCU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucTxStatus |= TX_DESC_TX_STATUS_TO_MCU)
  1306. #define HAL_MAC_TX_DESC_UNSET_TXS_TO_MCU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucTxStatus &= ~TX_DESC_TX_STATUS_TO_MCU)
  1307. #define HAL_MAC_TX_DESC_IS_TXS_TO_HOST(_prHwMacTxDesc) \
  1308. (((_prHwMacTxDesc)->ucTxStatus & TX_DESC_TX_STATUS_TO_HOST)?TRUE:FALSE)
  1309. #define HAL_MAC_TX_DESC_SET_TXS_TO_HOST(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucTxStatus |= TX_DESC_TX_STATUS_TO_HOST)
  1310. #define HAL_MAC_TX_DESC_UNSET_TXS_TO_HOST(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucTxStatus &= ~TX_DESC_TX_STATUS_TO_HOST)
  1311. #define HAL_MAC_TX_DESC_IS_DA_FROM_WTBL(_prHwMacTxDesc) \
  1312. (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_DA_SOURCE)?TRUE:FALSE)
  1313. #define HAL_MAC_TX_DESC_SET_DA_FROM_WTBL(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_DA_SOURCE)
  1314. #define HAL_MAC_TX_DESC_SET_DA_FROM_MSDU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_DA_SOURCE)
  1315. #define HAL_MAC_TX_DESC_IS_SW_BAR_SSN(_prHwMacTxDesc) \
  1316. (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_BAR_SSN_CONTROL)?TRUE:FALSE)
  1317. #define HAL_MAC_TX_DESC_SET_SW_BAR_SSN(_prHwMacTxDesc) \
  1318. ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_BAR_SSN_CONTROL)
  1319. #define HAL_MAC_TX_DESC_SET_HW_BAR_SSN(_prHwMacTxDesc) \
  1320. ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_BAR_SSN_CONTROL)
  1321. #define HAL_MAC_TX_DESC_IS_SW_PM_CONTROL(_prHwMacTxDesc) \
  1322. (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_POWER_MANAGEMENT_CONTROL)?TRUE:FALSE)
  1323. #define HAL_MAC_TX_DESC_SET_SW_PM_CONTROL(_prHwMacTxDesc) \
  1324. ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_POWER_MANAGEMENT_CONTROL)
  1325. #define HAL_MAC_TX_DESC_SET_HW_PM_CONTROL(_prHwMacTxDesc) \
  1326. ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_POWER_MANAGEMENT_CONTROL)
  1327. /* DW 6 */
  1328. #define HAL_MAC_TX_DESC_IS_CR_FIXED_RATE_MODE(_prHwMacTxDesc) \
  1329. (((_prHwMacTxDesc)->ucAntID & TX_DESC_FIXED_RATE_MODE)?TRUE:FALSE)
  1330. #define HAL_MAC_TX_DESC_SET_FIXED_RATE_MODE_TO_DESC(_prHwMacTxDesc) \
  1331. ((_prHwMacTxDesc)->ucAntID &= ~TX_DESC_FIXED_RATE_MODE)
  1332. #define HAL_MAC_TX_DESC_SET_FIXED_RATE_MODE_TO_CR(_prHwMacTxDesc) \
  1333. ((_prHwMacTxDesc)->ucAntID |= TX_DESC_FIXED_RATE_MODE)
  1334. #define HAL_MAC_TX_DESC_SET_FR_ANTENNA_ID(_prHwMacTxDesc, _ucAntId) \
  1335. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucAntID), ((UINT_8)_ucAntId), TX_DESC_ANTENNA_INDEX_MASK, 2)
  1336. #define HAL_MAC_TX_DESC_SET_FR_BW(_prHwMacTxDesc, ucBw) \
  1337. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucBandwidth), ((UINT_8)ucBw), TX_DESC_BANDWIDTH_MASK, 0)
  1338. #define HAL_MAC_TX_DESC_SET_FR_SPE_EN(_prHwMacTxDesc) \
  1339. ((_prHwMacTxDesc)->ucBandwidth |= TX_DESC_BANDWIDTH_MASK)
  1340. #define HAL_MAC_TX_DESC_SET_FR_ANTENNA_PRIORITY(_prHwMacTxDesc, _ucAntPri) \
  1341. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucBandwidth), ((UINT_8)_ucAntPri), TX_DESC_ANTENNA_PRIORITY, 4)
  1342. #define HAL_MAC_TX_DESC_SET_FR_DYNAMIC_BW_RTS(_prHwMacTxDesc) \
  1343. ((_prHwMacTxDesc)->ucBandwidth |= TX_DESC_DYNAMIC_BANDWIDTH)
  1344. #define HAL_MAC_TX_DESC_SET_FR_ETX_BF(_prHwMacTxDesc) \
  1345. ((_prHwMacTxDesc)->u2FixedRate |= TX_DESC_EXPLICIT_BEAMFORMING)
  1346. #define HAL_MAC_TX_DESC_SET_FR_ITX_BF(_prHwMacTxDesc) \
  1347. ((_prHwMacTxDesc)->u2FixedRate |= TX_DESC_IMPLICIT_BEAMFORMING)
  1348. #define HAL_MAC_TX_DESC_SET_FR_RATE(_prHwMacTxDesc, _u2RatetoFixed) \
  1349. TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2FixedRate), ((UINT_8)_u2RatetoFixed), TX_DESC_FIXDE_RATE_MASK, 2)
  1350. #define HAL_MAC_TX_DESC_SET_FR_LDPC(_prHwMacTxDesc) \
  1351. ((_prHwMacTxDesc)->u2FixedRate |= TX_DESC_LDPC)
  1352. #define HAL_MAC_TX_DESC_SET_FR_SHORT_GI(_prHwMacTxDesc) \
  1353. ((_prHwMacTxDesc)->u2FixedRate |= TX_DESC_GUARD_INTERVAL)
  1354. #define HAL_MAC_TX_DESC_SET_FR_NORMAL_GI(_prHwMacTxDesc) \
  1355. ((_prHwMacTxDesc)->u2FixedRate &= ~TX_DESC_GUARD_INTERVAL)
  1356. /*******************************************************************************
  1357. * F U N C T I O N D E C L A R A T I O N S
  1358. ********************************************************************************
  1359. */
  1360. VOID nicTxInitialize(IN P_ADAPTER_T prAdapter);
  1361. WLAN_STATUS nicTxAcquireResource(IN P_ADAPTER_T prAdapter, IN UINT_8 ucTC, IN UINT_8 ucPageCount);
  1362. WLAN_STATUS nicTxPollingResource(IN P_ADAPTER_T prAdapter, IN UINT_8 ucTC);
  1363. BOOLEAN nicTxReleaseResource(IN P_ADAPTER_T prAdapter, IN UINT_16 *au2TxRlsCnt);
  1364. WLAN_STATUS nicTxResetResource(IN P_ADAPTER_T prAdapter);
  1365. UINT_16 nicTxGetResource(IN P_ADAPTER_T prAdapter, IN UINT_8 ucTC);
  1366. UINT_8 nicTxGetFrameResourceType(IN UINT_8 eFrameType, IN P_MSDU_INFO_T prMsduInfo);
  1367. UINT_8 nicTxGetCmdResourceType(IN P_CMD_INFO_T prCmdInfo);
  1368. VOID
  1369. nicTxFillDesc(IN P_ADAPTER_T prAdapter,
  1370. IN P_MSDU_INFO_T prMsduInfo, OUT PUINT_8 prTxDescBuffer, OUT PUINT_8 pucTxDescLength);
  1371. VOID
  1372. nicTxComposeSecurityFrameDesc(IN P_ADAPTER_T prAdapter,
  1373. IN P_CMD_INFO_T prCmdInfo, OUT PUINT_8 prTxDescBuffer, OUT PUINT_8 pucTxDescLength);
  1374. WLAN_STATUS nicTxMsduInfoList(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
  1375. #if CFG_SUPPORT_MULTITHREAD
  1376. WLAN_STATUS nicTxMsduInfoListMthread(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
  1377. UINT_32 nicTxMsduQueueMthread(IN P_ADAPTER_T prAdapter);
  1378. #endif
  1379. WLAN_STATUS nicTxMsduQueue(IN P_ADAPTER_T prAdapter, UINT_8 ucPortIdx, P_QUE_T prQue);
  1380. WLAN_STATUS nicTxCmd(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo, IN UINT_8 ucTC);
  1381. VOID nicTxRelease(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgProcTxDoneHandler);
  1382. VOID nicProcessTxInterrupt(IN P_ADAPTER_T prAdapter);
  1383. VOID nicTxFreeMsduInfoPacket(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
  1384. VOID nicTxReturnMsduInfo(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
  1385. BOOLEAN nicTxFillMsduInfo(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN P_NATIVE_PACKET prNdisPacket);
  1386. WLAN_STATUS nicTxAdjustTcq(IN P_ADAPTER_T prAdapter);
  1387. WLAN_STATUS nicTxFlush(IN P_ADAPTER_T prAdapter);
  1388. #if CFG_ENABLE_FW_DOWNLOAD
  1389. WLAN_STATUS nicTxInitCmd(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo);
  1390. WLAN_STATUS nicTxInitResetResource(IN P_ADAPTER_T prAdapter);
  1391. #endif
  1392. WLAN_STATUS nicTxEnqueueMsdu(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo);
  1393. UINT_8 nicTxGetWlanIdx(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx, IN UINT_8 ucStaRecIdx);
  1394. BOOLEAN nicTxIsMgmtResourceEnough(IN P_ADAPTER_T prAdapter);
  1395. UINT_32 nicTxGetFreeCmdCount(IN P_ADAPTER_T prAdapter);
  1396. UINT_8 nicTxGetPageCount(IN UINT_32 u4FrameLength, IN BOOLEAN fgIncludeDesc);
  1397. UINT_8 nicTxGetCmdPageCount(IN P_CMD_INFO_T prCmdInfo);
  1398. WLAN_STATUS nicTxGenerateDescTemplate(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
  1399. VOID nicTxFreeDescTemplate(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
  1400. VOID
  1401. nicTxSetMngPacket(IN P_ADAPTER_T prAdapter,
  1402. IN P_MSDU_INFO_T prMsduInfo,
  1403. IN UINT_8 ucBssIndex,
  1404. IN UINT_8 ucStaRecIndex,
  1405. IN UINT_8 ucMacHeaderLength,
  1406. IN UINT_16 u2FrameLength, IN PFN_TX_DONE_HANDLER pfTxDoneHandler, IN UINT_8 ucRateMode);
  1407. VOID
  1408. nicTxSetDataPacket(IN P_ADAPTER_T prAdapter,
  1409. IN P_MSDU_INFO_T prMsduInfo,
  1410. IN UINT_8 ucBssIndex,
  1411. IN UINT_8 ucStaRecIndex,
  1412. IN UINT_8 ucMacHeaderLength,
  1413. IN UINT_16 u2FrameLength,
  1414. IN PFN_TX_DONE_HANDLER pfTxDoneHandler,
  1415. IN UINT_8 ucRateMode,
  1416. IN ENUM_TX_PACKET_SRC_T eSrc, IN UINT_8 ucTID, IN BOOLEAN fgIs802_11Frame, IN BOOLEAN fgIs1xFrame);
  1417. VOID nicTxFillDescByPktOption(IN P_MSDU_INFO_T prMsduInfo, IN P_HW_MAC_TX_DESC_T prTxDesc);
  1418. VOID nicTxConfigPktOption(IN P_MSDU_INFO_T prMsduInfo, IN UINT_32 u4OptionMask, IN BOOLEAN fgSetOption);
  1419. VOID nicTxFillDescByPktControl(P_MSDU_INFO_T prMsduInfo, P_HW_MAC_TX_DESC_T prTxDesc);
  1420. VOID nicTxConfigPktControlFlag(IN P_MSDU_INFO_T prMsduInfo, IN UINT_8 ucControlFlagMask, IN BOOLEAN fgSetFlag);
  1421. VOID nicTxSetPktLifeTime(IN P_MSDU_INFO_T prMsduInfo, IN UINT_32 u4TxLifeTimeInMs);
  1422. VOID nicTxSetPktRetryLimit(IN P_MSDU_INFO_T prMsduInfo, IN UINT_8 ucRetryLimit);
  1423. VOID nicTxSetPktPowerOffset(IN P_MSDU_INFO_T prMsduInfo, IN INT_8 cPowerOffset);
  1424. VOID nicTxSetPktSequenceNumber(IN P_MSDU_INFO_T prMsduInfo, IN UINT_16 u2SN);
  1425. VOID nicTxSetPktMacTxQue(IN P_MSDU_INFO_T prMsduInfo, IN UINT_8 ucMacTxQue);
  1426. VOID
  1427. nicTxSetPktFixedRateOptionFull(IN P_MSDU_INFO_T prMsduInfo,
  1428. IN UINT_16 u2RateCode,
  1429. IN UINT_8 ucBandwidth,
  1430. IN BOOLEAN fgShortGI,
  1431. IN BOOLEAN fgLDPC,
  1432. IN BOOLEAN fgDynamicBwRts,
  1433. IN BOOLEAN fgSpatialExt,
  1434. IN BOOLEAN fgEtxBeamforming,
  1435. IN BOOLEAN fgItxBeamforming, IN UINT_8 ucAntennaIndex, IN UINT_8 ucAntennaPriority);
  1436. VOID
  1437. nicTxSetPktFixedRateOption(IN P_MSDU_INFO_T prMsduInfo,
  1438. IN UINT_16 u2RateCode,
  1439. IN UINT_8 ucBandwidth, IN BOOLEAN fgShortGI, IN BOOLEAN fgDynamicBwRts);
  1440. VOID nicTxSetPktMoreData(IN P_MSDU_INFO_T prCurrentMsduInfo, IN BOOLEAN fgSetMoreDataBit);
  1441. VOID nicTxSetPktEOSP(IN P_MSDU_INFO_T prCurrentMsduInfo, IN BOOLEAN fgSetEOSPBit);
  1442. UINT_8 nicTxAssignPID(IN P_ADAPTER_T prAdapter, IN UINT_8 ucWlanIndex);
  1443. WLAN_STATUS
  1444. nicTxDummyTxDone(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  1445. VOID nicTxUpdateBssDefaultRate(IN P_BSS_INFO_T prBssInfo);
  1446. VOID nicTxUpdateStaRecDefaultRate(IN P_STA_RECORD_T prStaRec);
  1447. VOID
  1448. nicTxPrintMetRTP(IN P_ADAPTER_T prAdapter,
  1449. IN P_MSDU_INFO_T prMsduInfo, IN P_NATIVE_PACKET prPacket, IN UINT_32 u4PacketLen, IN BOOLEAN bFreeSkb);
  1450. VOID nicTxProcessTxDoneEvent(IN P_ADAPTER_T prAdapter, IN P_WIFI_EVENT_T prEvent);
  1451. /*******************************************************************************
  1452. * F U N C T I O N S
  1453. ********************************************************************************
  1454. */
  1455. #endif /* _NIC_TX_H */