15e6ced2eSLeo Chang /* 2*0775ac24SNandini Suresh * Copyright (c) 2012 The Linux Foundation. All rights reserved. 35e6ced2eSLeo Chang * 45e6ced2eSLeo Chang * Previously licensed under the ISC license by Qualcomm Atheros, Inc. 55e6ced2eSLeo Chang * 65e6ced2eSLeo Chang * 75e6ced2eSLeo Chang * Permission to use, copy, modify, and/or distribute this software for 85e6ced2eSLeo Chang * any purpose with or without fee is hereby granted, provided that the 95e6ced2eSLeo Chang * above copyright notice and this permission notice appear in all 105e6ced2eSLeo Chang * copies. 115e6ced2eSLeo Chang * 125e6ced2eSLeo Chang * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 135e6ced2eSLeo Chang * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 145e6ced2eSLeo Chang * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 155e6ced2eSLeo Chang * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 165e6ced2eSLeo Chang * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 175e6ced2eSLeo Chang * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 185e6ced2eSLeo Chang * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 195e6ced2eSLeo Chang * PERFORMANCE OF THIS SOFTWARE. 205e6ced2eSLeo Chang */ 215e6ced2eSLeo Chang 225e6ced2eSLeo Chang /* 235e6ced2eSLeo Chang * This file was originally distributed by Qualcomm Atheros, Inc. 245e6ced2eSLeo Chang * under proprietary terms before Copyright ownership was assigned 255e6ced2eSLeo Chang * to the Linux Foundation. 265e6ced2eSLeo Chang */ 275e6ced2eSLeo Chang 285e6ced2eSLeo Chang /** 295e6ced2eSLeo Chang * @file ol_fw_tx_dbg.h 305e6ced2eSLeo Chang * 315e6ced2eSLeo Chang * @details data structs used for uploading summary info about the FW's tx 325e6ced2eSLeo Chang */ 335e6ced2eSLeo Chang 345e6ced2eSLeo Chang #ifndef _OL_FW_TX_DBG__H_ 355e6ced2eSLeo Chang #define _OL_FW_TX_DBG__H_ 365e6ced2eSLeo Chang 375e6ced2eSLeo Chang /* 385e6ced2eSLeo Chang * Undef ATH_SUPPORT_FW_TX_DBG to remove the FW tx debug feature. 395e6ced2eSLeo Chang * Removing the FW tx debug feature saves a modest amount of program memory. 405e6ced2eSLeo Chang * The data memory allocation for the FW tx debug feature is controlled 415e6ced2eSLeo Chang * by the host --> target resource configuration parameters; even if 425e6ced2eSLeo Chang * ATH_SUPPORT_FW_TX_DBG is defined, no data memory will be allocated for 435e6ced2eSLeo Chang * the FW tx debug log unless the host --> target resource configuration 445e6ced2eSLeo Chang * specifies it. 455e6ced2eSLeo Chang */ 465e6ced2eSLeo Chang #define ATH_SUPPORT_FW_TX_DBG 1 /* enabled */ 47*0775ac24SNandini Suresh //#undef ATH_SUPPORT_FW_TX_DBG /* disabled */ 48*0775ac24SNandini Suresh 495e6ced2eSLeo Chang 505e6ced2eSLeo Chang #if defined(ATH_TARGET) 515e6ced2eSLeo Chang #include <osapi.h> /* A_UINT32 */ 525e6ced2eSLeo Chang #else 535e6ced2eSLeo Chang #include <a_types.h> /* A_UINT32 */ 545e6ced2eSLeo Chang #include <a_osapi.h> /* PREPACK, POSTPACK */ 555e6ced2eSLeo Chang #endif 565e6ced2eSLeo Chang 575e6ced2eSLeo Chang enum ol_fw_tx_dbg_log_mode { 585e6ced2eSLeo Chang ol_fw_tx_dbg_log_mode_wraparound, /* overwrite old data with new */ 595e6ced2eSLeo Chang ol_fw_tx_dbg_log_mode_single, /* fill log once, then stop */ 605e6ced2eSLeo Chang }; 615e6ced2eSLeo Chang 625e6ced2eSLeo Chang /* 635e6ced2eSLeo Chang * tx PPDU stats upload message header 645e6ced2eSLeo Chang */ 655e6ced2eSLeo Chang struct ol_fw_tx_dbg_ppdu_msg_hdr { 665e6ced2eSLeo Chang /* word 0 */ 675e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MPDU_BYTES_WORD 0 685e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MPDU_BYTES_S 0 695e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MPDU_BYTES_M 0x000000ff 705e6ced2eSLeo Chang A_UINT8 mpdu_bytes_array_len; /* length of array of per-MPDU byte counts */ 715e6ced2eSLeo Chang 725e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MSDU_BYTES_WORD 0 735e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MSDU_BYTES_S 8 745e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MSDU_BYTES_M 0x0000ff00 755e6ced2eSLeo Chang A_UINT8 msdu_bytes_array_len; /* length of array of per-MSDU byte counts */ 765e6ced2eSLeo Chang 775e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MPDU_MSDUS_WORD 0 785e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MPDU_MSDUS_S 16 795e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_NUM_MPDU_MSDUS_M 0x00ff0000 805e6ced2eSLeo Chang A_UINT8 mpdu_msdus_array_len; /* length of array of per-MPDU MSDU counts */ 815e6ced2eSLeo Chang 825e6ced2eSLeo Chang A_UINT8 reserved; 835e6ced2eSLeo Chang 845e6ced2eSLeo Chang /* word 1 */ 855e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_MICROSEC_PER_TICK_WORD 1 865e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_MICROSEC_PER_TICK_S 0 875e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_HDR_MICROSEC_PER_TICK_M 0xffffffff 885e6ced2eSLeo Chang A_UINT32 microsec_per_tick; /* conversion for timestamp entries */ 895e6ced2eSLeo Chang }; 905e6ced2eSLeo Chang 915e6ced2eSLeo Chang /* 925e6ced2eSLeo Chang * tx PPDU log element / stats upload message element 935e6ced2eSLeo Chang */ 945e6ced2eSLeo Chang struct ol_fw_tx_dbg_ppdu_base { 955e6ced2eSLeo Chang /* word 0 - filled in during tx enqueue */ 965e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_START_SEQ_NUM_WORD 0 975e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_START_SEQ_NUM_S 0 985e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_START_SEQ_NUM_M 0x0000ffff 995e6ced2eSLeo Chang A_UINT16 start_seq_num; 1005e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_START_PN_LSBS_WORD 0 1015e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_START_PN_LSBS_S 16 1025e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_START_PN_LSBS_M 0xffff0000 1035e6ced2eSLeo Chang A_UINT16 start_pn_lsbs; 1045e6ced2eSLeo Chang 1055e6ced2eSLeo Chang /* word 1 - filled in during tx enqueue */ 1065e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_BYTES_WORD 1 1075e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_BYTES_S 0 1085e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_BYTES_M 0xffffffff 1095e6ced2eSLeo Chang A_UINT32 num_bytes; 1105e6ced2eSLeo Chang 1115e6ced2eSLeo Chang /* word 2 - filled in during tx enqueue */ 1125e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_MSDUS_WORD 2 1135e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_MSDUS_S 0 1145e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_MSDUS_M 0x000000ff 1155e6ced2eSLeo Chang A_UINT8 num_msdus; 1165e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_MPDUS_WORD 2 1175e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_MPDUS_S 8 1185e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_NUM_MPDUS_M 0x0000ff00 1195e6ced2eSLeo Chang A_UINT8 num_mpdus; 1205e6ced2eSLeo Chang A_UINT16 1215e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_EXT_TID_WORD 2 1225e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_EXT_TID_S 16 1235e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_EXT_TID_M 0x001f0000 1245e6ced2eSLeo Chang ext_tid : 5, 1255e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_PEER_ID_WORD 2 1265e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_PEER_ID_S 21 1275e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_PEER_ID_M 0xffe00000 1285e6ced2eSLeo Chang peer_id : 11; 1295e6ced2eSLeo Chang 1305e6ced2eSLeo Chang /* word 3 - filled in during tx enqueue */ 1315e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TIME_ENQUEUE_WORD 3 1325e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TIME_ENQUEUE_S 0 1335e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TIME_ENQUEUE_M 0xffffffff 1345e6ced2eSLeo Chang A_UINT32 timestamp_enqueue; 1355e6ced2eSLeo Chang 1365e6ced2eSLeo Chang /* word 4 - filled in during tx completion */ 1375e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TIME_COMPL_WORD 4 1385e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TIME_COMPL_S 0 1395e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TIME_COMPL_M 0xffffffff 1405e6ced2eSLeo Chang A_UINT32 timestamp_completion; 1415e6ced2eSLeo Chang 1425e6ced2eSLeo Chang /* word 5 - filled in during tx completion */ 1435e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_BLOCK_ACK_LSBS_WORD 5 1445e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_BLOCK_ACK_LSBS_S 0 1455e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_BLOCK_ACK_LSBS_M 0xffffffff 1465e6ced2eSLeo Chang A_UINT32 block_ack_bitmap_lsbs; 1475e6ced2eSLeo Chang 1485e6ced2eSLeo Chang /* word 6 - filled in during tx completion */ 1495e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_BLOCK_ACK_MSBS_WORD 6 1505e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_BLOCK_ACK_MSBS_S 0 1515e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_BLOCK_ACK_MSBS_M 0xffffffff 1525e6ced2eSLeo Chang A_UINT32 block_ack_bitmap_msbs; 1535e6ced2eSLeo Chang 1545e6ced2eSLeo Chang /* word 7 - filled in during tx completion (enqueue would work too) */ 1555e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_ENQUEUED_LSBS_WORD 7 1565e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_ENQUEUED_LSBS_S 0 1575e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_ENQUEUED_LSBS_M 0xffffffff 1585e6ced2eSLeo Chang A_UINT32 enqueued_bitmap_lsbs; 1595e6ced2eSLeo Chang 1605e6ced2eSLeo Chang /* word 8 - filled in during tx completion (enqueue would work too) */ 1615e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_ENQUEUED_MSBS_WORD 8 1625e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_ENQUEUED_MSBS_S 0 1635e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_ENQUEUED_MSBS_M 0xffffffff 1645e6ced2eSLeo Chang A_UINT32 enqueued_bitmap_msbs; 1655e6ced2eSLeo Chang 1665e6ced2eSLeo Chang /* word 9 - filled in during tx completion */ 1675e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_RATE_CODE_WORD 9 1685e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_RATE_CODE_S 0 1695e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_RATE_CODE_M 0x000000ff 1705e6ced2eSLeo Chang A_UINT8 rate_code; 1715e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_RATE_FLAGS_WORD 9 1725e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_RATE_FLAGS_S 8 1735e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_RATE_FLAGS_M 0x0000ff00 1745e6ced2eSLeo Chang A_UINT8 rate_flags; /* includes dynamic bandwidth info */ 1755e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TRIES_WORD 9 1765e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TRIES_S 16 1775e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_TRIES_M 0x00ff0000 1785e6ced2eSLeo Chang A_UINT8 tries; 1795e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_COMPLETE_WORD 9 1805e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_COMPLETE_S 24 1815e6ced2eSLeo Chang #define OL_FW_TX_DBG_PPDU_COMPLETE_M 0xff000000 1825e6ced2eSLeo Chang A_UINT8 complete; 1835e6ced2eSLeo Chang }; 1845e6ced2eSLeo Chang 185*0775ac24SNandini Suresh 1865e6ced2eSLeo Chang #endif /* _OL_FW_TX_DBG__H_ */ 187