Date: Sat, 17 Nov 2012 02:37:25 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r243171 - head/tools/tools/ath/athalq Message-ID: <201211170237.qAH2bPPn007191@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Sat Nov 17 02:37:25 2012 New Revision: 243171 URL: http://svnweb.freebsd.org/changeset/base/243171 Log: Implement AR5210 descriptor decoding. Added: head/tools/tools/ath/athalq/ar5210_ds.c (contents, props changed) head/tools/tools/ath/athalq/ar5210_ds.h (contents, props changed) Modified: head/tools/tools/ath/athalq/Makefile head/tools/tools/ath/athalq/main.c Modified: head/tools/tools/ath/athalq/Makefile ============================================================================== --- head/tools/tools/ath/athalq/Makefile Sat Nov 17 02:14:50 2012 (r243170) +++ head/tools/tools/ath/athalq/Makefile Sat Nov 17 02:37:25 2012 (r243171) @@ -3,7 +3,7 @@ PROG= athalq NOMAN= yes -SRCS= main.c ar5211_ds.c ar5212_ds.c ar5416_ds.c +SRCS= main.c ar5210_ds.c ar5211_ds.c ar5212_ds.c ar5416_ds.c # SRCS+= ar9300_ds.c .include <../Makefile.inc> Added: head/tools/tools/ath/athalq/ar5210_ds.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/tools/ath/athalq/ar5210_ds.c Sat Nov 17 02:37:25 2012 (r243171) @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2012 Adrian Chadd <adrian@FreeBSD.org> + * All Rights Reserved. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> +#include <string.h> + +#include <sys/types.h> +#include <sys/alq.h> +#include <sys/endian.h> + +#include <dev/ath/if_ath_alq.h> +#include <dev/ath/ath_hal/ar5210/ar5210desc.h> + +#include "ar5210_ds.h" + +#define MS(_v, _f) ( ((_v) & (_f)) >> _f##_S ) +#define MF(_v, _f) ( !! ((_v) & (_f))) + +static void +ar5210_decode_txstatus(struct if_ath_alq_payload *a) +{ + struct ar5210_desc txs; + + /* XXX assumes txs is smaller than PAYLOAD_LEN! */ + memcpy(&txs, &a->payload, sizeof(struct ar5210_desc)); + + printf("[%u] [%llu] TXSTATUS\n", + (unsigned int) be32toh(a->hdr.tstamp), + (unsigned long long) be64toh(a->hdr.threadid)); + + /* ds_txstatus0 */ + printf(" Frmok=%d, xretries=%d, fifounderrun=%d, filt=%d\n", + MF(txs.ds_status0, AR_FrmXmitOK), + MF(txs.ds_status0, AR_ExcessiveRetries), + MF(txs.ds_status0, AR_FIFOUnderrun), + MF(txs.ds_status0, AR_Filtered)); + printf(" LongRetryCnt=%d, ShortRetryCnt=%d\n", + MS(txs.ds_status0, AR_LongRetryCnt), + MS(txs.ds_status0, AR_ShortRetryCnt)); + printf(" SndTimestamp=0x%04x\n", + MS(txs.ds_status0, AR_SendTimestamp)); + + /* ds_txstatus1 */ + printf(" Done=%d, SeqNum=0x%04x, AckRSSI=%d\n", + MF(txs.ds_status1, AR_Done), + txs.ds_status1 & AR_SeqNum, + MS(txs.ds_status1, AR_AckSigStrength)); + + printf("\n ------\n"); +} + +static void +ar5210_decode_txdesc(struct if_ath_alq_payload *a) +{ + struct ar5210_desc txc; + + /* XXX assumes txs is smaller than PAYLOAD_LEN! */ + memcpy(&txc, &a->payload, sizeof(struct ar5210_desc)); + + printf("[%u] [%llu] TXD\n", + (unsigned int) be32toh(a->hdr.tstamp), + (unsigned long long) be64toh(a->hdr.threadid)); + + printf(" link=0x%08x, data=0x%08x\n", + txc.ds_link, + txc.ds_data); + + /* ds_ctl0 */ + printf(" Frame Len=%d\n", txc.ds_ctl0 & AR_FrameLen); + printf(" TX Rate=0x%02x, RtsEna=%d, ClrDstMask=%d AntModeXmit=0x%02x\n", + MS(txc.ds_ctl0, AR_XmitRate), + MF(txc.ds_ctl0, AR_RTSCTSEnable), + MF(txc.ds_ctl0, AR_ClearDestMask), + MF(txc.ds_ctl0, AR_AntModeXmit)); + printf(" FrmType=0x%02x, TxIntrReq=%d\n", + MS(txc.ds_ctl0, AR_FrmType), + MF(txc.ds_ctl0, AR_TxInterReq)); + printf(" LongPkt=%d\n", MF(txc.ds_ctl0, AR_LongPkt)); + + /* ds_ctl1 */ + printf(" BufLen=%d, TxMore=%d, EncryptKeyIdx=%d, RtsDuration=%d\n", + txc.ds_ctl1 & AR_BufLen, + MF(txc.ds_ctl1, AR_More), + MS(txc.ds_ctl1, AR_EncryptKeyIdx), + MS(txc.ds_ctl1, AR_RTSDuration)); + + printf("\n ------ \n"); +} + +static void +ar5210_decode_rxstatus(struct if_ath_alq_payload *a) +{ + struct ar5210_desc rxs; + + /* XXX assumes rxs is smaller than PAYLOAD_LEN! */ + memcpy(&rxs, &a->payload, sizeof(struct ar5210_desc)); + + printf("[%u] [%llu] RXSTATUS\n", + (unsigned int) be32toh(a->hdr.tstamp), + (unsigned long long) be64toh(a->hdr.threadid)); + + printf(" link=0x%08x, data=0x%08x\n", + rxs.ds_link, + rxs.ds_data); + + /* ds_rxstatus0 */ + printf(" DataLen=%d, ArMore=%d, RSSI=%d, RcvAntenna=0x%x\n", + rxs.ds_status0 & AR_DataLen, + MF(rxs.ds_status0, AR_More), + MS(rxs.ds_status0, AR_RcvSigStrength), + MS(rxs.ds_status0, AR_RcvAntenna)); + + /* ds_rxstatus1 */ + printf(" RxDone=%d, RxFrameOk=%d, CrcErr=%d, DecryptCrcErr=%d\n", + MF(rxs.ds_status1, AR_Done), + MF(rxs.ds_status1, AR_FrmRcvOK), + MF(rxs.ds_status1, AR_CRCErr), + MF(rxs.ds_status1, AR_DecryptCRCErr)); + printf(" KeyIdxValid=%d\n", + MF(rxs.ds_status1, AR_KeyIdxValid)); + + printf(" PhyErrCode=0x%02x\n", + MS(rxs.ds_status1, AR_PHYErr)); + + printf(" KeyMiss=%d\n", + MF(rxs.ds_status1, AR_KeyCacheMiss)); + + printf(" Timetamp: 0x%05x\n", + MS(rxs.ds_status1, AR_RcvTimestamp)); + + printf("\n ------\n"); +} + +void +ar5210_alq_payload(struct if_ath_alq_payload *a) +{ + + switch (be16toh(a->hdr.op)) { + case ATH_ALQ_EDMA_TXSTATUS: /* TXSTATUS */ + ar5210_decode_txstatus(a); + break; + case ATH_ALQ_EDMA_RXSTATUS: /* RXSTATUS */ + ar5210_decode_rxstatus(a); + break; + case ATH_ALQ_EDMA_TXDESC: /* TXDESC */ + ar5210_decode_txdesc(a); + break; + default: + printf("[%d] [%lld] op: %d; len %d\n", + be32toh(a->hdr.tstamp), + be64toh(a->hdr.threadid), + be16toh(a->hdr.op), be16toh(a->hdr.len)); + } +} Added: head/tools/tools/ath/athalq/ar5210_ds.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/tools/ath/athalq/ar5210_ds.h Sat Nov 17 02:37:25 2012 (r243171) @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2012 Adrian Chadd <adrian@FreeBSD.org> + * All Rights Reserved. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $FreeBSD$ + */ +#ifndef __AR5210_DS_H__ +#define __AR5210_DS_H__ + +extern void ar5210_alq_payload(struct if_ath_alq_payload *a); + +#endif /* __AR5210_DS_H__ */ Modified: head/tools/tools/ath/athalq/main.c ============================================================================== --- head/tools/tools/ath/athalq/main.c Sat Nov 17 02:14:50 2012 (r243170) +++ head/tools/tools/ath/athalq/main.c Sat Nov 17 02:37:25 2012 (r243171) @@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$"); #if 0 #include "ar9300_ds.h" #endif +#include "ar5210_ds.h" #include "ar5211_ds.h" #include "ar5212_ds.h" #include "ar5416_ds.h" @@ -112,7 +113,9 @@ main(int argc, const char *argv[]) ath_alq_print_hdr(&hdr); break; default: - if (be32toh(hdr.sc_hal_magic) == AR5211_MAGIC) + if (be32toh(hdr.sc_hal_magic) == AR5210_MAGIC) + ar5210_alq_payload(a); + else if (be32toh(hdr.sc_hal_magic) == AR5211_MAGIC) ar5211_alq_payload(a); else if (be32toh(hdr.sc_hal_magic) == AR5212_MAGIC) ar5212_alq_payload(a);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211170237.qAH2bPPn007191>