1 /* 2 * Driver for USB Mass Storage compliant devices 3 * Debugging Functions Header File 4 * 5 * Current development and maintenance by: 6 * (c) 1999-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net) 7 * 8 * Initial work by: 9 * (c) 1999 Michael Gee (michael@linuxspecific.com) 10 * 11 * This driver is based on the 'USB Mass Storage Class' document. This 12 * describes in detail the protocol used to communicate with such 13 * devices. Clearly, the designers had SCSI and ATAPI commands in 14 * mind when they created this document. The commands are all very 15 * similar to commands in the SCSI-II and ATAPI specifications. 16 * 17 * It is important to note that in a number of cases this class 18 * exhibits class-specific exemptions from the USB specification. 19 * Notably the usage of NAK, STALL and ACK differs from the norm, in 20 * that they are used to communicate wait, failed and OK on commands. 21 * 22 * Also, for certain devices, the interrupt endpoint is used to convey 23 * status of a command. 24 * 25 * Please see http://www.one-eyed-alien.net/~mdharm/linux-usb for more 26 * information about this driver. 27 * 28 * This program is free software; you can redistribute it and/or modify it 29 * under the terms of the GNU General Public License as published by the 30 * Free Software Foundation; either version 2, or (at your option) any 31 * later version. 32 * 33 * This program is distributed in the hope that it will be useful, but 34 * WITHOUT ANY WARRANTY; without even the implied warranty of 35 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 36 * General Public License for more details. 37 * 38 * You should have received a copy of the GNU General Public License along 39 * with this program; if not, write to the Free Software Foundation, Inc., 40 * 675 Mass Ave, Cambridge, MA 02139, USA. 41 */ 42 43 #ifndef _DEBUG_H_ 44 #define _DEBUG_H_ 45 46 #include <linux/kernel.h> 47 48 #define USB_STORAGE "usb-storage: " 49 50 #ifdef CONFIG_USB_STORAGE_DEBUG 51 void usb_stor_show_command(const struct us_data *us, struct scsi_cmnd *srb); 52 void usb_stor_show_sense(const struct us_data *us, unsigned char key, 53 unsigned char asc, unsigned char ascq); 54 __printf(2, 3) void usb_stor_dbg(const struct us_data *us, 55 const char *fmt, ...); 56 57 #define US_DEBUG(x) x 58 #else 59 __printf(2, 3) 60 static inline void _usb_stor_dbg(const struct us_data *us, 61 const char *fmt, ...) 62 { 63 } 64 #define usb_stor_dbg(us, fmt, ...) \ 65 do { if (0) _usb_stor_dbg(us, fmt, ##__VA_ARGS__); } while (0) 66 #define US_DEBUG(x) 67 #endif 68 69 #endif 70