| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700 |
- /*
- ** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic_tx.h#1
- */
- /*! \file nic_tx.h
- \brief Functions that provide TX operation in NIC's point of view.
- This file provides TX functions which are responsible for both Hardware and
- Software Resource Management and keep their Synchronization.
- */
- /*
- ** Log: nic_tx.h
- **
- ** 09 16 2014 eason.tsai
- ** [ALPS01728937] [Need Patch] [Volunteer Patch] MET support
- ** MET support
- **
- ** 08 19 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** 1. Enable TC resource adjust feature
- ** 2. Set Non-QoS data frame to TC5
- **
- ** 08 13 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** 1. Assign TXD.PID by wlan index
- ** 2. Some bug fix
- **
- ** 08 09 2013 cp.wu
- ** [BORA00002253] [MT6630 Wi-Fi][Driver][Firmware] Add NLO and timeout mechanism to SCN module
- ** 1. integrate scheduled scan functionality
- ** 2. condition compilation for linux-3.4 & linux-3.8 compatibility
- ** 3. correct CMD queue access to reduce lock scope
- **
- ** 08 09 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** 1. Add new TX done result code "TX_RESULT_QUEUE_CLEARANCE"
- ** 2. Fix runtime warning for wrong memory mode of kfree mgmt pool
- ** 3. Fix memory dump command
- **
- ** 08 05 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** 1. Add SW rate definition
- ** 2. Add HW default rate selection logic from FW
- **
- ** 08 02 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** 1. Set VI/VO Tx life time to no limitation
- ** 2. Set VI/VO Tx retry limit to 7
- **
- ** 07 18 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** 1. Update TxDesc PF bit setting rule
- ** 2. Remove unnecessary QM function
- **
- ** 07 10 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Disable IP/TCP/UDP checksum temporally for 1st connection
- **
- ** 07 04 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update for 1st Connection.
- **
- ** 06 27 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Refine management frame Tx function
- **
- ** 06 26 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update Tx DESC definition to lateset version
- **
- ** 06 25 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update for 1st connection
- **
- ** 06 19 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update for 1st connection. Set TC4 default resource value for FW_DL cmd
- **
- ** 03 29 2013 cp.wu
- ** [BORA00002227] [MT6630 Wi-Fi][Driver] Update for Makefile and HIFSYS modifications
- ** 1. remove unused HIF definitions
- ** 2. enable NDIS 5.1 build success
- **
- ** 03 19 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** .
- **
- ** 03 14 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update packet remaining Tx time
- **
- ** 03 12 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update Tx utility function for management frame
- **
- ** 03 05 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** .
- **
- ** 03 04 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** .
- **
- ** 02 25 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** <saved by Perforce>
- **
- ** 02 01 2013 cp.wu
- ** [BORA00002227] [MT6630 Wi-Fi][Driver] Update for Makefile and HIFSYS modifications
- ** 1. eliminate MT5931/MT6620/MT6628 logic
- ** 2. add firmware download control sequence
- **
- ** 01 22 2013 cp.wu
- ** [BORA00002253] [MT6630 Wi-Fi][Driver][Firmware] Add NLO and timeout mechanism to SCN module
- ** modification for ucBssIndex migration
- **
- ** 01 21 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update TX path based on new ucBssIndex modifications.
- **
- ** 01 17 2013 cm.chang
- ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
- ** Use ucBssIndex to replace eNetworkTypeIndex
- **
- ** 01 15 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update Tx done resource release mechanism.
- **
- ** 12 27 2012 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update MQM index mapping mechanism
- ** 1. TID to ACI
- ** 2. ACI to SW TxQ
- ** 3. ACI to network TC resource
- **
- ** 12 26 2012 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update TXD format based on latest release.
- **
- ** 12 21 2012 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Update TxD template feature.
- **
- ** 12 19 2012 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Add Tx desc composing function
- **
- ** 12 18 2012 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** Page count resource management.
- **
- ** 10 25 2012 cp.wu
- ** [BORA00002227] [MT6630 Wi-Fi][Driver] Update for Makefile and HIFSYS modifications
- ** HIFSYS update: TX done counter is now separated into 16 sets.
- **
- ** 09 17 2012 cm.chang
- ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
- ** Duplicate source from MT6620 v2.3 driver branch
- ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
- *
- * 11 18 2011 eddie.chen
- * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog)
- * Add log counter for tx
- *
- * 11 10 2011 eddie.chen
- * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog)
- * Add TX_DONE status detail information.
- *
- * 08 15 2011 cp.wu
- * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree
- * add MT6628-specific definitions.
- *
- * 04 12 2011 cp.wu
- * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing
- * frame dropping cases for TC4 path
- * 1. add nicTxGetResource() API for QM to make decisions.
- * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case.
- *
- * 03 21 2011 cp.wu
- * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer
- * portability improvement
- *
- * 02 16 2011 cp.wu
- * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking available
- * count and modify behavior
- * 1. add new API: nicTxGetFreeCmdCount()
- * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly
- *
- * 01 24 2011 cp.wu
- * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving
- * 1. add an extra counter for tracking pending forward frames.
- * 2. notify TX service thread as well when there is pending forward frame
- * 3. correct build errors leaded by introduction of Wi-Fi direct separation module
- *
- * 12 15 2010 yuche.tsai
- * NULL
- * Update SLT Descriptor number configure in driver.
- *
- * 11 16 2010 yarco.yang
- * [WCXRP00000177] [MT5931 F/W] Performance tuning for 1st connection
- * Update TX buffer count
- *
- * 11 03 2010 cp.wu
- * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection
- * 1) use 8 buffers for MT5931 which is equipped with less memory
- * 2) modify MT5931 debug level to TRACE when download is successful
- *
- * 10 18 2010 cp.wu
- * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore
- * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion
- * 2. shorten polling count for shorter response time
- * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well
- *
- * 10 06 2010 cp.wu
- * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning
- * code reorganization to improve isolation between GLUE and CORE layers.
- *
- * 09 03 2010 kevin.huang
- * NULL
- * Refine #include sequence and solve recursive/nested #include issue
- *
- * 08 30 2010 cp.wu
- * NULL
- * API added: nicTxPendingPackets(), for simplifying porting layer
- *
- * 07 26 2010 cp.wu
- *
- * change TC4 initial value from 2 to 4.
- *
- * 07 13 2010 cp.wu
- *
- * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets
- * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending
- * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under
- * concurrent network operation
- *
- * 07 08 2010 cp.wu
- *
- * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
- *
- * 07 06 2010 yarco.yang
- * [WPD00003837][MT6620]Data Path Refine
- * Add MGMT Packet type for HIF_TX_HEADER
- *
- * 06 23 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * integrate .
- *
- * 06 21 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * refine TX-DONE callback.
- *
- * 06 21 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * TX descriptors are now allocated once for reducing allocation overhead
- *
- * 06 21 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * specify correct value for management frames.
- *
- * 06 11 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * 1) migrate assoc.c.
- * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness
- * 3) add configuration options for CNM_MEM and RSN modules
- * 4) add data path for management frames
- * 5) eliminate rPacketInfo of MSDU_INFO_T
- *
- * 06 10 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate
- * 2) add packet type for indicating management frames
- *
- * 06 09 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * add necessary changes to driver data paths.
- *
- * 06 09 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * add TX_PACKET_MGMT to indicate the frame is coming from management modules
- *
- * 06 07 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * merge wlan_def.h.
- *
- * 06 06 2010 kevin.huang
- * [WPD00003832][MT6620 5931] Create driver base
- * [MT6620 5931] Create driver base
- *
- * 03 30 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * remove driver-land statistics.
- *
- * 03 24 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK
- * * *
- *
- * 03 10 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * code clean: removing unused variables and structure definitions
- *
- * 03 02 2010 tehuang.liu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * Redistributed the initial TC resources for normal operation
- *
- * 03 02 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * add mutex to avoid multiple access to qmTxQueue simultaneously.
- *
- * 02 23 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * add new API: wlanProcessQueuedPackets()
- *
- * 02 10 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c]
- * * * 2) firmware image length is now retrieved via NdisFileOpen
- * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore
- * * * 4) nicRxWaitResponse() revised
- * * * 5) another set of TQ counter default value is added for fw-download state
- * * * 6) Wi-Fi load address is now retrieved from registry too
- *
- * 02 09 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address
- * * * * 2. follow MSDN defined behavior when associates to another AP
- * * * * 3. for firmware download, packet size could be up to 2048 bytes
- *
- * 01 27 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * 1. eliminate improper variable in rHifInfo
- * * * * * 2. block TX/ordinary OID when RF test mode is engaged
- * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode
- * * * * * 4. correct some HAL implementation
- *
- * 01 13 2010 tehuang.liu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * Enabled the Burst_End Indication mechanism
- *
- * 12 30 2009 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * 1) According to CMD/EVENT documentation v0.8,
- * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used,
- * * * * * and result is retrieved by get ATInfo instead
- * * * * * 2) add 4 counter for recording aggregation statistics
- ** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:53:28 GMT mtk02752
- ** remove unused API
- ** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-27 11:08:00 GMT mtk02752
- ** add flush for reset
- ** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-24 19:56:49 GMT mtk02752
- ** remove redundant eTC
- ** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 22:01:08 GMT mtk02468
- ** Added MSDU_INFO fields for composing HIF TX header
- ** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:51 GMT mtk01084
- ** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:35:05 GMT mtk02752
- ** + nicTxMsduInfoList() for sending MsduInfoList
- ** + NIC_TX_BUFF_COUNT_TC[0~5]
- ** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-17 11:07:00 GMT mtk02752
- ** add nicTxAdjustTcq() API
- ** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 22:28:30 GMT mtk02752
- ** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure
- ** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 21:44:50 GMT mtk02752
- ** + nicTxReturnMsduInfo()
- ** + nicTxFillMsduInfo()
- ** + rFreeMsduInfoList field in TX_CTRL
- ** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-16 18:00:43 GMT mtk02752
- ** use P_PACKET_INFO_T for prPacket to avoid inventing another new structure for packet
- ** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-16 15:28:49 GMT mtk02752
- ** add ucQueuedPacketNum for indicating how many packets are queued by per STA/AC queue
- ** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-16 10:52:01 GMT mtk02752
- ** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-14 23:39:24 GMT mtk02752
- ** interface structure redefine
- ** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-13 21:17:03 GMT mtk02752
- ** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-29 19:53:10 GMT mtk01084
- ** remove strange code by Frog
- ** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:04 GMT mtk01084
- ** update for new HW architecture design
- ** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-02 13:53:03 GMT mtk01725
- ** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:36:50 GMT mtk01461
- ** Add declaration of nicTxReleaseResource()
- ** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:58:39 GMT mtk01461
- ** Move CMD_INFO_T related define and function to cmd_buf.h
- ** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:53 GMT mtk01461
- ** Add function for SDIO_TX_ENHANCE
- ** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:33:27 GMT mtk01461
- ** Define constants for TX PATH and add nicTxPollingResource
- ** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:32 GMT mtk01461
- ** Update TX PATH API
- ** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:38 GMT mtk01426
- ** Init for develop
- **
- */
- #ifndef _NIC_TX_H
- #define _NIC_TX_H
- /*******************************************************************************
- * C O M P I L E R F L A G S
- ********************************************************************************
- */
- /*******************************************************************************
- * E X T E R N A L R E F E R E N C E S
- ********************************************************************************
- */
- /*******************************************************************************
- * C O N S T A N T S
- ********************************************************************************
- */
- #define MAC_TX_RESERVED_FIELD 0
- #define NIC_TX_RESOURCE_POLLING_TIMEOUT 256
- #define NIC_TX_RESOURCE_POLLING_DELAY_MSEC 50
- #define NIC_TX_CMD_INFO_RESERVED_COUNT 4
- /* Maximum buffer count for individual HIF TCQ */
- #define NIC_TX_PAGE_COUNT_TC0 (NIC_TX_BUFF_COUNT_TC0 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_PAGE_COUNT_TC1 (NIC_TX_BUFF_COUNT_TC1 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_PAGE_COUNT_TC2 (NIC_TX_BUFF_COUNT_TC2 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_PAGE_COUNT_TC3 (NIC_TX_BUFF_COUNT_TC3 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_PAGE_COUNT_TC4 (NIC_TX_BUFF_COUNT_TC4 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_PAGE_COUNT_TC5 (NIC_TX_BUFF_COUNT_TC5 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_BUFF_COUNT_TC0 1
- #define NIC_TX_BUFF_COUNT_TC1 36
- #define NIC_TX_BUFF_COUNT_TC2 1
- #define NIC_TX_BUFF_COUNT_TC3 1
- #define NIC_TX_BUFF_COUNT_TC4 2
- #define NIC_TX_BUFF_COUNT_TC5 1
- #if CFG_ENABLE_FW_DOWNLOAD
- #define NIC_TX_INIT_BUFF_COUNT_TC0 8
- #define NIC_TX_INIT_BUFF_COUNT_TC1 0
- #define NIC_TX_INIT_BUFF_COUNT_TC2 0
- #define NIC_TX_INIT_BUFF_COUNT_TC3 0
- #define NIC_TX_INIT_BUFF_COUNT_TC4 8
- #define NIC_TX_INIT_BUFF_COUNT_TC5 0
- #define NIC_TX_INIT_BUFF_SUM (NIC_TX_INIT_BUFF_COUNT_TC0 + \
- NIC_TX_INIT_BUFF_COUNT_TC1 + \
- NIC_TX_INIT_BUFF_COUNT_TC2 + \
- NIC_TX_INIT_BUFF_COUNT_TC3 + \
- NIC_TX_INIT_BUFF_COUNT_TC4 + \
- NIC_TX_INIT_BUFF_COUNT_TC5)
- #define NIC_TX_INIT_PAGE_COUNT_TC0 (NIC_TX_INIT_BUFF_COUNT_TC0 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_INIT_PAGE_COUNT_TC1 (NIC_TX_INIT_BUFF_COUNT_TC1 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_INIT_PAGE_COUNT_TC2 (NIC_TX_INIT_BUFF_COUNT_TC2 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_INIT_PAGE_COUNT_TC3 (NIC_TX_INIT_BUFF_COUNT_TC3 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_INIT_PAGE_COUNT_TC4 (NIC_TX_INIT_BUFF_COUNT_TC4 * NIC_TX_MAX_PAGE_PER_FRAME)
- #define NIC_TX_INIT_PAGE_COUNT_TC5 (NIC_TX_INIT_BUFF_COUNT_TC5 * NIC_TX_MAX_PAGE_PER_FRAME)
- #endif
- #define NIC_TX_ENABLE_SECOND_HW_QUEUE 0
- /* 4 TODO: The following values shall be got from FW by query CMD */
- /*------------------------------------------------------------------------*/
- /* Resource Management related information */
- /*------------------------------------------------------------------------*/
- #define NIC_TX_PAGE_SIZE_IS_POWER_OF_2 TRUE
- #define NIC_TX_PAGE_SIZE_IN_POWER_OF_2 7
- #define NIC_TX_PAGE_SIZE 128 /* in unit of bytes */
- /* For development only */
- #define NIC_TX_MAX_SIZE_PER_FRAME 1532 /* calculated by MS native 802.11 format */
- #define NIC_TX_MAX_PAGE_PER_FRAME \
- ((NIC_TX_DESC_AND_PADDING_LENGTH + NIC_TX_DESC_HEADER_PADDING_LENGTH + \
- NIC_TX_MAX_SIZE_PER_FRAME + NIC_TX_PAGE_SIZE - 1) / NIC_TX_PAGE_SIZE)
- /*------------------------------------------------------------------------*/
- /* Tx descriptor related information */
- /*------------------------------------------------------------------------*/
- /* Frame Buffer
- * |<--Tx Descriptor-->|<--Tx descriptor padding-->|<--802.3/802.11 Header-->|<--Header padding-->|<--Payload-->|
- */
- /* Tx descriptor length by format (TXD.FT) */
- #define NIC_TX_DESC_LONG_FORMAT_LENGTH_DW 7 /* in unit of double word */
- #define NIC_TX_DESC_LONG_FORMAT_LENGTH DWORD_TO_BYTE(NIC_TX_DESC_LONG_FORMAT_LENGTH_DW)
- #define NIC_TX_DESC_SHORT_FORMAT_LENGTH_DW 2 /* in unit of double word */
- #define NIC_TX_DESC_SHORT_FORMAT_LENGTH DWORD_TO_BYTE(NIC_TX_DESC_SHORT_FORMAT_LENGTH_DW)
- /* Tx descriptor padding length (DMA.MICR.TXDSCR_PAD) */
- #define NIC_TX_DESC_PADDING_LENGTH_DW 0 /* in unit of double word */
- #define NIC_TX_DESC_PADDING_LENGTH DWORD_TO_BYTE(NIC_TX_DESC_PADDING_LENGTH_DW)
- #define NIC_TX_DESC_AND_PADDING_LENGTH (NIC_TX_DESC_LONG_FORMAT_LENGTH + NIC_TX_DESC_PADDING_LENGTH)
- /* Tx header padding (TXD.HeaderPadding) */
- /* Warning!! To use MAC header padding, every Tx packet must be decomposed */
- #define NIC_TX_DESC_HEADER_PADDING_LENGTH 0 /* in unit of bytes */
- #define NIC_TX_DEFAULT_WLAN_INDEX 31 /* For Tx packets to peer who has no WLAN table index. */
- #define NIC_TX_DESC_PID_RESERVED 0
- #define NIC_TX_DESC_DRIVER_PID_MIN 1
- #define NIC_TX_DESC_DRIVER_PID_MAX 127
- #define NIC_TX_DATA_DEFAULT_RETRY_COUNT_LIMIT 7
- #define NIC_TX_MGMT_DEFAULT_RETRY_COUNT_LIMIT 30
- #define NIC_TX_AC_BE_REMAINING_TX_TIME TX_DESC_TX_TIME_NO_LIMIT /* in unit of ms */
- #define NIC_TX_AC_BK_REMAINING_TX_TIME TX_DESC_TX_TIME_NO_LIMIT /* in unit of ms */
- #define NIC_TX_AC_VO_REMAINING_TX_TIME TX_DESC_TX_TIME_NO_LIMIT /* in unit of ms */
- #define NIC_TX_AC_VI_REMAINING_TX_TIME TX_DESC_TX_TIME_NO_LIMIT /* in unit of ms */
- /*------------------------------------------------------------------------*/
- /* Tx descriptor field related information */
- /*------------------------------------------------------------------------*/
- /* DW 0 */
- #define TX_DESC_TX_BYTE_COUNT_MASK BITS(0, 15)
- #define TX_DESC_TX_BYTE_COUNT_OFFSET 0
- #define TX_DESC_ETHER_TYPE_OFFSET_MASK BITS(0, 6)
- #define TX_DESC_ETHER_TYPE_OFFSET_OFFSET 0
- #define TX_DESC_IP_CHKSUM_OFFLOAD BIT(7)
- #define TX_DESC_TCP_UDP_CHKSUM_OFFLOAD BIT(0)
- #define TX_DESC_USB_NEXT_VLD BIT(1)
- #define TX_DESC_USB_TX_BURST BIT(2)
- #define TX_DESC_QUEUE_INDEX_MASK BITS(3, 6)
- #define TX_DESC_QUEUE_INDEX_OFFSET 3
- #define TX_DESC_PORT_INDEX BIT(7)
- #define TX_DESC_PORT_INDEX_OFFSET 7
- #define PORT_INDEX_LMAC 0
- #define PORT_INDEX_MCU 1
- /* DW 1 */
- #define TX_DESC_WLAN_INDEX_MASK BITS(0, 7)
- #define TX_DESC_WLAN_INDEX_OFFSET 0
- #define TX_DESC_HEADER_FORMAT_MASK BITS(5, 6)
- #define TX_DESC_HEADER_FORMAT_OFFSET 5
- #define HEADER_FORMAT_NON_802_11 0 /* Non-802.11 */
- #define HEADER_FORMAT_COMMAND 1 /* Command */
- #define HEADER_FORMAT_802_11_NORMAL_MODE 2 /* 802.11 (normal mode) */
- #define HEADER_FORMAT_802_11_ENHANCE_MODE 3 /* 802.11 (Enhancement mode) */
- #define HEADER_FORMAT_802_11_MASK BIT(1)
- #define TX_DESC_NON_802_11_MORE_DATA BIT(0)
- #define TX_DESC_NON_802_11_EOSP BIT(1)
- #define TX_DESC_NON_802_11_REMOVE_VLAN BIT(2)
- #define TX_DESC_NON_802_11_VLAN_FIELD BIT(3)
- #define TX_DESC_NON_802_11_ETHERNET_II BIT(4)
- #define TX_DESC_NOR_802_11_HEADER_LENGTH_MASK BITS(0, 4)
- #define TX_DESC_NOR_802_11_HEADER_LENGTH_OFFSET 0
- #define TX_DESC_ENH_802_11_EOSP BIT(1)
- #define TX_DESC_ENH_802_11_AMSDU BIT(2)
- #define TX_DESC_FORMAT BIT(7)
- #define TX_DESC_SHORT_FORMAT 0
- #define TX_DESC_LONG_FORMAT 1
- #define TX_DESC_HEADER_PADDING_LENGTH_MASK BITS(0, 1)
- #define TX_DESC_HEADER_PADDING_LENGTH_OFFSET 0
- #define TX_DESC_HEADER_PADDING_MODE BIT(2)
- #define TX_DESC_NO_ACK BIT(3)
- #define TX_DESC_TID_MASK BITS(4, 6)
- #define TX_DESC_TID_OFFSET 4
- #define TX_DESC_TID_NUM 8
- #define TX_DESC_PROTECTED_FRAME BIT(7)
- #define TX_DESC_PACKET_TYPE_MASK BITS(0, 1) /* SW Field */
- #define TX_DESC_PACKET_TYPE_OFFSET 0
- #define TX_DESC_OWN_MAC_MASK BITS(2, 7)
- #define TX_DESC_OWN_MAC_OFFSET 2
- /* DW 2 */
- #define TX_DESC_SUB_TYPE_MASK BITS(0, 3)
- #define TX_DESC_SUB_TYPE_OFFSET 0
- #define TX_DESC_TYPE_MASK BITS(4, 5)
- #define TX_DESC_TYPE_OFFSET 4
- #define TX_DESC_NDP BIT(6)
- #define TX_DESC_NDPA BIT(7)
- #define TX_DESC_SOUNDING BIT(0)
- #define TX_DESC_FORCE_RTS_CTS BIT(1)
- #define TX_DESC_BROADCAST_MULTICAST BIT(2)
- #define TX_DESC_BIP_PROTECTED BIT(3)
- #define TX_DESC_DURATION_FIELD_CONTROL BIT(4)
- #define TX_DESC_HTC_EXISTS BIT(5)
- #define TX_DESC_FRAGMENT_MASK BITS(6, 7)
- #define TX_DESC_FRAGMENT_OFFSET 6
- #define FRAGMENT_FISRT_PACKET 1
- #define FRAGMENT_MIDDLE_PACKET 2
- #define FRAGMENT_LAST_PACKET 3
- #define TX_DESC_REMAINING_MAX_TX_TIME BITS(0, 7)
- #define TX_DESC_TX_TIME_NO_LIMIT 0
- /* Unit of life time calculation of Tx descriptor */
- #define TX_DESC_LIFE_TIME_UNIT_IN_POWER_OF_2 5
- #define TX_DESC_LIFE_TIME_UNIT POWER_OF_2(TX_DESC_LIFE_TIME_UNIT_IN_POWER_OF_2)
- #define TX_DESC_POWER_OFFSET_MASK BITS(0, 4)
- #define TX_DESC_BA_DISABLE BIT(5)
- #define TX_DESC_TIMING_MEASUREMENT BIT(6)
- #define TX_DESC_FIXED_RATE BIT(7)
- /* DW 3 */
- #define TX_DESC_SW_RESERVED_MASK BITS(0, 5)
- #define TX_DESC_SW_RESERVED_OFFSET 0
- #define TX_DESC_TX_COUNT_MASK BITS(6, 10)
- #define TX_DESC_TX_COUNT_OFFSET 6
- #define TX_DESC_TX_COUNT_NO_ATTEMPT 0
- #define TX_DESC_TX_COUNT_NO_LIMIT 31
- #define TX_DESC_REMAINING_TX_COUNT_MASK BITS(11, 15)
- #define TX_DESC_REMAINING_TX_COUNT_OFFSET 11
- #define TX_DESC_SEQUENCE_NUMBER BITS(0, 11)
- #define TX_DESC_HW_RESERVED_MASK BITS(12, 13)
- #define TX_DESC_HW_RESERVED_OFFSET 12
- #define TX_DESC_PN_IS_VALID BIT(14)
- #define TX_DESC_SN_IS_VALID BIT(15)
- /* DW 4 */
- #define TX_DESC_PN_PART1 BITS(0, 31)
- /* DW 5 */
- #define TX_DESC_PACKET_ID BIT(0, 7)
- #define TX_DESC_TX_STATUS_FORMAT BIT(0)
- #define TX_DESC_TX_STATUS_FORMAT_OFFSET 0
- #define TX_DESC_TX_STATUS_TO_MCU BIT(1)
- #define TX_DESC_TX_STATUS_TO_HOST BIT(2)
- #define TX_DESC_DA_SOURCE BIT(3)
- #define TX_DESC_BAR_SSN_CONTROL BIT(4)
- #define TX_DESC_POWER_MANAGEMENT_CONTROL BIT(5)
- #define TX_DESC_PN_PART2 BITS(0, 15)
- /* DW 6 *//* FR = 1 */
- #define TX_DESC_FIXED_RATE_MODE BIT(0)
- #define TX_DESC_ANTENNA_INDEX_MASK BITS(2, 7)
- #define TX_DESC_ANTENNA_INDEX_OFFSET 2
- #define TX_DESC_BANDWIDTH_MASK BITS(0, 2)
- #define TX_DESC_SPATIAL_EXTENSION BIT(3)
- #define TX_DESC_ANTENNA_PRIORITY BITS(4, 6)
- #define TX_DESC_DYNAMIC_BANDWIDTH BIT(7)
- #define TX_DESC_EXPLICIT_BEAMFORMING BIT(0)
- #define TX_DESC_IMPLICIT_BEAMFORMING BIT(1)
- #define TX_DESC_FIXDE_RATE_MASK BITS(2, 13)
- #define TX_DESC_FIXDE_RATE_OFFSET 2
- #define TX_DESC_LDPC BIT(14)
- #define TX_DESC_GUARD_INTERVAL BIT(15)
- #if CFG_ENABLE_PKT_LIFETIME_PROFILE
- #define NIC_TX_TIME_THRESHOLD 100 /* in unit of ms */
- #endif
- /*******************************************************************************
- * D A T A T Y P E S
- ********************************************************************************
- */
- /* 3 *//* Session for TX QUEUES */
- /* The definition in this ENUM is used to categorize packet's Traffic Class according
- * to the their TID(User Priority).
- * In order to achieve QoS goal, a particular TC should not block the process of
- * another packet with different TC.
- * In current design we will have 5 categories(TCs) of SW resource.
- */
- /* HIF Tx interrupt status queue index*/
- typedef enum _ENUM_HIF_TX_INDEX_T {
- HIF_TX_AC0_INDEX = 0, /* HIF TX: AC0 packets */
- HIF_TX_AC1_INDEX, /* HIF TX: AC1 packets */
- HIF_TX_AC2_INDEX, /* HIF TX: AC2 packets */
- HIF_TX_AC3_INDEX, /* HIF TX: AC3 packets */
- HIF_TX_AC4_INDEX, /* HIF TX: AC4 packets */
- HIF_TX_AC5_INDEX, /* HIF TX: AC5 packets */
- HIF_TX_AC6_INDEX, /* HIF TX: AC6 packets */
- HIF_TX_BMC_INDEX, /* HIF TX: BMC packets */
- HIF_TX_BCN_INDEX, /* HIF TX: BCN packets */
- HIF_TX_AC10_INDEX, /* HIF TX: AC10 packets */
- HIF_TX_AC11_INDEX, /* HIF TX: AC11 packets */
- HIF_TX_AC12_INDEX, /* HIF TX: AC12 packets */
- HIF_TX_AC13_INDEX, /* HIF TX: AC13 packets */
- HIF_TX_AC14_INDEX, /* HIF TX: AC14 packets */
- HIF_TX_FFA_INDEX, /* HIF TX: free-for-all */
- HIF_TX_CPU_INDEX, /* HIF TX: CPU */
- HIF_TX_NUM /* Maximum number of HIF TX port. */
- } ENUM_HIF_TX_INDEX_T;
- /* LMAC Tx queue index */
- typedef enum _ENUM_MAC_TXQ_INDEX_T {
- MAC_TXQ_AC0_INDEX = 0,
- MAC_TXQ_AC1_INDEX,
- MAC_TXQ_AC2_INDEX,
- MAC_TXQ_AC3_INDEX,
- MAC_TXQ_AC4_INDEX,
- MAC_TXQ_AC5_INDEX,
- MAC_TXQ_AC6_INDEX,
- MAC_TXQ_BMC_INDEX,
- MAC_TXQ_BCN_INDEX,
- MAC_TXQ_AC10_INDEX,
- MAC_TXQ_AC11_INDEX,
- MAC_TXQ_AC12_INDEX,
- MAC_TXQ_AC13_INDEX,
- MAC_TXQ_AC14_INDEX,
- MAC_TXQ_NUM
- } ENUM_MAC_TXQ_INDEX_T;
- /* MCU quque index */
- typedef enum _ENUM_MCU_Q_INDEX_T {
- MCU_Q0_INDEX = 0,
- MCU_Q1_INDEX,
- MCU_Q2_INDEX,
- MCU_Q3_INDEX,
- MCU_Q_NUM
- } ENUM_MCU_Q_INDEX_T;
- /* Tc Resource index */
- typedef enum _ENUM_TRAFFIC_CLASS_INDEX_T {
- /*First HW queue */
- TC0_INDEX = 0, /* HIF TX: AC0 packets */
- TC1_INDEX, /* HIF TX: AC1 packets */
- TC2_INDEX, /* HIF TX: AC2 packets */
- TC3_INDEX, /* HIF TX: AC3 packets */
- TC4_INDEX, /* HIF TX: CPU packets */
- TC5_INDEX, /* HIF TX: AC4 packets */
- /* Second HW queue */
- #if NIC_TX_ENABLE_SECOND_HW_QUEUE
- TC6_INDEX, /* HIF TX: AC10 packets */
- TC7_INDEX, /* HIF TX: AC11 packets */
- TC8_INDEX, /* HIF TX: AC12 packets */
- TC9_INDEX, /* HIF TX: AC13 packets */
- TC10_INDEX, /* HIF TX: AC14 packets */
- #endif
- TC_NUM /* Maximum number of Traffic Classes. */
- } ENUM_TRAFFIC_CLASS_INDEX_T;
- /* per-Network Tc Resource index */
- typedef enum _ENUM_NETWORK_TC_RESOURCE_INDEX_T {
- /* QoS Data frame, WMM AC index */
- NET_TC_WMM_AC_BE_INDEX = 0,
- NET_TC_WMM_AC_BK_INDEX,
- NET_TC_WMM_AC_VI_INDEX,
- NET_TC_WMM_AC_VO_INDEX,
- /* Mgmt frame */
- NET_TC_MGMT_INDEX,
- /* nonQoS / non StaRec frame (BMC/non-associated frame) */
- NET_TC_NON_STAREC_NON_QOS_INDEX,
- NET_TC_NUM
- } ENUM_NETWORK_TC_RESOURCE_INDEX_T;
- typedef enum _ENUM_TX_STATISTIC_COUNTER_T {
- TX_MPDU_TOTAL_COUNT = 0,
- TX_INACTIVE_BSS_DROP,
- TX_INACTIVE_STA_DROP,
- TX_FORWARD_OVERFLOW_DROP,
- TX_AP_BORADCAST_DROP,
- TX_STATISTIC_COUNTER_NUM
- } ENUM_TX_STATISTIC_COUNTER_T;
- typedef enum _ENUM_FIX_BW_T {
- FIX_BW_NO_FIXED = 0,
- FIX_BW_20 = 4,
- FIX_BW_40,
- FIX_BW_80,
- FIX_BW_160,
- FIX_BW_NUM
- } ENUM_FIX_BW_T;
- typedef enum _ENUM_MSDU_OPTION_T {
- MSDU_OPT_NO_ACK = BIT(0),
- MSDU_OPT_NO_AGGREGATE = BIT(1),
- MSDU_OPT_TIMING_MEASURE = BIT(2),
- MSDU_OPT_RCPI_NOISE_STATUS = BIT(3),
- /* Option by Frame Format */
- /* Non-80211 */
- MSDU_OPT_MORE_DATA = BIT(4),
- MSDU_OPT_REMOVE_VLAN = BIT(5), /* Remove VLAN tag if exists */
- /* 80211-enhanced */
- MSDU_OPT_AMSDU = BIT(6),
- /* 80211-enhanced & Non-80211 */
- MSDU_OPT_EOSP = BIT(7),
- /* Beamform */
- MSDU_OPT_NDP = BIT(8),
- MSDU_OPT_NDPA = BIT(9),
- MSDU_OPT_SOUNDING = BIT(10),
- /* Protection */
- MSDU_OPT_FORCE_RTS = BIT(11),
- /* Security */
- MSDU_OPT_BIP = BIT(12),
- MSDU_OPT_PROTECTED_FRAME = BIT(13),
- /* SW Field */
- MSDU_OPT_SW_DURATION = BIT(14),
- MSDU_OPT_SW_PS_BIT = BIT(15),
- MSDU_OPT_SW_HTC = BIT(16),
- MSDU_OPT_SW_BAR_SN = BIT(17),
- /* Manual Mode */
- MSDU_OPT_MANUAL_FIRST_BIT = BIT(18),
- MSDU_OPT_MANUAL_LIFE_TIME = MSDU_OPT_MANUAL_FIRST_BIT,
- MSDU_OPT_MANUAL_RETRY_LIMIT = BIT(19),
- MSDU_OPT_MANUAL_POWER_OFFSET = BIT(20),
- MSDU_OPT_MANUAL_TX_QUE = BIT(21),
- MSDU_OPT_MANUAL_SN = BIT(22),
- MSDU_OPT_MANUAL_LAST_BIT = MSDU_OPT_MANUAL_SN
- } ENUM_MSDU_OPTION_T;
- typedef enum _ENUM_MSDU_CONTROL_FLAG_T {
- MSDU_CONTROL_FLAG_FORCE_TX = BIT(0)
- } ENUM_MSDU_CONTROL_FLAG_T;
- typedef enum _ENUM_MSDU_RATE_MODE_T {
- MSDU_RATE_MODE_AUTO = 0,
- MSDU_RATE_MODE_MANUAL_DESC,
- /* The following rate mode is not implemented yet */
- /* DON'T use!!! */
- MSDU_RATE_MODE_MANUAL_CR
- } ENUM_MSDU_RATE_MODE_T;
- typedef struct _TX_TCQ_STATUS_T {
- /* HIF reported page count delta */
- UINT_16 au2TxDonePageCount[TC_NUM]; /* other TC */
- UINT_16 au2PreUsedPageCount[TC_NUM];
- UINT_16 u2AvaliablePageCount; /* FFA */
- UINT_8 ucNextTcIdx; /* For round-robin distribute free page count */
- /* distributed page count */
- UINT_16 au2FreePageCount[TC_NUM];
- UINT_16 au2MaxNumOfPage[TC_NUM];
- /* buffer count */
- UINT_16 au2FreeBufferCount[TC_NUM];
- UINT_16 au2MaxNumOfBuffer[TC_NUM];
- } TX_TCQ_STATUS_T, *P_TX_TCQ_STATUS_T;
- typedef struct _TX_TCQ_ADJUST_T {
- INT_8 acVariation[TC_NUM];
- } TX_TCQ_ADJUST_T, *P_TX_TCQ_ADJUST_T;
- typedef struct _TX_CTRL_T {
- UINT_32 u4TxCachedSize;
- PUINT_8 pucTxCached;
- UINT_32 u4PageSize;
- UINT_32 u4TotalPageNum;
- UINT_32 u4TotalTxRsvPageNum;
- /* Elements below is classified according to TC (Traffic Class) value. */
- TX_TCQ_STATUS_T rTc;
- PUINT_8 pucTxCoalescingBufPtr;
- QUE_T rFreeMsduInfoList;
- /* Management Frame Tracking */
- /* number of management frames to be sent */
- INT_32 i4TxMgmtPendingNum;
- /* to tracking management frames need TX done callback */
- QUE_T rTxMgmtTxingQueue;
- #if CFG_HIF_STATISTICS
- UINT_32 u4TotalTxAccessNum;
- UINT_32 u4TotalTxPacketNum;
- #endif
- UINT_32 au4Statistics[TX_STATISTIC_COUNTER_NUM];
- /* Number to track forwarding frames */
- INT_32 i4PendingFwdFrameCount;
- } TX_CTRL_T, *P_TX_CTRL_T;
- typedef enum _ENUM_TX_PACKET_TYPE_T {
- TX_PACKET_TYPE_DATA = 0,
- TX_PACKET_TYPE_MGMT,
- /* TX_PACKET_TYPE_1X, */
- X_PACKET_TYPE_NUM
- } ENUM_TX_PACKET_TYPE_T, *P_ENUM_TX_PACKET_TYPE_T;
- typedef enum _ENUM_TX_PACKET_SRC_T {
- TX_PACKET_OS,
- TX_PACKET_OS_OID,
- TX_PACKET_FORWARDING,
- TX_PACKET_MGMT,
- TX_PACKET_NUM
- } ENUM_TX_PACKET_SRC_T;
- /* TX Call Back Function */
- typedef WLAN_STATUS(*PFN_TX_DONE_HANDLER) (IN P_ADAPTER_T prAdapter,
- IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
- #if CFG_ENABLE_PKT_LIFETIME_PROFILE
- typedef struct _PKT_PROFILE_T {
- BOOLEAN fgIsValid;
- #if CFG_PRINT_PKT_LIFETIME_PROFILE
- BOOLEAN fgIsPrinted;
- UINT_16 u2IpSn;
- UINT_16 u2RtpSn;
- UINT_8 ucTcxFreeCount;
- #endif
- OS_SYSTIME rHardXmitArrivalTimestamp;
- OS_SYSTIME rEnqueueTimestamp;
- OS_SYSTIME rDequeueTimestamp;
- OS_SYSTIME rHifTxDoneTimestamp;
- } PKT_PROFILE_T, *P_PKT_PROFILE_T;
- #endif
- /* TX transactions could be divided into 4 kinds:
- *
- * 1) 802.1X / Bluetooth-over-Wi-Fi Security Frames
- * [CMD_INFO_T] - [prPacket] - in skb or NDIS_PACKET form
- *
- * 2) MMPDU
- * [CMD_INFO_T] - [prPacket] - [MSDU_INFO_T] - [prPacket] - direct buffer for frame body
- *
- * 3) Command Packets
- * [CMD_INFO_T] - [pucInfoBuffer] - direct buffer for content of command packet
- *
- * 4) Normal data frame
- * [MSDU_INFO_T] - [prPacket] - in skb or NDIS_PACKET form
- */
- /* PS_FORWARDING_TYPE_NON_PS means that the receiving STA is in Active Mode
- * from the perspective of host driver (maybe not synchronized with FW --> SN is needed)
- */
- struct _MSDU_INFO_T {
- QUE_ENTRY_T rQueEntry;
- P_NATIVE_PACKET prPacket; /* Pointer to packet buffer */
- ENUM_TX_PACKET_SRC_T eSrc; /* specify OS/FORWARD packet */
- UINT_8 ucUserPriority; /* QoS parameter, convert to TID */
- /* For composing TX descriptor header */
- UINT_8 ucTC; /* Traffic Class: 0~4 (HIF TX0), 5 (HIF TX1) */
- UINT_8 ucPacketType; /* 0: Data, 1: Management Frame */
- UINT_8 ucStaRecIndex; /* STA_REC index */
- UINT_8 ucBssIndex; /* BSS_INFO_T index */
- UINT_8 ucWlanIndex; /* Wlan entry index */
- BOOLEAN fgIs802_1x; /* TRUE: 802.1x frame */
- BOOLEAN fgIs802_11; /* TRUE: 802.11 header is present */
- BOOLEAN fgIs802_3; /* TRUE: 802.3 frame */
- BOOLEAN fgIsVlanExists; /* TRUE: VLAN tag is exists */
- /* BOOLEAN fgIsBIP; *//* Management Frame Protection */
- /* BOOLEAN fgIsBasicRate; *//* Force Basic Rate Transmission */
- /* BOOLEAN fgIsMoreData; *//* More data */
- /* BOOLEAN fgIsEOSP; *//* End of service period */
- /* Special Option */
- UINT_32 u4Option; /* Special option in bitmask, no ACK, etc... */
- INT_8 cPowerOffset; /* Per-packet power offset, in 2's complement */
- UINT_16 u2SwSN; /* SW assigned sequence number */
- UINT_8 ucRetryLimit; /* The retry limit */
- UINT_32 u4RemainingLifetime; /* Remaining lifetime, unit:ms */
- /* Control flag */
- UINT_8 ucControlFlag; /* Control flag in bitmask */
- /* Fixed Rate Option */
- UINT_8 ucRateMode; /* Rate mode: AUTO, MANUAL_DESC, MANUAL_CR */
- UINT_32 u4FixedRateOption; /* The rate option, rate code, GI, etc... */
- BOOLEAN fgIsTXDTemplateValid; /* There is a valid Tx descriptor for this packet */
- /* flattened from PACKET_INFO_T */
- UINT_8 ucMacHeaderLength; /* MAC header legth */
- UINT_8 ucLlcLength; /* w/o EtherType */
- UINT_16 u2FrameLength; /* Total frame length */
- UINT_8 aucEthDestAddr[MAC_ADDR_LEN]; /* Ethernet Destination Address */
- UINT_8 ucPageCount; /* Required page count for this MSDU */
- /* for TX done tracking */
- UINT_8 ucTxSeqNum; /* MGMT frame serial number */
- UINT_8 ucPID; /* PID */
- PFN_TX_DONE_HANDLER pfTxDoneHandler; /* Tx done handler */
- #if CFG_ENABLE_PKT_LIFETIME_PROFILE
- PKT_PROFILE_T rPktProfile;
- #endif
- /* To be removed */
- UINT_8 ucFormatID; /* 0: MAUI, Linux, Windows NDIS 5.1 */
- /* UINT_16 u2PalLLH; *//* PAL Logical Link Header (for BOW network) */
- /* UINT_16 u2AclSN; *//* ACL Sequence Number (for BOW network) */
- UINT_8 ucPsForwardingType; /* See ENUM_PS_FORWARDING_TYPE_T */
- /* UINT_8 ucPsSessionID; *//* PS Session ID specified by the FW for the STA */
- /* TRUE means this is the last packet of the burst for (STA, TID) */
- /* BOOLEAN fgIsBurstEnd; */
- #if CFG_M0VE_BA_TO_DRIVER
- UINT_8 ucTID;
- #endif
- #if CFG_SUPPORT_MULTITHREAD
- /* Compose TxDesc in tx_thread and place here */
- UINT_8 aucTxDescBuffer[NIC_TX_DESC_AND_PADDING_LENGTH];
- #endif
- };
- /*!A data structure which is identical with HW MAC TX DMA Descriptor */
- typedef struct _HW_MAC_TX_DESC_T {
- /* DW 0 */
- UINT_16 u2TxByteCount;
- UINT_8 ucEtherOffset; /* Ether-Type Offset, IP checksum offload */
- UINT_8 ucPortIdx_QueueIdx; /* UDP/TCP checksum offload, USB NextVLD/TxBURST, Queue index, Port index */
- /* DW 1 */
- UINT_8 ucWlanIdx;
- UINT_8 ucHeaderFormat; /* Header format, TX descriptor format */
- UINT_8 ucHeaderPadding; /* Header padding, no ACK, TID, Protect frame */
- UINT_8 ucOwnMAC;
- /* Long Format, the following structure is for long format ONLY */
- /* DW 2 */
- UINT_8 ucType_SubType; /* Type, Sub-type, NDP, NDPA */
- UINT_8 ucFrag; /* Sounding, force RTS/CTS, BMC, BIP, Duration, HTC exist, Fragment */
- UINT_8 ucRemainingMaxTxTime;
- UINT_8 ucPowerOffset; /* Power offset, Disable BA, Timing measurement, Fixed rate */
- /* DW 3 */
- UINT_16 u2TxCountLimit; /* TX count limit */
- UINT_16 u2SN; /* SN, HW own, PN valid, SN valid */
- /* DW 4 */
- UINT_32 u4PN1;
- /* DW 5 */
- UINT_8 ucPID;
- UINT_8 ucTxStatus; /* TXS format, TXS to mcu, TXS to host, DA source, BAR SSN, Power management */
- UINT_16 u2PN2;
- /* DW 6 */
- UINT_8 ucAntID; /* Fixed rate, Antenna ID */
- UINT_8 ucBandwidth; /* Bandwidth, Spatial Extension, Antenna priority, Dynamic bandwidth */
- UINT_16 u2FixedRate; /* Explicit/implicit beamforming, Fixed rate table, LDPC, GI */
- } HW_MAC_TX_DESC_T, *P_HW_MAC_TX_DESC_T, **PP_HW_MAC_TX_DESC_T;
- typedef struct _TX_RESOURCE_CONTROL_T {
- /* HW TX queue definition */
- UINT_8 ucDestPortIndex;
- UINT_8 ucDestQueueIndex;
- /* HIF Interrupt status index */
- UINT_8 ucHifTxQIndex;
- } TX_RESOURCE_CONTROL_T, *PTX_RESOURCE_CONTROL_T;
- typedef struct _TX_TC_TRAFFIC_SETTING_T {
- UINT_8 ucTxDescLength;
- UINT_32 u4RemainingTxTime;
- UINT_8 ucTxCountLimit;
- } TX_TC_TRAFFIC_SETTING_T, P_TX_TC_TRAFFIC_SETTING_T;
- /*******************************************************************************
- * P U B L I C D A T A
- ********************************************************************************
- */
- /*******************************************************************************
- * P R I V A T E D A T A
- ********************************************************************************
- */
- /*******************************************************************************
- * M A C R O S
- ********************************************************************************
- */
- #define TX_INC_CNT(prTxCtrl, eCounter) \
- {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]++; }
- #define TX_ADD_CNT(prTxCtrl, eCounter, u8Amount) \
- {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter] += (UINT_32)u8Amount; }
- #define TX_GET_CNT(prTxCtrl, eCounter) \
- (((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter])
- #define TX_RESET_ALL_CNTS(prTxCtrl) \
- {kalMemZero(&prTxCtrl->au4Statistics[0], sizeof(prTxCtrl->au4Statistics)); }
- #if CFG_ENABLE_PKT_LIFETIME_PROFILE
- #if CFG_PRINT_PKT_LIFETIME_PROFILE
- #define PRINT_PKT_PROFILE(_pkt_profile, _note) \
- { \
- if (!(_pkt_profile)->fgIsPrinted) { \
- DBGLOG(TX, TRACE, "X[%lu] E[%lu] D[%lu] HD[%lu] B[%d] RTP[%d] %s\n", \
- (UINT_32)((_pkt_profile)->rHardXmitArrivalTimestamp), \
- (UINT_32)((_pkt_profile)->rEnqueueTimestamp), \
- (UINT_32)((_pkt_profile)->rDequeueTimestamp), \
- (UINT_32)((_pkt_profile)->rHifTxDoneTimestamp), \
- (UINT_8)((_pkt_profile)->ucTcxFreeCount), \
- (UINT_16)((_pkt_profile)->u2RtpSn), \
- (_note))); \
- (_pkt_profile)->fgIsPrinted = TRUE; \
- } \
- }
- #else
- #define PRINT_PKT_PROFILE(_pkt_profile, _note)
- #endif
- #define CHK_PROFILES_DELTA(_pkt1, _pkt2, _delta) \
- (CHECK_FOR_TIMEOUT((_pkt1)->rHardXmitArrivalTimestamp, (_pkt2)->rHardXmitArrivalTimestamp, (_delta)) || \
- CHECK_FOR_TIMEOUT((_pkt1)->rEnqueueTimestamp, (_pkt2)->rEnqueueTimestamp, (_delta)) || \
- CHECK_FOR_TIMEOUT((_pkt1)->rDequeueTimestamp, (_pkt2)->rDequeueTimestamp, (_delta)) || \
- CHECK_FOR_TIMEOUT((_pkt1)->rHifTxDoneTimestamp, (_pkt2)->rHifTxDoneTimestamp, (_delta)))
- #define CHK_PROFILE_DELTA(_pkt, _delta) \
- (CHECK_FOR_TIMEOUT((_pkt)->rEnqueueTimestamp, (_pkt)->rHardXmitArrivalTimestamp, (_delta)) || \
- CHECK_FOR_TIMEOUT((_pkt)->rDequeueTimestamp, (_pkt)->rEnqueueTimestamp, (_delta)) || \
- CHECK_FOR_TIMEOUT((_pkt)->rHifTxDoneTimestamp, (_pkt)->rDequeueTimestamp, (_delta)))
- #endif
- /*------------------------------------------------------------------------------
- * MACRO for MSDU_INFO
- *------------------------------------------------------------------------------
- */
- #define TX_SET_MMPDU nicTxSetMngPacket
- #define TX_SET_DATA_PACKET nicTxSetDataPacket
- /*------------------------------------------------------------------------------
- * MACRO for HW_MAC_TX_DESC_T
- *------------------------------------------------------------------------------
- */
- #define TX_DESC_GET_FIELD(_rHwMacTxDescField, _mask, _offset) \
- (((_rHwMacTxDescField) & (_mask)) >> (_offset))
- #define TX_DESC_SET_FIELD(_rHwMacTxDescField, _value, _mask, _offset) \
- { \
- (_rHwMacTxDescField) &= ~(_mask); \
- (_rHwMacTxDescField) |= (((_value) << (_offset)) & (_mask)); \
- }
- #define HAL_MAC_TX_DESC_SET_DW(_prHwMacTxDesc, _ucOffsetInDw, _ucLengthInDw, _pucValueAddr) \
- kalMemCopy((PUINT_32)(_prHwMacTxDesc) + (_ucOffsetInDw), \
- (PUINT_8)(_pucValueAddr), DWORD_TO_BYTE(_ucLengthInDw))
- #define HAL_MAC_TX_DESC_GET_DW(_prHwMacTxDesc, _ucOffsetInDw, _ucLengthInDw, _pucValueAddr) \
- kalMemCopy((PUINT_8)(_pucValueAddr), \
- (PUINT_32)(_prHwMacTxDesc) + (_ucOffsetInDw), DWORD_TO_BYTE(_ucLengthInDw))
- /* DW 0 */
- #define HAL_MAC_TX_DESC_GET_TX_BYTE_COUNT(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2TxByteCount)
- #define HAL_MAC_TX_DESC_SET_TX_BYTE_COUNT(_prHwMacTxDesc, _u2TxByteCount) \
- (((_prHwMacTxDesc)->u2TxByteCount) = ((UINT_16)_u2TxByteCount))
- #define HAL_MAC_TX_DESC_GET_ETHER_TYPE_OFFSET(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucEtherOffset, \
- TX_DESC_ETHER_TYPE_OFFSET_MASK, TX_DESC_ETHER_TYPE_OFFSET_OFFSET)
- #define HAL_MAC_TX_DESC_SET_ETHER_TYPE_OFFSET(_prHwMacTxDesc, _ucEtherTypeOffset) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucEtherOffset), \
- ((UINT_8)_ucEtherTypeOffset), TX_DESC_ETHER_TYPE_OFFSET_MASK, TX_DESC_ETHER_TYPE_OFFSET_OFFSET)
- #define HAL_MAC_TX_DESC_IS_IP_CHKSUM_ENABLED(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucEtherOffset & TX_DESC_IP_CHKSUM_OFFLOAD)?FALSE:TRUE)
- #define HAL_MAC_TX_DESC_SET_IP_CHKSUM(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucEtherOffset |= TX_DESC_IP_CHKSUM_OFFLOAD)
- #define HAL_MAC_TX_DESC_UNSET_IP_CHKSUM(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucEtherOffset &= ~TX_DESC_IP_CHKSUM_OFFLOAD)
- #define HAL_MAC_TX_DESC_IS_TCP_UDP_CHKSUM_ENABLED(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucPortIdx_QueueIdx & TX_DESC_TCP_UDP_CHKSUM_OFFLOAD)?FALSE:TRUE)
- #define HAL_MAC_TX_DESC_SET_TCP_UDP_CHKSUM(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPortIdx_QueueIdx |= TX_DESC_TCP_UDP_CHKSUM_OFFLOAD)
- #define HAL_MAC_TX_DESC_UNSET_TCP_UDP_CHKSUM(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPortIdx_QueueIdx &= ~TX_DESC_TCP_UDP_CHKSUM_OFFLOAD)
- #define HAL_MAC_TX_DESC_IS_USB_NEXT_VLD_ENABLED(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucEtherOffset & TX_DESC_USB_NEXT_VLD)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_USB_NEXT_VLD(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucEtherOffset |= TX_DESC_USB_NEXT_VLD)
- #define HAL_MAC_TX_DESC_UNSET_USB_NEXT_VLD(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucEtherOffset &= ~TX_DESC_USB_NEXT_VLD)
- #define HAL_MAC_TX_DESC_IS_USB_TX_BURST_ENABLED(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucPortIdx_QueueIdx & TX_DESC_USB_TX_BURST)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_USB_TX_BURST(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPortIdx_QueueIdx |= TX_DESC_USB_TX_BURST)
- #define HAL_MAC_TX_DESC_UNSET_USB_TX_BURST(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPortIdx_QueueIdx &= ~TX_DESC_USB_TX_BURST)
- #define HAL_MAC_TX_DESC_GET_QUEUE_INDEX(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucPortIdx_QueueIdx, TX_DESC_QUEUE_INDEX_MASK, TX_DESC_QUEUE_INDEX_OFFSET)
- #define HAL_MAC_TX_DESC_SET_QUEUE_INDEX(_prHwMacTxDesc, _ucQueueIndex) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucPortIdx_QueueIdx), \
- ((UINT_8)_ucQueueIndex), TX_DESC_QUEUE_INDEX_MASK, TX_DESC_QUEUE_INDEX_OFFSET)
- #define HAL_MAC_TX_DESC_GET_PORT_INDEX(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucPortIdx_QueueIdx, TX_DESC_PORT_INDEX, TX_DESC_PORT_INDEX_OFFSET)
- #define HAL_MAC_TX_DESC_SET_PORT_INDEX(_prHwMacTxDesc, _ucPortIndex) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucPortIdx_QueueIdx), \
- ((UINT_8)_ucPortIndex), TX_DESC_PORT_INDEX, TX_DESC_PORT_INDEX_OFFSET)
- /* DW 1 */
- #define HAL_MAC_TX_DESC_GET_WLAN_INDEX(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucWlanIdx)
- #define HAL_MAC_TX_DESC_SET_WLAN_INDEX(_prHwMacTxDesc, _ucWlanIdx) \
- (((_prHwMacTxDesc)->ucWlanIdx) = (_ucWlanIdx))
- #define HAL_MAC_TX_DESC_IS_LONG_FORMAT(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_FORMAT)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_LONG_FORMAT(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_FORMAT)
- #define HAL_MAC_TX_DESC_SET_SHORT_FORMAT(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_FORMAT)
- #define HAL_MAC_TX_DESC_GET_HEADER_FORMAT(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucHeaderFormat, \
- TX_DESC_HEADER_FORMAT_MASK, TX_DESC_HEADER_FORMAT_OFFSET)
- #define HAL_MAC_TX_DESC_SET_HEADER_FORMAT(_prHwMacTxDesc, _ucHdrFormat) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucHeaderFormat), \
- ((UINT_8)_ucHdrFormat), TX_DESC_HEADER_FORMAT_MASK, TX_DESC_HEADER_FORMAT_OFFSET)
- /* HF = 0x00, 802.11 normal mode */
- #define HAL_MAC_TX_DESC_IS_MORE_DATA(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_MORE_DATA)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_MORE_DATA(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_MORE_DATA)
- #define HAL_MAC_TX_DESC_UNSET_MORE_DATA(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_MORE_DATA)
- #define HAL_MAC_TX_DESC_IS_REMOVE_VLAN(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_REMOVE_VLAN)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_REMOVE_VLAN(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_REMOVE_VLAN)
- #define HAL_MAC_TX_DESC_UNSET_REMOVE_VLAN(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_REMOVE_VLAN)
- #define HAL_MAC_TX_DESC_IS_VLAN(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_VLAN_FIELD)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_VLAN(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_VLAN_FIELD)
- #define HAL_MAC_TX_DESC_UNSET_VLAN(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_VLAN_FIELD)
- #define HAL_MAC_TX_DESC_IS_ETHERNET_II(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_ETHERNET_II)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_ETHERNET_II(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_ETHERNET_II)
- #define HAL_MAC_TX_DESC_UNSET_ETHERNET_II(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_ETHERNET_II)
- /* HF = 0x00/0x11, 802.11 normal/enhancement mode */
- #define HAL_MAC_TX_DESC_IS_EOSP(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_NON_802_11_EOSP)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_EOSP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_NON_802_11_EOSP)
- #define HAL_MAC_TX_DESC_UNSET_EOSP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_NON_802_11_EOSP)
- /* HF = 0x11, 802.11 enhancement mode */
- #define HAL_MAC_TX_DESC_IS_AMSDU(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucHeaderFormat & TX_DESC_ENH_802_11_AMSDU)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_AMSDU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat |= TX_DESC_ENH_802_11_AMSDU)
- #define HAL_MAC_TX_DESC_UNSET_AMSDU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderFormat &= ~TX_DESC_ENH_802_11_AMSDU)
- /* HF = 0x10, non-802.11 */
- #define HAL_MAC_TX_DESC_GET_802_11_HEADER_LENGTH(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucHeaderFormat, \
- TX_DESC_NOR_802_11_HEADER_LENGTH_MASK, TX_DESC_NOR_802_11_HEADER_LENGTH_OFFSET)
- #define HAL_MAC_TX_DESC_SET_802_11_HEADER_LENGTH(_prHwMacTxDesc, _ucHdrLength) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucHeaderFormat), \
- ((UINT_8)_ucHdrLength), TX_DESC_NOR_802_11_HEADER_LENGTH_MASK, TX_DESC_NOR_802_11_HEADER_LENGTH_OFFSET)
- #define HAL_MAC_TX_DESC_GET_HEADER_PADDING(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucHeaderPadding, \
- TX_DESC_HEADER_PADDING_LENGTH_MASK, TX_DESC_HEADER_PADDING_LENGTH_OFFSET)
- #define HAL_MAC_TX_DESC_SET_HEADER_PADDING(_prHwMacTxDesc, _ucHdrPadding) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucHeaderPadding), \
- ((UINT_8)_ucHdrPadding), TX_DESC_HEADER_PADDING_LENGTH_MASK, TX_DESC_HEADER_PADDING_LENGTH_OFFSET)
- #define HAL_MAC_TX_DESC_IS_HEADER_PADDING_IN_THE_HEAD(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucHeaderPadding & TX_DESC_HEADER_PADDING_MODE)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_HEADER_PADDING_IN_THE_HEAD(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderPadding |= TX_DESC_HEADER_PADDING_MODE)
- #define HAL_MAC_TX_DESC_SET_HEADER_PADDING_IN_THE_TAIL(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderPadding &= ~TX_DESC_HEADER_PADDING_MODE)
- #define HAL_MAC_TX_DESC_IS_NO_ACK(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucHeaderPadding & TX_DESC_NO_ACK)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_NO_ACK(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderPadding |= TX_DESC_NO_ACK)
- #define HAL_MAC_TX_DESC_UNSET_NO_ACK(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucHeaderPadding &= ~TX_DESC_NO_ACK)
- #define HAL_MAC_TX_DESC_GET_TID(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucHeaderPadding, TX_DESC_TID_MASK, TX_DESC_TID_OFFSET)
- #define HAL_MAC_TX_DESC_SET_TID(_prHwMacTxDesc, _ucTID) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucHeaderPadding), ((UINT_8)_ucTID), TX_DESC_TID_MASK, TX_DESC_TID_OFFSET)
- #define HAL_MAC_TX_DESC_IS_PROTECTION(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucHeaderPadding & TX_DESC_PROTECTED_FRAME)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_PROTECTION(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderPadding |= TX_DESC_PROTECTED_FRAME)
- #define HAL_MAC_TX_DESC_UNSET_PROTECTION(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucHeaderPadding &= ~TX_DESC_PROTECTED_FRAME)
- #define HAL_MAC_TX_DESC_GET_OWN_MAC_INDEX(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucOwnMAC, TX_DESC_OWN_MAC_MASK, TX_DESC_OWN_MAC_OFFSET)
- #define HAL_MAC_TX_DESC_SET_OWN_MAC_INDEX(_prHwMacTxDesc, _ucOwnMacIdx) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucOwnMAC), ((UINT_8)_ucOwnMacIdx), \
- TX_DESC_OWN_MAC_MASK, TX_DESC_OWN_MAC_OFFSET)
- /* DW 2 */
- #define HAL_MAC_TX_DESC_GET_SUB_TYPE(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucType_SubType, TX_DESC_SUB_TYPE_MASK, TX_DESC_SUB_TYPE_OFFSET)
- #define HAL_MAC_TX_DESC_SET_SUB_TYPE(_prHwMacTxDesc, _ucSubType) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucType_SubType), \
- ((UINT_8)_ucSubType), TX_DESC_SUB_TYPE_MASK, TX_DESC_SUB_TYPE_OFFSET)
- #define HAL_MAC_TX_DESC_GET_TYPE(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucType_SubType, TX_DESC_TYPE_MASK, TX_DESC_TYPE_OFFSET)
- #define HAL_MAC_TX_DESC_SET_TYPE(_prHwMacTxDesc, _ucType) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucType_SubType), ((UINT_8)_ucType), TX_DESC_TYPE_MASK, TX_DESC_TYPE_OFFSET)
- #define HAL_MAC_TX_DESC_IS_NDP(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucType_SubType & TX_DESC_NDP)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_NDP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucType_SubType |= TX_DESC_NDP)
- #define HAL_MAC_TX_DESC_UNSET_NDP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucType_SubType &= ~TX_DESC_NDP)
- #define HAL_MAC_TX_DESC_IS_NDPA(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucType_SubType & TX_DESC_NDPA)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_NDPA(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucType_SubType |= TX_DESC_NDPA)
- #define HAL_MAC_TX_DESC_UNSET_NDPA(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucType_SubType &= ~TX_DESC_NDPA)
- #define HAL_MAC_TX_DESC_IS_SOUNDING_FRAME(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_SOUNDING)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_SOUNDING_FRAME(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_SOUNDING)
- #define HAL_MAC_TX_DESC_UNSET_SOUNDING_FRAME(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_SOUNDING)
- #define HAL_MAC_TX_DESC_IS_FORCE_RTS_CTS_EN(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucFrag & TX_DESC_FORCE_RTS_CTS)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_FORCE_RTS_CTS(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_FORCE_RTS_CTS)
- #define HAL_MAC_TX_DESC_UNSET_FORCE_RTS_CTS(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_FORCE_RTS_CTS)
- #define HAL_MAC_TX_DESC_IS_BMC(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_BROADCAST_MULTICAST)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_BMC(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_BROADCAST_MULTICAST)
- #define HAL_MAC_TX_DESC_UNSET_BMC(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_BROADCAST_MULTICAST)
- #define HAL_MAC_TX_DESC_IS_BIP(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_BIP_PROTECTED)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_BIP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_BIP_PROTECTED)
- #define HAL_MAC_TX_DESC_UNSET_BIP(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_BIP_PROTECTED)
- #define HAL_MAC_TX_DESC_IS_DURATION_CONTROL_BY_SW(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucFrag & TX_DESC_DURATION_FIELD_CONTROL)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_DURATION_CONTROL_BY_SW(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucFrag |= TX_DESC_DURATION_FIELD_CONTROL)
- #define HAL_MAC_TX_DESC_SET_DURATION_CONTROL_BY_HW(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_DURATION_FIELD_CONTROL)
- #define HAL_MAC_TX_DESC_IS_HTC_EXIST(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_HTC_EXISTS)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_HTC_EXIST(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag |= TX_DESC_HTC_EXISTS)
- #define HAL_MAC_TX_DESC_UNSET_HTC_EXIST(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucFrag &= ~TX_DESC_HTC_EXISTS)
- #define HAL_MAC_TX_DESC_IS_FRAG_PACKET(_prHwMacTxDesc) (((_prHwMacTxDesc)->ucFrag & TX_DESC_FRAGMENT_MASK)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_GET_FRAG_PACKET_POS(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucFrag, TX_DESC_FRAGMENT_MASK, TX_DESC_FRAGMENT_OFFSET)
- #define HAL_MAC_TX_DESC_SET_FRAG_PACKET_POS(_prHwMacTxDesc, _ucFragPos) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucFrag), \
- ((UINT_8)_ucFragPos), TX_DESC_FRAGMENT_MASK, TX_DESC_FRAGMENT_OFFSET)
- /* For driver */
- /* in unit of 32TU */
- #define HAL_MAC_TX_DESC_GET_REMAINING_LIFE_TIME(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucRemainingMaxTxTime)
- #define HAL_MAC_TX_DESC_SET_REMAINING_LIFE_TIME(_prHwMacTxDesc, _ucLifeTime) \
- ((_prHwMacTxDesc)->ucRemainingMaxTxTime = (_ucLifeTime))
- /* in unit of ms (minimal value is about 40ms) */
- #define HAL_MAC_TX_DESC_GET_REMAINING_LIFE_TIME_IN_MS(_prHwMacTxDesc) \
- (TU_TO_MSEC(HAL_MAC_TX_DESC_GET_REMAINING_LIFE_TIME(_prHwMacTxDesc) << TX_DESC_LIFE_TIME_UNIT_IN_POWER_OF_2))
- #define HAL_MAC_TX_DESC_SET_REMAINING_LIFE_TIME_IN_MS(_prHwMacTxDesc, _u4LifeTimeMs) \
- { \
- UINT_32 u4LifeTimeInUnit = \
- ((MSEC_TO_USEC(_u4LifeTimeMs) / USEC_PER_TU) >> TX_DESC_LIFE_TIME_UNIT_IN_POWER_OF_2); \
- if (u4LifeTimeInUnit >= BIT(8)) { \
- u4LifeTimeInUnit = BITS(0, 7); \
- } \
- else if ((_u4LifeTimeMs != TX_DESC_TX_TIME_NO_LIMIT) \
- && (u4LifeTimeInUnit == TX_DESC_TX_TIME_NO_LIMIT)) { \
- u4LifeTimeInUnit = 1; \
- } \
- HAL_MAC_TX_DESC_SET_REMAINING_LIFE_TIME(_prHwMacTxDesc, (UINT_8)u4LifeTimeInUnit); \
- }
- #define HAL_MAC_TX_DESC_GET_POWER_OFFSET(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucPowerOffset, TX_DESC_POWER_OFFSET_MASK, 0)
- #define HAL_MAC_TX_DESC_SET_POWER_OFFSET(_prHwMacTxDesc, _ucPowerOffset) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucPowerOffset), ((UINT_8)_ucPowerOffset), TX_DESC_POWER_OFFSET_MASK, 0)
- #define HAL_MAC_TX_DESC_IS_BA_DISABLE(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_BA_DISABLE)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_BA_DISABLE(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_BA_DISABLE)
- #define HAL_MAC_TX_DESC_SET_BA_ENABLE(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_BA_DISABLE)
- #define HAL_MAC_TX_DESC_IS_TIMING_MEASUREMENT(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_TIMING_MEASUREMENT)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_TIMING_MEASUREMENT(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_TIMING_MEASUREMENT)
- #define HAL_MAC_TX_DESC_UNSET_TIMING_MEASUREMENT(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_TIMING_MEASUREMENT)
- #define HAL_MAC_TX_DESC_IS_FIXED_RATE_ENABLE(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_FIXED_RATE)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_FIXED_RATE_ENABLE(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_FIXED_RATE)
- #define HAL_MAC_TX_DESC_SET_FIXED_RATE_DISABLE(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_FIXED_RATE)
- /* DW 3 */
- #define HAL_MAC_TX_DESC_GET_SW_RESERVED(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->u2TxCountLimit, \
- TX_DESC_SW_RESERVED_MASK, TX_DESC_SW_RESERVED_OFFSET)
- #define HAL_MAC_TX_DESC_SET_SW_RESERVED(_prHwMacTxDesc, _ucSwReserved) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2TxCountLimit), \
- ((UINT_8)_ucSwReserved), TX_DESC_SW_RESERVED_MASK, TX_DESC_SW_RESERVED_OFFSET)
- #define HAL_MAC_TX_DESC_GET_TX_COUNT(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->u2TxCountLimit, \
- TX_DESC_TX_COUNT_MASK, TX_DESC_TX_COUNT_OFFSET)
- #define HAL_MAC_TX_DESC_SET_TX_COUNT(_prHwMacTxDesc, _ucTxCountLimit) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2TxCountLimit), \
- ((UINT_8)_ucTxCountLimit), TX_DESC_TX_COUNT_MASK, TX_DESC_TX_COUNT_OFFSET)
- #define HAL_MAC_TX_DESC_GET_REMAINING_TX_COUNT(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->u2TxCountLimit, \
- TX_DESC_REMAINING_TX_COUNT_MASK, TX_DESC_REMAINING_TX_COUNT_OFFSET)
- #define HAL_MAC_TX_DESC_SET_REMAINING_TX_COUNT(_prHwMacTxDesc, _ucTxCountLimit) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2TxCountLimit), ((UINT_8)_ucTxCountLimit), \
- TX_DESC_REMAINING_TX_COUNT_MASK, TX_DESC_REMAINING_TX_COUNT_OFFSET)
- #define HAL_MAC_TX_DESC_GET_SEQUENCE_NUMBER(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->u2SN, TX_DESC_SEQUENCE_NUMBER, 0)
- #define HAL_MAC_TX_DESC_SET_SEQUENCE_NUMBER(_prHwMacTxDesc, _u2SN) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2SN), ((UINT_16)_u2SN), TX_DESC_SEQUENCE_NUMBER, 0)
- #define HAL_MAC_TX_DESC_SET_HW_RESERVED(_prHwMacTxDesc, _ucHwReserved) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2SN), ((UINT_8)_ucHwReserved), \
- TX_DESC_HW_RESERVED_MASK, TX_DESC_HW_RESERVED_OFFSET)
- #define HAL_MAC_TX_DESC_IS_TXD_SN_VALID(_prHwMacTxDesc) (((_prHwMacTxDesc)->u2SN & TX_DESC_SN_IS_VALID)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_TXD_SN_VALID(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2SN |= TX_DESC_SN_IS_VALID)
- #define HAL_MAC_TX_DESC_SET_TXD_SN_INVALID(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2SN &= ~TX_DESC_SN_IS_VALID)
- #define HAL_MAC_TX_DESC_IS_TXD_PN_VALID(_prHwMacTxDesc) (((_prHwMacTxDesc)->u2SN & TX_DESC_PN_IS_VALID)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_TXD_PN_VALID(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2SN |= TX_DESC_PN_IS_VALID)
- #define HAL_MAC_TX_DESC_SET_TXD_PN_INVALID(_prHwMacTxDesc) ((_prHwMacTxDesc)->u2SN &= ~TX_DESC_PN_IS_VALID)
- #define HAL_MAC_TX_DESC_ASSIGN_SN_BY_SW(_prHwMacTxDesc, _u2SN) \
- { \
- HAL_MAC_TX_DESC_SET_SEQUENCE_NUMBER(_prHwMacTxDesc, _u2SN); \
- HAL_MAC_TX_DESC_SET_TXD_SN_VALID(_prHwMacTxDesc); \
- }
- #define HAL_MAC_TX_DESC_ASSIGN_SN_BY_HW(_prHwMacTxDesc) \
- { \
- HAL_MAC_TX_DESC_SET_SEQUENCE_NUMBER(_prHwMacTxDesc, 0); \
- HAL_MAC_TX_DESC_SET_TXD_SN_INVALID(_prHwMacTxDesc); \
- }
- /* DW 4 */
- #define HAL_MAC_TX_DESC_GET_PN(_prHwMacTxDesc, _u4PN_0_31, _u2PN_32_47) \
- { \
- ((UINT_32)_u4PN_0_31) = (_prHwMacTxDesc)->u4PN1; \
- ((UINT_16)_u2PN_32_47) = (_prHwMacTxDesc)->u2PN2; \
- }
- #define HAL_MAC_TX_DESC_SET_PN(_prHwMacTxDesc, _u4PN_0_31, _u2PN_32_47) \
- { \
- (_prHwMacTxDesc)->u4PN1 = ((UINT_32)_u4PN_0_31); \
- (_prHwMacTxDesc)->u2PN2 = ((UINT_16)_u2PN_32_47); \
- }
- #define HAL_MAC_TX_DESC_ASSIGN_PN_BY_SW(_prHwMacTxDesc, _u4PN_0_31, _u2PN_32_47) \
- { \
- HAL_MAC_TX_DESC_SET_PN(_prHwMacTxDesc, _u4PN_0_31, _u2PN_32_47); \
- HAL_MAC_TX_DESC_SET_TXD_PN_VALID(_prHwMacTxDesc); \
- }
- #define HAL_MAC_TX_DESC_ASSIGN_PSN_BY_HW(_prHwMacTxDesc) \
- { \
- HAL_MAC_TX_DESC_SET_PN(_prHwMacTxDesc, 0, 0); \
- HAL_MAC_TX_DESC_SET_TXD_PN_INVALID(_prHwMacTxDesc); \
- }
- /* DW 5 */
- #define HAL_MAC_TX_DESC_GET_PID(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPID)
- #define HAL_MAC_TX_DESC_SET_PID(_prHwMacTxDesc, _ucPID) \
- (((_prHwMacTxDesc)->ucPID) = (_ucPID))
- #define HAL_MAC_TX_DESC_GET_TXS_FORMAT(_prHwMacTxDesc) \
- TX_DESC_GET_FIELD((_prHwMacTxDesc)->ucTxStatus, TX_DESC_TX_STATUS_FORMAT, TX_DESC_TX_STATUS_FORMAT_OFFSET)
- #define HAL_MAC_TX_DESC_SET_TXS_FORMAT(_prHwMacTxDesc, _ucTXSFormat) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucTxStatus), \
- ((UINT_8)_ucTXSFormat), TX_DESC_TX_STATUS_FORMAT, TX_DESC_TX_STATUS_FORMAT_OFFSET)
- #define HAL_MAC_TX_DESC_IS_TXS_TO_MCU(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucTxStatus & TX_DESC_TX_STATUS_TO_MCU)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_TXS_TO_MCU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucTxStatus |= TX_DESC_TX_STATUS_TO_MCU)
- #define HAL_MAC_TX_DESC_UNSET_TXS_TO_MCU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucTxStatus &= ~TX_DESC_TX_STATUS_TO_MCU)
- #define HAL_MAC_TX_DESC_IS_TXS_TO_HOST(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucTxStatus & TX_DESC_TX_STATUS_TO_HOST)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_TXS_TO_HOST(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucTxStatus |= TX_DESC_TX_STATUS_TO_HOST)
- #define HAL_MAC_TX_DESC_UNSET_TXS_TO_HOST(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucTxStatus &= ~TX_DESC_TX_STATUS_TO_HOST)
- #define HAL_MAC_TX_DESC_IS_DA_FROM_WTBL(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_DA_SOURCE)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_DA_FROM_WTBL(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_DA_SOURCE)
- #define HAL_MAC_TX_DESC_SET_DA_FROM_MSDU(_prHwMacTxDesc) ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_DA_SOURCE)
- #define HAL_MAC_TX_DESC_IS_SW_BAR_SSN(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_BAR_SSN_CONTROL)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_SW_BAR_SSN(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_BAR_SSN_CONTROL)
- #define HAL_MAC_TX_DESC_SET_HW_BAR_SSN(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_BAR_SSN_CONTROL)
- #define HAL_MAC_TX_DESC_IS_SW_PM_CONTROL(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucPowerOffset & TX_DESC_POWER_MANAGEMENT_CONTROL)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_SW_PM_CONTROL(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPowerOffset |= TX_DESC_POWER_MANAGEMENT_CONTROL)
- #define HAL_MAC_TX_DESC_SET_HW_PM_CONTROL(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucPowerOffset &= ~TX_DESC_POWER_MANAGEMENT_CONTROL)
- /* DW 6 */
- #define HAL_MAC_TX_DESC_IS_CR_FIXED_RATE_MODE(_prHwMacTxDesc) \
- (((_prHwMacTxDesc)->ucAntID & TX_DESC_FIXED_RATE_MODE)?TRUE:FALSE)
- #define HAL_MAC_TX_DESC_SET_FIXED_RATE_MODE_TO_DESC(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucAntID &= ~TX_DESC_FIXED_RATE_MODE)
- #define HAL_MAC_TX_DESC_SET_FIXED_RATE_MODE_TO_CR(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucAntID |= TX_DESC_FIXED_RATE_MODE)
- #define HAL_MAC_TX_DESC_SET_FR_ANTENNA_ID(_prHwMacTxDesc, _ucAntId) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucAntID), ((UINT_8)_ucAntId), TX_DESC_ANTENNA_INDEX_MASK, 2)
- #define HAL_MAC_TX_DESC_SET_FR_BW(_prHwMacTxDesc, ucBw) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucBandwidth), ((UINT_8)ucBw), TX_DESC_BANDWIDTH_MASK, 0)
- #define HAL_MAC_TX_DESC_SET_FR_SPE_EN(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucBandwidth |= TX_DESC_BANDWIDTH_MASK)
- #define HAL_MAC_TX_DESC_SET_FR_ANTENNA_PRIORITY(_prHwMacTxDesc, _ucAntPri) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->ucBandwidth), ((UINT_8)_ucAntPri), TX_DESC_ANTENNA_PRIORITY, 4)
- #define HAL_MAC_TX_DESC_SET_FR_DYNAMIC_BW_RTS(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->ucBandwidth |= TX_DESC_DYNAMIC_BANDWIDTH)
- #define HAL_MAC_TX_DESC_SET_FR_ETX_BF(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->u2FixedRate |= TX_DESC_EXPLICIT_BEAMFORMING)
- #define HAL_MAC_TX_DESC_SET_FR_ITX_BF(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->u2FixedRate |= TX_DESC_IMPLICIT_BEAMFORMING)
- #define HAL_MAC_TX_DESC_SET_FR_RATE(_prHwMacTxDesc, _u2RatetoFixed) \
- TX_DESC_SET_FIELD(((_prHwMacTxDesc)->u2FixedRate), ((UINT_8)_u2RatetoFixed), TX_DESC_FIXDE_RATE_MASK, 2)
- #define HAL_MAC_TX_DESC_SET_FR_LDPC(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->u2FixedRate |= TX_DESC_LDPC)
- #define HAL_MAC_TX_DESC_SET_FR_SHORT_GI(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->u2FixedRate |= TX_DESC_GUARD_INTERVAL)
- #define HAL_MAC_TX_DESC_SET_FR_NORMAL_GI(_prHwMacTxDesc) \
- ((_prHwMacTxDesc)->u2FixedRate &= ~TX_DESC_GUARD_INTERVAL)
- /*******************************************************************************
- * F U N C T I O N D E C L A R A T I O N S
- ********************************************************************************
- */
- VOID nicTxInitialize(IN P_ADAPTER_T prAdapter);
- WLAN_STATUS nicTxAcquireResource(IN P_ADAPTER_T prAdapter, IN UINT_8 ucTC, IN UINT_8 ucPageCount);
- WLAN_STATUS nicTxPollingResource(IN P_ADAPTER_T prAdapter, IN UINT_8 ucTC);
- BOOLEAN nicTxReleaseResource(IN P_ADAPTER_T prAdapter, IN UINT_16 *au2TxRlsCnt);
- WLAN_STATUS nicTxResetResource(IN P_ADAPTER_T prAdapter);
- UINT_16 nicTxGetResource(IN P_ADAPTER_T prAdapter, IN UINT_8 ucTC);
- UINT_8 nicTxGetFrameResourceType(IN UINT_8 eFrameType, IN P_MSDU_INFO_T prMsduInfo);
- UINT_8 nicTxGetCmdResourceType(IN P_CMD_INFO_T prCmdInfo);
- VOID
- nicTxFillDesc(IN P_ADAPTER_T prAdapter,
- IN P_MSDU_INFO_T prMsduInfo, OUT PUINT_8 prTxDescBuffer, OUT PUINT_8 pucTxDescLength);
- VOID
- nicTxComposeSecurityFrameDesc(IN P_ADAPTER_T prAdapter,
- IN P_CMD_INFO_T prCmdInfo, OUT PUINT_8 prTxDescBuffer, OUT PUINT_8 pucTxDescLength);
- WLAN_STATUS nicTxMsduInfoList(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
- #if CFG_SUPPORT_MULTITHREAD
- WLAN_STATUS nicTxMsduInfoListMthread(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
- UINT_32 nicTxMsduQueueMthread(IN P_ADAPTER_T prAdapter);
- #endif
- WLAN_STATUS nicTxMsduQueue(IN P_ADAPTER_T prAdapter, UINT_8 ucPortIdx, P_QUE_T prQue);
- WLAN_STATUS nicTxCmd(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo, IN UINT_8 ucTC);
- VOID nicTxRelease(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgProcTxDoneHandler);
- VOID nicProcessTxInterrupt(IN P_ADAPTER_T prAdapter);
- VOID nicTxFreeMsduInfoPacket(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
- VOID nicTxReturnMsduInfo(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
- BOOLEAN nicTxFillMsduInfo(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN P_NATIVE_PACKET prNdisPacket);
- WLAN_STATUS nicTxAdjustTcq(IN P_ADAPTER_T prAdapter);
- WLAN_STATUS nicTxFlush(IN P_ADAPTER_T prAdapter);
- #if CFG_ENABLE_FW_DOWNLOAD
- WLAN_STATUS nicTxInitCmd(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo);
- WLAN_STATUS nicTxInitResetResource(IN P_ADAPTER_T prAdapter);
- #endif
- WLAN_STATUS nicTxEnqueueMsdu(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo);
- UINT_8 nicTxGetWlanIdx(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx, IN UINT_8 ucStaRecIdx);
- BOOLEAN nicTxIsMgmtResourceEnough(IN P_ADAPTER_T prAdapter);
- UINT_32 nicTxGetFreeCmdCount(IN P_ADAPTER_T prAdapter);
- UINT_8 nicTxGetPageCount(IN UINT_32 u4FrameLength, IN BOOLEAN fgIncludeDesc);
- UINT_8 nicTxGetCmdPageCount(IN P_CMD_INFO_T prCmdInfo);
- WLAN_STATUS nicTxGenerateDescTemplate(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
- VOID nicTxFreeDescTemplate(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
- VOID
- nicTxSetMngPacket(IN P_ADAPTER_T prAdapter,
- IN P_MSDU_INFO_T prMsduInfo,
- IN UINT_8 ucBssIndex,
- IN UINT_8 ucStaRecIndex,
- IN UINT_8 ucMacHeaderLength,
- IN UINT_16 u2FrameLength, IN PFN_TX_DONE_HANDLER pfTxDoneHandler, IN UINT_8 ucRateMode);
- VOID
- nicTxSetDataPacket(IN P_ADAPTER_T prAdapter,
- IN P_MSDU_INFO_T prMsduInfo,
- IN UINT_8 ucBssIndex,
- IN UINT_8 ucStaRecIndex,
- IN UINT_8 ucMacHeaderLength,
- IN UINT_16 u2FrameLength,
- IN PFN_TX_DONE_HANDLER pfTxDoneHandler,
- IN UINT_8 ucRateMode,
- IN ENUM_TX_PACKET_SRC_T eSrc, IN UINT_8 ucTID, IN BOOLEAN fgIs802_11Frame, IN BOOLEAN fgIs1xFrame);
- VOID nicTxFillDescByPktOption(IN P_MSDU_INFO_T prMsduInfo, IN P_HW_MAC_TX_DESC_T prTxDesc);
- VOID nicTxConfigPktOption(IN P_MSDU_INFO_T prMsduInfo, IN UINT_32 u4OptionMask, IN BOOLEAN fgSetOption);
- VOID nicTxFillDescByPktControl(P_MSDU_INFO_T prMsduInfo, P_HW_MAC_TX_DESC_T prTxDesc);
- VOID nicTxConfigPktControlFlag(IN P_MSDU_INFO_T prMsduInfo, IN UINT_8 ucControlFlagMask, IN BOOLEAN fgSetFlag);
- VOID nicTxSetPktLifeTime(IN P_MSDU_INFO_T prMsduInfo, IN UINT_32 u4TxLifeTimeInMs);
- VOID nicTxSetPktRetryLimit(IN P_MSDU_INFO_T prMsduInfo, IN UINT_8 ucRetryLimit);
- VOID nicTxSetPktPowerOffset(IN P_MSDU_INFO_T prMsduInfo, IN INT_8 cPowerOffset);
- VOID nicTxSetPktSequenceNumber(IN P_MSDU_INFO_T prMsduInfo, IN UINT_16 u2SN);
- VOID nicTxSetPktMacTxQue(IN P_MSDU_INFO_T prMsduInfo, IN UINT_8 ucMacTxQue);
- VOID
- nicTxSetPktFixedRateOptionFull(IN P_MSDU_INFO_T prMsduInfo,
- IN UINT_16 u2RateCode,
- IN UINT_8 ucBandwidth,
- IN BOOLEAN fgShortGI,
- IN BOOLEAN fgLDPC,
- IN BOOLEAN fgDynamicBwRts,
- IN BOOLEAN fgSpatialExt,
- IN BOOLEAN fgEtxBeamforming,
- IN BOOLEAN fgItxBeamforming, IN UINT_8 ucAntennaIndex, IN UINT_8 ucAntennaPriority);
- VOID
- nicTxSetPktFixedRateOption(IN P_MSDU_INFO_T prMsduInfo,
- IN UINT_16 u2RateCode,
- IN UINT_8 ucBandwidth, IN BOOLEAN fgShortGI, IN BOOLEAN fgDynamicBwRts);
- VOID nicTxSetPktMoreData(IN P_MSDU_INFO_T prCurrentMsduInfo, IN BOOLEAN fgSetMoreDataBit);
- VOID nicTxSetPktEOSP(IN P_MSDU_INFO_T prCurrentMsduInfo, IN BOOLEAN fgSetEOSPBit);
- UINT_8 nicTxAssignPID(IN P_ADAPTER_T prAdapter, IN UINT_8 ucWlanIndex);
- WLAN_STATUS
- nicTxDummyTxDone(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
- VOID nicTxUpdateBssDefaultRate(IN P_BSS_INFO_T prBssInfo);
- VOID nicTxUpdateStaRecDefaultRate(IN P_STA_RECORD_T prStaRec);
- VOID
- nicTxPrintMetRTP(IN P_ADAPTER_T prAdapter,
- IN P_MSDU_INFO_T prMsduInfo, IN P_NATIVE_PACKET prPacket, IN UINT_32 u4PacketLen, IN BOOLEAN bFreeSkb);
- VOID nicTxProcessTxDoneEvent(IN P_ADAPTER_T prAdapter, IN P_WIFI_EVENT_T prEvent);
- /*******************************************************************************
- * F U N C T I O N S
- ********************************************************************************
- */
- #endif /* _NIC_TX_H */
|