- @abstract Tries to reduce latency for an interrupt which will be received near a specified time.
- @discussion Warms up a CPU in advance of an interrupt so that the interrupt may be serviced with predictable latency.
- The warm-up is not periodic; callers should call warmCPU once in advance of each interrupt. It is recommended that
- requests be issues in serial (i.e. each after the target for the previous call has elapsed), as there is a systemwide
- cap on the number of outstanding requests. This routine may be disruptive to the system if used with very small intervals
- between requests; it should be used only in cases where interrupt latency is absolutely critical, and tens or hundreds of
- milliseconds between targets is the expected time scale. NOTE: it is not safe to call this method with interrupts disabled.
- @param abstime Time at which interrupt is expected. */
- IOReturn warmCPU(uint64_t abstime);
+ * @abstract Tries to reduce latency for an interrupt which will be received near a specified time.
+ * @discussion Warms up a CPU in advance of an interrupt so that the interrupt may be serviced with predictable latency.
+ * The warm-up is not periodic; callers should call warmCPU once in advance of each interrupt. It is recommended that
+ * requests be issues in serial (i.e. each after the target for the previous call has elapsed), as there is a systemwide
+ * cap on the number of outstanding requests. This routine may be disruptive to the system if used with very small intervals
+ * between requests; it should be used only in cases where interrupt latency is absolutely critical, and tens or hundreds of
+ * milliseconds between targets is the expected time scale. NOTE: it is not safe to call this method with interrupts disabled.
+ * @param abstime Time at which interrupt is expected. */
+ IOReturn warmCPU(uint64_t abstime);
+
+/*! @function enablePrimaryInterruptTimestamp
+ * @abstract Enables collection of mach_absolute_time at primary interrupt.
+ * @discussion Enables collection of mach_absolute_time at primary interrupt.
+ * @param enable True to enable timestamp. */
+
+ void enablePrimaryInterruptTimestamp(bool enable);
+
+/*! @function getPimaryInterruptTimestamp
+ * @abstract Returns mach_absolute_time timestamp of primary interrupt.
+ * @discussion Returns mach_absolute_time timestamp of primary interrupt.
+ * @result Value of the timestamp. Zero if never interrupted, or -1ULL if timestamp collection has not been enabled. */
+
+ uint64_t getPimaryInterruptTimestamp();