1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. 3*5113495bSYour Name * 4*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for any 5*5113495bSYour Name * purpose with or without fee is hereby granted, provided that the above 6*5113495bSYour Name * copyright notice and this permission notice appear in all copies. 7*5113495bSYour Name * 8*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9*5113495bSYour Name * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10*5113495bSYour Name * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11*5113495bSYour Name * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12*5113495bSYour Name * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13*5113495bSYour Name * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14*5113495bSYour Name * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15*5113495bSYour Name */ 16*5113495bSYour Name 17*5113495bSYour Name #ifndef _PDG_TX_REQ_H_ 18*5113495bSYour Name #define _PDG_TX_REQ_H_ 19*5113495bSYour Name #if !defined(__ASSEMBLER__) 20*5113495bSYour Name #endif 21*5113495bSYour Name 22*5113495bSYour Name #define NUM_OF_DWORDS_PDG_TX_REQ 2 23*5113495bSYour Name 24*5113495bSYour Name #define NUM_OF_QWORDS_PDG_TX_REQ 1 25*5113495bSYour Name 26*5113495bSYour Name 27*5113495bSYour Name struct pdg_tx_req { 28*5113495bSYour Name #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 29*5113495bSYour Name uint32_t tx_reason : 2, // [1:0] 30*5113495bSYour Name use_puncture_pattern : 2, // [3:2] 31*5113495bSYour Name req_bw : 3, // [6:4] 32*5113495bSYour Name puncture_pattern_number : 6, // [12:7] 33*5113495bSYour Name reserved_0b : 1, // [13:13] 34*5113495bSYour Name req_paprd : 1, // [14:14] 35*5113495bSYour Name duration_field_boundary_valid : 1, // [15:15] 36*5113495bSYour Name duration_field_boundary : 16; // [31:16] 37*5113495bSYour Name uint32_t puncture_subband_mask : 16, // [15:0] 38*5113495bSYour Name reserved_0c : 16; // [31:16] 39*5113495bSYour Name #else 40*5113495bSYour Name uint32_t duration_field_boundary : 16, // [31:16] 41*5113495bSYour Name duration_field_boundary_valid : 1, // [15:15] 42*5113495bSYour Name req_paprd : 1, // [14:14] 43*5113495bSYour Name reserved_0b : 1, // [13:13] 44*5113495bSYour Name puncture_pattern_number : 6, // [12:7] 45*5113495bSYour Name req_bw : 3, // [6:4] 46*5113495bSYour Name use_puncture_pattern : 2, // [3:2] 47*5113495bSYour Name tx_reason : 2; // [1:0] 48*5113495bSYour Name uint32_t reserved_0c : 16, // [31:16] 49*5113495bSYour Name puncture_subband_mask : 16; // [15:0] 50*5113495bSYour Name #endif 51*5113495bSYour Name }; 52*5113495bSYour Name 53*5113495bSYour Name 54*5113495bSYour Name /* Description TX_REASON 55*5113495bSYour Name 56*5113495bSYour Name <enum 0 tx_fes_protection_frame> RTS, CTS2Self or 11h 57*5113495bSYour Name protection type transmission preceding the regular PPDU 58*5113495bSYour Name portion of the coming FES. 59*5113495bSYour Name <enum 1 tx_fes_after_protection > Regular PPDU transmission 60*5113495bSYour Name that follows the transmission of medium protection frames:. 61*5113495bSYour Name 62*5113495bSYour Name <enum 2 tx_fes_only> Regular PPDU transmission without 63*5113495bSYour Name preceding medium protection frame exchanges. 64*5113495bSYour Name 65*5113495bSYour Name Note: Response frame transmissions are initiated with the 66*5113495bSYour Name PDG_RESPONSE TLV 67*5113495bSYour Name 68*5113495bSYour Name <legal 0-2> 69*5113495bSYour Name */ 70*5113495bSYour Name 71*5113495bSYour Name #define PDG_TX_REQ_TX_REASON_OFFSET 0x0000000000000000 72*5113495bSYour Name #define PDG_TX_REQ_TX_REASON_LSB 0 73*5113495bSYour Name #define PDG_TX_REQ_TX_REASON_MSB 1 74*5113495bSYour Name #define PDG_TX_REQ_TX_REASON_MASK 0x0000000000000003 75*5113495bSYour Name 76*5113495bSYour Name 77*5113495bSYour Name 78*5113495bSYour Name #define PDG_TX_REQ_USE_PUNCTURE_PATTERN_OFFSET 0x0000000000000000 79*5113495bSYour Name #define PDG_TX_REQ_USE_PUNCTURE_PATTERN_LSB 2 80*5113495bSYour Name #define PDG_TX_REQ_USE_PUNCTURE_PATTERN_MSB 3 81*5113495bSYour Name #define PDG_TX_REQ_USE_PUNCTURE_PATTERN_MASK 0x000000000000000c 82*5113495bSYour Name 83*5113495bSYour Name 84*5113495bSYour Name /* Description REQ_BW 85*5113495bSYour Name 86*5113495bSYour Name Field not valid when use_puncture_pattern is set to PUNCTURE_FROM_TX_SETUP 87*5113495bSYour Name 88*5113495bSYour Name 89*5113495bSYour Name The BW of the upcoming transmission. 90*5113495bSYour Name Note: Coex might have changed this from the original request. 91*5113495bSYour Name 92*5113495bSYour Name 93*5113495bSYour Name <enum 0 20_mhz>20 Mhz BW 94*5113495bSYour Name <enum 1 40_mhz>40 Mhz BW 95*5113495bSYour Name <enum 2 80_mhz>80 Mhz BW 96*5113495bSYour Name <enum 3 160_mhz>160 Mhz BW 97*5113495bSYour Name <enum 4 320_mhz>320 Mhz BW 98*5113495bSYour Name <enum 5 240_mhz>240 Mhz BW 99*5113495bSYour Name */ 100*5113495bSYour Name 101*5113495bSYour Name #define PDG_TX_REQ_REQ_BW_OFFSET 0x0000000000000000 102*5113495bSYour Name #define PDG_TX_REQ_REQ_BW_LSB 4 103*5113495bSYour Name #define PDG_TX_REQ_REQ_BW_MSB 6 104*5113495bSYour Name #define PDG_TX_REQ_REQ_BW_MASK 0x0000000000000070 105*5113495bSYour Name 106*5113495bSYour Name 107*5113495bSYour Name /* Description PUNCTURE_PATTERN_NUMBER 108*5113495bSYour Name 109*5113495bSYour Name Field only valid when "use_puncture_pattern" is set. 110*5113495bSYour Name 111*5113495bSYour Name The pattern number in case punctured transmission is enabled 112*5113495bSYour Name 113*5113495bSYour Name <legal all> 114*5113495bSYour Name */ 115*5113495bSYour Name 116*5113495bSYour Name #define PDG_TX_REQ_PUNCTURE_PATTERN_NUMBER_OFFSET 0x0000000000000000 117*5113495bSYour Name #define PDG_TX_REQ_PUNCTURE_PATTERN_NUMBER_LSB 7 118*5113495bSYour Name #define PDG_TX_REQ_PUNCTURE_PATTERN_NUMBER_MSB 12 119*5113495bSYour Name #define PDG_TX_REQ_PUNCTURE_PATTERN_NUMBER_MASK 0x0000000000001f80 120*5113495bSYour Name 121*5113495bSYour Name 122*5113495bSYour Name /* Description RESERVED_0B 123*5113495bSYour Name 124*5113495bSYour Name <legal 0> 125*5113495bSYour Name */ 126*5113495bSYour Name 127*5113495bSYour Name #define PDG_TX_REQ_RESERVED_0B_OFFSET 0x0000000000000000 128*5113495bSYour Name #define PDG_TX_REQ_RESERVED_0B_LSB 13 129*5113495bSYour Name #define PDG_TX_REQ_RESERVED_0B_MSB 13 130*5113495bSYour Name #define PDG_TX_REQ_RESERVED_0B_MASK 0x0000000000002000 131*5113495bSYour Name 132*5113495bSYour Name 133*5113495bSYour Name #define PDG_TX_REQ_REQ_PAPRD_OFFSET 0x0000000000000000 134*5113495bSYour Name #define PDG_TX_REQ_REQ_PAPRD_LSB 14 135*5113495bSYour Name #define PDG_TX_REQ_REQ_PAPRD_MSB 14 136*5113495bSYour Name #define PDG_TX_REQ_REQ_PAPRD_MASK 0x0000000000004000 137*5113495bSYour Name 138*5113495bSYour Name 139*5113495bSYour Name /* Description DURATION_FIELD_BOUNDARY_VALID 140*5113495bSYour Name 141*5113495bSYour Name When set, PDG should take the 'duration_field_boundary' 142*5113495bSYour Name value into account when it is calculating the TX and RX 143*5113495bSYour Name boundaries for the upcoming transmission. Both RX and TX 144*5113495bSYour Name should not go beyond this time duration provided. 145*5113495bSYour Name 146*5113495bSYour Name <legal all> 147*5113495bSYour Name */ 148*5113495bSYour Name 149*5113495bSYour Name #define PDG_TX_REQ_DURATION_FIELD_BOUNDARY_VALID_OFFSET 0x0000000000000000 150*5113495bSYour Name #define PDG_TX_REQ_DURATION_FIELD_BOUNDARY_VALID_LSB 15 151*5113495bSYour Name #define PDG_TX_REQ_DURATION_FIELD_BOUNDARY_VALID_MSB 15 152*5113495bSYour Name #define PDG_TX_REQ_DURATION_FIELD_BOUNDARY_VALID_MASK 0x0000000000008000 153*5113495bSYour Name 154*5113495bSYour Name 155*5113495bSYour Name /* Description DURATION_FIELD_BOUNDARY 156*5113495bSYour Name 157*5113495bSYour Name Field only valid when 'Duration_field_boundary_valid' is 158*5113495bSYour Name set 159*5113495bSYour Name 160*5113495bSYour Name Amount of time to both TX and RX boundaries that PDG should 161*5113495bSYour Name take into account for the upcoming transmission. 162*5113495bSYour Name <legal all> 163*5113495bSYour Name */ 164*5113495bSYour Name 165*5113495bSYour Name #define PDG_TX_REQ_DURATION_FIELD_BOUNDARY_OFFSET 0x0000000000000000 166*5113495bSYour Name #define PDG_TX_REQ_DURATION_FIELD_BOUNDARY_LSB 16 167*5113495bSYour Name #define PDG_TX_REQ_DURATION_FIELD_BOUNDARY_MSB 31 168*5113495bSYour Name #define PDG_TX_REQ_DURATION_FIELD_BOUNDARY_MASK 0x00000000ffff0000 169*5113495bSYour Name 170*5113495bSYour Name 171*5113495bSYour Name /* Description PUNCTURE_SUBBAND_MASK 172*5113495bSYour Name 173*5113495bSYour Name Field only valid when use_puncture_pattern is set to PUNCTURE_FROM_ALL_ALLOWED_MODES 174*5113495bSYour Name 175*5113495bSYour Name 176*5113495bSYour Name This mask indicates which 20 Mhz channels are actively used 177*5113495bSYour Name in this transmission. 178*5113495bSYour Name 179*5113495bSYour Name Bit 0: primary 20 Mhz 180*5113495bSYour Name Bit 1: secondary 20 MHz 181*5113495bSYour Name Etc. 182*5113495bSYour Name <legal all> 183*5113495bSYour Name */ 184*5113495bSYour Name 185*5113495bSYour Name #define PDG_TX_REQ_PUNCTURE_SUBBAND_MASK_OFFSET 0x0000000000000000 186*5113495bSYour Name #define PDG_TX_REQ_PUNCTURE_SUBBAND_MASK_LSB 32 187*5113495bSYour Name #define PDG_TX_REQ_PUNCTURE_SUBBAND_MASK_MSB 47 188*5113495bSYour Name #define PDG_TX_REQ_PUNCTURE_SUBBAND_MASK_MASK 0x0000ffff00000000 189*5113495bSYour Name 190*5113495bSYour Name 191*5113495bSYour Name /* Description RESERVED_0C 192*5113495bSYour Name 193*5113495bSYour Name Reserved for future power bits: Generator should set to 194*5113495bSYour Name 0, consumer shall ignore <legal 0> 195*5113495bSYour Name */ 196*5113495bSYour Name 197*5113495bSYour Name #define PDG_TX_REQ_RESERVED_0C_OFFSET 0x0000000000000000 198*5113495bSYour Name #define PDG_TX_REQ_RESERVED_0C_LSB 48 199*5113495bSYour Name #define PDG_TX_REQ_RESERVED_0C_MSB 63 200*5113495bSYour Name #define PDG_TX_REQ_RESERVED_0C_MASK 0xffff000000000000 201*5113495bSYour Name 202*5113495bSYour Name 203*5113495bSYour Name 204*5113495bSYour Name #endif // PDG_TX_REQ 205