2005-04-17 02:20:36 +04:00
/*
* The USB Monitor , inspired by Dave Harding ' s USBMon .
2005-08-17 02:16:46 +04:00
*
* Copyright ( C ) 2005 Pete Zaitcev ( zaitcev @ redhat . com )
2005-04-17 02:20:36 +04:00
*/
# ifndef __USB_MON_H
# define __USB_MON_H
# include <linux/list.h>
# include <linux/slab.h>
# include <linux/kref.h>
/* #include <linux/usb.h> */ /* We use struct pointers only in this header */
# define TAG "usbmon"
struct mon_bus {
struct list_head bus_link ;
spinlock_t lock ;
struct dentry * dent_s ; /* Debugging file */
struct dentry * dent_t ; /* Text interface file */
struct usb_bus * u_bus ;
2006-08-30 19:35:21 +04:00
int uses_dma ;
2005-04-17 02:20:36 +04:00
/* Ref */
int nreaders ; /* Under mon_lock AND mbus->lock */
struct list_head r_list ; /* Chain of readers (usually one) */
struct kref ref ; /* Under mon_lock */
/* Stats */
2006-06-10 07:10:10 +04:00
unsigned int cnt_events ;
2005-04-17 02:20:36 +04:00
unsigned int cnt_text_lost ;
} ;
/*
* An instance of a process which opened a file ( but can fork later )
*/
struct mon_reader {
struct list_head r_link ;
struct mon_bus * m_bus ;
void * r_data ; /* Use container_of instead? */
void ( * rnf_submit ) ( void * data , struct urb * urb ) ;
2006-06-10 09:03:32 +04:00
void ( * rnf_error ) ( void * data , struct urb * urb , int error ) ;
2005-04-17 02:20:36 +04:00
void ( * rnf_complete ) ( void * data , struct urb * urb ) ;
} ;
void mon_reader_add ( struct mon_bus * mbus , struct mon_reader * r ) ;
void mon_reader_del ( struct mon_bus * mbus , struct mon_reader * r ) ;
2005-08-16 03:53:57 +04:00
/*
*/
extern char mon_dmapeek ( unsigned char * dst , dma_addr_t dma_addr , int len ) ;
2006-01-11 17:55:29 +03:00
extern struct mutex mon_lock ;
2005-04-17 02:20:36 +04:00
2006-08-06 03:37:11 +04:00
extern const struct file_operations mon_fops_text ;
extern const struct file_operations mon_fops_stat ;
2005-04-17 02:20:36 +04:00
# endif /* __USB_MON_H */