/* The queue is expected to have only one SKB. If there are other SKBs * in the queue, they did not get a time sync notification and are * probably obsolete by now, so drop them.
*/ while ((skb = skb_dequeue(&mvm->time_sync.frame_list))) { if (iwl_mvm_is_skb_match(skb, addr, dialog_token)) break;
int iwl_mvm_time_sync_config(struct iwl_mvm *mvm, const u8 *addr, u32 protocols)
{ struct iwl_time_sync_cfg_cmd cmd = {}; int err;
lockdep_assert_held(&mvm->mutex);
if (!fw_has_capa(&mvm->fw->ucode_capa,
IWL_UCODE_TLV_CAPA_TIME_SYNC_BOTH_FTM_TM)) return -EINVAL;
/* The fw only supports one peer. We do allow reconfiguration of the * same peer for cases of fw reset etc.
*/ if (mvm->time_sync.active &&
!ether_addr_equal(addr, mvm->time_sync.peer_addr)) {
IWL_DEBUG_INFO(mvm, "Time sync: reject config for peer: %pM\n",
addr); return -ENOBUFS;
}
if (protocols & ~(IWL_TIME_SYNC_PROTOCOL_TM |
IWL_TIME_SYNC_PROTOCOL_FTM)) return -EINVAL;
cmd.protocols = cpu_to_le32(protocols);
ether_addr_copy(cmd.peer_addr, addr);
err = iwl_mvm_send_cmd_pdu(mvm,
WIDE_ID(DATA_PATH_GROUP,
WNM_80211V_TIMING_MEASUREMENT_CONFIG_CMD),
0, sizeof(cmd), &cmd); if (err) {
IWL_ERR(mvm, "Failed to send time sync cfg cmd: %d\n", err);
} else {
mvm->time_sync.active = protocols != 0;
ether_addr_copy(mvm->time_sync.peer_addr, addr);
IWL_DEBUG_INFO(mvm, "Time sync: set peer addr=%pM\n", addr);
}
if (!mvm->time_sync.active)
skb_queue_purge(&mvm->time_sync.frame_list);
return err;
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.