1 2 /* Copyright (c) 2022, 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 18 19 20 21 22 23 24 25 26 #ifndef _EHT_SIG_USR_MU_MIMO_INFO_H_ 27 #define _EHT_SIG_USR_MU_MIMO_INFO_H_ 28 #if !defined(__ASSEMBLER__) 29 #endif 30 31 #define NUM_OF_DWORDS_EHT_SIG_USR_MU_MIMO_INFO 2 32 33 34 struct eht_sig_usr_mu_mimo_info { 35 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 36 uint32_t sta_id : 11, // [10:0] 37 sta_mcs : 4, // [14:11] 38 sta_coding : 1, // [15:15] 39 sta_spatial_config : 6, // [21:16] 40 reserved_0a : 1, // [22:22] 41 rx_integrity_check_passed : 1, // [23:23] 42 subband80_cc_mask : 8; // [31:24] 43 uint32_t user_order_subband80_0 : 8, // [7:0] 44 user_order_subband80_1 : 8, // [15:8] 45 user_order_subband80_2 : 8, // [23:16] 46 user_order_subband80_3 : 8; // [31:24] 47 #else 48 uint32_t subband80_cc_mask : 8, // [31:24] 49 rx_integrity_check_passed : 1, // [23:23] 50 reserved_0a : 1, // [22:22] 51 sta_spatial_config : 6, // [21:16] 52 sta_coding : 1, // [15:15] 53 sta_mcs : 4, // [14:11] 54 sta_id : 11; // [10:0] 55 uint32_t user_order_subband80_3 : 8, // [31:24] 56 user_order_subband80_2 : 8, // [23:16] 57 user_order_subband80_1 : 8, // [15:8] 58 user_order_subband80_0 : 8; // [7:0] 59 #endif 60 }; 61 62 63 /* Description STA_ID 64 65 Identifies the STA that is addressed. Details of STA ID 66 are TBD 67 */ 68 69 #define EHT_SIG_USR_MU_MIMO_INFO_STA_ID_OFFSET 0x00000000 70 #define EHT_SIG_USR_MU_MIMO_INFO_STA_ID_LSB 0 71 #define EHT_SIG_USR_MU_MIMO_INFO_STA_ID_MSB 10 72 #define EHT_SIG_USR_MU_MIMO_INFO_STA_ID_MASK 0x000007ff 73 74 75 /* Description STA_MCS 76 77 Indicates the data MCS 78 0 - 13: MCS 0 - 13 79 14: validate 80 15: MCS 0 with DCM 81 <legal 0-13, 15> 82 */ 83 84 #define EHT_SIG_USR_MU_MIMO_INFO_STA_MCS_OFFSET 0x00000000 85 #define EHT_SIG_USR_MU_MIMO_INFO_STA_MCS_LSB 11 86 #define EHT_SIG_USR_MU_MIMO_INFO_STA_MCS_MSB 14 87 #define EHT_SIG_USR_MU_MIMO_INFO_STA_MCS_MASK 0x00007800 88 89 90 /* Description STA_CODING 91 92 Distinguishes between BCC/LDPC 93 94 0: BCC 95 1: LDPC 96 <legal all> 97 */ 98 99 #define EHT_SIG_USR_MU_MIMO_INFO_STA_CODING_OFFSET 0x00000000 100 #define EHT_SIG_USR_MU_MIMO_INFO_STA_CODING_LSB 15 101 #define EHT_SIG_USR_MU_MIMO_INFO_STA_CODING_MSB 15 102 #define EHT_SIG_USR_MU_MIMO_INFO_STA_CODING_MASK 0x00008000 103 104 105 /* Description STA_SPATIAL_CONFIG 106 107 Number of assigned spatial streams and their corresponding 108 index. 109 Total number of spatial streams assigned for the MU-MIMO 110 allocation is also signaled. 111 */ 112 113 #define EHT_SIG_USR_MU_MIMO_INFO_STA_SPATIAL_CONFIG_OFFSET 0x00000000 114 #define EHT_SIG_USR_MU_MIMO_INFO_STA_SPATIAL_CONFIG_LSB 16 115 #define EHT_SIG_USR_MU_MIMO_INFO_STA_SPATIAL_CONFIG_MSB 21 116 #define EHT_SIG_USR_MU_MIMO_INFO_STA_SPATIAL_CONFIG_MASK 0x003f0000 117 118 119 /* Description RESERVED_0A 120 121 <legal 0> 122 */ 123 124 #define EHT_SIG_USR_MU_MIMO_INFO_RESERVED_0A_OFFSET 0x00000000 125 #define EHT_SIG_USR_MU_MIMO_INFO_RESERVED_0A_LSB 22 126 #define EHT_SIG_USR_MU_MIMO_INFO_RESERVED_0A_MSB 22 127 #define EHT_SIG_USR_MU_MIMO_INFO_RESERVED_0A_MASK 0x00400000 128 129 130 /* Description RX_INTEGRITY_CHECK_PASSED 131 132 TX side: Set to 0 133 RX side: Set to 1 if PHY determines the CRC check of the 134 codeblock containing this EHT-SIG user info has passed, 135 else set to 0 136 137 <legal all> 138 */ 139 140 #define EHT_SIG_USR_MU_MIMO_INFO_RX_INTEGRITY_CHECK_PASSED_OFFSET 0x00000000 141 #define EHT_SIG_USR_MU_MIMO_INFO_RX_INTEGRITY_CHECK_PASSED_LSB 23 142 #define EHT_SIG_USR_MU_MIMO_INFO_RX_INTEGRITY_CHECK_PASSED_MSB 23 143 #define EHT_SIG_USR_MU_MIMO_INFO_RX_INTEGRITY_CHECK_PASSED_MASK 0x00800000 144 145 146 /* Description SUBBAND80_CC_MASK 147 148 RX side: Set to 0 149 TX side: Indicates what content channels of what 80 MHz 150 subbands this User field can go to 151 Bit 0: lowest 80 MHz content channel 0 152 Bit 1: lowest 80 MHz content channel 1 153 Bit 2: 2nd lowest 80 MHz content channel 0 154 ... 155 Bit 7: highest 80 MHz content channel 1 156 <legal all> 157 */ 158 159 #define EHT_SIG_USR_MU_MIMO_INFO_SUBBAND80_CC_MASK_OFFSET 0x00000000 160 #define EHT_SIG_USR_MU_MIMO_INFO_SUBBAND80_CC_MASK_LSB 24 161 #define EHT_SIG_USR_MU_MIMO_INFO_SUBBAND80_CC_MASK_MSB 31 162 #define EHT_SIG_USR_MU_MIMO_INFO_SUBBAND80_CC_MASK_MASK 0xff000000 163 164 165 /* Description USER_ORDER_SUBBAND80_0 166 167 RX side: Set to 0 168 TX side: Ordering index of the User field within the lowest 169 80 MHz 170 Gaps between the ordering indices of User fields indicate 171 that the microcode shall generate "unallocated RU" User 172 fields (STAID=2046) to fill the gaps. 173 <legal all> 174 */ 175 176 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_0_OFFSET 0x00000004 177 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_0_LSB 0 178 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_0_MSB 7 179 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_0_MASK 0x000000ff 180 181 182 /* Description USER_ORDER_SUBBAND80_1 183 184 RX side: Set to 0 185 TX side: Ordering index of the User field within the 2nd 186 lowest 80 MHz 187 See 'user_order_subband80_0.' 188 <legal all> 189 */ 190 191 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_1_OFFSET 0x00000004 192 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_1_LSB 8 193 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_1_MSB 15 194 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_1_MASK 0x0000ff00 195 196 197 /* Description USER_ORDER_SUBBAND80_2 198 199 RX side: Set to 0 200 TX side: Ordering index of the User field within the 2nd 201 highest 80 MHz 202 See 'user_order_subband80_0.' 203 <legal all> 204 */ 205 206 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_2_OFFSET 0x00000004 207 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_2_LSB 16 208 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_2_MSB 23 209 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_2_MASK 0x00ff0000 210 211 212 /* Description USER_ORDER_SUBBAND80_3 213 214 RX side: Set to 0 215 TX side: Ordering index of the User field within the highest 216 80 MHz 217 See 'user_order_subband80_0.' 218 <legal all> 219 */ 220 221 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_3_OFFSET 0x00000004 222 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_3_LSB 24 223 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_3_MSB 31 224 #define EHT_SIG_USR_MU_MIMO_INFO_USER_ORDER_SUBBAND80_3_MASK 0xff000000 225 226 227 228 #endif // EHT_SIG_USR_MU_MIMO_INFO 229