1243166Sadrian/* 2243166Sadrian * Copyright (c) 2012 Adrian Chadd <adrian@FreeBSD.org> 3243166Sadrian * All Rights Reserved. 4243166Sadrian * 5243166Sadrian * Permission to use, copy, modify, and/or distribute this software for any 6243166Sadrian * purpose with or without fee is hereby granted, provided that the above 7243166Sadrian * copyright notice and this permission notice appear in all copies. 8243166Sadrian * 9243166Sadrian * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10243166Sadrian * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11243166Sadrian * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12243166Sadrian * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13243166Sadrian * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14243166Sadrian * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15243166Sadrian * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16243166Sadrian */ 17243166Sadrian 18243166Sadrian#include <sys/cdefs.h> 19243166Sadrian__FBSDID("$FreeBSD$"); 20243166Sadrian 21243166Sadrian#include <stdio.h> 22243166Sadrian#include <stdlib.h> 23243166Sadrian#include <unistd.h> 24243166Sadrian#include <fcntl.h> 25243166Sadrian#include <errno.h> 26243166Sadrian#include <string.h> 27243166Sadrian 28243166Sadrian#include <sys/types.h> 29243166Sadrian#include <sys/alq.h> 30243166Sadrian#include <sys/endian.h> 31243166Sadrian 32243166Sadrian#include <dev/ath/if_ath_alq.h> 33243166Sadrian#include <dev/ath/ath_hal/ar5416/ar5416desc.h> 34243166Sadrian 35243166Sadrian#include "ar5416_ds.h" 36243166Sadrian 37243166Sadrian#define MS(_v, _f) ( ((_v) & (_f)) >> _f##_S ) 38243166Sadrian#define MF(_v, _f) ( !! ((_v) & (_f))) 39243166Sadrian 40243166Sadrianstatic void 41243166Sadrianar5416_decode_txstatus(struct if_ath_alq_payload *a) 42243166Sadrian{ 43243166Sadrian struct ar5416_desc txs; 44243166Sadrian 45243166Sadrian /* XXX assumes txs is smaller than PAYLOAD_LEN! */ 46243166Sadrian memcpy(&txs, &a->payload, sizeof(struct ar5416_desc)); 47243166Sadrian 48246934Sadrian printf("[%u.%06u] [%llu] TXSTATUS: TxDone=%d, FrmOk=%d, filt=%d, TS=0x%08x\n", 49246649Sadrian (unsigned int) be32toh(a->hdr.tstamp_sec), 50246649Sadrian (unsigned int) be32toh(a->hdr.tstamp_usec), 51245560Sadrian (unsigned long long) be64toh(a->hdr.threadid), 52245560Sadrian MF(txs.u.tx.status[9], AR_TxDone), 53246934Sadrian MF(txs.u.tx.status[1], AR_FrmXmitOK), 54246934Sadrian MF(txs.u.tx.status[1], AR_Filtered), 55245560Sadrian txs.u.tx.status[2]); 56243166Sadrian 57243166Sadrian /* ds_txstatus0 */ 58246934Sadrian printf(" RX RSSI 0 [%d %d %d]", 59243166Sadrian MS(txs.u.tx.status[0], AR_TxRSSIAnt00), 60243166Sadrian MS(txs.u.tx.status[0], AR_TxRSSIAnt01), 61243166Sadrian MS(txs.u.tx.status[0], AR_TxRSSIAnt02)); 62246934Sadrian 63246934Sadrian /* ds_txstatus5 */ 64246934Sadrian printf(" RX RSSI 1 [%d %d %d] Comb=%d\n", 65246934Sadrian MS(txs.u.tx.status[5], AR_TxRSSIAnt10), 66246934Sadrian MS(txs.u.tx.status[5], AR_TxRSSIAnt11), 67246934Sadrian MS(txs.u.tx.status[5], AR_TxRSSIAnt12), 68246934Sadrian MS(txs.u.tx.status[5], AR_TxRSSICombined)); 69246934Sadrian 70246934Sadrian /* ds_txstatus0 */ 71246934Sadrian printf(" BA Valid=%d", 72243166Sadrian MF(txs.u.tx.status[0], AR_TxBaStatus)); 73243166Sadrian 74243166Sadrian /* ds_txstatus1 */ 75246934Sadrian printf(", Frmok=%d, xretries=%d, fifounderrun=%d, filt=%d\n", 76243166Sadrian MF(txs.u.tx.status[1], AR_FrmXmitOK), 77243166Sadrian MF(txs.u.tx.status[1], AR_ExcessiveRetries), 78243166Sadrian MF(txs.u.tx.status[1], AR_FIFOUnderrun), 79243166Sadrian MF(txs.u.tx.status[1], AR_Filtered)); 80243166Sadrian printf(" DelimUnderrun=%d, DataUnderun=%d, DescCfgErr=%d," 81243166Sadrian " TxTimerExceeded=%d\n", 82243166Sadrian MF(txs.u.tx.status[1], AR_TxDelimUnderrun), 83243166Sadrian MF(txs.u.tx.status[1], AR_TxDataUnderrun), 84243166Sadrian MF(txs.u.tx.status[1], AR_DescCfgErr), 85243166Sadrian MF(txs.u.tx.status[1], AR_TxTimerExpired)); 86243166Sadrian 87243166Sadrian printf(" RTScnt=%d, FailCnt=%d, VRetryCnt=%d\n", 88243166Sadrian MS(txs.u.tx.status[1], AR_RTSFailCnt), 89243166Sadrian MS(txs.u.tx.status[1], AR_DataFailCnt), 90243166Sadrian MS(txs.u.tx.status[1], AR_VirtRetryCnt)); 91243166Sadrian 92243166Sadrian /* ds_txstatus2 */ 93246934Sadrian printf(" TxTimestamp=0x%08x", txs.u.tx.status[2]); 94243166Sadrian 95243166Sadrian /* ds_txstatus3 */ 96243166Sadrian /* ds_txstatus4 */ 97246934Sadrian printf(", BALow=0x%08x", txs.u.tx.status[3]); 98246934Sadrian printf(", BAHigh=0x%08x\n", txs.u.tx.status[4]); 99243166Sadrian 100243166Sadrian 101243166Sadrian /* ds_txstatus6 */ 102243166Sadrian /* ds_txstatus7 */ 103243166Sadrian /* ds_txstatus8 */ 104243166Sadrian printf(" TxEVM[0]=0x%08x, TxEVM[1]=0x%08x, TxEVM[2]=0x%08x\n", 105243166Sadrian txs.u.tx.status[6], 106243166Sadrian txs.u.tx.status[7], 107243166Sadrian txs.u.tx.status[8]); 108243166Sadrian 109243166Sadrian /* ds_txstatus9 */ 110243166Sadrian printf(" TxDone=%d, SeqNum=0x%04x, TxOpExceeded=%d, FinalTsIdx=%d\n", 111243166Sadrian MF(txs.u.tx.status[9], AR_TxDone), 112243166Sadrian MS(txs.u.tx.status[9], AR_SeqNum), 113243166Sadrian MF(txs.u.tx.status[9], AR_TxOpExceeded), 114243166Sadrian MS(txs.u.tx.status[9], AR_FinalTxIdx)); 115243166Sadrian printf(" PowerMgmt=%d, TxTid=%d\n", 116243166Sadrian MF(txs.u.tx.status[9], AR_PowerMgmt), 117243166Sadrian MS(txs.u.tx.status[9], AR_TxTid)); 118243166Sadrian 119243166Sadrian printf("\n ------\n"); 120243166Sadrian} 121243166Sadrian 122243166Sadrianstatic void 123243166Sadrianar5416_decode_txdesc(struct if_ath_alq_payload *a) 124243166Sadrian{ 125243166Sadrian struct ar5416_desc txc; 126243166Sadrian 127243166Sadrian /* XXX assumes txs is smaller than PAYLOAD_LEN! */ 128243166Sadrian memcpy(&txc, &a->payload, sizeof(struct ar5416_desc)); 129243166Sadrian 130246649Sadrian printf("[%u.%06u] [%llu] TXD\n", 131246649Sadrian (unsigned int) be32toh(a->hdr.tstamp_sec), 132246649Sadrian (unsigned int) be32toh(a->hdr.tstamp_usec), 133243166Sadrian (unsigned long long) be64toh(a->hdr.threadid)); 134243166Sadrian 135243166Sadrian printf(" link=0x%08x, data=0x%08x\n", 136243166Sadrian txc.ds_link, 137243166Sadrian txc.ds_data); 138243166Sadrian 139243166Sadrian /* ds_ctl0 */ 140243166Sadrian printf(" Frame Len=%d, VMF=%d\n", 141243166Sadrian txc.ds_ctl0 & AR_FrameLen, 142243166Sadrian MF(txc.ds_ctl0, AR_VirtMoreFrag)); 143243166Sadrian printf(" TX power0=%d, RtsEna=%d, Veol=%d, ClrDstMask=%d\n", 144243166Sadrian MS(txc.ds_ctl0, AR_XmitPower), 145243166Sadrian MF(txc.ds_ctl0, AR_RTSEnable), 146243166Sadrian MF(txc.ds_ctl0, AR_VEOL), 147243166Sadrian MF(txc.ds_ctl0, AR_ClrDestMask)); 148243166Sadrian printf(" TxIntrReq=%d, DestIdxValid=%d, CtsEnable=%d\n", 149243166Sadrian MF(txc.ds_ctl0, AR_TxIntrReq), 150243166Sadrian MF(txc.ds_ctl0, AR_DestIdxValid), 151243166Sadrian MF(txc.ds_ctl0, AR_CTSEnable)); 152243166Sadrian 153243166Sadrian /* ds_ctl1 */ 154243166Sadrian printf(" BufLen=%d, TxMore=%d, DestIdx=%d," 155243166Sadrian " FrType=0x%x\n", 156243166Sadrian txc.ds_ctl1 & AR_BufLen, 157243166Sadrian MF(txc.ds_ctl1, AR_TxMore), 158243166Sadrian MS(txc.ds_ctl1, AR_DestIdx), 159243166Sadrian MS(txc.ds_ctl1, AR_FrameType)); 160243166Sadrian printf(" NoAck=%d, InsertTs=%d, CorruptFcs=%d, ExtOnly=%d," 161243166Sadrian " ExtAndCtl=%d\n", 162243166Sadrian MF(txc.ds_ctl1, AR_NoAck), 163243166Sadrian MF(txc.ds_ctl1, AR_InsertTS), 164243166Sadrian MF(txc.ds_ctl1, AR_CorruptFCS), 165243166Sadrian MF(txc.ds_ctl1, AR_ExtOnly), 166243166Sadrian MF(txc.ds_ctl1, AR_ExtAndCtl)); 167243166Sadrian printf(" MoreAggr=%d, IsAggr=%d, MoreRifs=%d\n", 168243166Sadrian MF(txc.ds_ctl1, AR_MoreAggr), 169243166Sadrian MF(txc.ds_ctl1, AR_IsAggr), 170243166Sadrian MF(txc.ds_ctl1, AR_MoreRifs)); 171243166Sadrian 172243166Sadrian /* ds_ctl2 */ 173243166Sadrian printf(" DurUpEna=%d, Burstdur=0x%04x\n", 174243166Sadrian MF(txc.ds_ctl2, AR_DurUpdateEn), 175243166Sadrian MS(txc.ds_ctl2, AR_BurstDur)); 176243166Sadrian printf(" Try0=%d, Try1=%d, Try2=%d, Try3=%d\n", 177243166Sadrian MS(txc.ds_ctl2, AR_XmitDataTries0), 178243166Sadrian MS(txc.ds_ctl2, AR_XmitDataTries1), 179243166Sadrian MS(txc.ds_ctl2, AR_XmitDataTries2), 180243166Sadrian MS(txc.ds_ctl2, AR_XmitDataTries3)); 181243166Sadrian 182246934Sadrian /* ds_ctl3, 4 */ 183246934Sadrian printf(" try 0: Rate=0x%02x, PktDur=%d, RTS/CTS ena=%d\n", 184243166Sadrian MS(txc.ds_ctl3, AR_XmitRate0), 185243166Sadrian MS(txc.ds_ctl4, AR_PacketDur0), 186243166Sadrian MF(txc.ds_ctl4, AR_RTSCTSQual0)); 187246934Sadrian printf(" try 1: Rate=0x%02x, PktDur=%d, RTS/CTS ena=%d\n", 188246934Sadrian MS(txc.ds_ctl3, AR_XmitRate1), 189243166Sadrian MS(txc.ds_ctl4, AR_PacketDur1), 190243166Sadrian MF(txc.ds_ctl4, AR_RTSCTSQual1)); 191243166Sadrian 192246934Sadrian /* ds_ctl3, 5 */ 193246934Sadrian printf(" try 2: Rate=0x%02x, PktDur=%d, RTS/CTS ena=%d\n", 194246934Sadrian MS(txc.ds_ctl3, AR_XmitRate2), 195243166Sadrian MS(txc.ds_ctl5, AR_PacketDur2), 196243166Sadrian MF(txc.ds_ctl5, AR_RTSCTSQual2)); 197246934Sadrian printf(" try 3: Rate=0x%02x, PktDur=%d, RTS/CTS ena=%d\n", 198246934Sadrian MS(txc.ds_ctl3, AR_XmitRate3), 199243166Sadrian MS(txc.ds_ctl5, AR_PacketDur3), 200243166Sadrian MF(txc.ds_ctl5, AR_RTSCTSQual3)); 201243166Sadrian 202243166Sadrian /* ds_ctl6 */ 203243166Sadrian printf(" AggrLen=%d, PadDelim=%d, EncrType=%d\n", 204243166Sadrian MS(txc.ds_ctl6, AR_AggrLen), 205243166Sadrian MS(txc.ds_ctl6, AR_PadDelim), 206243166Sadrian MS(txc.ds_ctl6, AR_EncrType)); 207243166Sadrian 208243166Sadrian /* ds_ctl7 */ 209243166Sadrian printf(" try 0: chainMask=0x%x, GI=%d, 2040=%d, STBC=%d\n", 210243166Sadrian MS(txc.ds_ctl7, AR_ChainSel0), 211243166Sadrian MF(txc.ds_ctl7, AR_GI0), 212243166Sadrian MF(txc.ds_ctl7, AR_2040_0), 213243166Sadrian MF(txc.ds_ctl7, AR_STBC0)); 214243166Sadrian printf(" try 1: chainMask=0x%x, GI=%d, 2040=%d, STBC=%d\n", 215243166Sadrian MS(txc.ds_ctl7, AR_ChainSel1), 216243166Sadrian MF(txc.ds_ctl7, AR_GI1), 217243166Sadrian MF(txc.ds_ctl7, AR_2040_1), 218243166Sadrian MF(txc.ds_ctl7, AR_STBC1)); 219243166Sadrian printf(" try 2: chainMask=0x%x, GI=%d, 2040=%d, STBC=%d\n", 220243166Sadrian MS(txc.ds_ctl7, AR_ChainSel2), 221243166Sadrian MF(txc.ds_ctl7, AR_GI2), 222243166Sadrian MF(txc.ds_ctl7, AR_2040_2), 223243166Sadrian MF(txc.ds_ctl7, AR_STBC2)); 224243166Sadrian printf(" try 3: chainMask=0x%x, GI=%d, 2040=%d, STBC=%d\n", 225243166Sadrian MS(txc.ds_ctl7, AR_ChainSel3), 226243166Sadrian MF(txc.ds_ctl7, AR_GI3), 227243166Sadrian MF(txc.ds_ctl7, AR_2040_3), 228243166Sadrian MF(txc.ds_ctl7, AR_STBC3)); 229243166Sadrian 230246979Sadrian printf(" RTSCtsRate=0x%02x\n", MS(txc.ds_ctl7, AR_RTSCTSRate)); 231246979Sadrian 232243166Sadrian /* ds_ctl8 */ 233243166Sadrian printf(" try 0: ant=0x%08x\n", txc.ds_ctl8 & AR_AntCtl0); 234243166Sadrian 235243166Sadrian /* ds_ctl9 */ 236243166Sadrian printf(" try 1: TxPower=%d, ant=0x%08x\n", 237243166Sadrian MS(txc.ds_ctl9, AR_XmitPower1), 238243166Sadrian txc.ds_ctl9 & AR_AntCtl1); 239243166Sadrian 240243166Sadrian /* ds_ctl10 */ 241243166Sadrian printf(" try 2: TxPower=%d, ant=0x%08x\n", 242243166Sadrian MS(txc.ds_ctl10, AR_XmitPower2), 243243166Sadrian txc.ds_ctl10 & AR_AntCtl2); 244243166Sadrian 245243166Sadrian /* ds_ctl11 */ 246243166Sadrian printf(" try 3: TxPower=%d, ant=0x%08x\n", 247243166Sadrian MS(txc.ds_ctl11, AR_XmitPower3), 248243166Sadrian txc.ds_ctl11 & AR_AntCtl3); 249243166Sadrian 250243166Sadrian printf("\n ------ \n"); 251243166Sadrian} 252243166Sadrian 253243166Sadrianstatic void 254243166Sadrianar5416_decode_rxstatus(struct if_ath_alq_payload *a) 255243166Sadrian{ 256243166Sadrian struct ar5416_desc rxs; 257243166Sadrian 258243166Sadrian /* XXX assumes rxs is smaller than PAYLOAD_LEN! */ 259243166Sadrian memcpy(&rxs, &a->payload, sizeof(struct ar5416_desc)); 260243166Sadrian 261246934Sadrian printf("[%u.%06u] [%llu] RXSTATUS: RxDone=%d, RxRate=0x%02x, TS=0x%08x\n", 262246649Sadrian (unsigned int) be32toh(a->hdr.tstamp_sec), 263246649Sadrian (unsigned int) be32toh(a->hdr.tstamp_usec), 264245560Sadrian (unsigned long long) be64toh(a->hdr.threadid), 265245560Sadrian MF(rxs.ds_rxstatus8, AR_RxDone), 266246934Sadrian MS(rxs.ds_rxstatus0, AR_RxRate), 267245560Sadrian rxs.ds_rxstatus2); 268243166Sadrian 269243166Sadrian printf(" link=0x%08x, data=0x%08x, ctl0=0x%08x, ctl2=0x%08x\n", 270243166Sadrian rxs.ds_link, 271243166Sadrian rxs.ds_data, 272243166Sadrian rxs.ds_ctl0, 273243166Sadrian rxs.ds_ctl1); 274243166Sadrian 275243166Sadrian /* status0 */ 276243166Sadrian /* 277243166Sadrian * XXX TODO: For AR9285, the chain 1 and chain 2 RSSI values 278243166Sadrian * acutally contain the RX mixer configuration 279243166Sadrian */ 280243166Sadrian printf(" RSSICtl[0]=%d, RSSICtl[1]=%d, RSSICtl[2]=%d\n", 281243166Sadrian MS(rxs.ds_rxstatus0, AR_RxRSSIAnt00), 282243166Sadrian MS(rxs.ds_rxstatus0, AR_RxRSSIAnt01), 283243166Sadrian MS(rxs.ds_rxstatus0, AR_RxRSSIAnt02)); 284243166Sadrian 285246934Sadrian /* status4 */ 286246934Sadrian printf(" RSSIExt[0]=%d, RSSIExt[1]=%d, RSSIExt[2]=%d, RSSIComb=%d\n", 287246934Sadrian MS(rxs.ds_rxstatus4, AR_RxRSSIAnt10), 288246934Sadrian MS(rxs.ds_rxstatus4, AR_RxRSSIAnt11), 289246934Sadrian MS(rxs.ds_rxstatus4, AR_RxRSSIAnt12), 290246934Sadrian MS(rxs.ds_rxstatus4, AR_RxRSSICombined)); 291246934Sadrian 292246934Sadrian /* status2 */ 293246934Sadrian printf(" RxTimestamp=0x%08x,", rxs.ds_rxstatus2); 294246934Sadrian 295243166Sadrian /* status1 */ 296246934Sadrian printf(" DataLen=%d, RxMore=%d, NumDelim=%d\n", 297243166Sadrian rxs.ds_rxstatus1 & AR_DataLen, 298243166Sadrian MF(rxs.ds_rxstatus1, AR_RxMore), 299243166Sadrian MS(rxs.ds_rxstatus1, AR_NumDelim)); 300243166Sadrian 301243166Sadrian /* status3 - RxRate however is for Owl 2.0 */ 302243166Sadrian printf(" GI=%d, 2040=%d, RxRate=0x%02x, DupFrame=%d, RxAnt=0x%08x\n", 303243166Sadrian MF(rxs.ds_rxstatus3, AR_GI), 304243166Sadrian MF(rxs.ds_rxstatus3, AR_2040), 305243166Sadrian MS(rxs.ds_rxstatus0, AR_RxRate), 306243166Sadrian MF(rxs.ds_rxstatus3, AR_DupFrame), 307243166Sadrian MS(rxs.ds_rxstatus3, AR_RxAntenna)); 308243166Sadrian 309243166Sadrian /* status5 */ 310243166Sadrian /* status6 */ 311243166Sadrian /* status7 */ 312243166Sadrian printf(" RxEvm0=0x%08x, RxEvm1=0x%08x, RxEvm2=0x%08x\n", 313243166Sadrian rxs.ds_rxstatus5, 314243166Sadrian rxs.ds_rxstatus6, 315243166Sadrian rxs.ds_rxstatus7); 316243166Sadrian 317243166Sadrian /* status8 */ 318243166Sadrian printf(" RxDone=%d, RxFrameOk=%d, CrcErr=%d, DecryptCrcErr=%d\n", 319243166Sadrian MF(rxs.ds_rxstatus8, AR_RxDone), 320243166Sadrian MF(rxs.ds_rxstatus8, AR_RxFrameOK), 321243166Sadrian MF(rxs.ds_rxstatus8, AR_CRCErr), 322243166Sadrian MF(rxs.ds_rxstatus8, AR_DecryptCRCErr)); 323243166Sadrian printf(" PhyErr=%d, MichaelErr=%d, PreDelimCRCErr=%d, KeyIdxValid=%d\n", 324243166Sadrian MF(rxs.ds_rxstatus8, AR_PHYErr), 325243166Sadrian MF(rxs.ds_rxstatus8, AR_MichaelErr), 326243166Sadrian MF(rxs.ds_rxstatus8, AR_PreDelimCRCErr), 327243166Sadrian MF(rxs.ds_rxstatus8, AR_RxKeyIdxValid)); 328243166Sadrian 329246934Sadrian printf(" RxMoreAggr=%d, RxAggr=%d, PostDelimCRCErr=%d, HiRxChain=%d\n", 330246934Sadrian MF(rxs.ds_rxstatus8, AR_RxMoreAggr), 331246934Sadrian MF(rxs.ds_rxstatus8, AR_RxAggr), 332246934Sadrian MF(rxs.ds_rxstatus8, AR_PostDelimCRCErr), 333246934Sadrian MF(rxs.ds_rxstatus8, AR_HiRxChain)); 334246934Sadrian 335243166Sadrian /* If PHY error, print that out. Otherwise, the key index */ 336243166Sadrian if (MF(rxs.ds_rxstatus8, AR_PHYErr)) 337246934Sadrian printf(" PhyErrCode=0x%02x", 338243166Sadrian MS(rxs.ds_rxstatus8, AR_PHYErrCode)); 339243166Sadrian else 340246934Sadrian printf(" KeyIdx=0x%02x", 341243166Sadrian MS(rxs.ds_rxstatus8, AR_KeyIdx)); 342246934Sadrian printf(", KeyMiss=%d\n", 343243166Sadrian MF(rxs.ds_rxstatus8, AR_KeyMiss)); 344243166Sadrian 345243166Sadrian printf("\n ------\n"); 346243166Sadrian} 347243166Sadrian 348243166Sadrianvoid 349243166Sadrianar5416_alq_payload(struct if_ath_alq_payload *a) 350243166Sadrian{ 351243166Sadrian 352243166Sadrian switch (be16toh(a->hdr.op)) { 353243166Sadrian case ATH_ALQ_EDMA_TXSTATUS: /* TXSTATUS */ 354243166Sadrian ar5416_decode_txstatus(a); 355243166Sadrian break; 356243166Sadrian case ATH_ALQ_EDMA_RXSTATUS: /* RXSTATUS */ 357243166Sadrian ar5416_decode_rxstatus(a); 358243166Sadrian break; 359243166Sadrian case ATH_ALQ_EDMA_TXDESC: /* TXDESC */ 360243166Sadrian ar5416_decode_txdesc(a); 361243166Sadrian break; 362243166Sadrian default: 363246649Sadrian printf("[%d.%06d] [%lld] op: %d; len %d\n", 364246649Sadrian be32toh(a->hdr.tstamp_sec), 365246649Sadrian be32toh(a->hdr.tstamp_usec), 366243166Sadrian be64toh(a->hdr.threadid), 367243166Sadrian be16toh(a->hdr.op), be16toh(a->hdr.len)); 368243166Sadrian } 369243166Sadrian} 370