Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
trace.h
Go to the documentation of this file.
1 /* Driver for Realtek RTS51xx USB card reader
2  * Header file
3  *
4  * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the
8  * Free Software Foundation; either version 2, or (at your option) any
9  * later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, see <http://www.gnu.org/licenses/>.
18  *
19  * Author:
20  * wwang ([email protected])
21  * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
22  * Maintainer:
23  * Edwin Rong ([email protected])
24  * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
25  */
26 
27 #ifndef __RTS51X_TRACE_H
28 #define __RTS51X_TRACE_H
29 
30 #include "debug.h"
31 
32 #define _MSG_TRACE
33 
34 #ifdef _MSG_TRACE
35 static inline char *filename(char *path)
36 {
37  char *ptr;
38 
39  if (path == NULL)
40  return NULL;
41 
42  ptr = path;
43 
44  while (*ptr != '\0') {
45  if ((*ptr == '\\') || (*ptr == '/'))
46  path = ptr + 1;
47  ptr++;
48  }
49 
50  return path;
51 }
52 
53 #define TRACE_RET(chip, ret) \
54 do { \
55  char *_file = filename((char *)__FILE__); \
56  RTS51X_DEBUGP("[%s][%s]:[%d]\n", _file, __func__, __LINE__); \
57  (chip)->trace_msg[(chip)->msg_idx].line = (u16)(__LINE__); \
58  strncpy((chip)->trace_msg[(chip)->msg_idx].func, \
59  __func__, MSG_FUNC_LEN-1); \
60  strncpy((chip)->trace_msg[(chip)->msg_idx].file, \
61  _file, MSG_FILE_LEN-1); \
62  get_current_time((chip)->trace_msg[(chip)->msg_idx].timeval_buf,\
63  TIME_VAL_LEN); \
64  (chip)->trace_msg[(chip)->msg_idx].valid = 1; \
65  (chip)->msg_idx++; \
66  if ((chip)->msg_idx >= TRACE_ITEM_CNT) { \
67  (chip)->msg_idx = 0; \
68  } \
69  return ret; \
70 } while (0)
71 
72 #define TRACE_GOTO(chip, label) \
73 do { \
74  char *_file = filename((char *)__FILE__); \
75  RTS51X_DEBUGP("[%s][%s]:[%d]\n", _file, __func__, __LINE__); \
76  (chip)->trace_msg[(chip)->msg_idx].line = (u16)(__LINE__); \
77  strncpy((chip)->trace_msg[(chip)->msg_idx].func, \
78  __func__, MSG_FUNC_LEN-1); \
79  strncpy((chip)->trace_msg[(chip)->msg_idx].file, \
80  _file, MSG_FILE_LEN-1); \
81  get_current_time((chip)->trace_msg[(chip)->msg_idx].timeval_buf,\
82  TIME_VAL_LEN); \
83  (chip)->trace_msg[(chip)->msg_idx].valid = 1; \
84  (chip)->msg_idx++; \
85  if ((chip)->msg_idx >= TRACE_ITEM_CNT) { \
86  (chip)->msg_idx = 0; \
87  } \
88  goto label; \
89 } while (0)
90 #else
91 #define TRACE_RET(chip, ret) return (ret)
92 #define TRACE_GOTO(chip, label) goto label
93 #endif
94 
95 #ifdef CONFIG_RTS5139_DEBUG
96 #define RTS51X_DUMP(buf, buf_len) \
97  print_hex_dump(KERN_DEBUG, RTS51X_TIP, DUMP_PREFIX_NONE, \
98  16, 1, (buf), (buf_len), false)
99 
100 #define CATCH_TRIGGER(chip) \
101 do { \
102  rts51x_ep0_write_register((chip), 0xFC31, 0x01, 0x01); \
103  RTS51X_DEBUGP("Catch trigger!\n"); \
104 } while (0)
105 
106 #else
107 #define RTS51X_DUMP(buf, buf_len)
108 #define CATCH_TRIGGER(chip)
109 #endif
110 
111 #endif /* __RTS51X_TRACE_H */