int dartmctl(dev_t dev, int flags, int how) { struct dartsoftc *sc; int port; int newflags = 0; struct dart_info *dart; int s; port = DART_PORT(dev); if (dart_cd.cd_ndevs == 0 || port >= NDARTPORTS) return (ENODEV); sc = (struct dartsoftc *)dart_cd.cd_devs[0]; dart = &sc->sc_dart[port]; s = spltty(); HANDLE_FLAG(TIOCM_DTR, port, OPDTRA, OPDTRB); HANDLE_FLAG(TIOCM_RTS, port, OPRTSA, OPRTSB); switch (how) { case DMSET: dart_write(sc, DART_OPRS, newflags); dart_write(sc, DART_OPRR, ~newflags); break; case DMBIS: dart_write(sc, DART_OPRS, newflags); break; case DMBIC: dart_write(sc, DART_OPRR, newflags); break; case DMGET: flags = 0; /* XXX not supported */ break; } splx(s); return (flags); }
static int change_diag(struct atm_dev *dev,void __user *arg,int set) { int todo; if (get_user(todo,(int __user *)arg)) return -EFAULT; HANDLE_FLAG(SONET_INS_SBIP,TSOP_DIAG,SUNI_TSOP_DIAG_DBIP8); HANDLE_FLAG(SONET_INS_LBIP,TLOP_DIAG,SUNI_TLOP_DIAG_DBIP); HANDLE_FLAG(SONET_INS_PBIP,TPOP_CD,SUNI_TPOP_DIAG_DB3); HANDLE_FLAG(SONET_INS_FRAME,RSOP_CIE,SUNI_RSOP_CIE_FOOF); HANDLE_FLAG(SONET_INS_LAIS,TSOP_CTRL,SUNI_TSOP_CTRL_LAIS); HANDLE_FLAG(SONET_INS_PAIS,TPOP_CD,SUNI_TPOP_DIAG_PAIS); HANDLE_FLAG(SONET_INS_LOS,TSOP_DIAG,SUNI_TSOP_DIAG_DLOS); HANDLE_FLAG(SONET_INS_HCS,TACP_CS,SUNI_TACP_CS_DHCS); return put_user(todo,(int __user *)arg) ? -EFAULT : 0; }