//! Wall-clock time: the CMOS real-time clock read once at boot and anchored to the //! monotonic clock, so a query is a cheap arithmetic offset — no per-call CMOS poll, //! no lock, no SMP hazard on the shared 0x70/0x71 ports. //! //! Wall-clock *seconds* are mechanism the kernel owns, exactly like the monotonic //! clock ([[time-architecture]]): reading the hardware's value is not policy. //! Calendars, timezones, and formatting layer on top in user space. It exists so the //! filesystem can stamp real timestamps (mtime) — see docs/zig-self-hosting.md. const architecture = @import("architecture"); var boot_unix_seconds: u64 = 0; var boot_nanos: u64 = 0; /// Read the RTC once and anchor it to the monotonic clock. Call at boot, after the /// monotonic clock is calibrated. pub fn init() void { boot_unix_seconds = architecture.readRtcUnixSeconds(); boot_nanos = architecture.nanos(); } /// The current wall-clock time in Unix epoch seconds (UTC): the boot RTC value plus /// the monotonic time elapsed since. Zero until `init` runs. pub fn nowSeconds() u64 { return boot_unix_seconds + (architecture.nanos() -% boot_nanos) / 1_000_000_000; } /// The wall-clock time of boot itself (the RTC anchor) — what klog_status hands /// the logger service to name a per-boot log directory. Zero until `init` runs. pub fn bootSeconds() u64 { return boot_unix_seconds; }