Annotation of researchv10no/sys/io/pg.c, revision 1.1.1.1

1.1       root        1: /*% cyntax -c -DKERNEL % && cc -c -DKERNEL %
                      2:  * I/O page driver.
                      3:  * Maps device registers into user address space on open.
                      4:  * Ioctl gets virtual address of registers.
                      5:  * Used for ITI framebuffer and miscellaneous hackage.
                      6:  */
                      7: #include "sys/param.h"
                      8: #include "sys/conf.h"
                      9: #include "sys/user.h"
                     10: #include "sys/ubaddr.h"
                     11: #include "sys/pte.h"
                     12: #include "sys/pgio.h"
                     13: extern struct ubaddr pgaddr[]; /* defined in conf */
                     14: extern int pgcnt;              /* defined in conf */
                     15: extern caddr_t pgcaddr[];      /* defined in conf.  0 when closed */
                     16: int pgopen(), pgclose(), pgioctl();
                     17: struct cdevsw pgcdev=cdinit(pgopen, pgclose, nodev, nodev, pgioctl);
                     18: static maptouser(vaddress)
                     19: caddr_t vaddress;
                     20: {
                     21:        Sysmap[((unsigned)vaddress-0x80000000)>>9].pg_prot=PG_UW>>27;
                     22: }
                     23: pgopen(dev, flag)
                     24: dev_t dev;
                     25: {
                     26:        register d=minor(dev);
                     27:        register caddr_t *p=&pgcaddr[d];
                     28:        if(d>=pgcnt
                     29:        || *p
                     30:        || (*p=ubaddr(&pgaddr[d]))==0
                     31:        || ubbadaddr(pgaddr[d].ubno, *p, sizeof(short)))
                     32:                u.u_error=ENXIO;
                     33:        else
                     34:                maptouser(*p);
                     35: }
                     36: pgclose(dev)
                     37: dev_t dev;
                     38: {
                     39:        register caddr_t *p=&pgcaddr[minor(dev)];
                     40:        *p=0;
                     41: }
                     42: pgioctl(dev, cmd, arg, flag)
                     43: dev_t dev;
                     44: caddr_t arg;
                     45: {
                     46:        switch(cmd){
                     47:        case PGADDR:
                     48:                copyout((caddr_t)&pgcaddr[minor(dev)], arg, sizeof(caddr_t));
                     49:                break;
                     50:        default:
                     51:                return (ENOTTY);
                     52:        }
                     53:        return (0);
                     54: }

unix.superglobalmegacorp.com

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