Annotation of lucent/sys/src/9/pc/f002533, revision 1.1.1.1

1.1       root        1: #include       "u.h"
                      2: #include       "../port/lib.h"
                      3: #include       "mem.h"
                      4: #include       "dat.h"
                      5: #include       "fns.h"
                      6: #include       "io.h"
                      7: 
                      8: enum
                      9: {
                     10:        Pindex= 0x198,
                     11:        Pdata=  0x199,
                     12: };
                     13: 
                     14: static Lock pmulock;
                     15: static int
                     16: pmuwrbit(int index, int bit, int pos)
                     17: {
                     18:        uchar x;
                     19: 
                     20:        lock(&pmulock);
                     21:        outb(Pindex, index);
                     22:        x = inb(Pdata);
                     23:        if(bit)
                     24:                x |= 1<<pos;
                     25:        else
                     26:                x &= ~(1<<pos);
                     27:        outb(Pindex, index);
                     28:        outb(Pdata, x);
                     29:        unlock(&pmulock);
                     30:        return 0;
                     31: }
                     32: 
                     33: static void
                     34: pmuwr(int index, int val)
                     35: {
                     36:        lock(&pmulock);
                     37:        outb(Pindex, index);
                     38:        outb(Pdata, val);
                     39:        unlock(&pmulock);
                     40: }
                     41: 
                     42: static uchar
                     43: pmurd(int index)
                     44: {
                     45:        uchar x;
                     46: 
                     47:        lock(&pmulock);
                     48:        outb(Pindex, index);
                     49:        x = inb(Pdata);
                     50:        unlock(&pmulock);
                     51:        return x;
                     52: }
                     53: 
                     54: static int
                     55: ncr3170serialpower(int onoff)
                     56: {
                     57:        return pmuwrbit(0x85, 1^onoff, 4);
                     58: }
                     59: 
                     60: static int
                     61: ncr3170snooze(ulong lastop, int wakeup)
                     62: {
                     63:        ulong diff;
                     64: 
                     65:        /* any system call or non-clock interrupt turns the clock back on */
                     66:        if(wakeup){
                     67:                /* set time from real time clock */
                     68:                diff = rtctime() - seconds();
                     69:                m->ticks += SEC2TK(diff);
                     70: 
                     71:                /* enable clock interrupts */
                     72:                int0mask &= ~(1<<(Clockvec&7));
                     73:                outb(Int0aux, int0mask);
                     74:                return 0;
                     75:        }
                     76: 
                     77:        if(TK2SEC(m->ticks - lastop) < 8)
                     78:                return 0;
                     79: 
                     80:        if((pmurd(0x80) & (1<<4)) == 0)
                     81:                return 0;
                     82: 
                     83:        /* mask out clock interrupts to allow the stuff above */
                     84:        int0mask |= 1<<(Clockvec&7);
                     85:        outb(Int0aux, int0mask);
                     86: 
                     87:        /* speed reduction after another 2 seconds */
                     88:        /* screen shutdown + 0MHz CPU after another minute */
                     89:        pmuwr(0x83, 0xf);
                     90:        pmuwr(0x84, 0x1);
                     91:        pmuwrbit(0x82, 1, 0);
                     92:        pmuwrbit(0x82, 1, 1);
                     93: 
                     94:        return 1;
                     95: }
                     96: 
                     97: PCArch ncr3170 =
                     98: {
                     99:        "NCRD.0",
                    100:        i8042reset,
                    101:        0,
                    102:        0,
                    103:        0,
                    104:        ncr3170serialpower,
                    105:        0,
                    106:        0,
                    107:        ncr3170snooze,
                    108: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.