Home | History | Annotate | Line # | Download | only in dev
clock_subr.h revision 1.12
      1 /*	$NetBSD: clock_subr.h,v 1.12 2005/06/04 20:14:25 he Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 1996 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Gordon W. Ross
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  * 3. All advertising materials mentioning features or use of this software
     19  *    must display the following acknowledgement:
     20  *        This product includes software developed by the NetBSD
     21  *        Foundation, Inc. and its contributors.
     22  * 4. Neither the name of The NetBSD Foundation nor the names of its
     23  *    contributors may be used to endorse or promote products derived
     24  *    from this software without specific prior written permission.
     25  *
     26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     36  * POSSIBILITY OF SUCH DAMAGE.
     37  */
     38 
     39 #ifndef _DEV_CLOCK_SUBR_H_
     40 #define _DEV_CLOCK_SUBR_H_
     41 
     42 /*
     43  * "POSIX time" to/from "YY/MM/DD/hh/mm/ss"
     44  */
     45 struct clock_ymdhms {
     46 	u_short dt_year;
     47 	u_char dt_mon;
     48 	u_char dt_day;
     49 	u_char dt_wday;	/* Day of week */
     50 	u_char dt_hour;
     51 	u_char dt_min;
     52 	u_char dt_sec;
     53 };
     54 
     55 time_t	clock_ymdhms_to_secs(struct clock_ymdhms *);
     56 void	clock_secs_to_ymdhms(time_t, struct clock_ymdhms *);
     57 
     58 /*
     59  * BCD to decimal and decimal to BCD.
     60  */
     61 #define	FROMBCD(x)	(((x) >> 4) * 10 + ((x) & 0xf))
     62 #define	TOBCD(x)	(((x) / 10 * 16) + ((x) % 10))
     63 
     64 /* Some handy constants. */
     65 #define SECDAY		(24 * 60 * 60)
     66 #define SECYR		(SECDAY * 365)
     67 
     68 /* Traditional POSIX base year */
     69 #define	POSIX_BASE_YEAR	1970
     70 
     71 /*
     72  * Interface to time-of-day clock devices.
     73  *
     74  * todr_gettime: convert time-of-day clock into a `struct timeval'
     75  * todr_settime: set time-of-day clock from a `struct timeval'
     76  * todr_getcal: get current TOD clock calibration value in ppm
     77  * todr_setcal: set calibration value in ppm in TOD clock
     78  *
     79  * (this is probably not so useful:)
     80  * todr_setwen: provide a machine-dependent TOD clock write-enable callback
     81  *		function which takes one boolean argument:
     82  *			1 to enable writes; 0 to disable writes.
     83  */
     84 struct todr_chip_handle {
     85 	void	*cookie;	/* Device specific data */
     86 	void	*bus_cookie;	/* Bus specific data */
     87 
     88 	int	(*todr_gettime)(struct todr_chip_handle *,
     89 				volatile struct timeval *);
     90 	int	(*todr_settime)(struct todr_chip_handle *,
     91 				volatile struct timeval *);
     92 	int	(*todr_getcal)(struct todr_chip_handle *, int *);
     93 	int	(*todr_setcal)(struct todr_chip_handle *, int);
     94 	int	(*todr_setwen)(struct todr_chip_handle *, int);
     95 };
     96 typedef struct todr_chip_handle *todr_chip_handle_t;
     97 
     98 #define todr_gettime(ct, t)	((*(ct)->todr_gettime)(ct, t))
     99 #define todr_settime(ct, t)	((*(ct)->todr_settime)(ct, t))
    100 #define todr_getcal(ct, vp)	((*(ct)->todr_gettime)(ct, vp))
    101 #define todr_setcal(ct, v)	((*(ct)->todr_settime)(ct, v))
    102 #define todr_wenable(ct, v)	if ((ct)->todr_setwen) \
    103 					((*(ct)->todr_setwen)(ct, v))
    104 
    105 /*
    106  * Machine-dependent function that machine-independent RTC drivers can
    107  * use to register their todr_chip_handle_t with inittodr()/resettodr().
    108  */
    109 void	todr_attach(todr_chip_handle_t);
    110 
    111 #endif /* _DEV_CLOCK_SUBR_H_ */
    112