xref: /netbsd-src/sys/arch/i386/stand/lib/getsecs.c (revision 69cf32a7821304a5f797ce176fd66771e252f0fe)
1*69cf32a7Stsutsui /*	$NetBSD: getsecs.c,v 1.4 2009/01/12 11:32:44 tsutsui Exp $	*/
2816bb961Sperry 
3816bb961Sperry /* extracted from netbsd:sys/arch/i386/netboot/misc.c */
4816bb961Sperry 
5816bb961Sperry #include <sys/types.h>
6816bb961Sperry 
7816bb961Sperry #include <lib/libsa/stand.h>
8*69cf32a7Stsutsui #include <lib/libsa/net.h>
9816bb961Sperry 
10816bb961Sperry #include "libi386.h"
11816bb961Sperry 
12334f5e8fSchristos static inline u_long bcd2dec(u_long);
132d1e6a1fSdrochner 
14816bb961Sperry static inline u_long
bcd2dec(u_long arg)15334f5e8fSchristos bcd2dec(u_long arg)
16816bb961Sperry {
17334f5e8fSchristos 	return (arg >> 4) * 10 + (arg & 0x0f);
18816bb961Sperry }
19816bb961Sperry 
20*69cf32a7Stsutsui satime_t
getsecs(void)21334f5e8fSchristos getsecs(void) {
22816bb961Sperry 	/*
23816bb961Sperry 	 * Return the current time in seconds
24816bb961Sperry 	 */
25816bb961Sperry 
26816bb961Sperry 	u_long t;
27*69cf32a7Stsutsui 	satime_t sec;
28816bb961Sperry 
29816bb961Sperry 	if (biosgetrtc(&t))
30816bb961Sperry 		panic("RTC invalid");
31816bb961Sperry 
32816bb961Sperry 	sec = bcd2dec(t & 0xff);
33816bb961Sperry 	sec *= 60;
34816bb961Sperry 	t >>= 8;
35816bb961Sperry 	sec += bcd2dec(t & 0xff);
36816bb961Sperry 	sec *= 60;
37816bb961Sperry 	t >>= 8;
38816bb961Sperry 	sec += bcd2dec(t & 0xff);
39816bb961Sperry 
40334f5e8fSchristos 	return sec;
41816bb961Sperry }
42