| /* |
| * Copyright (c) 2019 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. |
| */ |
| |
| // |
| // DO NOT EDIT! This file is automatically generated |
| // These definitions are tied to a particular hardware layout |
| |
| |
| #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[16:13], rxdma_push_reason[18:17], rxdma_error_code[23:19], reo_push_reason[25:24], reo_error_code[30:26], wbm_internal_error[31] |
| // 3 tqm_status_number[23:0], transmit_count[30:24], msdu_continuation[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 : 4, //[16:13] |
| rxdma_push_reason : 2, //[18:17] |
| rxdma_error_code : 5, //[23:19] |
| reo_push_reason : 2, //[25:24] |
| reo_error_code : 5, //[30:26] |
| wbm_internal_error : 1; //[31] |
| uint32_t tqm_status_number : 24, //[23:0] |
| transmit_count : 7, //[30:24] |
| msdu_continuation : 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 |
| |
| |
| |
| <enum 0 release_source_TQM> TQM released this buffer or |
| descriptor |
| |
| <enum 1 release_source_RXDMA> RXDMA released this buffer |
| or descriptor |
| |
| <enum 2 release_source_REO> REO released this buffer or |
| descriptor |
| |
| <enum 3 release_source_FW> FW released this buffer or |
| descriptor |
| |
| <enum 4 release_source_SW> SW released this buffer or |
| descriptor |
| |
| <legal 0-4> |
| |
| 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 |
| |
| |
| |
| <enum 0 Put_in_idle_list> 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 |
| |
| |
| |
| <enum 1 release_msdu_list > 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. |
| |
| |
| |
| <enum 2 Put_in_idle_list_expanded> 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. |
| |
| |
| |
| <legal 0-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 |
| |
| |
| |
| <enum 0 MSDU_rel_buffer> The address points to an MSDU |
| buffer |
| |
| <enum 1 msdu_link_descriptor> The address points to an |
| TX MSDU link descriptor |
| |
| <enum 2 mpdu_link_descriptor> The address points to an |
| MPDU link descriptor |
| |
| <enum 3 msdu_ext_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... |
| |
| <enum 4 queue_ext_descriptor> 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. |
| |
| |
| |
| <legal 0-4> |
| |
| 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. |
| |
| |
| |
| <legal 0-6> |
| |
| 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) |
| |
| <enum 0 tqm_rr_frame_acked> frame is removed because an |
| ACK of BA for it was received |
| |
| <enum 1 tqm_rr_rem_cmd_rem> frame is removed because a |
| remove command of type Remove_mpdus initiated by SW |
| |
| <enum 2 tqm_rr_rem_cmd_tx> frame is removed because a |
| remove command of type Remove_transmitted_mpdus initiated by |
| SW |
| |
| <enum 3 tqm_rr_rem_cmd_notx> frame is removed because a |
| remove command of type Remove_untransmitted_mpdus initiated |
| by SW |
| |
| <enum 4 tqm_rr_rem_cmd_aged> frame is removed because a |
| remove command of type Remove_aged_mpdus or |
| Remove_aged_msdus initiated by SW |
| |
| <enum 5 tqm_fw_reason1> frame is removed because a |
| remove command where fw indicated that remove reason is |
| fw_reason1 |
| |
| <enum 6 tqm_fw_reason2> frame is removed because a |
| remove command where fw indicated that remove reason is |
| fw_reason1 |
| |
| <enum 7 tqm_fw_reason3> frame is removed because a |
| remove command where fw indicated that remove reason is |
| fw_reason1 |
| |
| <enum 8 tqm_rr_rem_cmd_disable_queue> frame is removed |
| because a remove command of type |
| remove_mpdus_and_disable_queue or |
| remove_msdus_and_disable_flow initiated by SW |
| |
| |
| |
| <legal 0-8> |
| |
| 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 |
| |
| |
| |
| <enum 0 rxdma_error_detected> RXDMA detected an error an |
| pushed this frame to this queue |
| |
| <enum 1 rxdma_routing_instruction> RXDMA pushed the |
| frame to this queue per received routing instructions. No |
| error within RXDMA was detected |
| |
| <enum 2 rxdma_rx_flush> 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. |
| |
| |
| |
| <legal 0 - 2> |
| |
| rxdma_error_code |
| |
| Field only valid when 'rxdma_push_reason' set to |
| 'rxdma_error_detected'. |
| |
| |
| |
| <enum 0 rxdma_overflow_err>MPDU frame is not complete |
| due to a FIFO overflow error in RXPCU. |
| |
| <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete |
| due to receiving incomplete MPDU from the PHY |
| |
| |
| <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption |
| error or CRYPTO received an encrypted frame, but did not get |
| a valid corresponding key id in the peer entry. |
| |
| <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC |
| error |
| |
| <enum 5 rxdma_unecrypted_err>CRYPTO reported an |
| unencrypted frame error when encrypted was expected |
| |
| <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU |
| length error |
| |
| <enum 7 rxdma_msdu_limit_err>RX OLE reported that max |
| number of MSDUs allowed in an MPDU got exceeded |
| |
| <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing |
| error |
| |
| <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU |
| parsing error |
| |
| <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout |
| during SA search |
| |
| <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout |
| during DA search |
| |
| <enum 12 rxdma_flow_timeout_err>RX OLE reported a |
| timeout during flow search |
| |
| <enum 13 rxdma_flush_request>RXDMA received a flush |
| request |
| |
| <enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU |
| present as well as a fragmented MPDU. A-MSDU defragmentation |
| is not supported in Lithium SW so this is treated as an |
| error. |
| |
| 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 |
| |
| |
| |
| <enum 0 reo_error_detected> Reo detected an error an |
| pushed this frame to this queue |
| |
| <enum 1 reo_routing_instruction> Reo pushed the frame to |
| this queue per received routing instructions. No error |
| within REO was detected |
| |
| |
| |
| <legal 0 - 1> |
| |
| reo_error_code |
| |
| Field only valid when 'Reo_push_reason' set to |
| 'reo_error_detected'. |
| |
| |
| |
| <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor |
| provided in the REO_ENTRANCE ring is set to 0 |
| |
| <enum 1 reo_queue_desc_not_valid> Reo queue descriptor |
| valid bit is NOT set |
| |
| <enum 2 ampdu_in_non_ba> AMPDU frame received without BA |
| session having been setup. |
| |
| <enum 3 non_ba_duplicate> Non-BA session, SN equal to |
| SSN, Retry bit set: duplicate frame |
| |
| <enum 4 ba_duplicate> BA session, duplicate frame |
| |
| <enum 5 regular_frame_2k_jump> A normal (management/data |
| frame) received with 2K jump in SN |
| |
| <enum 6 bar_frame_2k_jump> A bar received with 2K jump |
| in SSN |
| |
| <enum 7 regular_frame_OOR> A normal (management/data |
| frame) received with SN falling within the OOR window |
| |
| <enum 8 bar_frame_OOR> A bar received with SSN falling |
| within the OOR window |
| |
| <enum 9 bar_frame_no_ba_session> A bar received without |
| a BA session |
| |
| <enum 10 bar_frame_sn_equals_ssn> A bar received with |
| SSN equal to SN |
| |
| <enum 11 pn_check_failed> PN Check Failed packet. |
| |
| <enum 12 2k_error_handling_flag_set> Frame is forwarded |
| as a result of the 'Seq_2k_error_detected_flag' been set in |
| the REO Queue descriptor |
| |
| <enum 13 pn_error_handling_flag_set> Frame is forwarded |
| as a result of the 'pn_error_detected_flag' been set in the |
| REO Queue descriptor |
| |
| <enum 14 queue_descriptor_blocked_set> 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... |
| |
| |
| |
| <legal 0-14> |
| |
| 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 |
| |
| |
| |
| <legal all> |
| |
| 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 |
| |
| |
| |
| <legal all> |
| |
| transmit_count |
| |
| Field only valid when Release_source_module is set to |
| release_source_TQM |
| |
| |
| |
| The number of times this frame has been transmitted |
| |
| msdu_continuation |
| |
| FR53947 requests MSDU_continuation reporting for Rx |
| MSDUs in Pine and HastingsPrime for which |
| SW_release_details_valid may not be set. |
| |
| <legal all> |
| |
| 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) |
| |
| |
| |
| <legal all> |
| |
| 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' |
| |
| |
| |
| <legal all> |
| |
| 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. |
| |
| |
| |
| FR53947 extends this to Rx MSDUs in Pine and |
| HastingsPrime for which SW_release_details_valid may not be |
| set. |
| |
| <legal all> |
| |
| 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. |
| |
| |
| |
| FR53947 extends this to Rx MSDUs in Pine and |
| HastingsPrime for which SW_release_details_valid may not be |
| set. |
| |
| <legal all> |
| |
| 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 |
| |
| <legal all> |
| |
| 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 |
| |
| <legal all> |
| |
| buffer_timestamp |
| |
| Field only valid when SW_release_details_valid is set. |
| |
| |
| |
| Consumer: SW |
| |
| Producer: WBM |
| |
| |
| |
| This is the Buffer_timestamp field from the |
| TX_MSDU_DETAILS for this frame from the MSDU link |
| descriptor. |
| |
| |
| |
| Timestamp in units of 1024 µs |
| |
| <legal all> |
| |
| 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 |
| |
| <legal all> |
| |
| 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 |
| |
| |
| |
| <legal all> |
| |
| 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 <legal |
| all> |
| |
| 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. |
| |
| <legal all> |
| */ |
| |
| |
| /* EXTERNAL REFERENCE : struct buffer_addr_info released_buff_or_desc_addr_info */ |
| |
| |
| /* Description WBM_RELEASE_RING_0_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0 |
| |
| Address (lower 32 bits) of the MSDU buffer OR |
| MSDU_EXTENSION descriptor OR Link Descriptor |
| |
| |
| |
| In case of 'NULL' pointer, this field is set to 0 |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_0_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000 |
| #define WBM_RELEASE_RING_0_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0 |
| #define WBM_RELEASE_RING_0_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff |
| |
| /* Description WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32 |
| |
| Address (upper 8 bits) of the MSDU buffer OR |
| MSDU_EXTENSION descriptor OR Link Descriptor |
| |
| |
| |
| In case of 'NULL' pointer, this field is set to 0 |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004 |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0 |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff |
| |
| /* Description WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER |
| |
| Consumer: WBM |
| |
| Producer: SW/FW |
| |
| |
| |
| In case of 'NULL' pointer, this field is set to 0 |
| |
| |
| |
| Indicates to which buffer manager the buffer OR |
| MSDU_EXTENSION descriptor OR link descriptor that is being |
| pointed to shall be returned after the frame has been |
| processed. It is used by WBM for routing purposes. |
| |
| |
| |
| <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned |
| to the WMB buffer idle list |
| |
| <enum 1 WBM_IDLE_DESC_LIST> This buffer shall be |
| returned to the WMB idle link descriptor idle list |
| |
| <enum 2 FW_BM> This buffer shall be returned to the FW |
| |
| <enum 3 SW0_BM> This buffer shall be returned to the SW, |
| ring 0 |
| |
| <enum 4 SW1_BM> This buffer shall be returned to the SW, |
| ring 1 |
| |
| <enum 5 SW2_BM> This buffer shall be returned to the SW, |
| ring 2 |
| |
| <enum 6 SW3_BM> This buffer shall be returned to the SW, |
| ring 3 |
| |
| <enum 7 SW4_BM> This buffer shall be returned to the SW, |
| ring 4 |
| |
| |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004 |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8 |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000700 |
| |
| /* Description WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE |
| |
| Cookie field exclusively used by SW. |
| |
| |
| |
| In case of 'NULL' pointer, this field is set to 0 |
| |
| |
| |
| HW ignores the contents, accept that it passes the |
| programmed value on to other descriptors together with the |
| physical address |
| |
| |
| |
| Field can be used by SW to for example associate the |
| buffers physical address with the virtual address |
| |
| The bit definitions as used by SW are within SW HLD |
| specification |
| |
| |
| |
| NOTE: |
| |
| The three most significant bits can have a special |
| meaning in case this struct is embedded in a TX_MPDU_DETAILS |
| STRUCT, and field transmit_bw_restriction is set |
| |
| |
| |
| In case of NON punctured transmission: |
| |
| Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only |
| |
| Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only |
| |
| Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only |
| |
| Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only |
| |
| |
| |
| In case of punctured transmission: |
| |
| Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only |
| |
| Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only |
| |
| Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only |
| |
| Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only |
| |
| Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only |
| |
| Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only |
| |
| Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only |
| |
| Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only |
| |
| |
| |
| Note: a punctured transmission is indicated by the |
| presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler |
| TLV |
| |
| |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004 |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 11 |
| #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff800 |
| |
| /* Description WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE |
| |
| Indicates which module initiated the release of this |
| buffer or descriptor |
| |
| |
| |
| <enum 0 release_source_TQM> TQM released this buffer or |
| descriptor |
| |
| <enum 1 release_source_RXDMA> RXDMA released this buffer |
| or descriptor |
| |
| <enum 2 release_source_REO> REO released this buffer or |
| descriptor |
| |
| <enum 3 release_source_FW> FW released this buffer or |
| descriptor |
| |
| <enum 4 release_source_SW> SW released this buffer or |
| descriptor |
| |
| <legal 0-4> |
| */ |
| #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 |
| |
| |
| |
| <enum 0 Put_in_idle_list> 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 |
| |
| |
| |
| <enum 1 release_msdu_list > 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. |
| |
| |
| |
| <enum 2 Put_in_idle_list_expanded> 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. |
| |
| |
| |
| <legal 0-2> |
| */ |
| #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 |
| |
| |
| |
| <enum 0 MSDU_rel_buffer> The address points to an MSDU |
| buffer |
| |
| <enum 1 msdu_link_descriptor> The address points to an |
| TX MSDU link descriptor |
| |
| <enum 2 mpdu_link_descriptor> The address points to an |
| MPDU link descriptor |
| |
| <enum 3 msdu_ext_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... |
| |
| <enum 4 queue_ext_descriptor> 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. |
| |
| |
| |
| <legal 0-4> |
| */ |
| #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. |
| |
| |
| |
| <legal 0-6> |
| */ |
| #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) |
| |
| <enum 0 tqm_rr_frame_acked> frame is removed because an |
| ACK of BA for it was received |
| |
| <enum 1 tqm_rr_rem_cmd_rem> frame is removed because a |
| remove command of type Remove_mpdus initiated by SW |
| |
| <enum 2 tqm_rr_rem_cmd_tx> frame is removed because a |
| remove command of type Remove_transmitted_mpdus initiated by |
| SW |
| |
| <enum 3 tqm_rr_rem_cmd_notx> frame is removed because a |
| remove command of type Remove_untransmitted_mpdus initiated |
| by SW |
| |
| <enum 4 tqm_rr_rem_cmd_aged> frame is removed because a |
| remove command of type Remove_aged_mpdus or |
| Remove_aged_msdus initiated by SW |
| |
| <enum 5 tqm_fw_reason1> frame is removed because a |
| remove command where fw indicated that remove reason is |
| fw_reason1 |
| |
| <enum 6 tqm_fw_reason2> frame is removed because a |
| remove command where fw indicated that remove reason is |
| fw_reason1 |
| |
| <enum 7 tqm_fw_reason3> frame is removed because a |
| remove command where fw indicated that remove reason is |
| fw_reason1 |
| |
| <enum 8 tqm_rr_rem_cmd_disable_queue> frame is removed |
| because a remove command of type |
| remove_mpdus_and_disable_queue or |
| remove_msdus_and_disable_flow initiated by SW |
| |
| |
| |
| <legal 0-8> |
| */ |
| #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 0x0001e000 |
| |
| /* 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 |
| |
| |
| |
| <enum 0 rxdma_error_detected> RXDMA detected an error an |
| pushed this frame to this queue |
| |
| <enum 1 rxdma_routing_instruction> RXDMA pushed the |
| frame to this queue per received routing instructions. No |
| error within RXDMA was detected |
| |
| <enum 2 rxdma_rx_flush> 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. |
| |
| |
| |
| <legal 0 - 2> |
| */ |
| #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_OFFSET 0x00000008 |
| #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_LSB 17 |
| #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_MASK 0x00060000 |
| |
| /* Description WBM_RELEASE_RING_2_RXDMA_ERROR_CODE |
| |
| Field only valid when 'rxdma_push_reason' set to |
| 'rxdma_error_detected'. |
| |
| |
| |
| <enum 0 rxdma_overflow_err>MPDU frame is not complete |
| due to a FIFO overflow error in RXPCU. |
| |
| <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete |
| due to receiving incomplete MPDU from the PHY |
| |
| |
| <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption |
| error or CRYPTO received an encrypted frame, but did not get |
| a valid corresponding key id in the peer entry. |
| |
| <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC |
| error |
| |
| <enum 5 rxdma_unecrypted_err>CRYPTO reported an |
| unencrypted frame error when encrypted was expected |
| |
| <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU |
| length error |
| |
| <enum 7 rxdma_msdu_limit_err>RX OLE reported that max |
| number of MSDUs allowed in an MPDU got exceeded |
| |
| <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing |
| error |
| |
| <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU |
| parsing error |
| |
| <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout |
| during SA search |
| |
| <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout |
| during DA search |
| |
| <enum 12 rxdma_flow_timeout_err>RX OLE reported a |
| timeout during flow search |
| |
| <enum 13 rxdma_flush_request>RXDMA received a flush |
| request |
| |
| <enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU |
| present as well as a fragmented MPDU. A-MSDU defragmentation |
| is not supported in Lithium SW so this is treated as an |
| error. |
| */ |
| #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_OFFSET 0x00000008 |
| #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_LSB 19 |
| #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_MASK 0x00f80000 |
| |
| /* 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 |
| |
| |
| |
| <enum 0 reo_error_detected> Reo detected an error an |
| pushed this frame to this queue |
| |
| <enum 1 reo_routing_instruction> Reo pushed the frame to |
| this queue per received routing instructions. No error |
| within REO was detected |
| |
| |
| |
| <legal 0 - 1> |
| */ |
| #define WBM_RELEASE_RING_2_REO_PUSH_REASON_OFFSET 0x00000008 |
| #define WBM_RELEASE_RING_2_REO_PUSH_REASON_LSB 24 |
| #define WBM_RELEASE_RING_2_REO_PUSH_REASON_MASK 0x03000000 |
| |
| /* Description WBM_RELEASE_RING_2_REO_ERROR_CODE |
| |
| Field only valid when 'Reo_push_reason' set to |
| 'reo_error_detected'. |
| |
| |
| |
| <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor |
| provided in the REO_ENTRANCE ring is set to 0 |
| |
| <enum 1 reo_queue_desc_not_valid> Reo queue descriptor |
| valid bit is NOT set |
| |
| <enum 2 ampdu_in_non_ba> AMPDU frame received without BA |
| session having been setup. |
| |
| <enum 3 non_ba_duplicate> Non-BA session, SN equal to |
| SSN, Retry bit set: duplicate frame |
| |
| <enum 4 ba_duplicate> BA session, duplicate frame |
| |
| <enum 5 regular_frame_2k_jump> A normal (management/data |
| frame) received with 2K jump in SN |
| |
| <enum 6 bar_frame_2k_jump> A bar received with 2K jump |
| in SSN |
| |
| <enum 7 regular_frame_OOR> A normal (management/data |
| frame) received with SN falling within the OOR window |
| |
| <enum 8 bar_frame_OOR> A bar received with SSN falling |
| within the OOR window |
| |
| <enum 9 bar_frame_no_ba_session> A bar received without |
| a BA session |
| |
| <enum 10 bar_frame_sn_equals_ssn> A bar received with |
| SSN equal to SN |
| |
| <enum 11 pn_check_failed> PN Check Failed packet. |
| |
| <enum 12 2k_error_handling_flag_set> Frame is forwarded |
| as a result of the 'Seq_2k_error_detected_flag' been set in |
| the REO Queue descriptor |
| |
| <enum 13 pn_error_handling_flag_set> Frame is forwarded |
| as a result of the 'pn_error_detected_flag' been set in the |
| REO Queue descriptor |
| |
| <enum 14 queue_descriptor_blocked_set> 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... |
| |
| |
| |
| <legal 0-14> |
| */ |
| #define WBM_RELEASE_RING_2_REO_ERROR_CODE_OFFSET 0x00000008 |
| #define WBM_RELEASE_RING_2_REO_ERROR_CODE_LSB 26 |
| #define WBM_RELEASE_RING_2_REO_ERROR_CODE_MASK 0x7c000000 |
| |
| /* 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 |
| |
| |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_OFFSET 0x00000008 |
| #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_LSB 31 |
| #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_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 |
| |
| |
| |
| <legal all> |
| */ |
| #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_MSDU_CONTINUATION |
| |
| FR53947 requests MSDU_continuation reporting for Rx |
| MSDUs in Pine and HastingsPrime for which |
| SW_release_details_valid may not be set. |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_3_MSDU_CONTINUATION_OFFSET 0x0000000c |
| #define WBM_RELEASE_RING_3_MSDU_CONTINUATION_LSB 31 |
| #define WBM_RELEASE_RING_3_MSDU_CONTINUATION_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) |
| |
| |
| |
| <legal all> |
| */ |
| #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' |
| |
| |
| |
| <legal all> |
| */ |
| #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. |
| |
| |
| |
| FR53947 extends this to Rx MSDUs in Pine and |
| HastingsPrime for which SW_release_details_valid may not be |
| set. |
| |
| <legal all> |
| */ |
| #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. |
| |
| |
| |
| FR53947 extends this to Rx MSDUs in Pine and |
| HastingsPrime for which SW_release_details_valid may not be |
| set. |
| |
| <legal all> |
| */ |
| #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 |
| |
| <legal all> |
| */ |
| #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 |
| |
| <legal all> |
| */ |
| #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 |
| TX_MSDU_DETAILS for this frame from the MSDU link |
| descriptor. |
| |
| |
| |
| Timestamp in units of 1024 µs |
| |
| <legal all> |
| */ |
| #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 |
| |
| /* EXTERNAL REFERENCE : struct tx_rate_stats_info tx_rate_stats */ |
| |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TX_RATE_STATS_INFO_VALID |
| |
| When set all other fields in this STRUCT contain valid |
| info. |
| |
| |
| |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TX_RATE_STATS_INFO_VALID_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TX_RATE_STATS_INFO_VALID_LSB 0 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TX_RATE_STATS_INFO_VALID_MASK 0x00000001 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_BW |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Indicates the BW of the upcoming transmission that shall |
| likely start in about 3 -4 us on the medium |
| |
| |
| |
| <enum 0 transmit_bw_20_MHz> |
| |
| <enum 1 transmit_bw_40_MHz> |
| |
| <enum 2 transmit_bw_80_MHz> |
| |
| <enum 3 transmit_bw_160_MHz> |
| |
| |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_BW_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_BW_LSB 1 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_BW_MASK 0x00000006 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_PKT_TYPE |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Field filled in by PDG. |
| |
| Not valid when in SW transmit mode |
| |
| |
| |
| The packet type |
| |
| <enum 0 dot11a>802.11a PPDU type |
| |
| <enum 1 dot11b>802.11b PPDU type |
| |
| <enum 2 dot11n_mm>802.11n Mixed Mode PPDU type |
| |
| <enum 3 dot11ac>802.11ac PPDU type |
| |
| <enum 4 dot11ax>802.11ax PPDU type |
| |
| <enum 5 dot11ba>802.11ba (WUR) PPDU type |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_PKT_TYPE_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_PKT_TYPE_LSB 3 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_PKT_TYPE_MASK 0x00000078 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_STBC |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Field filled in by PDG. |
| |
| Not valid when in SW transmit mode |
| |
| |
| |
| When set, STBC transmission rate was used. |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_STBC_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_STBC_LSB 7 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_STBC_MASK 0x00000080 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_LDPC |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Field filled in by PDG. |
| |
| Not valid when in SW transmit mode |
| |
| |
| |
| When set, use LDPC transmission rates |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_LDPC_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_LDPC_LSB 8 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_LDPC_MASK 0x00000100 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_SGI |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Field filled in by PDG. |
| |
| Not valid when in SW transmit mode |
| |
| |
| |
| <enum 0 0_8_us_sgi > Legacy normal GI. Can also be |
| used for HE |
| |
| <enum 1 0_4_us_sgi > Legacy short GI. Can also be |
| used for HE |
| |
| <enum 2 1_6_us_sgi > HE related GI |
| |
| <enum 3 3_2_us_sgi > HE related GI |
| |
| <legal 0 - 3> |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_SGI_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_SGI_LSB 9 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_SGI_MASK 0x00000600 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_MCS |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Field filled in by PDG. |
| |
| Not valid when in SW transmit mode |
| |
| |
| |
| For details, refer to MCS_TYPE description |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_MCS_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_MCS_LSB 11 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_MCS_MASK 0x00007800 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_OFDMA_TRANSMISSION |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Field filled in by PDG. |
| |
| |
| |
| Set when the transmission was an OFDMA transmission (DL |
| or UL). |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_OFDMA_TRANSMISSION_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_OFDMA_TRANSMISSION_LSB 15 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_OFDMA_TRANSMISSION_MASK 0x00008000 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TONES_IN_RU |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Field filled in by PDG. |
| |
| Not valid when in SW transmit mode |
| |
| |
| |
| The number of tones in the RU used. |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TONES_IN_RU_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TONES_IN_RU_LSB 16 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_TONES_IN_RU_MASK 0x0fff0000 |
| |
| /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_RESERVED_0A |
| |
| <legal 0> |
| */ |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_RESERVED_0A_OFFSET 0x00000014 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_RESERVED_0A_LSB 28 |
| #define WBM_RELEASE_RING_5_TX_RATE_STATS_RESERVED_0A_MASK 0xf0000000 |
| |
| /* Description WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF |
| |
| Field only valid when Tx_rate_stats_info_valid is set |
| |
| |
| |
| Based on a HWSCH configuration register setting, this |
| field either contains: |
| |
| |
| |
| Lower 32 bits of the TSF, snapshot of this value when |
| transmission of the PPDU containing the frame finished. |
| |
| OR |
| |
| Lower 32 bits of the TSF, snapshot of this value when |
| transmission of the PPDU containing the frame started |
| |
| |
| |
| <legal all> |
| */ |
| #define WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_OFFSET 0x00000018 |
| #define WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_LSB 0 |
| #define WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_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 |
| |
| <legal all> |
| */ |
| #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 |
| |
| |
| |
| <legal all> |
| */ |
| #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 <legal |
| all> |
| */ |
| #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. |
| |
| <legal all> |
| */ |
| #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_ |