| plan 9 kernel history: overview | file list | diff list |
1999/0122/mpc/devrtc.c (diff list | history)
| 1999/0122/sys/src/9/mpc/devrtc.c:7,22 – 1999/0608/sys/src/9/mpc/devrtc.c:7,15 (short | long | prev | next) | ||
| 1999/0121 | #include "io.h" | |
| 1999/0608 | Qnvram, | |
| 1999/0121 | /* sccr */ RTDIV= 1<<24, | |
| 1999/0122/sys/src/9/mpc/devrtc.c:25,38 – 1999/0608/sys/src/9/mpc/devrtc.c:18,35 | ||
| 1999/0121 | /* rtcsc */ RTE= 1<<0, R38K= 1<<4, | |
| 1999/0608 | Nvoff= 4*1024, /* where usable nvram lives */ Nvsize= 4*1024, | |
| 1999/0121 | }; static QLock rtclock; /* mutex on clock operations */ | |
| 1999/0608 | static Lock nvrtlock; | |
| 1999/0121 | ||
| 1999/0608 | ||
| 1999/0121 | static Dirtab rtcdir[]={ "rtc", {Qrtc, 0}, 12, 0666, | |
| 1999/0608 | "nvram", {Qnvram, 0}, Nvsize, 0664, | |
| 1999/0121 | }; #define NRTC (sizeof(rtcdir)/sizeof(rtcdir[0])) | |
| 1999/0122/sys/src/9/mpc/devrtc.c:79,87 – 1999/0608/sys/src/9/mpc/devrtc.c:76,83 | ||
| 1999/0121 | if(strcmp(up->user, eve)!=0 && omode!=OREAD) error(Eperm); break; | |
| 1999/0608 | case Qnvram: if(strcmp(up->user, eve)!=0) | |
| 1999/0121 | error(Eperm); break; } | |
| 1999/0122/sys/src/9/mpc/devrtc.c:97,103 – 1999/0608/sys/src/9/mpc/devrtc.c:93,98 | ||
| 1999/0121 | rtcread(Chan *c, void *buf, long n, vlong offset) { ulong t; | |
| 1999/0122 |
| |
| 1999/0121 | if(c->qid.path & CHDIR) return devdirread(c, buf, n, rtcdir, NRTC, devgen); | |
| 1999/0122/sys/src/9/mpc/devrtc.c:107,114 – 1999/0608/sys/src/9/mpc/devrtc.c:102,117 | ||
| 1999/0121 | t = m->iomem->rtc; n = readnum(offset, buf, n, t, 12); return n; | |
| 1999/0122 |
| |
| 1999/0608 | case Qnvram: if(offset >= Nvsize) return 0; t = offset; if(t + n > Nvsize) n = Nvsize - t; ilock(&nvrtlock); memmove(buf, (uchar*)(NVRAMMEM + Nvoff + t), n); iunlock(&nvrtlock); return n; | |
| 1999/0121 | } error(Egreg); return 0; /* not reached */ | |
| 1999/0122/sys/src/9/mpc/devrtc.c:120,125 – 1999/0608/sys/src/9/mpc/devrtc.c:123,129 | ||
| 1999/0121 | ulong secs; char *cp, *ep; IMM *io; | |
| 1999/0608 | ulong t; | |
| 1999/0121 | switch(c->qid.path){ case Qrtc: | |
| 1999/0122/sys/src/9/mpc/devrtc.c:145,152 – 1999/0608/sys/src/9/mpc/devrtc.c:149,164 | ||
| 1999/0121 | io->rtck = ~KEEP_ALIVE_KEY; iopunlock(); return n; | |
| 1999/0608 | case Qnvram: if(offset >= Nvsize) return 0; t = offset; if(t + n > Nvsize) n = Nvsize - t; ilock(&nvrtlock); memmove((uchar*)(NVRAMMEM + Nvoff + offset), buf, n); iunlock(&nvrtlock); return n; | |
| 1999/0121 | } error(Egreg); return 0; /* not reached */ | |