1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
35static 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) \
54do { \
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) \
73do { \
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
96static inline void rts51x_dump(u8 *buf, int buf_len)
97{
98 int i;
99 u8 tmp[16] = { 0 };
100 u8 *_ptr = buf;
101
102 for (i = 0; i < ((buf_len) / 16); i++) {
103 RTS51X_DEBUGP("%02x %02x %02x %02x %02x %02x %02x %02x "
104 "%02x %02x %02x %02x %02x %02x %02x %02x\n",
105 _ptr[0], _ptr[1], _ptr[2], _ptr[3], _ptr[4],
106 _ptr[5], _ptr[6], _ptr[7], _ptr[8], _ptr[9],
107 _ptr[10], _ptr[11], _ptr[12], _ptr[13], _ptr[14],
108 _ptr[15]);
109 _ptr += 16;
110 }
111 if ((buf_len) % 16) {
112 memcpy(tmp, _ptr, (buf_len) % 16);
113 _ptr = tmp;
114 RTS51X_DEBUGP("%02x %02x %02x %02x %02x %02x %02x %02x "
115 "%02x %02x %02x %02x %02x %02x %02x %02x\n",
116 _ptr[0], _ptr[1], _ptr[2], _ptr[3], _ptr[4],
117 _ptr[5], _ptr[6], _ptr[7], _ptr[8], _ptr[9],
118 _ptr[10], _ptr[11], _ptr[12], _ptr[13], _ptr[14],
119 _ptr[15]);
120 }
121}
122
123#define RTS51X_DUMP(buf, buf_len) \
124 rts51x_dump((u8 *)(buf), (buf_len))
125
126#define CATCH_TRIGGER(chip) \
127do { \
128 rts51x_ep0_write_register((chip), 0xFC31, 0x01, 0x01); \
129 RTS51X_DEBUGP("Catch trigger!\n"); \
130} while (0)
131
132#else
133#define RTS51X_DUMP(buf, buf_len)
134#define CATCH_TRIGGER(chip)
135#endif
136
137#endif
138