]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Add RTC clock conversions for BCD values, with non-panic validation.
authorian <ian@FreeBSD.org>
Sun, 14 Jan 2018 17:01:37 +0000 (17:01 +0000)
committerian <ian@FreeBSD.org>
Sun, 14 Jan 2018 17:01:37 +0000 (17:01 +0000)
commit9c7cac637a203f2f966a501fda4ef0e84bff09c0
tree97eeaafc7eeb4582e945e4aa0a04de3368ee903f
parent0c2094e59979dec5f8165c09705bb85b9e141e98
Add RTC clock conversions for BCD values, with non-panic validation.

RTC clock hardware frequently uses BCD numbers.  Currently the low-level
bcd2bin() and bin2bcd() functions will KASSERT if given out-of-range BCD
values.  Every RTC driver must implement its own code for validating the
unreliable data coming from the hardware to avoid a potential kernel panic.

This change introduces two new functions, clock_bcd_to_ts() and
clock_ts_to_bcd().  The former validates its inputs and returns EINVAL if any
values are out of range. The latter guarantees the returned data will be
valid BCD in a known format (4-digit years, etc).

A new bcd_clocktime structure is used with the new functions.  It is similar
to the original clocktime structure, but defines the fields holding BCD
values as uint8_t (uint16_t for year), and adds a PM flag for handling hours
using AM/PM mode.

PR: 224813
Differential Revision: https://reviews.freebsd.org/D13730 (no reviewers)
sys/kern/subr_clock.c
sys/sys/clock.h