usb_mon.h revision 12e72feab5d9a23107f245b0f241a2484cbb5a4e
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 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct file_operations mon_fops_text; 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct file_operations mon_fops_stat; 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __USB_MON_H */ 60