static int ptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) { struct cam_periph *periph; struct pt_softc *softc; int unit; int error; unit = minor(dev); periph = cam_extend_get(ptperiphs, unit); if (periph == NULL) return(ENXIO); softc = (struct pt_softc *)periph->softc; if ((error = cam_periph_lock(periph, PRIBIO|PCATCH)) != 0) { return (error); /* error code from tsleep */ } switch(cmd) { case PTIOCGETTIMEOUT: if (softc->io_timeout >= 1000) *(int *)addr = softc->io_timeout / 1000; else *(int *)addr = 0; break; case PTIOCSETTIMEOUT: { int s; if (*(int *)addr < 1) { error = EINVAL; break; } s = splsoftcam(); softc->io_timeout = *(int *)addr * 1000; splx(s); break; } default: error = cam_periph_ioctl(periph, cmd, addr, pterror); break; } cam_periph_unlock(periph); return(error); }
static int ptioctl(struct dev_ioctl_args *ap) { cdev_t dev = ap->a_head.a_dev; caddr_t addr = ap->a_data; struct cam_periph *periph; struct pt_softc *softc; int unit; int error = 0; unit = minor(dev); periph = cam_extend_get(ptperiphs, unit); if (periph == NULL) return(ENXIO); softc = (struct pt_softc *)periph->softc; cam_periph_lock(periph); switch(ap->a_cmd) { case PTIOCGETTIMEOUT: if (softc->io_timeout >= 1000) *(int *)addr = softc->io_timeout / 1000; else *(int *)addr = 0; break; case PTIOCSETTIMEOUT: if (*(int *)addr < 1) { error = EINVAL; break; } softc->io_timeout = *(int *)addr * 1000; break; default: error = cam_periph_ioctl(periph, ap->a_cmd, addr, pterror); break; } cam_periph_unlock(periph); return(error); }
static int ptioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td) { struct cam_periph *periph; struct pt_softc *softc; int error = 0; periph = (struct cam_periph *)dev->si_drv1; if (periph == NULL) return(ENXIO); softc = (struct pt_softc *)periph->softc; cam_periph_lock(periph); switch(cmd) { case PTIOCGETTIMEOUT: if (softc->io_timeout >= 1000) *(int *)addr = softc->io_timeout / 1000; else *(int *)addr = 0; break; case PTIOCSETTIMEOUT: if (*(int *)addr < 1) { error = EINVAL; break; } softc->io_timeout = *(int *)addr * 1000; break; default: error = cam_periph_ioctl(periph, cmd, addr, pterror); break; } cam_periph_unlock(periph); return(error); }