1d8a32b73SAdrian Chadd /* 2d8a32b73SAdrian Chadd * Copyright (c) 2012 Adrian Chadd <adrian@FreeBSD.org> 3d8a32b73SAdrian Chadd * All Rights Reserved. 4d8a32b73SAdrian Chadd * 5d8a32b73SAdrian Chadd * Permission to use, copy, modify, and/or distribute this software for any 6d8a32b73SAdrian Chadd * purpose with or without fee is hereby granted, provided that the above 7d8a32b73SAdrian Chadd * copyright notice and this permission notice appear in all copies. 8d8a32b73SAdrian Chadd * 9d8a32b73SAdrian Chadd * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10d8a32b73SAdrian Chadd * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11d8a32b73SAdrian Chadd * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12d8a32b73SAdrian Chadd * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13d8a32b73SAdrian Chadd * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14d8a32b73SAdrian Chadd * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15d8a32b73SAdrian Chadd * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16d8a32b73SAdrian Chadd */ 17d8a32b73SAdrian Chadd 18d8a32b73SAdrian Chadd #include <sys/cdefs.h> 19d8a32b73SAdrian Chadd __FBSDID("$FreeBSD$"); 20d8a32b73SAdrian Chadd 21d8a32b73SAdrian Chadd #include <stdio.h> 22d8a32b73SAdrian Chadd #include <stdlib.h> 23d8a32b73SAdrian Chadd #include <unistd.h> 24d8a32b73SAdrian Chadd #include <fcntl.h> 25d8a32b73SAdrian Chadd #include <errno.h> 26d8a32b73SAdrian Chadd #include <string.h> 27d8a32b73SAdrian Chadd 28d8a32b73SAdrian Chadd #include <sys/types.h> 29d8a32b73SAdrian Chadd #include <sys/alq.h> 30d8a32b73SAdrian Chadd #include <sys/endian.h> 31d8a32b73SAdrian Chadd 32d8a32b73SAdrian Chadd #include <dev/ath/if_ath_alq.h> 33d8a32b73SAdrian Chadd #include <dev/ath/ath_hal/ar5416/ar5416desc.h> 34d8a32b73SAdrian Chadd 35d8a32b73SAdrian Chadd #include "ar5416_ds.h" 36d8a32b73SAdrian Chadd 37d8a32b73SAdrian Chadd #define MS(_v, _f) ( ((_v) & (_f)) >> _f##_S ) 38d8a32b73SAdrian Chadd #define MF(_v, _f) ( !! ((_v) & (_f))) 39d8a32b73SAdrian Chadd 40d8a32b73SAdrian Chadd static void 41d8a32b73SAdrian Chadd ar5416_decode_txstatus(struct if_ath_alq_payload *a) 42d8a32b73SAdrian Chadd { 43d8a32b73SAdrian Chadd struct ar5416_desc txs; 44d8a32b73SAdrian Chadd 45d8a32b73SAdrian Chadd /* XXX assumes txs is smaller than PAYLOAD_LEN! */ 46d8a32b73SAdrian Chadd memcpy(&txs, &a->payload, sizeof(struct ar5416_desc)); 47d8a32b73SAdrian Chadd 48fec3d03dSAdrian Chadd printf("[%u.%06u] [%llu] TXSTATUS: TxDone=%d, FrmOk=%d, filt=%d, TS=0x%08x\n", 490a83adddSAdrian Chadd (unsigned int) be32toh(a->hdr.tstamp_sec), 500a83adddSAdrian Chadd (unsigned int) be32toh(a->hdr.tstamp_usec), 513301ff56SAdrian Chadd (unsigned long long) be64toh(a->hdr.threadid), 523301ff56SAdrian Chadd MF(txs.u.tx.status[9], AR_TxDone), 53fec3d03dSAdrian Chadd MF(txs.u.tx.status[1], AR_FrmXmitOK), 54fec3d03dSAdrian Chadd MF(txs.u.tx.status[1], AR_Filtered), 553301ff56SAdrian Chadd txs.u.tx.status[2]); 56d8a32b73SAdrian Chadd 57d8a32b73SAdrian Chadd /* ds_txstatus0 */ 58fec3d03dSAdrian Chadd printf(" RX RSSI 0 [%d %d %d]", 59d8a32b73SAdrian Chadd MS(txs.u.tx.status[0], AR_TxRSSIAnt00), 60d8a32b73SAdrian Chadd MS(txs.u.tx.status[0], AR_TxRSSIAnt01), 61d8a32b73SAdrian Chadd MS(txs.u.tx.status[0], AR_TxRSSIAnt02)); 62fec3d03dSAdrian Chadd 63fec3d03dSAdrian Chadd /* ds_txstatus5 */ 64fec3d03dSAdrian Chadd printf(" RX RSSI 1 [%d %d %d] Comb=%d\n", 65fec3d03dSAdrian Chadd MS(txs.u.tx.status[5], AR_TxRSSIAnt10), 66fec3d03dSAdrian Chadd MS(txs.u.tx.status[5], AR_TxRSSIAnt11), 67fec3d03dSAdrian Chadd MS(txs.u.tx.status[5], AR_TxRSSIAnt12), 68fec3d03dSAdrian Chadd MS(txs.u.tx.status[5], AR_TxRSSICombined)); 69fec3d03dSAdrian Chadd 70fec3d03dSAdrian Chadd /* ds_txstatus0 */ 71fec3d03dSAdrian Chadd printf(" BA Valid=%d", 72d8a32b73SAdrian Chadd MF(txs.u.tx.status[0], AR_TxBaStatus)); 73d8a32b73SAdrian Chadd 74d8a32b73SAdrian Chadd /* ds_txstatus1 */ 75fec3d03dSAdrian Chadd printf(", Frmok=%d, xretries=%d, fifounderrun=%d, filt=%d\n", 76d8a32b73SAdrian Chadd MF(txs.u.tx.status[1], AR_FrmXmitOK), 77d8a32b73SAdrian Chadd MF(txs.u.tx.status[1], AR_ExcessiveRetries), 78d8a32b73SAdrian Chadd MF(txs.u.tx.status[1], AR_FIFOUnderrun), 79d8a32b73SAdrian Chadd MF(txs.u.tx.status[1], AR_Filtered)); 80d8a32b73SAdrian Chadd printf(" DelimUnderrun=%d, DataUnderun=%d, DescCfgErr=%d," 81d8a32b73SAdrian Chadd " TxTimerExceeded=%d\n", 82d8a32b73SAdrian Chadd MF(txs.u.tx.status[1], AR_TxDelimUnderrun), 83d8a32b73SAdrian Chadd MF(txs.u.tx.status[1], AR_TxDataUnderrun), 84d8a32b73SAdrian Chadd MF(txs.u.tx.status[1], AR_DescCfgErr), 85d8a32b73SAdrian Chadd MF(txs.u.tx.status[1], AR_TxTimerExpired)); 86d8a32b73SAdrian Chadd 87d8a32b73SAdrian Chadd printf(" RTScnt=%d, FailCnt=%d, VRetryCnt=%d\n", 88d8a32b73SAdrian Chadd MS(txs.u.tx.status[1], AR_RTSFailCnt), 89d8a32b73SAdrian Chadd MS(txs.u.tx.status[1], AR_DataFailCnt), 90d8a32b73SAdrian Chadd MS(txs.u.tx.status[1], AR_VirtRetryCnt)); 91d8a32b73SAdrian Chadd 92d8a32b73SAdrian Chadd /* ds_txstatus2 */ 93fec3d03dSAdrian Chadd printf(" TxTimestamp=0x%08x", txs.u.tx.status[2]); 94d8a32b73SAdrian Chadd 95d8a32b73SAdrian Chadd /* ds_txstatus3 */ 96d8a32b73SAdrian Chadd /* ds_txstatus4 */ 97fec3d03dSAdrian Chadd printf(", BALow=0x%08x", txs.u.tx.status[3]); 98fec3d03dSAdrian Chadd printf(", BAHigh=0x%08x\n", txs.u.tx.status[4]); 99d8a32b73SAdrian Chadd 100d8a32b73SAdrian Chadd 101d8a32b73SAdrian Chadd /* ds_txstatus6 */ 102d8a32b73SAdrian Chadd /* ds_txstatus7 */ 103d8a32b73SAdrian Chadd /* ds_txstatus8 */ 104d8a32b73SAdrian Chadd printf(" TxEVM[0]=0x%08x, TxEVM[1]=0x%08x, TxEVM[2]=0x%08x\n", 105d8a32b73SAdrian Chadd txs.u.tx.status[6], 106d8a32b73SAdrian Chadd txs.u.tx.status[7], 107d8a32b73SAdrian Chadd txs.u.tx.status[8]); 108d8a32b73SAdrian Chadd 109d8a32b73SAdrian Chadd /* ds_txstatus9 */ 110d8a32b73SAdrian Chadd printf(" TxDone=%d, SeqNum=0x%04x, TxOpExceeded=%d, FinalTsIdx=%d\n", 111d8a32b73SAdrian Chadd MF(txs.u.tx.status[9], AR_TxDone), 112d8a32b73SAdrian Chadd MS(txs.u.tx.status[9], AR_SeqNum), 113d8a32b73SAdrian Chadd MF(txs.u.tx.status[9], AR_TxOpExceeded), 114d8a32b73SAdrian Chadd MS(txs.u.tx.status[9], AR_FinalTxIdx)); 115d8a32b73SAdrian Chadd printf(" PowerMgmt=%d, TxTid=%d\n", 116d8a32b73SAdrian Chadd MF(txs.u.tx.status[9], AR_PowerMgmt), 117d8a32b73SAdrian Chadd MS(txs.u.tx.status[9], AR_TxTid)); 118d8a32b73SAdrian Chadd 119d8a32b73SAdrian Chadd printf("\n ------\n"); 120d8a32b73SAdrian Chadd } 121d8a32b73SAdrian Chadd 122d8a32b73SAdrian Chadd static void 123d8a32b73SAdrian Chadd ar5416_decode_txdesc(struct if_ath_alq_payload *a) 124d8a32b73SAdrian Chadd { 125d8a32b73SAdrian Chadd struct ar5416_desc txc; 126d8a32b73SAdrian Chadd 127d8a32b73SAdrian Chadd /* XXX assumes txs is smaller than PAYLOAD_LEN! */ 128d8a32b73SAdrian Chadd memcpy(&txc, &a->payload, sizeof(struct ar5416_desc)); 129d8a32b73SAdrian Chadd 1300a83adddSAdrian Chadd printf("[%u.%06u] [%llu] TXD\n", 1310a83adddSAdrian Chadd (unsigned int) be32toh(a->hdr.tstamp_sec), 1320a83adddSAdrian Chadd (unsigned int) be32toh(a->hdr.tstamp_usec), 133d8a32b73SAdrian Chadd (unsigned long long) be64toh(a->hdr.threadid)); 134d8a32b73SAdrian Chadd 135d8a32b73SAdrian Chadd printf(" link=0x%08x, data=0x%08x\n", 136d8a32b73SAdrian Chadd txc.ds_link, 137d8a32b73SAdrian Chadd txc.ds_data); 138d8a32b73SAdrian Chadd 139d8a32b73SAdrian Chadd /* ds_ctl0 */ 140d8a32b73SAdrian Chadd printf(" Frame Len=%d, VMF=%d\n", 141d8a32b73SAdrian Chadd txc.ds_ctl0 & AR_FrameLen, 142d8a32b73SAdrian Chadd MF(txc.ds_ctl0, AR_VirtMoreFrag)); 143d8a32b73SAdrian Chadd printf(" TX power0=%d, RtsEna=%d, Veol=%d, ClrDstMask=%d\n", 144d8a32b73SAdrian Chadd MS(txc.ds_ctl0, AR_XmitPower), 145d8a32b73SAdrian Chadd MF(txc.ds_ctl0, AR_RTSEnable), 146d8a32b73SAdrian Chadd MF(txc.ds_ctl0, AR_VEOL), 147d8a32b73SAdrian Chadd MF(txc.ds_ctl0, AR_ClrDestMask)); 148d8a32b73SAdrian Chadd printf(" TxIntrReq=%d, DestIdxValid=%d, CtsEnable=%d\n", 149d8a32b73SAdrian Chadd MF(txc.ds_ctl0, AR_TxIntrReq), 150d8a32b73SAdrian Chadd MF(txc.ds_ctl0, AR_DestIdxValid), 151d8a32b73SAdrian Chadd MF(txc.ds_ctl0, AR_CTSEnable)); 152d8a32b73SAdrian Chadd 153d8a32b73SAdrian Chadd /* ds_ctl1 */ 154d8a32b73SAdrian Chadd printf(" BufLen=%d, TxMore=%d, DestIdx=%d," 155d8a32b73SAdrian Chadd " FrType=0x%x\n", 156d8a32b73SAdrian Chadd txc.ds_ctl1 & AR_BufLen, 157d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_TxMore), 158d8a32b73SAdrian Chadd MS(txc.ds_ctl1, AR_DestIdx), 159d8a32b73SAdrian Chadd MS(txc.ds_ctl1, AR_FrameType)); 160d8a32b73SAdrian Chadd printf(" NoAck=%d, InsertTs=%d, CorruptFcs=%d, ExtOnly=%d," 161d8a32b73SAdrian Chadd " ExtAndCtl=%d\n", 162d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_NoAck), 163d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_InsertTS), 164d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_CorruptFCS), 165d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_ExtOnly), 166d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_ExtAndCtl)); 167d8a32b73SAdrian Chadd printf(" MoreAggr=%d, IsAggr=%d, MoreRifs=%d\n", 168d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_MoreAggr), 169d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_IsAggr), 170d8a32b73SAdrian Chadd MF(txc.ds_ctl1, AR_MoreRifs)); 171d8a32b73SAdrian Chadd 172d8a32b73SAdrian Chadd /* ds_ctl2 */ 173d8a32b73SAdrian Chadd printf(" DurUpEna=%d, Burstdur=0x%04x\n", 174d8a32b73SAdrian Chadd MF(txc.ds_ctl2, AR_DurUpdateEn), 175d8a32b73SAdrian Chadd MS(txc.ds_ctl2, AR_BurstDur)); 176d8a32b73SAdrian Chadd printf(" Try0=%d, Try1=%d, Try2=%d, Try3=%d\n", 177d8a32b73SAdrian Chadd MS(txc.ds_ctl2, AR_XmitDataTries0), 178d8a32b73SAdrian Chadd MS(txc.ds_ctl2, AR_XmitDataTries1), 179d8a32b73SAdrian Chadd MS(txc.ds_ctl2, AR_XmitDataTries2), 180d8a32b73SAdrian Chadd MS(txc.ds_ctl2, AR_XmitDataTries3)); 181d8a32b73SAdrian Chadd 182fec3d03dSAdrian Chadd /* ds_ctl3, 4 */ 183fec3d03dSAdrian Chadd printf(" try 0: Rate=0x%02x, PktDur=%d, RTS/CTS ena=%d\n", 184d8a32b73SAdrian Chadd MS(txc.ds_ctl3, AR_XmitRate0), 185d8a32b73SAdrian Chadd MS(txc.ds_ctl4, AR_PacketDur0), 186d8a32b73SAdrian Chadd MF(txc.ds_ctl4, AR_RTSCTSQual0)); 187fec3d03dSAdrian Chadd printf(" try 1: Rate=0x%02x, PktDur=%d, RTS/CTS ena=%d\n", 188fec3d03dSAdrian Chadd MS(txc.ds_ctl3, AR_XmitRate1), 189d8a32b73SAdrian Chadd MS(txc.ds_ctl4, AR_PacketDur1), 190d8a32b73SAdrian Chadd MF(txc.ds_ctl4, AR_RTSCTSQual1)); 191d8a32b73SAdrian Chadd 192fec3d03dSAdrian Chadd /* ds_ctl3, 5 */ 193fec3d03dSAdrian Chadd printf(" try 2: Rate=0x%02x, PktDur=%d, RTS/CTS ena=%d\n", 194fec3d03dSAdrian Chadd MS(txc.ds_ctl3, AR_XmitRate2), 195d8a32b73SAdrian Chadd MS(txc.ds_ctl5, AR_PacketDur2), 196d8a32b73SAdrian Chadd MF(txc.ds_ctl5, AR_RTSCTSQual2)); 197fec3d03dSAdrian Chadd printf(" try 3: Rate=0x%02x, PktDur=%d, RTS/CTS ena=%d\n", 198fec3d03dSAdrian Chadd MS(txc.ds_ctl3, AR_XmitRate3), 199d8a32b73SAdrian Chadd MS(txc.ds_ctl5, AR_PacketDur3), 200d8a32b73SAdrian Chadd MF(txc.ds_ctl5, AR_RTSCTSQual3)); 201d8a32b73SAdrian Chadd 202d8a32b73SAdrian Chadd /* ds_ctl6 */ 203d8a32b73SAdrian Chadd printf(" AggrLen=%d, PadDelim=%d, EncrType=%d\n", 204d8a32b73SAdrian Chadd MS(txc.ds_ctl6, AR_AggrLen), 205d8a32b73SAdrian Chadd MS(txc.ds_ctl6, AR_PadDelim), 206d8a32b73SAdrian Chadd MS(txc.ds_ctl6, AR_EncrType)); 207d8a32b73SAdrian Chadd 208d8a32b73SAdrian Chadd /* ds_ctl7 */ 209d8a32b73SAdrian Chadd printf(" try 0: chainMask=0x%x, GI=%d, 2040=%d, STBC=%d\n", 210d8a32b73SAdrian Chadd MS(txc.ds_ctl7, AR_ChainSel0), 211d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_GI0), 212d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_2040_0), 213d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_STBC0)); 214d8a32b73SAdrian Chadd printf(" try 1: chainMask=0x%x, GI=%d, 2040=%d, STBC=%d\n", 215d8a32b73SAdrian Chadd MS(txc.ds_ctl7, AR_ChainSel1), 216d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_GI1), 217d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_2040_1), 218d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_STBC1)); 219d8a32b73SAdrian Chadd printf(" try 2: chainMask=0x%x, GI=%d, 2040=%d, STBC=%d\n", 220d8a32b73SAdrian Chadd MS(txc.ds_ctl7, AR_ChainSel2), 221d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_GI2), 222d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_2040_2), 223d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_STBC2)); 224d8a32b73SAdrian Chadd printf(" try 3: chainMask=0x%x, GI=%d, 2040=%d, STBC=%d\n", 225d8a32b73SAdrian Chadd MS(txc.ds_ctl7, AR_ChainSel3), 226d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_GI3), 227d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_2040_3), 228d8a32b73SAdrian Chadd MF(txc.ds_ctl7, AR_STBC3)); 229d8a32b73SAdrian Chadd 230b5a44455SAdrian Chadd printf(" RTSCtsRate=0x%02x\n", MS(txc.ds_ctl7, AR_RTSCTSRate)); 231b5a44455SAdrian Chadd 232d8a32b73SAdrian Chadd /* ds_ctl8 */ 233d8a32b73SAdrian Chadd printf(" try 0: ant=0x%08x\n", txc.ds_ctl8 & AR_AntCtl0); 234d8a32b73SAdrian Chadd 235d8a32b73SAdrian Chadd /* ds_ctl9 */ 236d8a32b73SAdrian Chadd printf(" try 1: TxPower=%d, ant=0x%08x\n", 237d8a32b73SAdrian Chadd MS(txc.ds_ctl9, AR_XmitPower1), 238d8a32b73SAdrian Chadd txc.ds_ctl9 & AR_AntCtl1); 239d8a32b73SAdrian Chadd 240d8a32b73SAdrian Chadd /* ds_ctl10 */ 241d8a32b73SAdrian Chadd printf(" try 2: TxPower=%d, ant=0x%08x\n", 242d8a32b73SAdrian Chadd MS(txc.ds_ctl10, AR_XmitPower2), 243d8a32b73SAdrian Chadd txc.ds_ctl10 & AR_AntCtl2); 244d8a32b73SAdrian Chadd 245d8a32b73SAdrian Chadd /* ds_ctl11 */ 246d8a32b73SAdrian Chadd printf(" try 3: TxPower=%d, ant=0x%08x\n", 247d8a32b73SAdrian Chadd MS(txc.ds_ctl11, AR_XmitPower3), 248d8a32b73SAdrian Chadd txc.ds_ctl11 & AR_AntCtl3); 249d8a32b73SAdrian Chadd 250d8a32b73SAdrian Chadd printf("\n ------ \n"); 251d8a32b73SAdrian Chadd } 252d8a32b73SAdrian Chadd 253d8a32b73SAdrian Chadd static void 254d8a32b73SAdrian Chadd ar5416_decode_rxstatus(struct if_ath_alq_payload *a) 255d8a32b73SAdrian Chadd { 256d8a32b73SAdrian Chadd struct ar5416_desc rxs; 257d8a32b73SAdrian Chadd 258d8a32b73SAdrian Chadd /* XXX assumes rxs is smaller than PAYLOAD_LEN! */ 259d8a32b73SAdrian Chadd memcpy(&rxs, &a->payload, sizeof(struct ar5416_desc)); 260d8a32b73SAdrian Chadd 261fec3d03dSAdrian Chadd printf("[%u.%06u] [%llu] RXSTATUS: RxDone=%d, RxRate=0x%02x, TS=0x%08x\n", 2620a83adddSAdrian Chadd (unsigned int) be32toh(a->hdr.tstamp_sec), 2630a83adddSAdrian Chadd (unsigned int) be32toh(a->hdr.tstamp_usec), 2643301ff56SAdrian Chadd (unsigned long long) be64toh(a->hdr.threadid), 2653301ff56SAdrian Chadd MF(rxs.ds_rxstatus8, AR_RxDone), 266fec3d03dSAdrian Chadd MS(rxs.ds_rxstatus0, AR_RxRate), 2673301ff56SAdrian Chadd rxs.ds_rxstatus2); 268d8a32b73SAdrian Chadd 269d8a32b73SAdrian Chadd printf(" link=0x%08x, data=0x%08x, ctl0=0x%08x, ctl2=0x%08x\n", 270d8a32b73SAdrian Chadd rxs.ds_link, 271d8a32b73SAdrian Chadd rxs.ds_data, 272d8a32b73SAdrian Chadd rxs.ds_ctl0, 273d8a32b73SAdrian Chadd rxs.ds_ctl1); 274d8a32b73SAdrian Chadd 275d8a32b73SAdrian Chadd /* status0 */ 276d8a32b73SAdrian Chadd /* 277d8a32b73SAdrian Chadd * XXX TODO: For AR9285, the chain 1 and chain 2 RSSI values 278d8a32b73SAdrian Chadd * acutally contain the RX mixer configuration 279d8a32b73SAdrian Chadd */ 280d8a32b73SAdrian Chadd printf(" RSSICtl[0]=%d, RSSICtl[1]=%d, RSSICtl[2]=%d\n", 281d8a32b73SAdrian Chadd MS(rxs.ds_rxstatus0, AR_RxRSSIAnt00), 282d8a32b73SAdrian Chadd MS(rxs.ds_rxstatus0, AR_RxRSSIAnt01), 283d8a32b73SAdrian Chadd MS(rxs.ds_rxstatus0, AR_RxRSSIAnt02)); 284d8a32b73SAdrian Chadd 285fec3d03dSAdrian Chadd /* status4 */ 286fec3d03dSAdrian Chadd printf(" RSSIExt[0]=%d, RSSIExt[1]=%d, RSSIExt[2]=%d, RSSIComb=%d\n", 287fec3d03dSAdrian Chadd MS(rxs.ds_rxstatus4, AR_RxRSSIAnt10), 288fec3d03dSAdrian Chadd MS(rxs.ds_rxstatus4, AR_RxRSSIAnt11), 289fec3d03dSAdrian Chadd MS(rxs.ds_rxstatus4, AR_RxRSSIAnt12), 290fec3d03dSAdrian Chadd MS(rxs.ds_rxstatus4, AR_RxRSSICombined)); 291fec3d03dSAdrian Chadd 292fec3d03dSAdrian Chadd /* status2 */ 293fec3d03dSAdrian Chadd printf(" RxTimestamp=0x%08x,", rxs.ds_rxstatus2); 294fec3d03dSAdrian Chadd 295d8a32b73SAdrian Chadd /* status1 */ 296d8a32b73SAdrian Chadd printf(" DataLen=%d, RxMore=%d, NumDelim=%d\n", 297d8a32b73SAdrian Chadd rxs.ds_rxstatus1 & AR_DataLen, 298d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus1, AR_RxMore), 299d8a32b73SAdrian Chadd MS(rxs.ds_rxstatus1, AR_NumDelim)); 300d8a32b73SAdrian Chadd 301d8a32b73SAdrian Chadd /* status3 - RxRate however is for Owl 2.0 */ 302d8a32b73SAdrian Chadd printf(" GI=%d, 2040=%d, RxRate=0x%02x, DupFrame=%d, RxAnt=0x%08x\n", 303d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus3, AR_GI), 304d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus3, AR_2040), 305d8a32b73SAdrian Chadd MS(rxs.ds_rxstatus0, AR_RxRate), 306d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus3, AR_DupFrame), 307d8a32b73SAdrian Chadd MS(rxs.ds_rxstatus3, AR_RxAntenna)); 308d8a32b73SAdrian Chadd 309d8a32b73SAdrian Chadd /* status5 */ 310d8a32b73SAdrian Chadd /* status6 */ 311d8a32b73SAdrian Chadd /* status7 */ 312d8a32b73SAdrian Chadd printf(" RxEvm0=0x%08x, RxEvm1=0x%08x, RxEvm2=0x%08x\n", 313d8a32b73SAdrian Chadd rxs.ds_rxstatus5, 314d8a32b73SAdrian Chadd rxs.ds_rxstatus6, 315d8a32b73SAdrian Chadd rxs.ds_rxstatus7); 316d8a32b73SAdrian Chadd 317d8a32b73SAdrian Chadd /* status8 */ 318d8a32b73SAdrian Chadd printf(" RxDone=%d, RxFrameOk=%d, CrcErr=%d, DecryptCrcErr=%d\n", 319d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_RxDone), 320d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_RxFrameOK), 321d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_CRCErr), 322d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_DecryptCRCErr)); 323d8a32b73SAdrian Chadd printf(" PhyErr=%d, MichaelErr=%d, PreDelimCRCErr=%d, KeyIdxValid=%d\n", 324d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_PHYErr), 325d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_MichaelErr), 326d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_PreDelimCRCErr), 327d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_RxKeyIdxValid)); 328d8a32b73SAdrian Chadd 329d8a32b73SAdrian Chadd printf(" RxMoreAggr=%d, RxAggr=%d, PostDelimCRCErr=%d, HiRxChain=%d\n", 330d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_RxMoreAggr), 331d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_RxAggr), 332d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_PostDelimCRCErr), 333d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_HiRxChain)); 334fec3d03dSAdrian Chadd 335fec3d03dSAdrian Chadd /* If PHY error, print that out. Otherwise, the key index */ 336fec3d03dSAdrian Chadd if (MF(rxs.ds_rxstatus8, AR_PHYErr)) 337fec3d03dSAdrian Chadd printf(" PhyErrCode=0x%02x", 338fec3d03dSAdrian Chadd MS(rxs.ds_rxstatus8, AR_PHYErrCode)); 339fec3d03dSAdrian Chadd else 340fec3d03dSAdrian Chadd printf(" KeyIdx=0x%02x", 341fec3d03dSAdrian Chadd MS(rxs.ds_rxstatus8, AR_KeyIdx)); 342fec3d03dSAdrian Chadd printf(", KeyMiss=%d\n", 343d8a32b73SAdrian Chadd MF(rxs.ds_rxstatus8, AR_KeyMiss)); 344d8a32b73SAdrian Chadd 345d8a32b73SAdrian Chadd printf("\n ------\n"); 346d8a32b73SAdrian Chadd } 347d8a32b73SAdrian Chadd 348d8a32b73SAdrian Chadd void 349d8a32b73SAdrian Chadd ar5416_alq_payload(struct if_ath_alq_payload *a) 350d8a32b73SAdrian Chadd { 351d8a32b73SAdrian Chadd 352d8a32b73SAdrian Chadd switch (be16toh(a->hdr.op)) { 353d8a32b73SAdrian Chadd case ATH_ALQ_EDMA_TXSTATUS: /* TXSTATUS */ 354d8a32b73SAdrian Chadd ar5416_decode_txstatus(a); 355d8a32b73SAdrian Chadd break; 356d8a32b73SAdrian Chadd case ATH_ALQ_EDMA_RXSTATUS: /* RXSTATUS */ 357d8a32b73SAdrian Chadd ar5416_decode_rxstatus(a); 358d8a32b73SAdrian Chadd break; 359d8a32b73SAdrian Chadd case ATH_ALQ_EDMA_TXDESC: /* TXDESC */ 360d8a32b73SAdrian Chadd ar5416_decode_txdesc(a); 361d8a32b73SAdrian Chadd break; 362d8a32b73SAdrian Chadd default: 3630a83adddSAdrian Chadd printf("[%d.%06d] [%lld] op: %d; len %d\n", 3640a83adddSAdrian Chadd be32toh(a->hdr.tstamp_sec), 3650a83adddSAdrian Chadd be32toh(a->hdr.tstamp_usec), 366d8a32b73SAdrian Chadd be64toh(a->hdr.threadid), 367d8a32b73SAdrian Chadd be16toh(a->hdr.op), be16toh(a->hdr.len)); 368d8a32b73SAdrian Chadd } 369d8a32b73SAdrian Chadd } 370