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)15334f5e8fSchristosbcd2dec(u_long arg) 16816bb961Sperry { 17334f5e8fSchristos return (arg >> 4) * 10 + (arg & 0x0f); 18816bb961Sperry } 19816bb961Sperry 20*69cf32a7Stsutsui satime_t getsecs(void)21334f5e8fSchristosgetsecs(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