03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
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 *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * or http://www.opensolaris.org/os/licensing.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
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 *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright (c) 2000 by Sun Microsystems, Inc.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifndef _TODSG_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define _TODSG_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern "C" {
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Serengeti TOD (time of day) driver
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Serengeti does not have hardware TOD chip inside chassis. SC has
03831d35f7499c87d51205817c93e9a8d42c4baestevel * a hardware TOD chip and maintains virtual TOD information for
03831d35f7499c87d51205817c93e9a8d42c4baestevel * each domain. Domain accesses virtual TOD through SRAM on chosen
03831d35f7499c87d51205817c93e9a8d42c4baestevel * IO board.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/time_impl.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * IOSRAM used by virtual TOD
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * +-------------------------------+
03831d35f7499c87d51205817c93e9a8d42c4baestevel * | tod_magic |
03831d35f7499c87d51205817c93e9a8d42c4baestevel * +-------------------------------+
03831d35f7499c87d51205817c93e9a8d42c4baestevel * | tod_version |
03831d35f7499c87d51205817c93e9a8d42c4baestevel * +-------------------------------+
03831d35f7499c87d51205817c93e9a8d42c4baestevel * | tod_get_value |
03831d35f7499c87d51205817c93e9a8d42c4baestevel * +-------------------------------+
03831d35f7499c87d51205817c93e9a8d42c4baestevel * | tod_domain_skew |
03831d35f7499c87d51205817c93e9a8d42c4baestevel * +-------------------------------+
03831d35f7499c87d51205817c93e9a8d42c4baestevel * | tod_reserved |
03831d35f7499c87d51205817c93e9a8d42c4baestevel * +-------------------------------+
03831d35f7499c87d51205817c93e9a8d42c4baestevel * | tod_i_am_alive |
03831d35f7499c87d51205817c93e9a8d42c4baestevel * +-------------------------------+
03831d35f7499c87d51205817c93e9a8d42c4baestevel * | tod_timeout_period |
03831d35f7499c87d51205817c93e9a8d42c4baestevel * +-------------------------------+
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * For every struct member in IOSRAM except tod_domain_skew and tod_reserved,
03831d35f7499c87d51205817c93e9a8d42c4baestevel * there are only one writer and one reader.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * tod_reserved (was tod_set_flag) is for backwards compatibility.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * reader read interval writer write interval
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ------------------------------------------------------------------------
03831d35f7499c87d51205817c93e9a8d42c4baestevel * tod_get_value Solaris 1 second SC twice per second
03831d35f7499c87d51205817c93e9a8d42c4baestevel * tod_domain_skew Solaris 1 second Solaris when needed
03831d35f7499c87d51205817c93e9a8d42c4baestevel * SC (see following NOTE)
03831d35f7499c87d51205817c93e9a8d42c4baestevel * tod_i_am_alive SC twice per second Solaris 1 second
03831d35f7499c87d51205817c93e9a8d42c4baestevel * tod_timeout_period SC twice per second Solaris when needed
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * NOTE: SC reads tod_domain_skew twice per second, notices if it
03831d35f7499c87d51205817c93e9a8d42c4baestevel * changes, and always keeps the last observed value preserved
03831d35f7499c87d51205817c93e9a8d42c4baestevel * in non-volatile storage.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct _tod_iosram {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t tod_magic; /* magic number, always TODSG_MAGIC */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t tod_version; /* version number */
03831d35f7499c87d51205817c93e9a8d42c4baestevel time_t tod_get_value; /* SC updates and Solaris reads */
03831d35f7499c87d51205817c93e9a8d42c4baestevel time_t tod_domain_skew; /* Solaris updates and read */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t tod_reserved; /* Was tod_set_flag. No use */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t tod_i_am_alive; /* I'm alive! a.k.a. heartbeat */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t tod_timeout_period; /* time period to decide hard hang */
03831d35f7499c87d51205817c93e9a8d42c4baestevel} tod_iosram_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define TODSG_MAGIC 0x54443100 /* 'T','D', '1', \0 */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define TODSG_VERSION_1 1
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern int todsg_use_sc;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* _TODSG_H */