1 /* 2 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #ifndef _TARGET_IF_CFR_ENH_H_ 20 #define _TARGET_IF_CFR_ENH_H_ 21 22 #ifdef WLAN_ENH_CFR_ENABLE 23 /* 24 * Memory requirements : 25 * 26 * 1. DMA header : 27 * 28 * Legacy DMA header(QCA8074V2) : 2 words (length = 8 bytes) 29 * Enhanced DMA header(QCA6018) : Upto 16 words depending on no. of MU users 30 * in UL-MU-PPDU (Max length = 64 bytes) 31 * 32 * Fixed 4 words for whal_cfir_enhanced_hdr + freeze TLV 33 * + uplink_user_info TLV (MAX 4) 34 * 35 * mu_rx_num_users -> No. of words in CFR DMA header 36 * 0 -> 12 = 4 + 7(freeze TLV) + 1(for 64-bit alignment) 37 * 1 -> 12 = 4 + 7(freeze TLV) + 1(user1) 38 * 2 -> 14 = 4 + 7(freeze TLV) + 2(users 1,2) + 1(for 64-bit alignment) 39 * 3 -> 14 = 4 + 7(freeze TLV) + 3(users 1,2,3) 40 * 4 -> 16 = 4 + 7(freeze TLV) + 4(users 1,2,3,4) + 1(for 64-bit alignment) 41 * 42 * 43 * 2. CFR data size for max BW/Nss/Nrx 44 * 45 * Cypress : Max BW = 80 MHz 46 * NSS = 2 47 * Nrx = 2 48 * Size of one tone = 4 bytes 49 * 50 * a. RTT-H - 2048 bytes 51 * 52 * b. Debug-H (MIMO CFR) - 16016 bytes 53 * 54 * c. RTT-H + CIR - 10240 bytes = 2048(RTT-H) + 8192(CIR) 55 */ 56 57 /* Max 4 users in MU case */ 58 #define CYP_CFR_MU_USERS 4 59 60 #define CYP_MAX_HEADER_LENGTH_WORDS 16 61 62 /* payload_len = Max(2048, 16016, 10240) = 16064 (64-bit alignment) */ 63 #define CYP_MAX_DATA_LENGTH_BYTES 16064 64 65 /* in ms */ 66 #define LUT_AGE_TIMER 3000 67 #define LUT_AGE_THRESHOLD 3000 68 69 /* Max size : 70 * sizeof(csi_cfr_header) + 64 bytes(cfr header) + 16064 bytes(cfr payload) 71 */ 72 #define STREAMFS_MAX_SUBBUF_CYP \ 73 (sizeof(struct csi_cfr_header) + \ 74 (CYP_MAX_HEADER_LENGTH_WORDS * 4) + \ 75 CYP_MAX_DATA_LENGTH_BYTES) 76 77 #define STREAMFS_NUM_SUBBUF_CYP 255 78 79 /* Max 37 users in MU case for Pine */ 80 #define PINE_CFR_MU_USERS 37 81 82 #define PINE_MAX_HEADER_LENGTH_WORDS 50 83 84 #define PINE_MAX_DATA_LENGTH_BYTES 16384 85 86 /* Max size : 87 * sizeof(csi_cfr_header) + 200 bytes(cfr header) + 16384 bytes(cfr payload) 88 */ 89 #define STREAMFS_MAX_SUBBUF_PINE \ 90 (sizeof(struct csi_cfr_header) + \ 91 (PINE_MAX_HEADER_LENGTH_WORDS * 4) + \ 92 PINE_MAX_DATA_LENGTH_BYTES) 93 94 #define STREAMFS_NUM_SUBBUF_PINE 255 95 96 /* enum macrx_freeze_tlv_version: Reported by uCode in enh_dma_header 97 * MACRX_FREEZE_TLV_VERSION_1: Single MU UL user info reported by MAC 98 * MACRX_FREEZE_TLV_VERSION_2: Upto 4 MU UL user info reported by MAC 99 * MACRX_FREEZE_TLV_VERSION_3: Upto 37 MU UL user info reported by MAC 100 */ 101 enum macrx_freeze_tlv_version { 102 MACRX_FREEZE_TLV_VERSION_1 = 1, 103 MACRX_FREEZE_TLV_VERSION_2 = 2, 104 MACRX_FREEZE_TLV_VERSION_3 = 3, 105 MACRX_FREEZE_TLV_VERSION_MAX 106 }; 107 108 /* Max 4 users in MU case for Maple */ 109 #define MAPLE_CFR_MU_USERS 4 110 111 #define MAPLE_MAX_HEADER_LENGTH_WORDS 16 112 113 #define MAPLE_MAX_DATA_LENGTH_BYTES 4096 114 115 /* Max size : 116 * sizeof(csi_cfr_header) + 64 bytes(cfr uCode header) + 117 * 4096 bytes(cfr payload) 118 */ 119 #define STREAMFS_MAX_SUBBUF_MAPLE \ 120 (sizeof(struct csi_cfr_header) + \ 121 (MAPLE_MAX_HEADER_LENGTH_WORDS * 4) + \ 122 MAPLE_MAX_DATA_LENGTH_BYTES) 123 124 /* The number 470 has come up by considering the 2MB benchmark 125 * for Relay FS buffer pool. For Cascade, dakota and HK, the 126 * Relay FS buffer pool has been considered as 2MB and based 127 * on that the number of sub buffers are 1100, 2200 and 255. 128 * For Cypress and pine, since the buffer size has increased 129 * to 16K, if we would have considered to keep the relay FS 130 * buffer pool size as 2MB then the number of sub buffers / 131 * CFR records would have been lesser in number (around 130) 132 * So, the decision had been taken to keep the sub buffer 133 * count to 255 and as result the relay fs buffer pool size 134 * in case of Cypress and Pine exceeded 4MB. 135 * 136 * In case of Maple, since the Buffer size is small (4470B) 137 * we have decided to maintain the relay fs buffer pool size 138 * as 2MB, as a result the number of sub buffers has become 139 * 470. 140 * 141 * RelayFS memory required: 142 * Max sub buffer size * Number of sub buffers 143 * 144 * Cascade: (2200B * 1100) ~= 2MB 145 * Dakota: (1100B * 2200) ~= 2MB 146 * Hawkeye: (8200B * 255 ) ~= 2MB 147 * Cypress: (16438B * 255 ) ~= 4MB 148 * Pine : (16894B * 255 ) ~= 4MB 149 * Maple : (4470B * 470 ) ~= 2MB 150 * 151 */ 152 #define STREAMFS_NUM_SUBBUF_MAPLE 470 153 154 /* 155 * @tag: ucode fills this with 0xBA 156 * 157 * @length: length of CFR header in words (32-bit) 158 * 159 * @upload_done: ucode sets this to 1 to indicate DMA completion 160 * 161 * @capture_type: 162 * 163 * 0 - None 164 * 1 - RTT-H (Nss = 1, Nrx) 165 * 2 - Debug-H (Nss, Nrx) 166 * 3 - Reserved 167 * 5 - RTT-H + CIR(Nss, Nrx) 168 * 169 * @preamble_type: 170 * 171 * 0 - Legacy 172 * 1 - HT 173 * 2 - VHT 174 * 3 - HE 175 * 176 * @nss: 177 * 178 * 0 - 1-stream 179 * 1 - 2-stream 180 * .. .. 181 * 7 - 8-stream 182 * 183 *@num_chains: 184 * 185 * 0 - 1-chain 186 * 1 - 2-chain 187 * .. .. 188 * 7 - 8-chain 189 * 190 *@upload_bw_pkt: 191 * 192 * 0 - 20 MHz 193 * 1 - 40 MHz 194 * 2 - 80 MHz 195 * 3 - 160 MHz 196 * 197 * @sw_peer_id_valid: Indicates whether sw_peer_id field is valid or not, 198 * sent from MAC to PHY via the MACRX_FREEZE_CAPTURE_CHANNEL TLV 199 * 200 * @sw_peer_id: Indicates peer id based on AST search, sent from MAC to PHY 201 * via the MACRX_FREEZE_CAPTURE_CHANNEL TLV 202 * 203 * @phy_ppdu_id: sent from PHY to MAC, copied to MACRX_FREEZE_CAPTURE_CHANNEL 204 * TLV 205 * 206 * @total_bytes: Total size of CFR payload (FFT bins) 207 * 208 * @header_version: 209 * 210 * 1 - HKV2/Hastings 211 * 2 - Cypress 212 * 213 * @target_id: 214 * 215 * 1 - Hastings 216 * 2 - Cypress 217 * 3 - Hastings Prime 218 * 4 - Pine 219 * 220 * @cfr_fmt: 221 * 222 * 0 - raw (32-bit format) 223 * 1 - compressed (24-bit format) 224 * 225 * @mu_rx_data_incl: Indicates whether CFR header contains UL-MU-MIMO info 226 * 227 * @freeze_data_incl: Indicates whether CFR header contains 228 * MACRX_FREEZE_CAPTURE_CHANNEL TLV 229 * 230 * @freeze_tlv_version: Indicates the version of freeze_tlv 231 * 1 - HSP, Cypress 232 * 2 - Maple/Spruce/Moselle 233 * 3 - Pine 234 * 235 * @decimation_factor: FFT bins decimation 236 * @mu_rx_num_users: Number of users in UL-MU-PPDU 237 */ 238 struct whal_cfir_enhanced_hdr { 239 uint16_t tag : 8, 240 length : 6, 241 rsvd1 : 2; 242 243 uint16_t upload_done : 1, 244 capture_type : 3, 245 preamble_type : 2, 246 nss : 3, 247 num_chains : 3, 248 upload_pkt_bw : 3, 249 sw_peer_id_valid : 1; 250 251 uint16_t sw_peer_id : 16; 252 253 uint16_t phy_ppdu_id : 16; 254 255 uint16_t total_bytes; 256 257 uint16_t header_version :4, 258 target_id :4, 259 cfr_fmt :1, 260 rsvd2 :1, 261 mu_rx_data_incl :1, 262 freeze_data_incl :1, 263 freeze_tlv_version :4; 264 265 uint16_t mu_rx_num_users :8, 266 decimation_factor :4, 267 rsvd3 :4; 268 269 uint16_t rsvd4; 270 }; 271 272 /* 273 * freeze_tlv v1/v2 used by Hastings/Cypress/Maple/Spruce/Moselle supports upto 274 * 4 UL MU users 275 * 276 * @freeze: 277 * 0: Allow channel capture 278 * 1: Freeze channel capture 279 * 280 * @capture_reason: Field only valid when the freeze field is 1. Indicates why 281 * the MAC asked to capture the channel 282 * 0: freeze_reason_TM 283 * 1: freeze_reason_FTM 284 * 2: freeze_reason_ACK_resp_to_TM_FTM 285 * 3: freeze_reason_TA_RA_TYPE_FILTER 286 * 4: freeze readon NDP_NDP 287 * 5: freeze_reason_ALL_PACKET 288 * 289 * @packet_type: Packet type of captured packets. 290 * 0: Management 291 * 1: Control 292 * 2: Data 293 * 3: Extension 294 * 295 * @packet_sub_type: packet subtype of the captured packets. 296 * @sw_peer_id_valid: It is valid only when the freeze field is set to 1. 297 * 0: no TA address search on the received frame has been 298 * performed. This is due to the frame not having a TA address 299 * (like ACK frame), or the received frame being from an other 300 * AP to which this device is not associated. 301 * 1: field sw_peer_id will contain valid information. 302 * This implies that a (successful) address search has been 303 * performed on the TA address of the received frame. 304 * 305 * @sw_peer_id: Valid only when sw_peer_id_valid field is set. It is an 306 * identifier that allows SW to double check that the CSI info stored belongs 307 * to the device with this SW identifier. 308 * 309 * @phy_ppdu_id: ppdu_id of ppdu which has channel capture performed. Field 310 * only valid when the freeze field is set to 1. 311 * 312 * @packet_ta_lower_16: Packet’s lower 16bits transmit address in MAC header. 313 * 314 * @packet_ta_mid_16: Packet’s middle 16bits transmit address in MAC header. 315 * 316 * @packet_ta_upper_16: Packet’s upper 16bits transmit address in MAC header. 317 * 318 * @packet_ra_lower_16: Packet’s lower 16bits receive address in MAC header. 319 * 320 * @packet_ra_mid_16: Packet’s middle 16bits receive address in MAC header. 321 * 322 * @packet_ra_upper_16: Packet’s upper 16bits receive address in MAC header. 323 * 324 * @tsf_timestamp_15_0: MAC side 64bit TSF timestamp when this TLV is sent to 325 * PHY. Bits [15:0]. 326 * 327 * @tsf_timestamp_31_16: MAC side 64bit TSF timestamp when this TLV is sent to 328 * PHY. Bits [31:16]. 329 * 330 * @tsf_timestamp_47_32: MAC side 64bit TSF timestamp when this TLV is sent to 331 * PHY. Bits [47:32]. 332 * 333 * @tsf_timestamp_63_48: MAC side 64bit TSF timestamp when this TLV is sent to 334 * PHY. Bits [63:48]. 335 * 336 * @user_index_or_user_mask_5_0: When freeze_tlv_version is 1, this field from 337 * MAC, indicate to PHY which user's channel information need to be uploaded. 338 * When freeze_tlv_version is 2 & MU_SUPPORT_IN_TLV is 1, this field indicates 339 * bitmap of users upto 4 to which channel capture need to be uploaded. And if 340 * freeze_tlv_version is 2 & MU_SUPPORT_IN_TLV is 0, this field indicate to PHY 341 * which user's channel information need to be uploaded 342 * 343 * @directed: Indicate the frame is directed to us or not when NDPA/NDP capture 344 * or FTM/TM/ACK capture. 1=directed. For other modes, it is 0. 345 */ 346 struct macrx_freeze_capture_channel { 347 uint16_t freeze : 1, //[0] 348 capture_reason : 3, //[3:1] 349 packet_type : 2, //[5:4] 350 packet_sub_type : 4, //[9:6] 351 reserved : 5, //[14:10] 352 sw_peer_id_valid : 1; //[15] 353 uint16_t sw_peer_id : 16; //[15:0] 354 uint16_t phy_ppdu_id : 16; //[15:0] 355 uint16_t packet_ta_lower_16 : 16; //[15:0] 356 uint16_t packet_ta_mid_16 : 16; //[15:0] 357 uint16_t packet_ta_upper_16 : 16; //[15:0] 358 uint16_t packet_ra_lower_16 : 16; //[15:0] 359 uint16_t packet_ra_mid_16 : 16; //[15:0] 360 uint16_t packet_ra_upper_16 : 16; //[15:0] 361 uint16_t tsf_timestamp_15_0 : 16; //[15:0] 362 uint16_t tsf_timestamp_31_16 : 16; //[15:0] 363 uint16_t tsf_timestamp_47_32 : 16; //[15:0] 364 uint16_t tsf_timestamp_63_48 : 16; //[15:0] 365 uint16_t user_index_or_user_mask_5_0 : 6, //[5:0] 366 directed : 1, //[6] 367 reserved_13 : 9; //[15:7] 368 }; 369 370 /* 371 * freeze_tlv v3 used by Pine 372 * 373 * @freeze: 374 * 0: Allow channel capture 375 * 1: Freeze channel capture 376 * 377 * @capture_reason: Field only valid when the freeze field is 1. Indicates why 378 * the MAC asked to capture the channel 379 * 0: freeze_reason_TM 380 * 1: freeze_reason_FTM 381 * 2: freeze_reason_ACK_resp_to_TM_FTM 382 * 3: freeze_reason_TA_RA_TYPE_FILTER 383 * 4: freeze readon NDP_NDP 384 * 5: freeze_reason_ALL_PACKET 385 * 386 * @packet_type: Packet type of captured packets. 387 * 0: Management 388 * 1: Control 389 * 2: Data 390 * 3: Extension 391 * 392 * @packet_sub_type: packet subtype of the captured packets. 393 * 394 * @directed: Indicate the frame is directed to us or not when NDPA/NDP capture 395 * or FTM/TM/ACK capture. 1=directed. For other modes, it is 0. 396 * 397 * @sw_peer_id_valid: It is valid only when the freeze field is set to 1. 398 * 0: no TA address search on the received frame has been 399 * performed. This is due to the frame not having a TA address 400 * (like ACK frame), or the received frame being from an other 401 * AP to which this device is not associated. 402 * 1: field sw_peer_id will contain valid information. 403 * This implies that a (successful) address search has been 404 * performed on the TA address of the received frame. 405 * 406 * @sw_peer_id: Valid only when sw_peer_id_valid field is set. It is an 407 * identifier that allows SW to double check that the CSI info stored belongs 408 * to the device with this SW identifier. 409 * 410 * @phy_ppdu_id: ppdu_id of ppdu which has channel capture performed. Field 411 * only valid when the freeze field is set to 1. 412 * 413 * @packet_ta_lower_16: Packet’s lower 16bits transmit address in MAC header. 414 * 415 * @packet_ta_mid_16: Packet’s middle 16bits transmit address in MAC header. 416 * 417 * @packet_ta_upper_16: Packet’s upper 16bits transmit address in MAC header. 418 * 419 * @packet_ra_lower_16: Packet’s lower 16bits receive address in MAC header. 420 * 421 * @packet_ra_mid_16: Packet’s middle 16bits receive address in MAC header. 422 * 423 * @packet_ra_upper_16: Packet’s upper 16bits receive address in MAC header. 424 * 425 * @tsf_timestamp_15_0: MAC side 64bit TSF timestamp when this TLV is sent to 426 * PHY. Bits [15:0]. 427 * 428 * @tsf_timestamp_31_16: MAC side 64bit TSF timestamp when this TLV is sent to 429 * PHY. Bits [31:16]. 430 * 431 * @tsf_timestamp_47_32: MAC side 64bit TSF timestamp when this TLV is sent to 432 * PHY. Bits [47:32]. 433 * 434 * @tsf_63_48_or_user_mask_36_32: Indicates to PHY which user's channel info 435 * need to be uploaded. Only valid in UL MU case with MU_SUPPORT_IN_TLV = 1. 436 * Otherwise this indicates to PHY MSBs 63:48 of the MAC side 64bit TSF 437 * timestamp when this TLV is sent to PHY. 438 * 439 * @user_index_or_user_mask_15_0: Indicate to PHY which user's channel info 440 * need to be uploaded in UL MU case with MU_SUPPORT_IN_TLV = 1. Otherwise it 441 * indicate PHY which user’s channel information need to be uploaded. 442 * 443 * @user_mask_31_16: Indicate to PHY which user’s channel information need to 444 * be uploaded. Only valid in UL MU case with MU_SUPPORT_IN_TLV = 1. 445 */ 446 struct macrx_freeze_capture_channel_v3 { 447 uint16_t freeze : 1, //[0] 448 capture_reason : 3, //[3:1] 449 packet_type : 2, //[5:4] 450 packet_sub_type : 4, //[9:6] 451 directed : 1, //[10] 452 reserved : 4, //[14:11] 453 sw_peer_id_valid : 1; //[15] 454 uint16_t sw_peer_id : 16; //[15:0] 455 uint16_t phy_ppdu_id : 16; //[15:0] 456 uint16_t packet_ta_lower_16 : 16; //[15:0] 457 uint16_t packet_ta_mid_16 : 16; //[15:0] 458 uint16_t packet_ta_upper_16 : 16; //[15:0] 459 uint16_t packet_ra_lower_16 : 16; //[15:0] 460 uint16_t packet_ra_mid_16 : 16; //[15:0] 461 uint16_t packet_ra_upper_16 : 16; //[15:0] 462 uint16_t tsf_timestamp_15_0 : 16; //[15:0] 463 uint16_t tsf_timestamp_31_16 : 16; //[15:0] 464 uint16_t tsf_timestamp_47_32 : 16; //[15:0] 465 uint16_t tsf_63_48_or_user_mask_36_32 : 16; //[15:0] 466 uint16_t user_index_or_user_mask_15_0 : 16; //[15:0] 467 uint16_t user_mask_31_16 : 16; //[15:0] 468 }; 469 470 struct uplink_user_setup_info { 471 uint32_t bw_info_valid : 1, //[0] 472 uplink_receive_type : 2, //[2:1] 473 reserved_0a : 1, //[3] 474 uplink_11ax_mcs : 4, //[7:4] 475 ru_width : 7, //[14:8] 476 reserved_0b : 1, //[15] 477 nss : 3, //[18:16] 478 stream_offset : 3, //[21:19] 479 sta_dcm : 1, //[22] 480 sta_coding : 1, //[23] 481 ru_start_index : 7, //[30:24] 482 reserved_0c : 1; //[31] 483 }; 484 485 /** 486 * cfr_enh_init_pdev() - Inits cfr pdev and registers necessary handlers. 487 * @psoc: pointer to psoc object 488 * @pdev: pointer to pdev object 489 * 490 * Return: Registration status for necessary handlers 491 */ 492 QDF_STATUS cfr_enh_init_pdev( 493 struct wlan_objmgr_psoc *psoc, 494 struct wlan_objmgr_pdev *pdev); 495 496 /** 497 * cfr_enh_deinit_pdev() - De-inits corresponding pdev and handlers. 498 * @psoc: pointer to psoc object 499 * @pdev: pointer to pdev object 500 * 501 * Return: De-registration status for necessary handlers 502 */ 503 QDF_STATUS cfr_enh_deinit_pdev( 504 struct wlan_objmgr_psoc *psoc, 505 struct wlan_objmgr_pdev *pdev); 506 507 /** 508 * target_if_cfr_start_lut_age_timer() - Start timer to flush aged-out LUT 509 * entries 510 * @pdev: pointer to pdev object 511 * 512 * Return: None 513 */ 514 void target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev); 515 516 /** 517 * target_if_cfr_stop_lut_age_timer() - Stop timer to flush aged-out LUT 518 * entries 519 * @pdev: pointer to pdev object 520 * 521 * Return: None 522 */ 523 void target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev); 524 525 /** 526 * target_if_cfr_dump_lut_enh() - Dump all valid LUT entries 527 * @pdev: objmgr PDEV 528 * 529 * Return: none 530 */ 531 void target_if_cfr_dump_lut_enh(struct wlan_objmgr_pdev *pdev); 532 533 /** 534 * target_if_cfr_config_rcc() - Start repetitive channel capture 535 * @pdev: pointer to pdev object 536 * @rcc_param: rcc configurations 537 * 538 * Return: Success/Failure status 539 */ 540 QDF_STATUS target_if_cfr_config_rcc(struct wlan_objmgr_pdev *pdev, 541 struct cfr_rcc_param *rcc_param); 542 543 /** 544 * target_if_cfr_default_ta_ra_config() - Configure default values to all 545 * params(BW/NSS/TA/RA) in TA_RA mode 546 * @rcc_param: rcc configurations 547 * @allvalid: Indicates whether all TA_RA params are valid or not. 548 * It could be either 0 or 1. 549 * 1: should be sent to FW during CFR initialization 550 * 0: should be set, after a successful commit session. 551 * @reset_cfg: This bitmap is being used to determine which groups' 552 * parameters are needed to be reset to its default state. 553 */ 554 void target_if_cfr_default_ta_ra_config(struct cfr_rcc_param *rcc_param, 555 bool allvalid, uint16_t reset_cfg); 556 557 /** 558 * target_if_cfr_rx_tlv_process() - Process PPDU status TLVs and store info in 559 * lookup table 560 * @pdev: PDEV object 561 * @nbuf: ppdu info 562 * 563 * Return: none 564 */ 565 void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf); 566 567 /** 568 * target_if_cfr_update_global_cfg() - Update global config after a successful 569 * commit 570 * @pdev: pointer to pdev object 571 * 572 * Return: None 573 */ 574 void target_if_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev); 575 #else 576 static inline QDF_STATUS cfr_enh_init_pdev( 577 struct wlan_objmgr_psoc *psoc, 578 struct wlan_objmgr_pdev *pdev) 579 { 580 return QDF_STATUS_SUCCESS; 581 } 582 583 static inline QDF_STATUS cfr_enh_deinit_pdev( 584 struct wlan_objmgr_psoc *psoc, 585 struct wlan_objmgr_pdev *pdev) 586 { 587 return QDF_STATUS_SUCCESS; 588 } 589 #endif 590 #endif 591