Commit | Line | Data |
---|---|---|
255c03d1 HR |
1 | #undef TRACE_SYSTEM |
2 | #define TRACE_SYSTEM libata | |
3 | ||
4 | #if !defined(_TRACE_LIBATA_H) || defined(TRACE_HEADER_MULTI_READ) | |
5 | #define _TRACE_LIBATA_H | |
6 | ||
7 | #include <linux/ata.h> | |
8 | #include <linux/libata.h> | |
9 | #include <linux/tracepoint.h> | |
10 | #include <linux/trace_seq.h> | |
11 | ||
12 | #define ata_opcode_name(opcode) { opcode, #opcode } | |
13 | #define show_opcode_name(val) \ | |
14 | __print_symbolic(val, \ | |
15 | ata_opcode_name(ATA_CMD_DEV_RESET), \ | |
16 | ata_opcode_name(ATA_CMD_CHK_POWER), \ | |
17 | ata_opcode_name(ATA_CMD_STANDBY), \ | |
18 | ata_opcode_name(ATA_CMD_IDLE), \ | |
19 | ata_opcode_name(ATA_CMD_EDD), \ | |
20 | ata_opcode_name(ATA_CMD_DOWNLOAD_MICRO), \ | |
21 | ata_opcode_name(ATA_CMD_DOWNLOAD_MICRO_DMA), \ | |
22 | ata_opcode_name(ATA_CMD_NOP), \ | |
23 | ata_opcode_name(ATA_CMD_FLUSH), \ | |
24 | ata_opcode_name(ATA_CMD_FLUSH_EXT), \ | |
25 | ata_opcode_name(ATA_CMD_ID_ATA), \ | |
26 | ata_opcode_name(ATA_CMD_ID_ATAPI), \ | |
27 | ata_opcode_name(ATA_CMD_SERVICE), \ | |
28 | ata_opcode_name(ATA_CMD_READ), \ | |
29 | ata_opcode_name(ATA_CMD_READ_EXT), \ | |
30 | ata_opcode_name(ATA_CMD_READ_QUEUED), \ | |
31 | ata_opcode_name(ATA_CMD_READ_STREAM_EXT), \ | |
32 | ata_opcode_name(ATA_CMD_READ_STREAM_DMA_EXT), \ | |
33 | ata_opcode_name(ATA_CMD_WRITE), \ | |
34 | ata_opcode_name(ATA_CMD_WRITE_EXT), \ | |
35 | ata_opcode_name(ATA_CMD_WRITE_QUEUED), \ | |
36 | ata_opcode_name(ATA_CMD_WRITE_STREAM_EXT), \ | |
37 | ata_opcode_name(ATA_CMD_WRITE_STREAM_DMA_EXT), \ | |
38 | ata_opcode_name(ATA_CMD_WRITE_FUA_EXT), \ | |
39 | ata_opcode_name(ATA_CMD_WRITE_QUEUED_FUA_EXT), \ | |
40 | ata_opcode_name(ATA_CMD_FPDMA_READ), \ | |
41 | ata_opcode_name(ATA_CMD_FPDMA_WRITE), \ | |
42 | ata_opcode_name(ATA_CMD_FPDMA_SEND), \ | |
43 | ata_opcode_name(ATA_CMD_FPDMA_RECV), \ | |
44 | ata_opcode_name(ATA_CMD_PIO_READ), \ | |
45 | ata_opcode_name(ATA_CMD_PIO_READ_EXT), \ | |
46 | ata_opcode_name(ATA_CMD_PIO_WRITE), \ | |
47 | ata_opcode_name(ATA_CMD_PIO_WRITE_EXT), \ | |
48 | ata_opcode_name(ATA_CMD_READ_MULTI), \ | |
49 | ata_opcode_name(ATA_CMD_READ_MULTI_EXT), \ | |
50 | ata_opcode_name(ATA_CMD_WRITE_MULTI), \ | |
51 | ata_opcode_name(ATA_CMD_WRITE_MULTI_EXT), \ | |
52 | ata_opcode_name(ATA_CMD_WRITE_MULTI_FUA_EXT), \ | |
53 | ata_opcode_name(ATA_CMD_SET_FEATURES), \ | |
54 | ata_opcode_name(ATA_CMD_SET_MULTI), \ | |
55 | ata_opcode_name(ATA_CMD_PACKET), \ | |
56 | ata_opcode_name(ATA_CMD_VERIFY), \ | |
57 | ata_opcode_name(ATA_CMD_VERIFY_EXT), \ | |
58 | ata_opcode_name(ATA_CMD_WRITE_UNCORR_EXT), \ | |
59 | ata_opcode_name(ATA_CMD_STANDBYNOW1), \ | |
60 | ata_opcode_name(ATA_CMD_IDLEIMMEDIATE), \ | |
61 | ata_opcode_name(ATA_CMD_SLEEP), \ | |
62 | ata_opcode_name(ATA_CMD_INIT_DEV_PARAMS), \ | |
63 | ata_opcode_name(ATA_CMD_READ_NATIVE_MAX), \ | |
64 | ata_opcode_name(ATA_CMD_READ_NATIVE_MAX_EXT), \ | |
65 | ata_opcode_name(ATA_CMD_SET_MAX), \ | |
66 | ata_opcode_name(ATA_CMD_SET_MAX_EXT), \ | |
67 | ata_opcode_name(ATA_CMD_READ_LOG_EXT), \ | |
68 | ata_opcode_name(ATA_CMD_WRITE_LOG_EXT), \ | |
69 | ata_opcode_name(ATA_CMD_READ_LOG_DMA_EXT), \ | |
70 | ata_opcode_name(ATA_CMD_WRITE_LOG_DMA_EXT), \ | |
71 | ata_opcode_name(ATA_CMD_TRUSTED_NONDATA), \ | |
72 | ata_opcode_name(ATA_CMD_TRUSTED_RCV), \ | |
73 | ata_opcode_name(ATA_CMD_TRUSTED_RCV_DMA), \ | |
74 | ata_opcode_name(ATA_CMD_TRUSTED_SND), \ | |
75 | ata_opcode_name(ATA_CMD_TRUSTED_SND_DMA), \ | |
76 | ata_opcode_name(ATA_CMD_PMP_READ), \ | |
77 | ata_opcode_name(ATA_CMD_PMP_READ_DMA), \ | |
78 | ata_opcode_name(ATA_CMD_PMP_WRITE), \ | |
79 | ata_opcode_name(ATA_CMD_PMP_WRITE_DMA), \ | |
80 | ata_opcode_name(ATA_CMD_CONF_OVERLAY), \ | |
81 | ata_opcode_name(ATA_CMD_SEC_SET_PASS), \ | |
82 | ata_opcode_name(ATA_CMD_SEC_UNLOCK), \ | |
83 | ata_opcode_name(ATA_CMD_SEC_ERASE_PREP), \ | |
84 | ata_opcode_name(ATA_CMD_SEC_ERASE_UNIT), \ | |
85 | ata_opcode_name(ATA_CMD_SEC_FREEZE_LOCK), \ | |
86 | ata_opcode_name(ATA_CMD_SEC_DISABLE_PASS), \ | |
87 | ata_opcode_name(ATA_CMD_CONFIG_STREAM), \ | |
88 | ata_opcode_name(ATA_CMD_SMART), \ | |
89 | ata_opcode_name(ATA_CMD_MEDIA_LOCK), \ | |
90 | ata_opcode_name(ATA_CMD_MEDIA_UNLOCK), \ | |
91 | ata_opcode_name(ATA_CMD_DSM), \ | |
92 | ata_opcode_name(ATA_CMD_CHK_MED_CRD_TYP), \ | |
93 | ata_opcode_name(ATA_CMD_CFA_REQ_EXT_ERR), \ | |
94 | ata_opcode_name(ATA_CMD_CFA_WRITE_NE), \ | |
95 | ata_opcode_name(ATA_CMD_CFA_TRANS_SECT), \ | |
96 | ata_opcode_name(ATA_CMD_CFA_ERASE), \ | |
97 | ata_opcode_name(ATA_CMD_CFA_WRITE_MULT_NE), \ | |
98 | ata_opcode_name(ATA_CMD_REQ_SENSE_DATA), \ | |
99 | ata_opcode_name(ATA_CMD_SANITIZE_DEVICE), \ | |
100 | ata_opcode_name(ATA_CMD_RESTORE), \ | |
101 | ata_opcode_name(ATA_CMD_READ_LONG), \ | |
102 | ata_opcode_name(ATA_CMD_READ_LONG_ONCE), \ | |
103 | ata_opcode_name(ATA_CMD_WRITE_LONG), \ | |
104 | ata_opcode_name(ATA_CMD_WRITE_LONG_ONCE)) | |
105 | ||
106 | #define ata_error_name(result) { result, #result } | |
107 | #define show_error_name(val) \ | |
108 | __print_symbolic(val, \ | |
109 | ata_error_name(ATA_ICRC), \ | |
110 | ata_error_name(ATA_UNC), \ | |
111 | ata_error_name(ATA_MC), \ | |
112 | ata_error_name(ATA_IDNF), \ | |
113 | ata_error_name(ATA_MCR), \ | |
114 | ata_error_name(ATA_ABORTED), \ | |
115 | ata_error_name(ATA_TRK0NF), \ | |
116 | ata_error_name(ATA_AMNF)) | |
117 | ||
118 | #define ata_protocol_name(proto) { proto, #proto } | |
119 | #define show_protocol_name(val) \ | |
120 | __print_symbolic(val, \ | |
121 | ata_protocol_name(ATA_PROT_UNKNOWN), \ | |
122 | ata_protocol_name(ATA_PROT_NODATA), \ | |
123 | ata_protocol_name(ATA_PROT_PIO), \ | |
124 | ata_protocol_name(ATA_PROT_DMA), \ | |
125 | ata_protocol_name(ATA_PROT_NCQ), \ | |
126 | ata_protocol_name(ATAPI_PROT_NODATA), \ | |
127 | ata_protocol_name(ATAPI_PROT_PIO), \ | |
128 | ata_protocol_name(ATAPI_PROT_DMA)) | |
129 | ||
130 | const char *libata_trace_parse_status(struct trace_seq*, unsigned char); | |
131 | #define __parse_status(s) libata_trace_parse_status(p, s) | |
132 | ||
133 | const char *libata_trace_parse_eh_action(struct trace_seq *, unsigned int); | |
134 | #define __parse_eh_action(a) libata_trace_parse_eh_action(p, a) | |
135 | ||
136 | const char *libata_trace_parse_eh_err_mask(struct trace_seq *, unsigned int); | |
137 | #define __parse_eh_err_mask(m) libata_trace_parse_eh_err_mask(p, m) | |
138 | ||
139 | const char *libata_trace_parse_qc_flags(struct trace_seq *, unsigned int); | |
140 | #define __parse_qc_flags(f) libata_trace_parse_qc_flags(p, f) | |
141 | ||
142 | TRACE_EVENT(ata_qc_issue, | |
143 | ||
144 | TP_PROTO(struct ata_queued_cmd *qc), | |
145 | ||
146 | TP_ARGS(qc), | |
147 | ||
148 | TP_STRUCT__entry( | |
149 | __field( unsigned int, ata_port ) | |
150 | __field( unsigned int, ata_dev ) | |
151 | __field( unsigned int, tag ) | |
152 | __field( unsigned char, cmd ) | |
153 | __field( unsigned char, dev ) | |
154 | __field( unsigned char, lbal ) | |
155 | __field( unsigned char, lbam ) | |
156 | __field( unsigned char, lbah ) | |
157 | __field( unsigned char, nsect ) | |
158 | __field( unsigned char, feature ) | |
159 | __field( unsigned char, hob_lbal ) | |
160 | __field( unsigned char, hob_lbam ) | |
161 | __field( unsigned char, hob_lbah ) | |
162 | __field( unsigned char, hob_nsect ) | |
163 | __field( unsigned char, hob_feature ) | |
164 | __field( unsigned char, ctl ) | |
165 | __field( unsigned char, proto ) | |
166 | __field( unsigned long, flags ) | |
167 | ), | |
168 | ||
169 | TP_fast_assign( | |
170 | __entry->ata_port = qc->ap->print_id; | |
171 | __entry->ata_dev = qc->dev->link->pmp + qc->dev->devno; | |
172 | __entry->tag = qc->tag; | |
173 | __entry->proto = qc->tf.protocol; | |
174 | __entry->cmd = qc->tf.command; | |
175 | __entry->dev = qc->tf.device; | |
176 | __entry->lbal = qc->tf.lbal; | |
177 | __entry->lbam = qc->tf.lbam; | |
178 | __entry->lbah = qc->tf.lbah; | |
179 | __entry->hob_lbal = qc->tf.hob_lbal; | |
180 | __entry->hob_lbam = qc->tf.hob_lbam; | |
181 | __entry->hob_lbah = qc->tf.hob_lbah; | |
182 | __entry->feature = qc->tf.feature; | |
183 | __entry->hob_feature = qc->tf.hob_feature; | |
184 | __entry->nsect = qc->tf.nsect; | |
185 | __entry->hob_nsect = qc->tf.hob_nsect; | |
186 | ), | |
187 | ||
188 | TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s cmd=%s " \ | |
189 | " tf=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)", | |
190 | __entry->ata_port, __entry->ata_dev, __entry->tag, | |
191 | show_protocol_name(__entry->proto), | |
192 | show_opcode_name(__entry->cmd), | |
193 | __entry->cmd, __entry->feature, __entry->nsect, | |
194 | __entry->lbal, __entry->lbam, __entry->lbah, | |
195 | __entry->hob_feature, __entry->hob_nsect, | |
196 | __entry->hob_lbal, __entry->hob_lbam, __entry->hob_lbah, | |
197 | __entry->dev) | |
198 | ); | |
199 | ||
200 | DECLARE_EVENT_CLASS(ata_qc_complete_template, | |
201 | ||
202 | TP_PROTO(struct ata_queued_cmd *qc), | |
203 | ||
204 | TP_ARGS(qc), | |
205 | ||
206 | TP_STRUCT__entry( | |
207 | __field( unsigned int, ata_port ) | |
208 | __field( unsigned int, ata_dev ) | |
209 | __field( unsigned int, tag ) | |
210 | __field( unsigned char, status ) | |
211 | __field( unsigned char, dev ) | |
212 | __field( unsigned char, lbal ) | |
213 | __field( unsigned char, lbam ) | |
214 | __field( unsigned char, lbah ) | |
215 | __field( unsigned char, nsect ) | |
216 | __field( unsigned char, error ) | |
217 | __field( unsigned char, hob_lbal ) | |
218 | __field( unsigned char, hob_lbam ) | |
219 | __field( unsigned char, hob_lbah ) | |
220 | __field( unsigned char, hob_nsect ) | |
221 | __field( unsigned char, hob_feature ) | |
222 | __field( unsigned char, ctl ) | |
223 | __field( unsigned long, flags ) | |
224 | ), | |
225 | ||
226 | TP_fast_assign( | |
227 | __entry->ata_port = qc->ap->print_id; | |
228 | __entry->ata_dev = qc->dev->link->pmp + qc->dev->devno; | |
229 | __entry->tag = qc->tag; | |
230 | __entry->status = qc->result_tf.command; | |
231 | __entry->dev = qc->result_tf.device; | |
232 | __entry->lbal = qc->result_tf.lbal; | |
233 | __entry->lbam = qc->result_tf.lbam; | |
234 | __entry->lbah = qc->result_tf.lbah; | |
235 | __entry->hob_lbal = qc->result_tf.hob_lbal; | |
236 | __entry->hob_lbam = qc->result_tf.hob_lbam; | |
237 | __entry->hob_lbah = qc->result_tf.hob_lbah; | |
238 | __entry->error = qc->result_tf.feature; | |
239 | __entry->hob_feature = qc->result_tf.hob_feature; | |
240 | __entry->nsect = qc->result_tf.nsect; | |
241 | __entry->hob_nsect = qc->result_tf.hob_nsect; | |
242 | ), | |
243 | ||
244 | TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s status=%s " \ | |
245 | " res=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)", | |
246 | __entry->ata_port, __entry->ata_dev, __entry->tag, | |
247 | __parse_qc_flags(__entry->flags), | |
248 | __parse_status(__entry->status), | |
249 | __entry->status, __entry->error, __entry->nsect, | |
250 | __entry->lbal, __entry->lbam, __entry->lbah, | |
251 | __entry->hob_feature, __entry->hob_nsect, | |
252 | __entry->hob_lbal, __entry->hob_lbam, __entry->hob_lbah, | |
253 | __entry->dev) | |
254 | ); | |
255 | ||
256 | DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_internal, | |
257 | TP_PROTO(struct ata_queued_cmd *qc), | |
258 | TP_ARGS(qc)); | |
259 | ||
260 | DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_failed, | |
261 | TP_PROTO(struct ata_queued_cmd *qc), | |
262 | TP_ARGS(qc)); | |
263 | ||
264 | DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_done, | |
265 | TP_PROTO(struct ata_queued_cmd *qc), | |
266 | TP_ARGS(qc)); | |
267 | ||
268 | TRACE_EVENT(ata_eh_link_autopsy, | |
269 | ||
270 | TP_PROTO(struct ata_device *dev, unsigned int eh_action, unsigned int eh_err_mask), | |
271 | ||
272 | TP_ARGS(dev, eh_action, eh_err_mask), | |
273 | ||
274 | TP_STRUCT__entry( | |
275 | __field( unsigned int, ata_port ) | |
276 | __field( unsigned int, ata_dev ) | |
277 | __field( unsigned int, eh_action ) | |
278 | __field( unsigned int, eh_err_mask) | |
279 | ), | |
280 | ||
281 | TP_fast_assign( | |
282 | __entry->ata_port = dev->link->ap->print_id; | |
283 | __entry->ata_dev = dev->link->pmp + dev->devno; | |
284 | __entry->eh_action = eh_action; | |
285 | __entry->eh_err_mask = eh_err_mask; | |
286 | ), | |
287 | ||
288 | TP_printk("ata_port=%u ata_dev=%u eh_action=%s err_mask=%s", | |
289 | __entry->ata_port, __entry->ata_dev, | |
290 | __parse_eh_action(__entry->eh_action), | |
291 | __parse_eh_err_mask(__entry->eh_err_mask)) | |
292 | ); | |
293 | ||
294 | TRACE_EVENT(ata_eh_link_autopsy_qc, | |
295 | ||
296 | TP_PROTO(struct ata_queued_cmd *qc), | |
297 | ||
298 | TP_ARGS(qc), | |
299 | ||
300 | TP_STRUCT__entry( | |
301 | __field( unsigned int, ata_port ) | |
302 | __field( unsigned int, ata_dev ) | |
303 | __field( unsigned int, tag ) | |
304 | __field( unsigned int, qc_flags ) | |
305 | __field( unsigned int, eh_err_mask) | |
306 | ), | |
307 | ||
308 | TP_fast_assign( | |
309 | __entry->ata_port = qc->ap->print_id; | |
310 | __entry->ata_dev = qc->dev->link->pmp + qc->dev->devno; | |
311 | __entry->tag = qc->tag; | |
312 | __entry->qc_flags = qc->flags; | |
313 | __entry->eh_err_mask = qc->err_mask; | |
314 | ), | |
315 | ||
316 | TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s err_mask=%s", | |
317 | __entry->ata_port, __entry->ata_dev, __entry->tag, | |
318 | __parse_qc_flags(__entry->qc_flags), | |
319 | __parse_eh_err_mask(__entry->eh_err_mask)) | |
320 | ); | |
321 | ||
322 | #endif /* _TRACE_LIBATA_H */ | |
323 | ||
324 | /* This part must be outside protection */ | |
325 | #include <trace/define_trace.h> |