usb_mon.h revision 066202dd48cf3296b6cc22b5fcf89aef33fa0efc
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The USB Monitor, inspired by Dave Harding's USBMon.
3da5ca008933b3b28303ba44d0be3372fbac7748bPete Zaitcev *
4da5ca008933b3b28303ba44d0be3372fbac7748bPete Zaitcev * Copyright (C) 2005 Pete Zaitcev (zaitcev@redhat.com)
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __USB_MON_H
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __USB_MON_H
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/list.h>
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/slab.h>
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kref.h>
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* #include <linux/usb.h> */	/* We use struct pointers only in this header */
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TAG "usbmon"
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct mon_bus {
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct list_head bus_link;
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t lock;
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct dentry *dent_s;		/* Debugging file */
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct dentry *dent_t;		/* Text interface file */
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct usb_bus *u_bus;
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Ref */
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int nreaders;			/* Under mon_lock AND mbus->lock */
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct list_head r_list;	/* Chain of readers (usually one) */
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct kref ref;		/* Under mon_lock */
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Stats */
305b1c674d223eef6c6494be8be91e9e3a3054817ePete Zaitcev	unsigned int cnt_events;
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cnt_text_lost;
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * An instance of a process which opened a file (but can fork later)
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct mon_reader {
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct list_head r_link;
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct mon_bus *m_bus;
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *r_data;		/* Use container_of instead? */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*rnf_submit)(void *data, struct urb *urb);
4312e72feab5d9a23107f245b0f241a2484cbb5a4ePete Zaitcev	void (*rnf_error)(void *data, struct urb *urb, int error);
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*rnf_complete)(void *data, struct urb *urb);
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid mon_reader_add(struct mon_bus *mbus, struct mon_reader *r);
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid mon_reader_del(struct mon_bus *mbus, struct mon_reader *r);
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
500256839619d9b1e933cafc83e7f0deaad4216465Pete Zaitcev/*
510256839619d9b1e933cafc83e7f0deaad4216465Pete Zaitcev */
520256839619d9b1e933cafc83e7f0deaad4216465Pete Zaitcevextern char mon_dmapeek(unsigned char *dst, dma_addr_t dma_addr, int len);
530256839619d9b1e933cafc83e7f0deaad4216465Pete Zaitcev
544186ecf8ad16dd05759a09594de6a87e48759ba6Arjan van de Venextern struct mutex mon_lock;
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
56066202dd48cf3296b6cc22b5fcf89aef33fa0efcLuiz Fernando N. Capitulinoextern const struct file_operations mon_fops_text;
57066202dd48cf3296b6cc22b5fcf89aef33fa0efcLuiz Fernando N. Capitulinoextern const struct file_operations mon_fops_stat;
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __USB_MON_H */
60