view include/tod.h @ 5:a4d737f03f88

import TOD code
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Wed, 09 Mar 2011 18:39:54 -0500
parents
children d3c54eb7510b
line wrap: on
line source

#ifndef __TOD_H
#define __TOD_H

/*
 * The Time Of Day (TOD) hardware adds 1 to the 51st bit every microsecond
 * The timer hardware subtracts 1 from the 51st bit every microsecond
 */
#define TOD_MICROSEC		0x0000000000001000UL
#define TOD_SEC			0x0000000f4240000ULL
#define TOD_MIN			0x000003938700000ULL
#define TOD_HOUR		0x0000d693a400000ULL
#define TOD_DAY			0x00141dd76000000ULL
#define TOD_YEAR		0x1cae8c13e000000ULL /* not leap */
#define TOD_FOURYEARS		0x72ce4e26e000000ULL

/*
 * Stores (if possible) the current TOD value.
 *
 * Returns:
 *   0 on success, *tod contains current time & date
 *                 *tod == 0 is midnight, Jan 1, 1900
 *   1 on success, *tod contains uptime
 *                 *tod == 0 is the instant the system powered on
 *   2 or 3 on failure, value of *tod is unpredictable
 */
static inline int get_tod(u64 *tod)
{
	int cc;

	asm volatile(
		"stck	%0\n"
		"ipm	%1\n"
		"srl	%1,28\n"
	: /* output */
	  "=m" (*tod),
	  "=d" (cc)
	: /* input */
	: /* clobber */
	  "cc"
	);

	return cc;
}

#endif