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 _VHT_SIG_B_MU40_INFO_H_
18 #define _VHT_SIG_B_MU40_INFO_H_
19 #if !defined(__ASSEMBLER__)
20 #endif
21 
22 #define NUM_OF_DWORDS_VHT_SIG_B_MU40_INFO 2
23 
24 
25 struct vht_sig_b_mu40_info {
26 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
27              uint32_t length                                                  : 17, // [16:0]
28                       mcs                                                     :  4, // [20:17]
29                       tail                                                    :  6, // [26:21]
30                       reserved_0                                              :  2, // [28:27]
31                       mu_user_number                                          :  3; // [31:29]
32              uint32_t length_copy                                             : 17, // [16:0]
33                       mcs_copy                                                :  4, // [20:17]
34                       tail_copy                                               :  6, // [26:21]
35                       reserved_1                                              :  5; // [31:27]
36 #else
37              uint32_t mu_user_number                                          :  3, // [31:29]
38                       reserved_0                                              :  2, // [28:27]
39                       tail                                                    :  6, // [26:21]
40                       mcs                                                     :  4, // [20:17]
41                       length                                                  : 17; // [16:0]
42              uint32_t reserved_1                                              :  5, // [31:27]
43                       tail_copy                                               :  6, // [26:21]
44                       mcs_copy                                                :  4, // [20:17]
45                       length_copy                                             : 17; // [16:0]
46 #endif
47 };
48 
49 
50 /* Description		LENGTH
51 
52 			VHT-SIG-B Length (in units of 4 octets) = ceiling (LENGTH/4) <legal
53 			 all>
54 */
55 
56 #define VHT_SIG_B_MU40_INFO_LENGTH_OFFSET                                           0x00000000
57 #define VHT_SIG_B_MU40_INFO_LENGTH_LSB                                              0
58 #define VHT_SIG_B_MU40_INFO_LENGTH_MSB                                              16
59 #define VHT_SIG_B_MU40_INFO_LENGTH_MASK                                             0x0001ffff
60 
61 
62 /* Description		MCS
63 
64 			Modulation as described in vht_sig_a mcs field
65 			<legal 0-11>
66 */
67 
68 #define VHT_SIG_B_MU40_INFO_MCS_OFFSET                                              0x00000000
69 #define VHT_SIG_B_MU40_INFO_MCS_LSB                                                 17
70 #define VHT_SIG_B_MU40_INFO_MCS_MSB                                                 20
71 #define VHT_SIG_B_MU40_INFO_MCS_MASK                                                0x001e0000
72 
73 
74 /* Description		TAIL
75 
76 			Used to terminate the trellis of the convolutional decoder.
77 
78 			Set to 0.
79 			<legal 0>
80 */
81 
82 #define VHT_SIG_B_MU40_INFO_TAIL_OFFSET                                             0x00000000
83 #define VHT_SIG_B_MU40_INFO_TAIL_LSB                                                21
84 #define VHT_SIG_B_MU40_INFO_TAIL_MSB                                                26
85 #define VHT_SIG_B_MU40_INFO_TAIL_MASK                                               0x07e00000
86 
87 
88 /* Description		RESERVED_0
89 
90 			Not part of VHT-SIG-B.
91 			Reserved: Set to 0 and ignored on receive  <legal 0>
92 */
93 
94 #define VHT_SIG_B_MU40_INFO_RESERVED_0_OFFSET                                       0x00000000
95 #define VHT_SIG_B_MU40_INFO_RESERVED_0_LSB                                          27
96 #define VHT_SIG_B_MU40_INFO_RESERVED_0_MSB                                          28
97 #define VHT_SIG_B_MU40_INFO_RESERVED_0_MASK                                         0x18000000
98 
99 
100 /* Description		MU_USER_NUMBER
101 
102 			Not part of VHT-SIG-B.
103 			Mapping from user number (BFer hardware specific) to mu_user_number.
104 			The reader is directed to the previous chapter (User Number)
105 			for a definition of the terms user and mu_user.   <legal
106 			 0-3>
107 */
108 
109 #define VHT_SIG_B_MU40_INFO_MU_USER_NUMBER_OFFSET                                   0x00000000
110 #define VHT_SIG_B_MU40_INFO_MU_USER_NUMBER_LSB                                      29
111 #define VHT_SIG_B_MU40_INFO_MU_USER_NUMBER_MSB                                      31
112 #define VHT_SIG_B_MU40_INFO_MU_USER_NUMBER_MASK                                     0xe0000000
113 
114 
115 /* Description		LENGTH_COPY
116 
117 			Same as "length". This field is not valid for RX packets. <legal
118 			 all>
119 */
120 
121 #define VHT_SIG_B_MU40_INFO_LENGTH_COPY_OFFSET                                      0x00000004
122 #define VHT_SIG_B_MU40_INFO_LENGTH_COPY_LSB                                         0
123 #define VHT_SIG_B_MU40_INFO_LENGTH_COPY_MSB                                         16
124 #define VHT_SIG_B_MU40_INFO_LENGTH_COPY_MASK                                        0x0001ffff
125 
126 
127 /* Description		MCS_COPY
128 
129 			Same as "mcs". This field is not valid for RX packets. <legal
130 			 0-11>
131 */
132 
133 #define VHT_SIG_B_MU40_INFO_MCS_COPY_OFFSET                                         0x00000004
134 #define VHT_SIG_B_MU40_INFO_MCS_COPY_LSB                                            17
135 #define VHT_SIG_B_MU40_INFO_MCS_COPY_MSB                                            20
136 #define VHT_SIG_B_MU40_INFO_MCS_COPY_MASK                                           0x001e0000
137 
138 
139 /* Description		TAIL_COPY
140 
141 			Same as "tail". This field is not valid for RX packets.
142 			 <legal 0>
143 */
144 
145 #define VHT_SIG_B_MU40_INFO_TAIL_COPY_OFFSET                                        0x00000004
146 #define VHT_SIG_B_MU40_INFO_TAIL_COPY_LSB                                           21
147 #define VHT_SIG_B_MU40_INFO_TAIL_COPY_MSB                                           26
148 #define VHT_SIG_B_MU40_INFO_TAIL_COPY_MASK                                          0x07e00000
149 
150 
151 /* Description		RESERVED_1
152 
153 			<legal 0>
154 */
155 
156 #define VHT_SIG_B_MU40_INFO_RESERVED_1_OFFSET                                       0x00000004
157 #define VHT_SIG_B_MU40_INFO_RESERVED_1_LSB                                          27
158 #define VHT_SIG_B_MU40_INFO_RESERVED_1_MSB                                          31
159 #define VHT_SIG_B_MU40_INFO_RESERVED_1_MASK                                         0xf8000000
160 
161 
162 
163 #endif   // VHT_SIG_B_MU40_INFO
164