# 2.11BSD#431 - /usr/src/sys/pdpuba/dn.c

##### Functions

    dnattach          X
    dnclose           X
    dnint             X
    dnopen            X
    dnwrite           X

##### Variables

    dn_addr           X

##### Macros

    DNPRI             X

       1: /*
       2:  *	SCCS id	@(#)dn.c	2.3 (2.11BSD GTE) 1997/1/18
       3:  */
       4:
       5: /*
       6:  * DN-11 ACU interface
       7:  */
       8:
       9: #include "dn.h"
      10:
      11: #if NDN > 0
      12: #include "param.h"
      13: #include "user.h"
      14: #include "uio.h"
      15: #include "kernel.h"
      16: #include "dnreg.h"
      17:
      18: #define DNPRI   (PZERO+5)
      19:
      20: struct  dndevice *dn_addr[NDN];
      21:
      22: dnattach(addr, unit)
      23: struct dndevice *addr;
      24: {
      25:     if ((unsigned)unit >= NDN)
      26:         return 0;
      27:     dn_addr[unit] = addr;
      28:     return 1;
      29: }
      30:
      31: /*ARGSUSED*/
      32: dnopen(dev, flag)
      33: register dev_t  dev;
      34: {
      35:     register struct dndevice *dp;
      36:
      37:     dev = minor(dev);
      38:     if (dev >= NDN << 2 || (dp = dn_addr[dev >> 2]) == NULL
      39:         || (dp->dnisr[dev & 03] & (DN_PWI | DN_FDLO | DN_FCRQ)))
      40:         return(ENXIO);
      41:     else {
      42:         dp->dnisr[0] |= DN_MINAB;
      43:         dp->dnisr[dev & 03] = DN_INTENB | DN_MINAB | DN_FCRQ;
      44:     }
      45:     return(0);
      46: }
      47:
      48: dnclose(dev, flag)
      49: register dev_t  dev;
      50: {
      51:     dev = minor(dev);
      52:     dn_addr[dev >> 2]->dnisr[dev & 03] = DN_MINAB;
      53:     return(0);
      54: }
      55:
      56: dnwrite(dev, uio, flag)
      57: register dev_t  dev;
      58: register struct uio *uio;
      59:     int flag;
      60: {
      61:     register int c, *dp;
      62:     int s;
      63:
      64:     dev = minor(dev);
      65:     dp = (int *)&(dn_addr[dev >> 2]->dnisr[dev & 03]);
      66:     while ((*dp & (DN_PWI | DN_ACR | DN_DSS)) == 0) {
      67:         s = spl4();
      68:         if ((*dp & DN_FPND) == 0 || !uio->uio_resid || (c = uwritec(uio)) < 0)
      69:             sleep((caddr_t) dp, DNPRI);
      70:         else if (c == '-') {
      71:             sleep((caddr_t) &lbolt, DNPRI);
      72:             sleep((caddr_t) &lbolt, DNPRI);
      73:         } else
      74:             {
      75:             *dp = (c << 8) | DN_INTENB|DN_MINAB|DN_FDPR|DN_FCRQ;
      76:             sleep((caddr_t) dp, DNPRI);
      77:         }
      78:         splx(s);
      79:     }
      80:     if (*dp & (DN_PWI | DN_ACR))
      81:         return(EIO);
      82:     return(0);
      83: }
      84:
      85: dnint(dn11)
      86: {
      87:     register int *dp, *ep;
      88:
      89:     dp = (int *)&(dn_addr[dn11]->dnisr[0]);
      90:     *dp &= ~DN_MINAB;
      91:     for (ep = dp; ep < dp + 4; ep++)
      92:         if (*ep & DN_DONE) {
      93:             *ep &= ~DN_DONE;
      94:             wakeup((caddr_t)ep);
      95:         }
      96:     *dp |= DN_MINAB;
      97: }
      98: #endif /* NDN */

#### Defined functions

dnattach defined in line 22; never used
dnclose defined in line 48; never used
dnint defined in line 85; used 1 times

- in /usr/src/sys/pdp/scb.s line 403

dnopen defined in line 32; never used
dnwrite defined in line 56; never used

#### Defined variables

dn_addr defined in line 20; used 5 times

- in line 27, 38, 52, 65, 89

#### Defined macros

DNPRI defined in line 18; used 4 times

- in line 69-76(4)

Last modified: 1997-01-19 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 880 |