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 Ivanovbcd2dec(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 Ivanovgetsecs(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