plan 9 kernel history: overview | file list | diff list

1997/0327/carrera/devrtc.c (diff list | history)

1996/0223/sys/src/9/carrera/devrtc.c:20,261997/0327/sys/src/9/carrera/devrtc.c:20,26 (short | long | prev | next)
1993/0916    
	int	mon; 
	int	year; 
}; 
QLock rtclock;	/* mutex on clock operations */ 
1997/0327    
static QLock rtclock;	/* mutex on clock operations */ 
1993/0916    
 
 
1995/0108    
enum 
1996/0223/sys/src/9/carrera/devrtc.c:39,891997/0327/sys/src/9/carrera/devrtc.c:39,71
1993/0916    
	Nvsize = 4096, 
}; 
 
#define	NRTC	2 
Dirtab rtcdir[]={ 
	"nvram",	{Qnvram, 0},	Nvsize,	0664, 
	"rtc",		{Qrtc, 0},	0,	0664, 
}; 
 
ulong rtc2sec(Rtc*); 
void sec2rtc(ulong, Rtc*); 
int *yrsize(int); 
1997/0327    
static ulong rtc2sec(Rtc*); 
static void sec2rtc(ulong, Rtc*); 
1993/0916    
 
void 
rtcreset(void) 
{ 
} 
                 
void 
rtcinit(void) 
{ 
} 
                 
Chan* 
1997/0327    
static Chan* 
1993/0916    
rtcattach(char *spec) 
{ 
	return devattach('r', spec); 
} 
 
Chan* 
rtcclone(Chan *c, Chan *nc) 
{ 
	return devclone(c, nc); 
} 
                 
int	  
1997/0327    
static int	  
1993/0916    
rtcwalk(Chan *c, char *name) 
{ 
	return devwalk(c, name, rtcdir, NRTC, devgen); 
1997/0327    
	return devwalk(c, name, rtcdir, nelem(rtcdir), devgen); 
1993/0916    
} 
 
void	  
1997/0327    
static void	  
1993/0916    
rtcstat(Chan *c, char *dp) 
{ 
	devstat(c, dp, rtcdir, NRTC, devgen); 
1997/0327    
	devstat(c, dp, rtcdir, nelem(rtcdir), devgen); 
1993/0916    
} 
 
Chan* 
1997/0327    
static Chan* 
1993/0916    
rtcopen(Chan *c, int omode) 
{ 
	omode = openmode(omode); 
1996/0223/sys/src/9/carrera/devrtc.c:96,1121997/0327/sys/src/9/carrera/devrtc.c:78,87
1993/0916    
		if(strcmp(up->user, eve)!=0) 
			error(Eperm); 
	} 
	return devopen(c, omode, rtcdir, NRTC, devgen); 
1997/0327    
	return devopen(c, omode, rtcdir, nelem(rtcdir), devgen); 
1993/0916    
} 
 
void	  
rtccreate(Chan *c, char *name, int omode, ulong perm) 
{ 
	USED(c, name, omode, perm); 
	error(Eperm); 
} 
                 
void	  
1997/0327    
static void	  
1993/0916    
rtcclose(Chan *c) 
{ 
	USED(c); 
1996/0223/sys/src/9/carrera/devrtc.c:151,1571997/0327/sys/src/9/carrera/devrtc.c:126,132
1993/0916    
	return rtc2sec(&rtc); 
} 
 
long	  
1997/0327    
static long	  
1993/0916    
rtcread(Chan *c, void *buf, long n, ulong offset) 
{ 
	ulong t, ot; 
1996/0223/sys/src/9/carrera/devrtc.c:158,1641997/0327/sys/src/9/carrera/devrtc.c:133,139
1993/0916    
	uchar *f, *to, *e; 
 
	if(c->qid.path & CHDIR) 
		return devdirread(c, buf, n, rtcdir, NRTC, devgen); 
1997/0327    
		return devdirread(c, buf, n, rtcdir, nelem(rtcdir), devgen); 
1993/0916    
 
	switch(c->qid.path){ 
	case Qrtc: 
1996/0223/sys/src/9/carrera/devrtc.c:185,1961997/0327/sys/src/9/carrera/devrtc.c:160,165
1993/0916    
	return 0; 
} 
 
1995/0108    
Block* 
rtcbread(Chan *c, long n, ulong offset) 
{ 
	return devbread(c, n, offset); 
} 
                 
1993/0916    
static void 
binary2bcd(int reg, uchar val) 
{ 
1996/0223/sys/src/9/carrera/devrtc.c:201,2071997/0327/sys/src/9/carrera/devrtc.c:170,176
1993/0916    
} 
 
 
long	  
1997/0327    
static long	  
1993/0916    
rtcwrite(Chan *c, void *buf, long n, ulong offset) 
{ 
	Rtc rtc; 
1996/0223/sys/src/9/carrera/devrtc.c:255,2801997/0327/sys/src/9/carrera/devrtc.c:224,247
1993/0916    
	return 0; 
1995/0108    
} 
 
long 
rtcbwrite(Chan *c, Block *bp, ulong offset) 
{ 
	return devbwrite(c, bp, offset); 
1993/0916    
} 
1997/0327    
Dev rtcdevtab = { 
	devreset, 
	devinit, 
	rtcattach, 
	devclone, 
	rtcwalk, 
	rtcstat, 
	rtcopen, 
	devcreate, 
	rtcclose, 
	rtcread, 
	devbread, 
	rtcwrite, 
	devbwrite, 
	devremove, 
	devwstat, 
}; 
1993/0916    
 
void	  
rtcremove(Chan *c) 
{ 
	USED(c); 
	error(Eperm); 
} 
                 
void	  
rtcwstat(Chan *c, char *dp) 
{ 
	USED(c, dp); 
	error(Eperm); 
} 
                 
#define SEC2MIN 60L 
#define SEC2HOUR (60L*SEC2MIN) 
#define SEC2DAY (24L*SEC2HOUR) 
1996/0223/sys/src/9/carrera/devrtc.c:294,3001997/0327/sys/src/9/carrera/devrtc.c:261,267
1993/0916    
/* 
 *  return the days/month for the given year 
 */ 
int * 
1997/0327    
static int* 
1993/0916    
yrsize(int yr) 
{ 
	if((yr % 4) == 0) 
1996/0223/sys/src/9/carrera/devrtc.c:306,3121997/0327/sys/src/9/carrera/devrtc.c:273,279
1993/0916    
/* 
 *  compute seconds since Jan 1 1970 
 */ 
ulong 
1997/0327    
static ulong 
1993/0916    
rtc2sec(Rtc *rtc) 
{ 
	ulong secs; 
1996/0223/sys/src/9/carrera/devrtc.c:341,3471997/0327/sys/src/9/carrera/devrtc.c:308,314
1993/0916    
/* 
 *  compute rtc from seconds since Jan 1 1970 
 */ 
void 
1997/0327    
static void 
1993/0916    
sec2rtc(ulong secs, Rtc *rtc) 
{ 
	int d; 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)