Lines Matching +full:ns +full:- +full:config
1 // SPDX-License-Identifier: GPL-2.0
11 * iavf_ptp_disable_rx_tstamp - Disable timestamping in Rx rings
18 for (u32 i = 0; i < adapter->num_active_queues; i++) in iavf_ptp_disable_rx_tstamp()
19 adapter->rx_rings[i].flags &= ~IAVF_TXRX_FLAGS_HW_TSTAMP; in iavf_ptp_disable_rx_tstamp()
23 * iavf_ptp_enable_rx_tstamp - Enable timestamping in Rx rings
30 for (u32 i = 0; i < adapter->num_active_queues; i++) in iavf_ptp_enable_rx_tstamp()
31 adapter->rx_rings[i].flags |= IAVF_TXRX_FLAGS_HW_TSTAMP; in iavf_ptp_enable_rx_tstamp()
35 * iavf_ptp_set_timestamp_mode - Set device timestamping mode
37 * @config: pointer to kernel_hwtstamp_config
47 struct kernel_hwtstamp_config *config) in iavf_ptp_set_timestamp_mode() argument
50 if (config->flags) in iavf_ptp_set_timestamp_mode()
51 return -EINVAL; in iavf_ptp_set_timestamp_mode()
53 switch (config->tx_type) { in iavf_ptp_set_timestamp_mode()
57 return -EOPNOTSUPP; in iavf_ptp_set_timestamp_mode()
59 return -ERANGE; in iavf_ptp_set_timestamp_mode()
62 if (config->rx_filter == HWTSTAMP_FILTER_NONE) { in iavf_ptp_set_timestamp_mode()
65 } else if (config->rx_filter > HWTSTAMP_FILTER_NTP_ALL) { in iavf_ptp_set_timestamp_mode()
66 return -ERANGE; in iavf_ptp_set_timestamp_mode()
69 return -EOPNOTSUPP; in iavf_ptp_set_timestamp_mode()
72 config->rx_filter = HWTSTAMP_FILTER_ALL; in iavf_ptp_set_timestamp_mode()
79 * iavf_ptp_set_ts_config - Set timestamping configuration
81 * @config: pointer to kernel_hwtstamp_config structure
89 struct kernel_hwtstamp_config *config, in iavf_ptp_set_ts_config() argument
94 err = iavf_ptp_set_timestamp_mode(adapter, config); in iavf_ptp_set_ts_config()
99 adapter->ptp.hwtstamp_config = *config; in iavf_ptp_set_ts_config()
105 * iavf_ptp_cap_supported - Check if a PTP capability is supported
118 return (adapter->ptp.hw_caps.caps & cap) == cap; in iavf_ptp_cap_supported()
122 * iavf_allocate_ptp_cmd - Allocate a PTP command message structure
126 * Allocates a PTP command message and pre-fills it with the provided message
140 cmd->v_opcode = v_opcode; in iavf_allocate_ptp_cmd()
141 cmd->msglen = msglen; in iavf_allocate_ptp_cmd()
147 * iavf_queue_ptp_cmd - Queue PTP command for sending over virtchnl
157 mutex_lock(&adapter->ptp.aq_cmd_lock); in iavf_queue_ptp_cmd()
158 list_add_tail(&cmd->list, &adapter->ptp.aq_cmds); in iavf_queue_ptp_cmd()
159 mutex_unlock(&adapter->ptp.aq_cmd_lock); in iavf_queue_ptp_cmd()
161 adapter->aq_required |= IAVF_FLAG_AQ_SEND_PTP_CMD; in iavf_queue_ptp_cmd()
162 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_queue_ptp_cmd()
166 * iavf_send_phc_read - Send request to read PHC time
181 if (!adapter->ptp.clock) in iavf_send_phc_read()
182 return -EOPNOTSUPP; in iavf_send_phc_read()
187 return -ENOMEM; in iavf_send_phc_read()
195 * iavf_read_phc_indirect - Indirectly read the PHC time via virtchnl
219 adapter->ptp.phc_time_ready = false; in iavf_read_phc_indirect()
227 ret = wait_event_interruptible_timeout(adapter->ptp.phc_time_waitqueue, in iavf_read_phc_indirect()
228 adapter->ptp.phc_time_ready, in iavf_read_phc_indirect()
236 return -EBUSY; in iavf_read_phc_indirect()
238 *ts = ns_to_timespec64(adapter->ptp.cached_phc_time); in iavf_read_phc_indirect()
249 if (!adapter->ptp.clock) in iavf_ptp_gettimex64()
250 return -EOPNOTSUPP; in iavf_ptp_gettimex64()
256 * iavf_ptp_cache_phc_time - Cache PHC time for performing timestamp extension
267 if (!time_is_before_jiffies(adapter->ptp.cached_phc_updated + HZ)) in iavf_ptp_cache_phc_time()
277 * iavf_ptp_do_aux_work - Perform periodic work required for PTP support
293 * Returns: time in jiffies until the periodic task should be re-scheduled.
306 * iavf_ptp_register_clock - Register a new PTP for userspace
315 struct ptp_clock_info *ptp_info = &adapter->ptp.info; in iavf_ptp_register_clock()
316 struct device *dev = &adapter->pdev->dev; in iavf_ptp_register_clock()
319 snprintf(ptp_info->name, sizeof(ptp_info->name), "%s-%s-clk", in iavf_ptp_register_clock()
321 ptp_info->owner = THIS_MODULE; in iavf_ptp_register_clock()
322 ptp_info->gettimex64 = iavf_ptp_gettimex64; in iavf_ptp_register_clock()
323 ptp_info->do_aux_work = iavf_ptp_do_aux_work; in iavf_ptp_register_clock()
329 adapter->ptp.clock = clock; in iavf_ptp_register_clock()
331 dev_dbg(&adapter->pdev->dev, "PTP clock %s registered\n", in iavf_ptp_register_clock()
332 adapter->ptp.info.name); in iavf_ptp_register_clock()
338 * iavf_ptp_init - Initialize PTP support if capability was negotiated
349 pci_notice(adapter->pdev, in iavf_ptp_init()
356 pci_err(adapter->pdev, in iavf_ptp_init()
362 for (int i = 0; i < adapter->num_active_queues; i++) { in iavf_ptp_init()
363 struct iavf_ring *rx_ring = &adapter->rx_rings[i]; in iavf_ptp_init()
365 rx_ring->ptp = &adapter->ptp; in iavf_ptp_init()
368 ptp_schedule_worker(adapter->ptp.clock, 0); in iavf_ptp_init()
372 * iavf_ptp_release - Disable PTP support
381 if (!adapter->ptp.clock) in iavf_ptp_release()
384 pci_dbg(adapter->pdev, "removing PTP clock %s\n", in iavf_ptp_release()
385 adapter->ptp.info.name); in iavf_ptp_release()
386 ptp_clock_unregister(adapter->ptp.clock); in iavf_ptp_release()
387 adapter->ptp.clock = NULL; in iavf_ptp_release()
390 mutex_lock(&adapter->ptp.aq_cmd_lock); in iavf_ptp_release()
391 list_for_each_entry_safe(cmd, tmp, &adapter->ptp.aq_cmds, list) { in iavf_ptp_release()
392 list_del(&cmd->list); in iavf_ptp_release()
395 adapter->aq_required &= ~IAVF_FLAG_AQ_SEND_PTP_CMD; in iavf_ptp_release()
396 mutex_unlock(&adapter->ptp.aq_cmd_lock); in iavf_ptp_release()
398 adapter->ptp.hwtstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; in iavf_ptp_release()
403 * iavf_ptp_process_caps - Handle change in PTP capabilities
417 if (adapter->ptp.clock && !phc) in iavf_ptp_process_caps()
419 else if (!adapter->ptp.clock && phc) in iavf_ptp_process_caps()
424 adapter->ptp.hwtstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; in iavf_ptp_process_caps()
430 * iavf_ptp_extend_32b_timestamp - Convert a 32b nanoseconds timestamp to 64b
471 u32 delta = in_tstamp - low; in iavf_ptp_extend_32b_timestamp()
472 u64 ns; in iavf_ptp_extend_32b_timestamp() local
480 ns = cached_phc_time - (low - in_tstamp); in iavf_ptp_extend_32b_timestamp()
482 ns = cached_phc_time + delta; in iavf_ptp_extend_32b_timestamp()
484 return ns; in iavf_ptp_extend_32b_timestamp()