name changes
[unix-history] / usr / src / sys / vax / uba / dz.c
index 5d61b98..5456799 100644 (file)
@@ -1,4 +1,4 @@
-/*     dz.c    4.13    %G%     */
+/*     dz.c    4.16    %G%     */
 
 #include "dz.h"
 #if NDZ11 > 0
 
 #include "dz.h"
 #if NDZ11 > 0
@@ -16,6 +16,7 @@
 #include "../h/map.h"
 #include "../h/pte.h"
 #include "../h/buf.h"
 #include "../h/map.h"
 #include "../h/pte.h"
 #include "../h/buf.h"
+#include "../h/vm.h"
 #include "../h/uba.h"
 #include "../h/conf.h"
 #include "../h/pdma.h"
 #include "../h/uba.h"
 #include "../h/conf.h"
 #include "../h/pdma.h"
 /*
  * Driver information for auto-configuration stuff.
  */
 /*
  * Driver information for auto-configuration stuff.
  */
-int    dzcntrlr(), dzslave(), dzrint();
+int    dzprobe(), dzattach(), dzrint();
 struct uba_dinfo *dzinfo[NDZ11];
 u_short        dzstd[] = { 0 };
 struct uba_driver dzdriver =
 struct uba_dinfo *dzinfo[NDZ11];
 u_short        dzstd[] = { 0 };
 struct uba_driver dzdriver =
-       { dzcntrlr, dzslave, 0, 0, dzstd, "dz", dzinfo };
+       { dzprobe, 0, dzattach, 0, dzstd, "dz", dzinfo };
 
 #define        NDZ     (NDZ11*8)
  
 
 #define        NDZ     (NDZ11*8)
  
@@ -82,6 +83,7 @@ struct device {
  * Software copy of dzbrk since it isn't readable
  */
 char   dz_brk[NDZ11];
  * Software copy of dzbrk since it isn't readable
  */
 char   dz_brk[NDZ11];
+char   dzsoftCAR[NDZ11];
 
 /*
  * The dz doesn't interrupt on carrier transitions, so
 
 /*
  * The dz doesn't interrupt on carrier transitions, so
@@ -97,13 +99,15 @@ struct      pdma dzpdma[NDZ];
 char   dz_speeds[] =
        { 0,020,021,022,023,024,0,025,026,027,030,032,034,036,0,0 };
  
 char   dz_speeds[] =
        { 0,020,021,022,023,024,0,025,026,027,030,032,034,036,0,0 };
  
-dzcntrlr(ui, reg)
-       struct uba_dinfo *ui;
+dzprobe(reg)
        caddr_t reg;
 {
        register int br, cvec;
        register struct device *dzaddr = (struct device *)reg;
 
        caddr_t reg;
 {
        register int br, cvec;
        register struct device *dzaddr = (struct device *)reg;
 
+#ifdef lint
+       br = 0; br = cvec; cvec = br;
+#endif
        dzaddr->dzcsr = DZ_TIE|DZ_MSE;
        dzaddr->dztcr = 1;              /* enable any line */
        DELAY(100000);
        dzaddr->dzcsr = DZ_TIE|DZ_MSE;
        dzaddr->dztcr = 1;              /* enable any line */
        DELAY(100000);
@@ -113,24 +117,24 @@ dzcntrlr(ui, reg)
        return (1);
 }
 
        return (1);
 }
 
-/*
- * Called by auto-configure to initialize good dz's;
- * set up pdma structures.
- */
-dzslave(ui, reg, slaveno, uban)
+dzattach(ui)
        register struct uba_dinfo *ui;
        register struct uba_dinfo *ui;
-       caddr_t reg;
 {
        register struct pdma *pdp = &dzpdma[ui->ui_unit*8];
        register struct tty *tp = &dz_tty[ui->ui_unit*8];
 {
        register struct pdma *pdp = &dzpdma[ui->ui_unit*8];
        register struct tty *tp = &dz_tty[ui->ui_unit*8];
-       register int cnt;
+       register int cntr;
 
 
-       for (cnt = 0; cnt < 8; cnt++) {
-               pdp->p_addr = (struct device *)reg;
+       for (cntr = 0; cntr < 8; cntr++) {
+               pdp->p_addr = (struct device *)ui->ui_addr;
                pdp->p_arg = (int)tp;
                pdp->p_fcn = dzxint;
                pdp++, tp++;
        }
                pdp->p_arg = (int)tp;
                pdp->p_fcn = dzxint;
                pdp++, tp++;
        }
+       dzsoftCAR[ui->ui_unit] = ui->ui_flags;
+       if (dz_timer == 0) {
+               dz_timer++;
+               timeout(dzscan, (caddr_t)0, HZ);
+       }
        return (1);
 }
 
        return (1);
 }
 
@@ -147,10 +151,6 @@ dzopen(dev, flag)
                u.u_error = ENXIO;
                return;
        }
                u.u_error = ENXIO;
                return;
        }
-       if (dz_timer == 0) {
-               dz_timer++;
-               timeout(dzscan, (caddr_t)0, HZ);
-       }
        tp = &dz_tty[unit];
        tp->t_addr = (caddr_t)&dzpdma[unit];
        tp->t_oproc = dzstart;
        tp = &dz_tty[unit];
        tp->t_addr = (caddr_t)&dzpdma[unit];
        tp->t_oproc = dzstart;
@@ -222,7 +222,6 @@ dzrint(dz)
        register struct device *dzaddr;
        register struct tty *tp0;
        register int unit;
        register struct device *dzaddr;
        register struct tty *tp0;
        register int unit;
-       int s;
  
        if ((dzact & (1<<dz)) == 0)
                return;
  
        if ((dzact & (1<<dz)) == 0)
                return;
@@ -426,13 +425,11 @@ dzscan()
  
        for (i = 0; i < dz_cnt ; i++) {
                dzaddr = dzpdma[i].p_addr;
  
        for (i = 0; i < dz_cnt ; i++) {
                dzaddr = dzpdma[i].p_addr;
+               if (dzaddr == 0)
+                       continue;
                tp = &dz_tty[i];
                bit = 1<<(i&07);
                tp = &dz_tty[i];
                bit = 1<<(i&07);
-#ifdef BERT
-               if (dzaddr->dzmsr & bit || i == 6 || i == 7) {
-#else
-               if (dzaddr->dzmsr & bit) {
-#endif
+               if ((dzsoftCAR[i>>3]&bit) || (dzaddr->dzmsr&bit)) {
                        /* carrier present */
                        if ((tp->t_state & CARR_ON) == 0) {
                                wakeup((caddr_t)&tp->t_rawq);
                        /* carrier present */
                        if ((tp->t_state & CARR_ON) == 0) {
                                wakeup((caddr_t)&tp->t_rawq);