xref: /wlan-dirver/fw-api/fw/ol_fw_tx_dbg.h (revision 0775ac24dbf6d67941b66e530998fb5c1390298b)
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