@@ -391,9 +391,27 @@ iwl_mvm_ftm_put_target_v3(struct iwl_mvm *mvm,
391
391
}
392
392
393
393
static int
394
- iwl_mvm_ftm_put_target (struct iwl_mvm * mvm ,
394
+ iwl_mvm_ftm_put_target_v4 (struct iwl_mvm * mvm ,
395
+ struct cfg80211_pmsr_request_peer * peer ,
396
+ struct iwl_tof_range_req_ap_entry_v4 * target )
397
+ {
398
+ int ret ;
399
+
400
+ ret = iwl_mvm_ftm_target_chandef_v2 (mvm , peer , & target -> channel_num ,
401
+ & target -> format_bw ,
402
+ & target -> ctrl_ch_position );
403
+ if (ret )
404
+ return ret ;
405
+
406
+ iwl_mvm_ftm_put_target_common (mvm , peer , (void * )target );
407
+
408
+ return 0 ;
409
+ }
410
+
411
+ static int
412
+ iwl_mvm_ftm_put_target (struct iwl_mvm * mvm , struct ieee80211_vif * vif ,
395
413
struct cfg80211_pmsr_request_peer * peer ,
396
- struct iwl_tof_range_req_ap_entry_v4 * target )
414
+ struct iwl_tof_range_req_ap_entry * target )
397
415
{
398
416
int ret ;
399
417
@@ -405,6 +423,20 @@ iwl_mvm_ftm_put_target(struct iwl_mvm *mvm,
405
423
406
424
iwl_mvm_ftm_put_target_common (mvm , peer , (void * )target );
407
425
426
+ if (vif -> bss_conf .assoc &&
427
+ !memcmp (peer -> addr , vif -> bss_conf .bssid , ETH_ALEN )) {
428
+ struct iwl_mvm_vif * mvmvif = iwl_mvm_vif_from_mac80211 (vif );
429
+
430
+ target -> sta_id = mvmvif -> ap_sta_id ;
431
+ } else {
432
+ target -> sta_id = IWL_MVM_INVALID_STA ;
433
+ }
434
+
435
+ /*
436
+ * TODO: Beacon interval is currently unknown, so use the common value
437
+ * of 100 TUs.
438
+ */
439
+ target -> beacon_interval = cpu_to_le16 (100 );
408
440
return 0 ;
409
441
}
410
442
@@ -496,7 +528,7 @@ static int iwl_mvm_ftm_start_v8(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
496
528
for (i = 0 ; i < cmd .num_of_ap ; i ++ ) {
497
529
struct cfg80211_pmsr_request_peer * peer = & req -> peers [i ];
498
530
499
- err = iwl_mvm_ftm_put_target (mvm , peer , & cmd .ap [i ]);
531
+ err = iwl_mvm_ftm_put_target_v4 (mvm , peer , & cmd .ap [i ]);
500
532
if (err )
501
533
return err ;
502
534
}
@@ -521,8 +553,9 @@ static int iwl_mvm_ftm_start_v9(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
521
553
522
554
for (i = 0 ; i < cmd .num_of_ap ; i ++ ) {
523
555
struct cfg80211_pmsr_request_peer * peer = & req -> peers [i ];
556
+ struct iwl_tof_range_req_ap_entry * target = & cmd .ap [i ];
524
557
525
- err = iwl_mvm_ftm_put_target (mvm , peer , ( void * ) & cmd . ap [ i ] );
558
+ err = iwl_mvm_ftm_put_target (mvm , vif , peer , target );
526
559
if (err )
527
560
return err ;
528
561
}
@@ -548,6 +581,7 @@ int iwl_mvm_ftm_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
548
581
549
582
switch (cmd_ver ) {
550
583
case 9 :
584
+ case 10 :
551
585
err = iwl_mvm_ftm_start_v9 (mvm , vif , req );
552
586
break ;
553
587
case 8 :
0 commit comments