static int ptsdev_kqfilter(struct file *fp, struct knote *kn) { struct tty *tp = fp->f_data; struct pts_softc *psc = tty_softc(tp); int error = 0; tty_lock(tp); switch (kn->kn_filter) { case EVFILT_READ: kn->kn_fop = &pts_kqops_read; knlist_add(&psc->pts_outpoll.si_note, kn, 1); break; case EVFILT_WRITE: kn->kn_fop = &pts_kqops_write; knlist_add(&psc->pts_inpoll.si_note, kn, 1); break; default: error = EINVAL; break; } tty_unlock(tp); return (error); }
static int netkqfilter(struct cdev *dev, struct knote *kn) { struct knlist *klist; struct ifnet *ifp; int idx; switch (kn->kn_filter) { case EVFILT_NETDEV: kn->kn_fop = &netdev_filtops; break; default: return (1); } idx = minor(dev); if (idx == 0) { klist = &ifklist; } else { ifp = ifnet_byindex(idx); if (ifp == NULL) return (1); klist = &ifp->if_klist; } kn->kn_hook = (caddr_t)klist; knlist_add(klist, kn, 0); return (0); }
static int apmkqfilter(struct cdev *dev, struct knote *kn) { struct apm_clone_data *clone; ACPI_LOCK(acpi); clone = dev->si_drv1; kn->kn_hook = clone; kn->kn_fop = &apm_readfiltops; knlist_add(&clone->sel_read.si_note, kn, 0); ACPI_UNLOCK(acpi); return (0); }
static int apmkqfilter(struct cdev *dev, struct knote *kn) { struct apm_clone_data *clone; devfs_get_cdevpriv((void **)&clone); ACPI_LOCK(acpi); kn->kn_hook = clone; kn->kn_fop = &apm_readfiltops; knlist_add(&clone->sel_read.si_note, kn, 0); ACPI_UNLOCK(acpi); return (0); }
static int logkqfilter(struct cdev *dev, struct knote *kn) { if (kn->kn_filter != EVFILT_READ) return (EINVAL); kn->kn_fop = &log_read_filterops; kn->kn_hook = NULL; mtx_lock(&msgbuf_lock); knlist_add(&logsoftc.sc_selp.si_note, kn, 1); mtx_unlock(&msgbuf_lock); return (0); }