static int tmpfs_kqfilter (struct vop_kqfilter_args *ap) { struct vnode *vp = ap->a_vp; struct knote *kn = ap->a_kn; switch (kn->kn_filter) { case EVFILT_READ: kn->kn_fop = &tmpfsread_filtops; break; case EVFILT_WRITE: kn->kn_fop = &tmpfswrite_filtops; break; case EVFILT_VNODE: kn->kn_fop = &tmpfsvnode_filtops; break; default: return (EOPNOTSUPP); } kn->kn_hook = (caddr_t)vp; knote_insert(&vp->v_pollinfo.vpi_kqinfo.ki_note, kn); return(0); }
static int snpkqfilter(struct dev_kqfilter_args *ap) { cdev_t dev = ap->a_head.a_dev; struct snoop *snp = dev->si_drv1; struct knote *kn = ap->a_kn; struct klist *klist; lwkt_gettoken(&tty_token); ap->a_result = 0; switch (kn->kn_filter) { case EVFILT_READ: kn->kn_fop = &snpfiltops_rd; kn->kn_hook = (caddr_t)snp; break; case EVFILT_WRITE: kn->kn_fop = &snpfiltops_wr; kn->kn_hook = (caddr_t)snp; break; default: ap->a_result = EOPNOTSUPP; lwkt_reltoken(&tty_token); return (0); } klist = &snp->snp_kq.ki_note; knote_insert(klist, kn); lwkt_reltoken(&tty_token); return (0); }
/* * Kevent handler. Writing is always possible, reading is only possible * if BSR_BULK_IN_FULL is set. Will start the cmx_tick callout and * set sc->polling. */ static int cmx_kqfilter(struct dev_kqfilter_args *ap) { cdev_t dev = ap->a_head.a_dev; struct knote *kn = ap->a_kn; struct cmx_softc *sc; struct klist *klist; ap->a_result = 0; sc = devclass_get_softc(cmx_devclass, minor(dev)); switch (kn->kn_filter) { case EVFILT_READ: kn->kn_fop = &cmx_read_filterops; kn->kn_hook = (caddr_t)sc; break; case EVFILT_WRITE: kn->kn_fop = &cmx_write_filterops; kn->kn_hook = (caddr_t)sc; break; default: ap->a_result = EOPNOTSUPP; return (0); } klist = &sc->kq.ki_note; knote_insert(klist, kn); return (0); }
static int ptckqfilter(struct dev_kqfilter_args *ap) { cdev_t dev = ap->a_head.a_dev; struct knote *kn = ap->a_kn; struct tty *tp = dev->si_tty; struct klist *klist; lwkt_gettoken(&tty_token); ap->a_result = 0; switch (kn->kn_filter) { case EVFILT_READ: klist = &tp->t_rkq.ki_note; kn->kn_fop = &ptcread_filtops; break; case EVFILT_WRITE: klist = &tp->t_wkq.ki_note; kn->kn_fop = &ptcwrite_filtops; break; default: ap->a_result = EOPNOTSUPP; lwkt_reltoken(&tty_token); return (0); } kn->kn_hook = (caddr_t)dev; knote_insert(klist, kn); lwkt_reltoken(&tty_token); return (0); }
static int sysvipc_dev_kqfilter(struct dev_kqfilter_args *ap) { cdev_t dev = ap->a_head.a_dev; struct knote *kn = ap->a_kn; struct sysvipc_softc *sysv = dev->si_drv1; struct klist *list; if(sysv==NULL){ kprintf("error read\n"); return -1; } kprintf("kqfilter\n"); sysv = dev->si_drv1; list = &sysv->sysvipc_rkq.ki_note; ap->a_result =0; switch(kn->kn_filter) { case EVFILT_READ: kprintf("event read\n"); kn->kn_fop = &sysvipc_read_filtops; kn->kn_hook = (void *)sysv; break; default: ap->a_result = EOPNOTSUPP; return(0); } knote_insert(list, kn); return(0); }
PDEVSTATIC int i4bkqfilter(struct dev_kqfilter_args *ap) { cdev_t dev = ap->a_head.a_dev; struct knote *kn = ap->a_kn; struct klist *klist; if (minor(dev)) return (1); ap->a_result = 0; switch (kn->kn_filter) { case EVFILT_READ: kn->kn_fop = &i4bkqfiltops_read; break; case EVFILT_WRITE: kn->kn_fop = &i4bkqfiltops_write; break; default: ap->a_result = EOPNOTSUPP; return (0); } klist = &kq_rd_info.ki_note; knote_insert(klist, kn); return (0); }
static int logkqfilter(struct dev_kqfilter_args *ap) { struct knote *kn = ap->a_kn; struct klist *klist = &logsoftc.sc_kqp.ki_note; ap->a_result = 0; switch (kn->kn_filter) { case EVFILT_READ: kn->kn_fop = &logread_filtops; break; default: ap->a_result = EOPNOTSUPP; return (0); } knote_insert(klist, kn); return (0); }
int drm_kqfilter(struct dev_kqfilter_args *ap) { struct cdev *kdev = ap->a_head.a_dev; struct drm_file *file_priv; struct drm_device *dev; struct knote *kn = ap->a_kn; struct klist *klist; int error; error = devfs_get_cdevpriv(ap->a_fp, (void **)&file_priv); if (error != 0) { DRM_ERROR("can't find authenticator\n"); return (EINVAL); } dev = drm_get_device_from_kdev(kdev); ap->a_result = 0; switch (kn->kn_filter) { case EVFILT_READ: case EVFILT_WRITE: kn->kn_fop = &drmfiltops; kn->kn_hook = (caddr_t)file_priv; break; default: ap->a_result = EOPNOTSUPP; return (0); } lockmgr(&dev->event_lock, LK_EXCLUSIVE); klist = &file_priv->dkq.ki_note; knote_insert(klist, kn); lockmgr(&dev->event_lock, LK_RELEASE); return (0); }