|  | /* Copyright (c) 2015 Google Inc | 
|  | * Barret Rhoden <brho@cs.berkeley.edu> | 
|  | * See LICENSE for details. | 
|  | * | 
|  | * FD taps.  Allows the user to receive events when certain things happen to an | 
|  | * FD's underlying disk/device file. */ | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | #include <ros/fdtap.h> | 
|  | #include <sys/queue.h> | 
|  | #include <kref.h> | 
|  |  | 
|  | struct proc; | 
|  | struct event_queue; | 
|  | struct chan; | 
|  |  | 
|  | struct fd_tap; | 
|  | SLIST_HEAD(fdtap_slist, fd_tap); | 
|  |  | 
|  | struct fd_tap { | 
|  | SLIST_ENTRY(fd_tap)		link;	/* for device use */ | 
|  | struct kref			kref; | 
|  | struct chan			*chan; | 
|  | int				fd; | 
|  | int				filter; | 
|  | struct proc			*proc; | 
|  | struct event_queue		*ev_q; | 
|  | int				ev_id; | 
|  | void				*data; | 
|  | }; | 
|  |  | 
|  | int add_fd_tap(struct proc *p, struct fd_tap_req *tap_req); | 
|  | int remove_fd_tap(struct proc *p, int fd); | 
|  | int fire_tap(struct fd_tap *tap, int filter); |