1 /* 2 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef _HE_SIG_B2_MU_INFO_H_ 18 #define _HE_SIG_B2_MU_INFO_H_ 19 #if !defined(__ASSEMBLER__) 20 #endif 21 22 #define NUM_OF_DWORDS_HE_SIG_B2_MU_INFO 2 23 24 25 struct he_sig_b2_mu_info { 26 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 27 uint32_t sta_id : 11, // [10:0] 28 sta_spatial_config : 4, // [14:11] 29 sta_mcs : 4, // [18:15] 30 reserved_set_to_1 : 1, // [19:19] 31 sta_coding : 1, // [20:20] 32 reserved_0a : 7, // [27:21] 33 nsts : 3, // [30:28] 34 rx_integrity_check_passed : 1; // [31:31] 35 uint32_t user_order : 8, // [7:0] 36 cc_mask : 8, // [15:8] 37 reserved_1a : 16; // [31:16] 38 #else 39 uint32_t rx_integrity_check_passed : 1, // [31:31] 40 nsts : 3, // [30:28] 41 reserved_0a : 7, // [27:21] 42 sta_coding : 1, // [20:20] 43 reserved_set_to_1 : 1, // [19:19] 44 sta_mcs : 4, // [18:15] 45 sta_spatial_config : 4, // [14:11] 46 sta_id : 11; // [10:0] 47 uint32_t reserved_1a : 16, // [31:16] 48 cc_mask : 8, // [15:8] 49 user_order : 8; // [7:0] 50 #endif 51 }; 52 53 54 /* Description STA_ID 55 56 Identifies the STA that is addressed. Details of STA ID 57 are TBD 58 */ 59 60 #define HE_SIG_B2_MU_INFO_STA_ID_OFFSET 0x00000000 61 #define HE_SIG_B2_MU_INFO_STA_ID_LSB 0 62 #define HE_SIG_B2_MU_INFO_STA_ID_MSB 10 63 #define HE_SIG_B2_MU_INFO_STA_ID_MASK 0x000007ff 64 65 66 /* Description STA_SPATIAL_CONFIG 67 68 Number of assigned spatial streams and their corresponding 69 index. 70 Total number of spatial streams assigned for the MU-MIMO 71 allocation is also signaled. 72 */ 73 74 #define HE_SIG_B2_MU_INFO_STA_SPATIAL_CONFIG_OFFSET 0x00000000 75 #define HE_SIG_B2_MU_INFO_STA_SPATIAL_CONFIG_LSB 11 76 #define HE_SIG_B2_MU_INFO_STA_SPATIAL_CONFIG_MSB 14 77 #define HE_SIG_B2_MU_INFO_STA_SPATIAL_CONFIG_MASK 0x00007800 78 79 80 /* Description STA_MCS 81 82 Indicates the data MCS 83 */ 84 85 #define HE_SIG_B2_MU_INFO_STA_MCS_OFFSET 0x00000000 86 #define HE_SIG_B2_MU_INFO_STA_MCS_LSB 15 87 #define HE_SIG_B2_MU_INFO_STA_MCS_MSB 18 88 #define HE_SIG_B2_MU_INFO_STA_MCS_MASK 0x00078000 89 90 91 92 #define HE_SIG_B2_MU_INFO_RESERVED_SET_TO_1_OFFSET 0x00000000 93 #define HE_SIG_B2_MU_INFO_RESERVED_SET_TO_1_LSB 19 94 #define HE_SIG_B2_MU_INFO_RESERVED_SET_TO_1_MSB 19 95 #define HE_SIG_B2_MU_INFO_RESERVED_SET_TO_1_MASK 0x00080000 96 97 98 /* Description STA_CODING 99 100 Distinguishes between BCC/LDPC 101 102 0: BCC 103 1: LDPC 104 <legal all> 105 */ 106 107 #define HE_SIG_B2_MU_INFO_STA_CODING_OFFSET 0x00000000 108 #define HE_SIG_B2_MU_INFO_STA_CODING_LSB 20 109 #define HE_SIG_B2_MU_INFO_STA_CODING_MSB 20 110 #define HE_SIG_B2_MU_INFO_STA_CODING_MASK 0x00100000 111 112 113 /* Description RESERVED_0A 114 115 <legal 0> 116 */ 117 118 #define HE_SIG_B2_MU_INFO_RESERVED_0A_OFFSET 0x00000000 119 #define HE_SIG_B2_MU_INFO_RESERVED_0A_LSB 21 120 #define HE_SIG_B2_MU_INFO_RESERVED_0A_MSB 27 121 #define HE_SIG_B2_MU_INFO_RESERVED_0A_MASK 0x0fe00000 122 123 124 /* Description NSTS 125 126 MAC RX side usage only: 127 Needed by RXPCU. Provided by PHY so that RXPCU does not 128 need to have the RU number decoding logic. 129 130 Number of spatial streams for this user 131 132 <enum 0 1_spatial_stream>Single spatial stream 133 <enum 1 2_spatial_streams>2 spatial streams 134 <enum 2 3_spatial_streams>3 spatial streams 135 <enum 3 4_spatial_streams>4 spatial streams 136 <enum 4 5_spatial_streams>5 spatial streams 137 <enum 5 6_spatial_streams>6 spatial streams 138 <enum 6 7_spatial_streams>7 spatial streams 139 <enum 7 8_spatial_streams>8 spatial streams 140 */ 141 142 #define HE_SIG_B2_MU_INFO_NSTS_OFFSET 0x00000000 143 #define HE_SIG_B2_MU_INFO_NSTS_LSB 28 144 #define HE_SIG_B2_MU_INFO_NSTS_MSB 30 145 #define HE_SIG_B2_MU_INFO_NSTS_MASK 0x70000000 146 147 148 /* Description RX_INTEGRITY_CHECK_PASSED 149 150 TX side: Set to 0 151 RX side: Set to 1 if PHY determines the CRC check of the 152 codeblock containing this HE-SIG-B user info has passed, 153 else set to 0 154 155 <legal all> 156 */ 157 158 #define HE_SIG_B2_MU_INFO_RX_INTEGRITY_CHECK_PASSED_OFFSET 0x00000000 159 #define HE_SIG_B2_MU_INFO_RX_INTEGRITY_CHECK_PASSED_LSB 31 160 #define HE_SIG_B2_MU_INFO_RX_INTEGRITY_CHECK_PASSED_MSB 31 161 #define HE_SIG_B2_MU_INFO_RX_INTEGRITY_CHECK_PASSED_MASK 0x80000000 162 163 164 /* Description USER_ORDER 165 166 RX side: Set to 0 167 TX side: Ordering index of the User field 168 Gaps between the ordering indices of User fields indicate 169 that the microcode shall generate "unallocated RU" User 170 fields (STAID=2046) to fill the gaps. 171 <legal all> 172 */ 173 174 #define HE_SIG_B2_MU_INFO_USER_ORDER_OFFSET 0x00000004 175 #define HE_SIG_B2_MU_INFO_USER_ORDER_LSB 0 176 #define HE_SIG_B2_MU_INFO_USER_ORDER_MSB 7 177 #define HE_SIG_B2_MU_INFO_USER_ORDER_MASK 0x000000ff 178 179 180 /* Description CC_MASK 181 182 RX side: Set to 0 183 TX side: Indicates what content channel this User field 184 can go to 185 Bit 0: content channel 0 186 Bit 1: content channel 1 187 The other bits are unused, but could repeat the above pattern 188 for compatibility with 'EHT_SIG_USR_MU_MIMO_INFO.' 189 <legal all> 190 */ 191 192 #define HE_SIG_B2_MU_INFO_CC_MASK_OFFSET 0x00000004 193 #define HE_SIG_B2_MU_INFO_CC_MASK_LSB 8 194 #define HE_SIG_B2_MU_INFO_CC_MASK_MSB 15 195 #define HE_SIG_B2_MU_INFO_CC_MASK_MASK 0x0000ff00 196 197 198 /* Description RESERVED_1A 199 200 <legal 0> 201 */ 202 203 #define HE_SIG_B2_MU_INFO_RESERVED_1A_OFFSET 0x00000004 204 #define HE_SIG_B2_MU_INFO_RESERVED_1A_LSB 16 205 #define HE_SIG_B2_MU_INFO_RESERVED_1A_MSB 31 206 #define HE_SIG_B2_MU_INFO_RESERVED_1A_MASK 0xffff0000 207 208 209 210 #endif // HE_SIG_B2_MU_INFO 211