diff options
| author | Konstantin Kirik (snegovick) <snegovick@uprojects.org> | 2025-12-28 12:27:31 +0300 |
|---|---|---|
| committer | Konstantin Kirik (snegovick) <snegovick@uprojects.org> | 2025-12-28 12:27:31 +0300 |
| commit | 78ee7d5717807e6ac779293d0d3c78341de6130a (patch) | |
| tree | a43e3b0f61318ac45e6d907c7cc5bad2c6d7f497 /os/pxa/devrtc.c | |
| parent | bdaf46cf45bbb59261da245d548a179d95a42768 (diff) | |
Move existing boards into subdits split per arch
Diffstat (limited to 'os/pxa/devrtc.c')
| -rw-r--r-- | os/pxa/devrtc.c | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/os/pxa/devrtc.c b/os/pxa/devrtc.c deleted file mode 100644 index ace6cc82..00000000 --- a/os/pxa/devrtc.c +++ /dev/null @@ -1,169 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - -#include "io.h" - -/* - * SA11x0 real time clock - * TO DO: alarms, wakeup, allow trim setting(?) - */ - -enum{ - Qdir, - Qrtc, - Qrtctrim, -}; - -static Dirtab rtcdir[]={ - ".", {Qdir,0,QTDIR}, 0, 0555, - "rtc", {Qrtc}, NUMSIZE, 0664, - "rtctrim", {Qrtctrim}, 0, 0664, -}; -#define NRTC (sizeof(rtcdir)/sizeof(rtcdir[0])) - -extern ulong boottime; - -enum { - RTSR_al= 1<<0, /* RTC alarm detected */ - RTSR_hz= 1<<1, /* 1-Hz rising-edge detected */ - RTSR_ale= 1<<2, /* RTC alarm interrupt enabled */ - RTSR_hze= 1<<3, /* 1-Hz interrupt enable */ -}; - -static void -rtcreset(void) -{ - RTCreg *r; - - r = RTCREG; - if((r->rttr & 0xFFFF) == 0){ /* reset state */ - r->rttr = 32768-1; - r->rcnr = boottime; /* typically zero */ - } - r->rtar = ~0; - r->rtsr = RTSR_al | RTSR_hz; -} - -static Chan* -rtcattach(char *spec) -{ - return devattach('r', spec); -} - -static Walkqid* -rtcwalk(Chan *c, Chan *nc, char **name, int nname) -{ - return devwalk(c, nc, name, nname, rtcdir, NRTC, devgen); -} - -static int -rtcstat(Chan *c, uchar *dp, int n) -{ - return devstat(c, dp, n, rtcdir, NRTC, devgen); -} - -static Chan* -rtcopen(Chan *c, int omode) -{ - return devopen(c, omode, rtcdir, NRTC, devgen); -} - -static void -rtcclose(Chan*) -{ -} - -static long -rtcread(Chan *c, void *buf, long n, vlong off) -{ - if(c->qid.type & QTDIR) - return devdirread(c, buf, n, rtcdir, NRTC, devgen); - - switch((ulong)c->qid.path){ - case Qrtc: - return readnum(off, buf, n, RTCREG->rcnr, NUMSIZE); - case Qrtctrim: - return readnum(off, buf, n, RTCREG->rttr, NUMSIZE); - } - error(Egreg); - return 0; /* not reached */ -} - -static long -rtcwrite(Chan *c, void *buf, long n, vlong off) -{ - ulong offset = off; - ulong secs; - char *cp, sbuf[32]; - - switch((ulong)c->qid.path){ - case Qrtc: - /* - * write the time - */ - if(offset != 0 || n >= sizeof(sbuf)-1) - error(Ebadarg); - memmove(sbuf, buf, n); - sbuf[n] = '\0'; - cp = sbuf; - while(*cp){ - if(*cp>='0' && *cp<='9') - break; - cp++; - } - secs = strtoul(cp, 0, 0); - RTCREG->rcnr = secs; - return n; - - case Qrtctrim: - if(offset != 0 || n >= sizeof(sbuf)-1) - error(Ebadarg); - memmove(sbuf, buf, n); - sbuf[n] = '\0'; - RTCREG->rttr = strtoul(sbuf, 0, 0); - return n; - } - error(Egreg); - return 0; /* not reached */ -} - -static void -rtcpower(int on) -{ - if(on) - boottime = RTCREG->rcnr - TK2SEC(MACHP(0)->ticks); - else - RTCREG->rcnr = seconds(); -} - -long -rtctime(void) -{ - return RTCREG->rcnr; -} - -Dev rtcdevtab = { - 'r', - "rtc", - - rtcreset, - devinit, - devshutdown, - rtcattach, - rtcwalk, - rtcstat, - rtcopen, - devcreate, - rtcclose, - rtcread, - devbread, - rtcwrite, - devbwrite, - devremove, - devwstat, - rtcpower, -}; |
