/* * Copyright (c) 2016-2018 The Linux Foundation. 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. */ #ifndef _WBM_RELEASE_RING_H_ #define _WBM_RELEASE_RING_H_ #if !defined(__ASSEMBLER__) #endif #include "buffer_addr_info.h" #include "tx_rate_stats_info.h" // ################ START SUMMARY ################# // // Dword Fields // 0-1 struct buffer_addr_info released_buff_or_desc_addr_info; // 2 release_source_module[2:0], bm_action[5:3], buffer_or_desc_type[8:6], first_msdu_index[12:9], tqm_release_reason[15:13], rxdma_push_reason[17:16], rxdma_error_code[22:18], reo_push_reason[24:23], reo_error_code[29:25], wbm_internal_error[30], reserved_2[31] // 3 tqm_status_number[23:0], transmit_count[30:24], reserved_3a[31] // 4 ack_frame_rssi[7:0], sw_release_details_valid[8], first_msdu[9], last_msdu[10], msdu_part_of_amsdu[11], fw_tx_notify_frame[12], buffer_timestamp[31:13] // 5-6 struct tx_rate_stats_info tx_rate_stats; // 7 sw_peer_id[15:0], tid[19:16], ring_id[27:20], looping_count[31:28] // // ################ END SUMMARY ################# #define NUM_OF_DWORDS_WBM_RELEASE_RING 8 struct wbm_release_ring { struct buffer_addr_info released_buff_or_desc_addr_info; uint32_t release_source_module : 3, //[2:0] bm_action : 3, //[5:3] buffer_or_desc_type : 3, //[8:6] first_msdu_index : 4, //[12:9] tqm_release_reason : 3, //[15:13] rxdma_push_reason : 2, //[17:16] rxdma_error_code : 5, //[22:18] reo_push_reason : 2, //[24:23] reo_error_code : 5, //[29:25] wbm_internal_error : 1, //[30] reserved_2 : 1; //[31] uint32_t tqm_status_number : 24, //[23:0] transmit_count : 7, //[30:24] reserved_3a : 1; //[31] uint32_t ack_frame_rssi : 8, //[7:0] sw_release_details_valid : 1, //[8] first_msdu : 1, //[9] last_msdu : 1, //[10] msdu_part_of_amsdu : 1, //[11] fw_tx_notify_frame : 1, //[12] buffer_timestamp : 19; //[31:13] struct tx_rate_stats_info tx_rate_stats; uint32_t sw_peer_id : 16, //[15:0] tid : 4, //[19:16] ring_id : 8, //[27:20] looping_count : 4; //[31:28] }; /* struct buffer_addr_info released_buff_or_desc_addr_info Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH Details of the physical address of the buffer or link descriptor that is being released. Note that within this descriptor, WBM will look at the 'owner' of the released buffer/descriptor and forward it to SW/FW is WBM is not the owner. release_source_module Indicates which module initiated the release of this buffer or descriptor TQM released this buffer or descriptor RXDMA released this buffer or descriptor REO released this buffer or descriptor FW released this buffer or descriptor SW released this buffer or descriptor bm_action Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH Field only valid when the field return_buffer_manager in the Released_buff_or_desc_addr_info indicates: WBM_IDLE_BUF_LIST or WBM_IDLE_DESC_LIST An MSDU extension descriptor shall never be marked as Put the buffer or descriptor back in the idle list. In case of MSDU or MDPU link descriptor, BM does not need to check to release any individual MSDU buffers This BM action can only be used in combination with buffer_or_desc_type being msdu_link_descriptor. Field first_msdu_index points out which MSDU pointer in the MSDU link descriptor is the first of an MPDU that is released. BM shall release all the MSDU buffers linked to this first MSDU buffer pointer. All related MSDU buffer pointer entries shall be set to value 0, which represents the 'NULL pointer. When all MSDU buffer pointers in the MSDU link descriptor are 'NULL', the MSDU link descriptor itself shall also be released. CURRENTLY NOT IMPLEMENTED.... Put the buffer or descriptor back in the idle list. Only valid in combination with buffer_or_desc_type indicating MDPU_link_descriptor. BM shall release the MPDU link descriptor as well as all MSDUs that are linked to the MPDUs in this descriptor. buffer_or_desc_type Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH Field only valid when WBM is marked as the return_buffer_manager in the Released_Buffer_address_info Indicates that type of buffer or descriptor is being released The address points to an MSDU buffer The address points to an TX MSDU link descriptor The address points to an MPDU link descriptor The address points to an MSDU extension descriptor. In case BM finds this one in a release ring, it passes it on to FW... The address points to an TQM queue extension descriptor. WBM should treat this is the same way as a link descriptor. That is, put the 128 byte buffer back in the link buffer idle list. first_msdu_index Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH Field only valid for the bm_action release_msdu_list. The index of the first MSDU in an MSDU link descriptor all belonging to the same MPDU. tqm_release_reason Consumer: WBM/SW/FW Producer: TQM Field only valid when Release_source_module is set to release_source_TQM (rr = Release Reason) frame is removed because an ACK of BA for it was received frame is removed because a remove command of type Remove_mpdus initiated by SW frame is removed because a remove command of type Remove_transmitted_mpdus initiated by SW frame is removed because a remove command of type Remove_untransmitted_mpdus initiated by SW frame is removed because a remove command of type Remove_aged_mpdus or Remove_aged_msdus initiated by SW frame is removed because a remove command where fw indicated that remove reason is fw_reason1 frame is removed because a remove command where fw indicated that remove reason is fw_reason1 frame is removed because a remove command where fw indicated that remove reason is fw_reason1 rxdma_push_reason Field only valid when Release_source_module is set to release_source_RXDMA Indicates why rxdma pushed the frame to this ring RXDMA detected an error an pushed this frame to this queue RXDMA pushed the frame to this queue per received routing instructions. No error within RXDMA was detected RXDMA received an RX_FLUSH. As a result the MSDU link descriptor might not have the last_msdu_in_mpdu_flag set, but instead WBM might just see a NULL pointer in the MSDU link descriptor. This is to be considered a normal condition for this scenario. rxdma_error_code Field only valid when 'rxdma_push_reason' set to 'rxdma_error_detected'. MPDU frame is not complete due to a FIFO overflow error in RXPCU. MPDU frame is not complete due to receiving incomplete MPDU from the PHY CRYPTO reported a decryption error or CRYPTO received an encrypted frame, but did not get a valid corresponding key id in the peer entry. CRYPTO reported a TKIP MIC error CRYPTO reported an unencrypted frame error when encrypted was expected RX OLE reported an MSDU length error RX OLE reported that max number of MSDUs allowed in an MPDU got exceeded RX OLE reported a parsing error RX OLE reported an A-MSDU parsing error RX OLE reported a timeout during SA search RX OLE reported a timeout during DA search RX OLE reported a timeout during flow search RXDMA received a flush request reo_push_reason Field only valid when Release_source_module is set to release_source_REO Indicates why REO pushed the frame to this release ring Reo detected an error an pushed this frame to this queue Reo pushed the frame to this queue per received routing instructions. No error within REO was detected reo_error_code Field only valid when 'Reo_push_reason' set to 'reo_error_detected'. Reo queue descriptor provided in the REO_ENTRANCE ring is set to 0 Reo queue descriptor valid bit is NOT set AMPDU frame received without BA session having been setup. Non-BA session, SN equal to SSN, Retry bit set: duplicate frame BA session, duplicate frame A normal (management/data frame) received with 2K jump in SN A bar received with 2K jump in SSN A normal (management/data frame) received with SN falling within the OOR window A bar received with SSN falling within the OOR window A bar received without a BA session A bar received with SSN equal to SN PN Check Failed packet. Frame is forwarded as a result of the 'Seq_2k_error_detected_flag' been set in the REO Queue descriptor Frame is forwarded as a result of the 'pn_error_detected_flag' been set in the REO Queue descriptor Frame is forwarded as a result of the queue descriptor(address) being blocked as SW/FW seems to be currently in the process of making updates to this descriptor... wbm_internal_error Can only be set by WBM. Is set when WBM got a buffer pointer but the action was to push it to the idle link descriptor ring or do link related activity OR Is set when WBM got a link buffer pointer but the action was to push it to the buffer descriptor ring reserved_2 tqm_status_number Field only valid when Release_source_module is set to release_source_TQM The value in this field is equal to value of the 'TQM_CMD_Number' field the TQM command or the 'TQM_add_cmd_Number' field from the TQM entrance ring descriptor This field helps to correlate the statuses with the TQM commands. NOTE that SW could program this number to be equal to the PPDU_ID number in case direct correlation with the PPDU ID is desired transmit_count Field only valid when Release_source_module is set to release_source_TQM The number of times this frame has been transmitted reserved_3a ack_frame_rssi This field is only valid when the source is TQM. If this frame is removed as the result of the reception of an ACK or BA, this field indicates the RSSI of the received ACK or BA frame. When the frame is removed as result of a direct remove command from the SW, this field is set to 0x0 (which is never a valid value when real RSSI is available) sw_release_details_valid Consumer: SW Producer: WBM When set, some WBM specific release info for SW is valid. This is set when WMB got a 'release_msdu_list' command from TQM and the return buffer manager is not WMB. WBM will then de-aggregate all the MSDUs and pass them one at a time on to the 'buffer owner' first_msdu Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM When set, this MSDU is the first MSDU pointed to in the 'release_msdu_list' command. last_msdu Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM When set, this MSDU is the last MSDU pointed to in the 'release_msdu_list' command. msdu_part_of_amsdu Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM When set, this MSDU was part of an A-MSDU in MPDU fw_tx_notify_frame Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM This is the FW_tx_notify_frame field from the buffer_timestamp Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM This is the Buffer_timestamp field from the struct tx_rate_stats_info tx_rate_stats Consumer: TQM Producer: SW/SCH(from TXPCU, PDG) Details for command execution tracking purposes. sw_peer_id Field only valid when Release_source_module is set to release_source_TQM 1) Release of msdu buffer due to drop_frame = 1. Flow is not fetched and hence sw_peer_id and tid = 0 buffer_or_desc_type = e_num 0 MSDU_rel_buffertqm_release_reason = e_num 1 tqm_rr_rem_cmd_rem 2) Release of msdu buffer due to Flow is not fetched and hence sw_peer_id and tid = 0 buffer_or_desc_type = e_num 0 MSDU_rel_buffertqm_release_reason = e_num 1 tqm_rr_rem_cmd_rem 3) Release of msdu link due to remove_mpdu or acked_mpdu command. buffer_or_desc_type = e_num1 msdu_link_descriptortqm_release_reason can be:e_num 1 tqm_rr_rem_cmd_reme_num 2 tqm_rr_rem_cmd_tx e_num 3 tqm_rr_rem_cmd_notxe_num 4 tqm_rr_rem_cmd_aged Sw_peer_id from the TX_MSDU_FLOW descriptor or TX_MPDU_QUEUE descriptor tid Field only valid when Release_source_module is set to release_source_TQM 1) Release of msdu buffer due to drop_frame = 1. Flow is not fetched and hence sw_peer_id and tid = 0 buffer_or_desc_type = e_num 0 MSDU_rel_buffertqm_release_reason = e_num 1 tqm_rr_rem_cmd_rem 2) Release of msdu buffer due to Flow is not fetched and hence sw_peer_id and tid = 0 buffer_or_desc_type = e_num 0 MSDU_rel_buffertqm_release_reason = e_num 1 tqm_rr_rem_cmd_rem 3) Release of msdu link due to remove_mpdu or acked_mpdu command. buffer_or_desc_type = e_num1 msdu_link_descriptortqm_release_reason can be:e_num 1 tqm_rr_rem_cmd_reme_num 2 tqm_rr_rem_cmd_tx e_num 3 tqm_rr_rem_cmd_notxe_num 4 tqm_rr_rem_cmd_aged This field represents the TID from the TX_MSDU_FLOW descriptor or TX_MPDU_QUEUE descriptor ring_id Consumer: TQM/REO/RXDMA/SW Producer: SRNG (of RXDMA) For debugging. This field is filled in by the SRNG module. It help to identify the ring that is being looked looping_count Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH A count value that indicates the number of times the producer of entries into the Buffer Manager Ring has looped around the ring. At initialization time, this value is set to 0. On the first loop, this value is set to 1. After the max value is reached allowed by the number of bits for this field, the count value continues with 0 again. In case SW is the consumer of the ring entries, it can use this field to figure out up to where the producer of entries has created new entries. This eliminates the need to check where the head pointer' of the ring is located once the SW starts processing an interrupt indicating that new entries have been put into this ring... Also note that SW if it wants only needs to look at the LSB bit of this count value. */ #define WBM_RELEASE_RING_0_BUFFER_ADDR_INFO_RELEASED_BUFF_OR_DESC_ADDR_INFO_OFFSET 0x00000000 #define WBM_RELEASE_RING_0_BUFFER_ADDR_INFO_RELEASED_BUFF_OR_DESC_ADDR_INFO_LSB 28 #define WBM_RELEASE_RING_0_BUFFER_ADDR_INFO_RELEASED_BUFF_OR_DESC_ADDR_INFO_MASK 0xffffffff #define WBM_RELEASE_RING_1_BUFFER_ADDR_INFO_RELEASED_BUFF_OR_DESC_ADDR_INFO_OFFSET 0x00000004 #define WBM_RELEASE_RING_1_BUFFER_ADDR_INFO_RELEASED_BUFF_OR_DESC_ADDR_INFO_LSB 28 #define WBM_RELEASE_RING_1_BUFFER_ADDR_INFO_RELEASED_BUFF_OR_DESC_ADDR_INFO_MASK 0xffffffff /* Description WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE Indicates which module initiated the release of this buffer or descriptor TQM released this buffer or descriptor RXDMA released this buffer or descriptor REO released this buffer or descriptor FW released this buffer or descriptor SW released this buffer or descriptor */ #define WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_LSB 0 #define WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_MASK 0x00000007 /* Description WBM_RELEASE_RING_2_BM_ACTION Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH Field only valid when the field return_buffer_manager in the Released_buff_or_desc_addr_info indicates: WBM_IDLE_BUF_LIST or WBM_IDLE_DESC_LIST An MSDU extension descriptor shall never be marked as Put the buffer or descriptor back in the idle list. In case of MSDU or MDPU link descriptor, BM does not need to check to release any individual MSDU buffers This BM action can only be used in combination with buffer_or_desc_type being msdu_link_descriptor. Field first_msdu_index points out which MSDU pointer in the MSDU link descriptor is the first of an MPDU that is released. BM shall release all the MSDU buffers linked to this first MSDU buffer pointer. All related MSDU buffer pointer entries shall be set to value 0, which represents the 'NULL pointer. When all MSDU buffer pointers in the MSDU link descriptor are 'NULL', the MSDU link descriptor itself shall also be released. CURRENTLY NOT IMPLEMENTED.... Put the buffer or descriptor back in the idle list. Only valid in combination with buffer_or_desc_type indicating MDPU_link_descriptor. BM shall release the MPDU link descriptor as well as all MSDUs that are linked to the MPDUs in this descriptor. */ #define WBM_RELEASE_RING_2_BM_ACTION_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_BM_ACTION_LSB 3 #define WBM_RELEASE_RING_2_BM_ACTION_MASK 0x00000038 /* Description WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH Field only valid when WBM is marked as the return_buffer_manager in the Released_Buffer_address_info Indicates that type of buffer or descriptor is being released The address points to an MSDU buffer The address points to an TX MSDU link descriptor The address points to an MPDU link descriptor The address points to an MSDU extension descriptor. In case BM finds this one in a release ring, it passes it on to FW... The address points to an TQM queue extension descriptor. WBM should treat this is the same way as a link descriptor. That is, put the 128 byte buffer back in the link buffer idle list. */ #define WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_LSB 6 #define WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_MASK 0x000001c0 /* Description WBM_RELEASE_RING_2_FIRST_MSDU_INDEX Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH Field only valid for the bm_action release_msdu_list. The index of the first MSDU in an MSDU link descriptor all belonging to the same MPDU. */ #define WBM_RELEASE_RING_2_FIRST_MSDU_INDEX_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_FIRST_MSDU_INDEX_LSB 9 #define WBM_RELEASE_RING_2_FIRST_MSDU_INDEX_MASK 0x00001e00 /* Description WBM_RELEASE_RING_2_TQM_RELEASE_REASON Consumer: WBM/SW/FW Producer: TQM Field only valid when Release_source_module is set to release_source_TQM (rr = Release Reason) frame is removed because an ACK of BA for it was received frame is removed because a remove command of type Remove_mpdus initiated by SW frame is removed because a remove command of type Remove_transmitted_mpdus initiated by SW frame is removed because a remove command of type Remove_untransmitted_mpdus initiated by SW frame is removed because a remove command of type Remove_aged_mpdus or Remove_aged_msdus initiated by SW frame is removed because a remove command where fw indicated that remove reason is fw_reason1 frame is removed because a remove command where fw indicated that remove reason is fw_reason1 frame is removed because a remove command where fw indicated that remove reason is fw_reason1 */ #define WBM_RELEASE_RING_2_TQM_RELEASE_REASON_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_TQM_RELEASE_REASON_LSB 13 #define WBM_RELEASE_RING_2_TQM_RELEASE_REASON_MASK 0x0000e000 /* Description WBM_RELEASE_RING_2_RXDMA_PUSH_REASON Field only valid when Release_source_module is set to release_source_RXDMA Indicates why rxdma pushed the frame to this ring RXDMA detected an error an pushed this frame to this queue RXDMA pushed the frame to this queue per received routing instructions. No error within RXDMA was detected RXDMA received an RX_FLUSH. As a result the MSDU link descriptor might not have the last_msdu_in_mpdu_flag set, but instead WBM might just see a NULL pointer in the MSDU link descriptor. This is to be considered a normal condition for this scenario. */ #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_LSB 16 #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_MASK 0x00030000 /* Description WBM_RELEASE_RING_2_RXDMA_ERROR_CODE Field only valid when 'rxdma_push_reason' set to 'rxdma_error_detected'. MPDU frame is not complete due to a FIFO overflow error in RXPCU. MPDU frame is not complete due to receiving incomplete MPDU from the PHY CRYPTO reported a decryption error or CRYPTO received an encrypted frame, but did not get a valid corresponding key id in the peer entry. CRYPTO reported a TKIP MIC error CRYPTO reported an unencrypted frame error when encrypted was expected RX OLE reported an MSDU length error RX OLE reported that max number of MSDUs allowed in an MPDU got exceeded RX OLE reported a parsing error RX OLE reported an A-MSDU parsing error RX OLE reported a timeout during SA search RX OLE reported a timeout during DA search RX OLE reported a timeout during flow search RXDMA received a flush request */ #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_LSB 18 #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_MASK 0x007c0000 /* Description WBM_RELEASE_RING_2_REO_PUSH_REASON Field only valid when Release_source_module is set to release_source_REO Indicates why REO pushed the frame to this release ring Reo detected an error an pushed this frame to this queue Reo pushed the frame to this queue per received routing instructions. No error within REO was detected */ #define WBM_RELEASE_RING_2_REO_PUSH_REASON_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_REO_PUSH_REASON_LSB 23 #define WBM_RELEASE_RING_2_REO_PUSH_REASON_MASK 0x01800000 /* Description WBM_RELEASE_RING_2_REO_ERROR_CODE Field only valid when 'Reo_push_reason' set to 'reo_error_detected'. Reo queue descriptor provided in the REO_ENTRANCE ring is set to 0 Reo queue descriptor valid bit is NOT set AMPDU frame received without BA session having been setup. Non-BA session, SN equal to SSN, Retry bit set: duplicate frame BA session, duplicate frame A normal (management/data frame) received with 2K jump in SN A bar received with 2K jump in SSN A normal (management/data frame) received with SN falling within the OOR window A bar received with SSN falling within the OOR window A bar received without a BA session A bar received with SSN equal to SN PN Check Failed packet. Frame is forwarded as a result of the 'Seq_2k_error_detected_flag' been set in the REO Queue descriptor Frame is forwarded as a result of the 'pn_error_detected_flag' been set in the REO Queue descriptor Frame is forwarded as a result of the queue descriptor(address) being blocked as SW/FW seems to be currently in the process of making updates to this descriptor... */ #define WBM_RELEASE_RING_2_REO_ERROR_CODE_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_REO_ERROR_CODE_LSB 25 #define WBM_RELEASE_RING_2_REO_ERROR_CODE_MASK 0x3e000000 /* Description WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR Can only be set by WBM. Is set when WBM got a buffer pointer but the action was to push it to the idle link descriptor ring or do link related activity OR Is set when WBM got a link buffer pointer but the action was to push it to the buffer descriptor ring */ #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_LSB 30 #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_MASK 0x40000000 /* Description WBM_RELEASE_RING_2_RESERVED_2 */ #define WBM_RELEASE_RING_2_RESERVED_2_OFFSET 0x00000008 #define WBM_RELEASE_RING_2_RESERVED_2_LSB 31 #define WBM_RELEASE_RING_2_RESERVED_2_MASK 0x80000000 /* Description WBM_RELEASE_RING_3_TQM_STATUS_NUMBER Field only valid when Release_source_module is set to release_source_TQM The value in this field is equal to value of the 'TQM_CMD_Number' field the TQM command or the 'TQM_add_cmd_Number' field from the TQM entrance ring descriptor This field helps to correlate the statuses with the TQM commands. NOTE that SW could program this number to be equal to the PPDU_ID number in case direct correlation with the PPDU ID is desired */ #define WBM_RELEASE_RING_3_TQM_STATUS_NUMBER_OFFSET 0x0000000c #define WBM_RELEASE_RING_3_TQM_STATUS_NUMBER_LSB 0 #define WBM_RELEASE_RING_3_TQM_STATUS_NUMBER_MASK 0x00ffffff /* Description WBM_RELEASE_RING_3_TRANSMIT_COUNT Field only valid when Release_source_module is set to release_source_TQM The number of times this frame has been transmitted */ #define WBM_RELEASE_RING_3_TRANSMIT_COUNT_OFFSET 0x0000000c #define WBM_RELEASE_RING_3_TRANSMIT_COUNT_LSB 24 #define WBM_RELEASE_RING_3_TRANSMIT_COUNT_MASK 0x7f000000 /* Description WBM_RELEASE_RING_3_RESERVED_3A */ #define WBM_RELEASE_RING_3_RESERVED_3A_OFFSET 0x0000000c #define WBM_RELEASE_RING_3_RESERVED_3A_LSB 31 #define WBM_RELEASE_RING_3_RESERVED_3A_MASK 0x80000000 /* Description WBM_RELEASE_RING_4_ACK_FRAME_RSSI This field is only valid when the source is TQM. If this frame is removed as the result of the reception of an ACK or BA, this field indicates the RSSI of the received ACK or BA frame. When the frame is removed as result of a direct remove command from the SW, this field is set to 0x0 (which is never a valid value when real RSSI is available) */ #define WBM_RELEASE_RING_4_ACK_FRAME_RSSI_OFFSET 0x00000010 #define WBM_RELEASE_RING_4_ACK_FRAME_RSSI_LSB 0 #define WBM_RELEASE_RING_4_ACK_FRAME_RSSI_MASK 0x000000ff /* Description WBM_RELEASE_RING_4_SW_RELEASE_DETAILS_VALID Consumer: SW Producer: WBM When set, some WBM specific release info for SW is valid. This is set when WMB got a 'release_msdu_list' command from TQM and the return buffer manager is not WMB. WBM will then de-aggregate all the MSDUs and pass them one at a time on to the 'buffer owner' */ #define WBM_RELEASE_RING_4_SW_RELEASE_DETAILS_VALID_OFFSET 0x00000010 #define WBM_RELEASE_RING_4_SW_RELEASE_DETAILS_VALID_LSB 8 #define WBM_RELEASE_RING_4_SW_RELEASE_DETAILS_VALID_MASK 0x00000100 /* Description WBM_RELEASE_RING_4_FIRST_MSDU Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM When set, this MSDU is the first MSDU pointed to in the 'release_msdu_list' command. */ #define WBM_RELEASE_RING_4_FIRST_MSDU_OFFSET 0x00000010 #define WBM_RELEASE_RING_4_FIRST_MSDU_LSB 9 #define WBM_RELEASE_RING_4_FIRST_MSDU_MASK 0x00000200 /* Description WBM_RELEASE_RING_4_LAST_MSDU Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM When set, this MSDU is the last MSDU pointed to in the 'release_msdu_list' command. */ #define WBM_RELEASE_RING_4_LAST_MSDU_OFFSET 0x00000010 #define WBM_RELEASE_RING_4_LAST_MSDU_LSB 10 #define WBM_RELEASE_RING_4_LAST_MSDU_MASK 0x00000400 /* Description WBM_RELEASE_RING_4_MSDU_PART_OF_AMSDU Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM When set, this MSDU was part of an A-MSDU in MPDU */ #define WBM_RELEASE_RING_4_MSDU_PART_OF_AMSDU_OFFSET 0x00000010 #define WBM_RELEASE_RING_4_MSDU_PART_OF_AMSDU_LSB 11 #define WBM_RELEASE_RING_4_MSDU_PART_OF_AMSDU_MASK 0x00000800 /* Description WBM_RELEASE_RING_4_FW_TX_NOTIFY_FRAME Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM This is the FW_tx_notify_frame field from the */ #define WBM_RELEASE_RING_4_FW_TX_NOTIFY_FRAME_OFFSET 0x00000010 #define WBM_RELEASE_RING_4_FW_TX_NOTIFY_FRAME_LSB 12 #define WBM_RELEASE_RING_4_FW_TX_NOTIFY_FRAME_MASK 0x00001000 /* Description WBM_RELEASE_RING_4_BUFFER_TIMESTAMP Field only valid when SW_release_details_valid is set. Consumer: SW Producer: WBM This is the Buffer_timestamp field from the */ #define WBM_RELEASE_RING_4_BUFFER_TIMESTAMP_OFFSET 0x00000010 #define WBM_RELEASE_RING_4_BUFFER_TIMESTAMP_LSB 13 #define WBM_RELEASE_RING_4_BUFFER_TIMESTAMP_MASK 0xffffe000 #define WBM_RELEASE_RING_5_TX_RATE_STATS_INFO_TX_RATE_STATS_OFFSET 0x00000014 #define WBM_RELEASE_RING_5_TX_RATE_STATS_INFO_TX_RATE_STATS_LSB 13 #define WBM_RELEASE_RING_5_TX_RATE_STATS_INFO_TX_RATE_STATS_MASK 0xffffffff #define WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_OFFSET 0x00000018 #define WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_LSB 13 #define WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_MASK 0xffffffff /* Description WBM_RELEASE_RING_7_SW_PEER_ID Field only valid when Release_source_module is set to release_source_TQM 1) Release of msdu buffer due to drop_frame = 1. Flow is not fetched and hence sw_peer_id and tid = 0 buffer_or_desc_type = e_num 0 MSDU_rel_buffertqm_release_reason = e_num 1 tqm_rr_rem_cmd_rem 2) Release of msdu buffer due to Flow is not fetched and hence sw_peer_id and tid = 0 buffer_or_desc_type = e_num 0 MSDU_rel_buffertqm_release_reason = e_num 1 tqm_rr_rem_cmd_rem 3) Release of msdu link due to remove_mpdu or acked_mpdu command. buffer_or_desc_type = e_num1 msdu_link_descriptortqm_release_reason can be:e_num 1 tqm_rr_rem_cmd_reme_num 2 tqm_rr_rem_cmd_tx e_num 3 tqm_rr_rem_cmd_notxe_num 4 tqm_rr_rem_cmd_aged Sw_peer_id from the TX_MSDU_FLOW descriptor or TX_MPDU_QUEUE descriptor */ #define WBM_RELEASE_RING_7_SW_PEER_ID_OFFSET 0x0000001c #define WBM_RELEASE_RING_7_SW_PEER_ID_LSB 0 #define WBM_RELEASE_RING_7_SW_PEER_ID_MASK 0x0000ffff /* Description WBM_RELEASE_RING_7_TID Field only valid when Release_source_module is set to release_source_TQM 1) Release of msdu buffer due to drop_frame = 1. Flow is not fetched and hence sw_peer_id and tid = 0 buffer_or_desc_type = e_num 0 MSDU_rel_buffertqm_release_reason = e_num 1 tqm_rr_rem_cmd_rem 2) Release of msdu buffer due to Flow is not fetched and hence sw_peer_id and tid = 0 buffer_or_desc_type = e_num 0 MSDU_rel_buffertqm_release_reason = e_num 1 tqm_rr_rem_cmd_rem 3) Release of msdu link due to remove_mpdu or acked_mpdu command. buffer_or_desc_type = e_num1 msdu_link_descriptortqm_release_reason can be:e_num 1 tqm_rr_rem_cmd_reme_num 2 tqm_rr_rem_cmd_tx e_num 3 tqm_rr_rem_cmd_notxe_num 4 tqm_rr_rem_cmd_aged This field represents the TID from the TX_MSDU_FLOW descriptor or TX_MPDU_QUEUE descriptor */ #define WBM_RELEASE_RING_7_TID_OFFSET 0x0000001c #define WBM_RELEASE_RING_7_TID_LSB 16 #define WBM_RELEASE_RING_7_TID_MASK 0x000f0000 /* Description WBM_RELEASE_RING_7_RING_ID Consumer: TQM/REO/RXDMA/SW Producer: SRNG (of RXDMA) For debugging. This field is filled in by the SRNG module. It help to identify the ring that is being looked */ #define WBM_RELEASE_RING_7_RING_ID_OFFSET 0x0000001c #define WBM_RELEASE_RING_7_RING_ID_LSB 20 #define WBM_RELEASE_RING_7_RING_ID_MASK 0x0ff00000 /* Description WBM_RELEASE_RING_7_LOOPING_COUNT Consumer: WBM/SW/FW Producer: SW/TQM/RXDMA/REO/SWITCH A count value that indicates the number of times the producer of entries into the Buffer Manager Ring has looped around the ring. At initialization time, this value is set to 0. On the first loop, this value is set to 1. After the max value is reached allowed by the number of bits for this field, the count value continues with 0 again. In case SW is the consumer of the ring entries, it can use this field to figure out up to where the producer of entries has created new entries. This eliminates the need to check where the head pointer' of the ring is located once the SW starts processing an interrupt indicating that new entries have been put into this ring... Also note that SW if it wants only needs to look at the LSB bit of this count value. */ #define WBM_RELEASE_RING_7_LOOPING_COUNT_OFFSET 0x0000001c #define WBM_RELEASE_RING_7_LOOPING_COUNT_LSB 28 #define WBM_RELEASE_RING_7_LOOPING_COUNT_MASK 0xf0000000 #endif // _WBM_RELEASE_RING_H_