xref: /minix3/sys/arch/i386/stand/lib/getsecs.c (revision 58a2b0008e28f606a7f7f5faaeaba4faac57a1ea)
1*58a2b000SEvgeniy Ivanov /*	$NetBSD: getsecs.c,v 1.4 2009/01/12 11:32:44 tsutsui Exp $	*/
2*58a2b000SEvgeniy Ivanov 
3*58a2b000SEvgeniy Ivanov /* extracted from netbsd:sys/arch/i386/netboot/misc.c */
4*58a2b000SEvgeniy Ivanov 
5*58a2b000SEvgeniy Ivanov #include <sys/types.h>
6*58a2b000SEvgeniy Ivanov 
7*58a2b000SEvgeniy Ivanov #include <lib/libsa/stand.h>
8*58a2b000SEvgeniy Ivanov #include <lib/libsa/net.h>
9*58a2b000SEvgeniy Ivanov 
10*58a2b000SEvgeniy Ivanov #include "libi386.h"
11*58a2b000SEvgeniy Ivanov 
12*58a2b000SEvgeniy Ivanov static inline u_long bcd2dec(u_long);
13*58a2b000SEvgeniy Ivanov 
14*58a2b000SEvgeniy Ivanov static inline u_long
bcd2dec(u_long arg)15*58a2b000SEvgeniy Ivanov bcd2dec(u_long arg)
16*58a2b000SEvgeniy Ivanov {
17*58a2b000SEvgeniy Ivanov 	return (arg >> 4) * 10 + (arg & 0x0f);
18*58a2b000SEvgeniy Ivanov }
19*58a2b000SEvgeniy Ivanov 
20*58a2b000SEvgeniy Ivanov satime_t
getsecs(void)21*58a2b000SEvgeniy Ivanov getsecs(void) {
22*58a2b000SEvgeniy Ivanov 	/*
23*58a2b000SEvgeniy Ivanov 	 * Return the current time in seconds
24*58a2b000SEvgeniy Ivanov 	 */
25*58a2b000SEvgeniy Ivanov 
26*58a2b000SEvgeniy Ivanov 	u_long t;
27*58a2b000SEvgeniy Ivanov 	satime_t sec;
28*58a2b000SEvgeniy Ivanov 
29*58a2b000SEvgeniy Ivanov 	if (biosgetrtc(&t))
30*58a2b000SEvgeniy Ivanov 		panic("RTC invalid");
31*58a2b000SEvgeniy Ivanov 
32*58a2b000SEvgeniy Ivanov 	sec = bcd2dec(t & 0xff);
33*58a2b000SEvgeniy Ivanov 	sec *= 60;
34*58a2b000SEvgeniy Ivanov 	t >>= 8;
35*58a2b000SEvgeniy Ivanov 	sec += bcd2dec(t & 0xff);
36*58a2b000SEvgeniy Ivanov 	sec *= 60;
37*58a2b000SEvgeniy Ivanov 	t >>= 8;
38*58a2b000SEvgeniy Ivanov 	sec += bcd2dec(t & 0xff);
39*58a2b000SEvgeniy Ivanov 
40*58a2b000SEvgeniy Ivanov 	return sec;
41*58a2b000SEvgeniy Ivanov }
42