Example #1
0
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);
}
Example #3
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);
}
Example #4
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);
}
Example #5
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);

}
Example #6
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);
}
Example #7
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);
}
Example #8
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);
}