| plan 9 kernel history: overview | file list | diff list |
1997/0208/pc/devrtc.c (diff list | history)
| 1996/0223/sys/src/9/pc/devrtc.c:118,141 – 1997/0208/sys/src/9/pc/devrtc.c:118,148 (short | long | prev | next) | ||
| 1991/0911 | #define GETBCD(o) ((bcdclock[o]&0xf) + 10*(bcdclock[o]>>4)) | |
| 1997/0208 | static long _rtctime(void) | |
| 1991/0911 | { uchar bcdclock[Nbcd]; Rtc rtc; | |
| 1992/1208 | int i; | |
| 1991/0911 | ||
| 1997/0208 | /* don't do the read until the clock is no longer busy */ | |
| 1992/1208 | for(i = 0; i < 10000; i++){ outb(Paddr, Status); | |
| 1997/0208 | if(inb(Pdata) & 0x80) continue; /* read clock values */ outb(Paddr, Seconds); bcdclock[0] = inb(Pdata); outb(Paddr, Minutes); bcdclock[1] = inb(Pdata); outb(Paddr, Hours); bcdclock[2] = inb(Pdata); outb(Paddr, Mday); bcdclock[3] = inb(Pdata); outb(Paddr, Month); bcdclock[4] = inb(Pdata); outb(Paddr, Year); bcdclock[5] = inb(Pdata); outb(Paddr, Status); if((inb(Pdata) & 0x80) == 0) | |
| 1992/1208 | break; } | |
| 1991/0911 |
| |
| 1996/0223/sys/src/9/pc/devrtc.c:157,166 – 1997/0208/sys/src/9/pc/devrtc.c:164,198 | ||
| 1991/0911 | return rtc2sec(&rtc); } | |
| 1997/0208 | Lock rtlock; long rtctime(void) { int i; long t, ot; ilock(&rtlock); /* loop till we get two reads in a row the same */ t = _rtctime(); for(i = 0; i < 100; i++){ ot = t; t = _rtctime(); if(ot == t) break; } if(i == 100) print("we are boofheads\n"); iunlock(&rtlock); return t; } | |
| 1991/0911 | long rtcread(Chan *c, void *buf, long n, ulong offset) { | |
| 1997/0208 | ulong t; | |
| 1993/0319 | char *a; | |
| 1991/0911 | if(c->qid.path & CHDIR) | |
| 1996/0223/sys/src/9/pc/devrtc.c:170,179 – 1997/0208/sys/src/9/pc/devrtc.c:202,207 | ||
| 1993/0319 | case Qrtc: qlock(&rtclock); t = rtctime(); | |