Annotation of researchv10no/sys/io/pg.c, revision 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.