03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Common Development and Distribution License, Version 1.0 only
03831d35f7499c87d51205817c93e9a8d42c4baestevel * (the "License"). You may not use this file except in compliance
03831d35f7499c87d51205817c93e9a8d42c4baestevel * with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * When distributing Covered Code, include this CDDL HEADER in each
03831d35f7499c87d51205817c93e9a8d42c4baestevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If applicable, add the following below this CDDL HEADER, with the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * fields enclosed by brackets "[]" replaced with your own identifying
03831d35f7499c87d51205817c93e9a8d42c4baestevel * information: Portions Copyright [yyyy] [name of copyright owner]
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel * external data
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The following macros for dealing with raw output from the Mostek 48T02
03831d35f7499c87d51205817c93e9a8d42c4baestevel * were borrowed from the kernel. Openboot passes the raw Mostek data
03831d35f7499c87d51205817c93e9a8d42c4baestevel * thru the device tree, and there are no library routines to deal with
03831d35f7499c87d51205817c93e9a8d42c4baestevel * this data.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Tables to convert a single byte from binary-coded decimal (BCD).
03831d35f7499c87d51205817c93e9a8d42c4baestevel 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 0, 0, 0, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0, 0, 0, 0, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, 0, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 0, 0, 0, 0, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 0, 0,
03831d35f7499c87d51205817c93e9a8d42c4baestevel * This function takes the raw Mostek data from the device tree translates
03831d35f7499c87d51205817c93e9a8d42c4baestevel * it into UNIXC time (secs since Jan 1, 1970) and returns a string from
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ctime(3c).
03831d35f7499c87d51205817c93e9a8d42c4baestevel month = BCD_TO_BYTE(mostek[5] & 0x1f) + ((year & 3) << 4);
03831d35f7499c87d51205817c93e9a8d42c4baestevel utc = (year - 70); /* next 3 lines: utc = 365y + y/4 */
03831d35f7499c87d51205817c93e9a8d42c4baestevel utc = (utc << 3) + (utc << 4) + hour; /* 24 * day + hour */
03831d35f7499c87d51205817c93e9a8d42c4baestevel utc = (utc << 6) - (utc << 2) + min; /* 60 * hour + min */
03831d35f7499c87d51205817c93e9a8d42c4baestevel utc = (utc << 6) - (utc << 2) + sec; /* 60 * min + sec */
03831d35f7499c87d51205817c93e9a8d42c4baestevel "Most recent AC Power Failure:\n"));
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) log_printf("=============================\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*VARARGS1*/
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* we only call to syslog when we get the entire line. */