|
|
1.1 ! root 1: /* $Header: /newbits/286_KERNEL/USRSRC/coh/RCS/null.c,v 1.1 92/01/09 13:28:56 bin Exp Locker: bin $ */ ! 2: /* (lgl- ! 3: * The information contained herein is a trade secret of Mark Williams ! 4: * Company, and is confidential information. It is provided under a ! 5: * license agreement, and may be copied or disclosed only under the ! 6: * terms of that agreement. Any reproduction or disclosure of this ! 7: * material without the express written authorization of Mark Williams ! 8: * Company or persuant to the license agreement is unlawful. ! 9: * ! 10: * COHERENT Version 2.3.37 ! 11: * Copyright (c) 1982, 1983, 1984. ! 12: * An unpublished work by Mark Williams Company, Chicago. ! 13: * All rights reserved. ! 14: -lgl) */ ! 15: /* ! 16: * Null and memory driver. ! 17: * Minor device 0 is /dev/null ! 18: * Minor device 1 is physical memory ! 19: * Minor device 2 is kernel data ! 20: * ! 21: * $Log: null.c,v $ ! 22: * Revision 1.1 92/01/09 13:28:56 bin ! 23: * Initial revision ! 24: * ! 25: * Revision 1.1 88/03/24 16:14:04 src ! 26: * Initial revision ! 27: * ! 28: */ ! 29: #include <sys/coherent.h> ! 30: #include <sys/con.h> ! 31: #include <errno.h> ! 32: #include <sys/stat.h> ! 33: #include <sys/uproc.h> ! 34: ! 35: /* ! 36: * Functions for configuration. ! 37: */ ! 38: int nlread(); ! 39: int nlwrite(); ! 40: int nulldev(); ! 41: int nonedev(); ! 42: ! 43: /* ! 44: * Configuration table. ! 45: */ ! 46: CON nlcon ={ ! 47: DFCHR, /* Flags */ ! 48: 0, /* Major index */ ! 49: nulldev, /* Open */ ! 50: nulldev, /* Close */ ! 51: nulldev, /* Block */ ! 52: nlread, /* Read */ ! 53: nlwrite, /* Write */ ! 54: nonedev, /* Ioctl */ ! 55: nulldev, /* Powerfail */ ! 56: nulldev, /* Timeout */ ! 57: nulldev, /* Load */ ! 58: nulldev /* Unload */ ! 59: }; ! 60: ! 61: /* ! 62: * Null/memory read routine. ! 63: */ ! 64: nlread(dev, iop) ! 65: dev_t dev; ! 66: register IO *iop; ! 67: { ! 68: register unsigned n; ! 69: ! 70: switch (minor(dev)) { ! 71: case 0: ! 72: n = 0; ! 73: break; ! 74: ! 75: case 1: ! 76: n = pucopy((long)iop->io_seek, iop->io_base, iop->io_ioc); ! 77: break; ! 78: ! 79: case 2: ! 80: n = kucopy((vaddr_t)iop->io_seek, iop->io_base, iop->io_ioc); ! 81: break; ! 82: ! 83: default: ! 84: u.u_error = ENXIO; ! 85: return; ! 86: } ! 87: iop->io_ioc -= n; ! 88: if (u.u_error == EFAULT) ! 89: u.u_error = 0; ! 90: } ! 91: ! 92: /* ! 93: * Null/memory write routine. ! 94: */ ! 95: nlwrite(dev, iop) ! 96: dev_t dev; ! 97: register IO *iop; ! 98: { ! 99: register unsigned n; ! 100: ! 101: switch (minor(dev)) { ! 102: case 0: ! 103: n = iop->io_ioc; ! 104: break; ! 105: ! 106: case 1: ! 107: n = upcopy(iop->io_base, (long)iop->io_seek, iop->io_ioc); ! 108: break; ! 109: ! 110: case 2: ! 111: n = ukcopy(iop->io_base, (vaddr_t)iop->io_seek, iop->io_ioc); ! 112: break; ! 113: ! 114: default: ! 115: u.u_error = ENXIO; ! 116: return; ! 117: } ! 118: iop->io_ioc -= n; ! 119: if (u.u_error == EFAULT) ! 120: u.u_error = 0; ! 121: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.