/* * Copyright (c) 2020, 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 _RECEIVE_USER_INFO_H_ #define _RECEIVE_USER_INFO_H_ #if !defined(__ASSEMBLER__) #endif // ################ START SUMMARY ################# // // Dword Fields // 0 phy_ppdu_id[15:0], user_rssi[23:16], pkt_type[27:24], stbc[28], reception_type[31:29] // 1 rate_mcs[3:0], sgi[5:4], receive_bandwidth[7:6], mimo_ss_bitmap[15:8], ofdma_ru_allocation[23:16], ofdma_user_index[30:24], ofdma_content_channel[31] // 2 ldpc[0], ru_width[7:1], reserved_2a[31:8] // // ################ END SUMMARY ################# #define NUM_OF_DWORDS_RECEIVE_USER_INFO 3 struct receive_user_info { uint32_t phy_ppdu_id : 16, //[15:0] user_rssi : 8, //[23:16] pkt_type : 4, //[27:24] stbc : 1, //[28] reception_type : 3; //[31:29] uint32_t rate_mcs : 4, //[3:0] sgi : 2, //[5:4] receive_bandwidth : 2, //[7:6] mimo_ss_bitmap : 8, //[15:8] ofdma_ru_allocation : 8, //[23:16] ofdma_user_index : 7, //[30:24] ofdma_content_channel : 1; //[31] uint32_t ldpc : 1, //[0] ru_width : 7, //[7:1] reserved_2a : 24; //[31:8] }; /* phy_ppdu_id A ppdu counter value that PHY increments for every PPDU received. The counter value wraps around user_rssi RSSI for this user Frequency domain RSSI measurement for this user. Based on the channel estimate. pkt_type Packet type: 802.11a PPDU type 802.11b PPDU type 802.11n Mixed Mode PPDU type 802.11ac PPDU type 802.11ax PPDU type 802.11ba (WUR) PPDU type stbc When set, use STBC transmission rates reception_type Indicates what type of reception this is. Basic SU reception (not part of OFDMA or MU-MIMO) This is related to DL type of reception This is related to DL type of reception This is related to DL type of reception This is related to UL type of reception This is related to UL type of reception This is related to UL type of reception rate_mcs For details, refer to MCS_TYPE description sgi Field only valid when pkt type is HT, VHT or HE. Legacy normal GI. Can also be used for HE Legacy short GI. Can also be used for HE HE related GI HE related GI receive_bandwidth Full receive Bandwidth mimo_ss_bitmap Bitmap, with each bit indicating if the related spatial stream is used for this STA LSB related to SS 0 0: spatial stream not used for this reception 1: spatial stream used for this reception ofdma_ru_allocation Field only valid in case of OFDMA type receptions (DL and UL) Indicates the RU number associated with this user. In case of reception where the transmission was DL MU OFDMA, this field provides the RU pattern. Note that fields ofdma_user_index and ofdma_content_channel are needed to determine which RU (within a 40 MHz channel) was actually assigned to this user, but this does not give info on which 40 MHz channel was assigned to this user. Please refer DL_ofdma_ru_* in PHYRX_PKT_END_INFO for complete RU info for this user. In case of reception where the transmission was UL MU OFDMA, PHY is recommended to insert the RU start index in this field. Note that PHY may insert the RU width in Reserved_2a[6:0]. ofdma_user_index Field only valid in the of DL MU OFDMA reception The user number within the RU_allocation. This is needed for SW to determine the exact RU position within the reception. ofdma_content_channel Field only valid in the of DL MU OFDMA/MIMO reception In case of DL MU reception, this field indicates the content channel number where PHY found the RU information for this user This is needed for SW to determine the exact RU position within the reception. ldpc When set, use LDPC transmission rates were used. ru_width In case of UL OFDMA reception, PHY is recommended to insert the RU width In Hastings80: was using Reserved_2a[6:0]. reserved_2a */ /* Description RECEIVE_USER_INFO_0_PHY_PPDU_ID A ppdu counter value that PHY increments for every PPDU received. The counter value wraps around */ #define RECEIVE_USER_INFO_0_PHY_PPDU_ID_OFFSET 0x00000000 #define RECEIVE_USER_INFO_0_PHY_PPDU_ID_LSB 0 #define RECEIVE_USER_INFO_0_PHY_PPDU_ID_MASK 0x0000ffff /* Description RECEIVE_USER_INFO_0_USER_RSSI RSSI for this user Frequency domain RSSI measurement for this user. Based on the channel estimate. */ #define RECEIVE_USER_INFO_0_USER_RSSI_OFFSET 0x00000000 #define RECEIVE_USER_INFO_0_USER_RSSI_LSB 16 #define RECEIVE_USER_INFO_0_USER_RSSI_MASK 0x00ff0000 /* Description RECEIVE_USER_INFO_0_PKT_TYPE Packet type: 802.11a PPDU type 802.11b PPDU type 802.11n Mixed Mode PPDU type 802.11ac PPDU type 802.11ax PPDU type 802.11ba (WUR) PPDU type */ #define RECEIVE_USER_INFO_0_PKT_TYPE_OFFSET 0x00000000 #define RECEIVE_USER_INFO_0_PKT_TYPE_LSB 24 #define RECEIVE_USER_INFO_0_PKT_TYPE_MASK 0x0f000000 /* Description RECEIVE_USER_INFO_0_STBC When set, use STBC transmission rates */ #define RECEIVE_USER_INFO_0_STBC_OFFSET 0x00000000 #define RECEIVE_USER_INFO_0_STBC_LSB 28 #define RECEIVE_USER_INFO_0_STBC_MASK 0x10000000 /* Description RECEIVE_USER_INFO_0_RECEPTION_TYPE Indicates what type of reception this is. Basic SU reception (not part of OFDMA or MU-MIMO) This is related to DL type of reception This is related to DL type of reception This is related to DL type of reception This is related to UL type of reception This is related to UL type of reception This is related to UL type of reception */ #define RECEIVE_USER_INFO_0_RECEPTION_TYPE_OFFSET 0x00000000 #define RECEIVE_USER_INFO_0_RECEPTION_TYPE_LSB 29 #define RECEIVE_USER_INFO_0_RECEPTION_TYPE_MASK 0xe0000000 /* Description RECEIVE_USER_INFO_1_RATE_MCS For details, refer to MCS_TYPE description */ #define RECEIVE_USER_INFO_1_RATE_MCS_OFFSET 0x00000004 #define RECEIVE_USER_INFO_1_RATE_MCS_LSB 0 #define RECEIVE_USER_INFO_1_RATE_MCS_MASK 0x0000000f /* Description RECEIVE_USER_INFO_1_SGI Field only valid when pkt type is HT, VHT or HE. Legacy normal GI. Can also be used for HE Legacy short GI. Can also be used for HE HE related GI HE related GI */ #define RECEIVE_USER_INFO_1_SGI_OFFSET 0x00000004 #define RECEIVE_USER_INFO_1_SGI_LSB 4 #define RECEIVE_USER_INFO_1_SGI_MASK 0x00000030 /* Description RECEIVE_USER_INFO_1_RECEIVE_BANDWIDTH Full receive Bandwidth */ #define RECEIVE_USER_INFO_1_RECEIVE_BANDWIDTH_OFFSET 0x00000004 #define RECEIVE_USER_INFO_1_RECEIVE_BANDWIDTH_LSB 6 #define RECEIVE_USER_INFO_1_RECEIVE_BANDWIDTH_MASK 0x000000c0 /* Description RECEIVE_USER_INFO_1_MIMO_SS_BITMAP Bitmap, with each bit indicating if the related spatial stream is used for this STA LSB related to SS 0 0: spatial stream not used for this reception 1: spatial stream used for this reception */ #define RECEIVE_USER_INFO_1_MIMO_SS_BITMAP_OFFSET 0x00000004 #define RECEIVE_USER_INFO_1_MIMO_SS_BITMAP_LSB 8 #define RECEIVE_USER_INFO_1_MIMO_SS_BITMAP_MASK 0x0000ff00 /* Description RECEIVE_USER_INFO_1_OFDMA_RU_ALLOCATION Field only valid in case of OFDMA type receptions (DL and UL) Indicates the RU number associated with this user. In case of reception where the transmission was DL MU OFDMA, this field provides the RU pattern. Note that fields ofdma_user_index and ofdma_content_channel are needed to determine which RU (within a 40 MHz channel) was actually assigned to this user, but this does not give info on which 40 MHz channel was assigned to this user. Please refer DL_ofdma_ru_* in PHYRX_PKT_END_INFO for complete RU info for this user. In case of reception where the transmission was UL MU OFDMA, PHY is recommended to insert the RU start index in this field. Note that PHY may insert the RU width in Reserved_2a[6:0]. */ #define RECEIVE_USER_INFO_1_OFDMA_RU_ALLOCATION_OFFSET 0x00000004 #define RECEIVE_USER_INFO_1_OFDMA_RU_ALLOCATION_LSB 16 #define RECEIVE_USER_INFO_1_OFDMA_RU_ALLOCATION_MASK 0x00ff0000 /* Description RECEIVE_USER_INFO_1_OFDMA_USER_INDEX Field only valid in the of DL MU OFDMA reception The user number within the RU_allocation. This is needed for SW to determine the exact RU position within the reception. */ #define RECEIVE_USER_INFO_1_OFDMA_USER_INDEX_OFFSET 0x00000004 #define RECEIVE_USER_INFO_1_OFDMA_USER_INDEX_LSB 24 #define RECEIVE_USER_INFO_1_OFDMA_USER_INDEX_MASK 0x7f000000 /* Description RECEIVE_USER_INFO_1_OFDMA_CONTENT_CHANNEL Field only valid in the of DL MU OFDMA/MIMO reception In case of DL MU reception, this field indicates the content channel number where PHY found the RU information for this user This is needed for SW to determine the exact RU position within the reception. */ #define RECEIVE_USER_INFO_1_OFDMA_CONTENT_CHANNEL_OFFSET 0x00000004 #define RECEIVE_USER_INFO_1_OFDMA_CONTENT_CHANNEL_LSB 31 #define RECEIVE_USER_INFO_1_OFDMA_CONTENT_CHANNEL_MASK 0x80000000 /* Description RECEIVE_USER_INFO_2_LDPC When set, use LDPC transmission rates were used. */ #define RECEIVE_USER_INFO_2_LDPC_OFFSET 0x00000008 #define RECEIVE_USER_INFO_2_LDPC_LSB 0 #define RECEIVE_USER_INFO_2_LDPC_MASK 0x00000001 /* Description RECEIVE_USER_INFO_2_RU_WIDTH In case of UL OFDMA reception, PHY is recommended to insert the RU width In Hastings80: was using Reserved_2a[6:0]. */ #define RECEIVE_USER_INFO_2_RU_WIDTH_OFFSET 0x00000008 #define RECEIVE_USER_INFO_2_RU_WIDTH_LSB 1 #define RECEIVE_USER_INFO_2_RU_WIDTH_MASK 0x000000fe /* Description RECEIVE_USER_INFO_2_RESERVED_2A */ #define RECEIVE_USER_INFO_2_RESERVED_2A_OFFSET 0x00000008 #define RECEIVE_USER_INFO_2_RESERVED_2A_LSB 8 #define RECEIVE_USER_INFO_2_RESERVED_2A_MASK 0xffffff00 #endif // _RECEIVE_USER_INFO_H_