| 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | #undef TRACE_SYSTEM |
| 3 | #define TRACE_SYSTEM libata |
| 4 | |
| 5 | #if !defined(_TRACE_LIBATA_H) || defined(TRACE_HEADER_MULTI_READ) |
| 6 | #define _TRACE_LIBATA_H |
| 7 | |
| 8 | #include <linux/ata.h> |
| 9 | #include <linux/libata.h> |
| 10 | #include <linux/tracepoint.h> |
| 11 | #include <linux/trace_seq.h> |
| 12 | |
| 13 | #define ata_opcode_name(opcode) { opcode, #opcode } |
| 14 | #define show_opcode_name(val) \ |
| 15 | __print_symbolic(val, \ |
| 16 | ata_opcode_name(ATA_CMD_DEV_RESET), \ |
| 17 | ata_opcode_name(ATA_CMD_CHK_POWER), \ |
| 18 | ata_opcode_name(ATA_CMD_STANDBY), \ |
| 19 | ata_opcode_name(ATA_CMD_IDLE), \ |
| 20 | ata_opcode_name(ATA_CMD_EDD), \ |
| 21 | ata_opcode_name(ATA_CMD_DOWNLOAD_MICRO), \ |
| 22 | ata_opcode_name(ATA_CMD_DOWNLOAD_MICRO_DMA), \ |
| 23 | ata_opcode_name(ATA_CMD_NOP), \ |
| 24 | ata_opcode_name(ATA_CMD_FLUSH), \ |
| 25 | ata_opcode_name(ATA_CMD_FLUSH_EXT), \ |
| 26 | ata_opcode_name(ATA_CMD_ID_ATA), \ |
| 27 | ata_opcode_name(ATA_CMD_ID_ATAPI), \ |
| 28 | ata_opcode_name(ATA_CMD_SERVICE), \ |
| 29 | ata_opcode_name(ATA_CMD_READ), \ |
| 30 | ata_opcode_name(ATA_CMD_READ_EXT), \ |
| 31 | ata_opcode_name(ATA_CMD_READ_QUEUED), \ |
| 32 | ata_opcode_name(ATA_CMD_READ_STREAM_EXT), \ |
| 33 | ata_opcode_name(ATA_CMD_READ_STREAM_DMA_EXT), \ |
| 34 | ata_opcode_name(ATA_CMD_WRITE), \ |
| 35 | ata_opcode_name(ATA_CMD_WRITE_EXT), \ |
| 36 | ata_opcode_name(ATA_CMD_WRITE_QUEUED), \ |
| 37 | ata_opcode_name(ATA_CMD_WRITE_STREAM_EXT), \ |
| 38 | ata_opcode_name(ATA_CMD_WRITE_STREAM_DMA_EXT), \ |
| 39 | ata_opcode_name(ATA_CMD_WRITE_FUA_EXT), \ |
| 40 | ata_opcode_name(ATA_CMD_WRITE_QUEUED_FUA_EXT), \ |
| 41 | ata_opcode_name(ATA_CMD_FPDMA_READ), \ |
| 42 | ata_opcode_name(ATA_CMD_FPDMA_WRITE), \ |
| 43 | ata_opcode_name(ATA_CMD_NCQ_NON_DATA), \ |
| 44 | ata_opcode_name(ATA_CMD_FPDMA_SEND), \ |
| 45 | ata_opcode_name(ATA_CMD_FPDMA_RECV), \ |
| 46 | ata_opcode_name(ATA_CMD_PIO_READ), \ |
| 47 | ata_opcode_name(ATA_CMD_PIO_READ_EXT), \ |
| 48 | ata_opcode_name(ATA_CMD_PIO_WRITE), \ |
| 49 | ata_opcode_name(ATA_CMD_PIO_WRITE_EXT), \ |
| 50 | ata_opcode_name(ATA_CMD_READ_MULTI), \ |
| 51 | ata_opcode_name(ATA_CMD_READ_MULTI_EXT), \ |
| 52 | ata_opcode_name(ATA_CMD_WRITE_MULTI), \ |
| 53 | ata_opcode_name(ATA_CMD_WRITE_MULTI_EXT), \ |
| 54 | ata_opcode_name(ATA_CMD_WRITE_MULTI_FUA_EXT), \ |
| 55 | ata_opcode_name(ATA_CMD_SET_FEATURES), \ |
| 56 | ata_opcode_name(ATA_CMD_SET_MULTI), \ |
| 57 | ata_opcode_name(ATA_CMD_PACKET), \ |
| 58 | ata_opcode_name(ATA_CMD_VERIFY), \ |
| 59 | ata_opcode_name(ATA_CMD_VERIFY_EXT), \ |
| 60 | ata_opcode_name(ATA_CMD_WRITE_UNCORR_EXT), \ |
| 61 | ata_opcode_name(ATA_CMD_STANDBYNOW1), \ |
| 62 | ata_opcode_name(ATA_CMD_IDLEIMMEDIATE), \ |
| 63 | ata_opcode_name(ATA_CMD_SLEEP), \ |
| 64 | ata_opcode_name(ATA_CMD_INIT_DEV_PARAMS), \ |
| 65 | ata_opcode_name(ATA_CMD_READ_NATIVE_MAX), \ |
| 66 | ata_opcode_name(ATA_CMD_READ_NATIVE_MAX_EXT), \ |
| 67 | ata_opcode_name(ATA_CMD_SET_MAX), \ |
| 68 | ata_opcode_name(ATA_CMD_SET_MAX_EXT), \ |
| 69 | ata_opcode_name(ATA_CMD_READ_LOG_EXT), \ |
| 70 | ata_opcode_name(ATA_CMD_WRITE_LOG_EXT), \ |
| 71 | ata_opcode_name(ATA_CMD_READ_LOG_DMA_EXT), \ |
| 72 | ata_opcode_name(ATA_CMD_WRITE_LOG_DMA_EXT), \ |
| 73 | ata_opcode_name(ATA_CMD_TRUSTED_NONDATA), \ |
| 74 | ata_opcode_name(ATA_CMD_TRUSTED_RCV), \ |
| 75 | ata_opcode_name(ATA_CMD_TRUSTED_RCV_DMA), \ |
| 76 | ata_opcode_name(ATA_CMD_TRUSTED_SND), \ |
| 77 | ata_opcode_name(ATA_CMD_TRUSTED_SND_DMA), \ |
| 78 | ata_opcode_name(ATA_CMD_PMP_READ), \ |
| 79 | ata_opcode_name(ATA_CMD_PMP_READ_DMA), \ |
| 80 | ata_opcode_name(ATA_CMD_PMP_WRITE), \ |
| 81 | ata_opcode_name(ATA_CMD_PMP_WRITE_DMA), \ |
| 82 | ata_opcode_name(ATA_CMD_CONF_OVERLAY), \ |
| 83 | ata_opcode_name(ATA_CMD_SEC_SET_PASS), \ |
| 84 | ata_opcode_name(ATA_CMD_SEC_UNLOCK), \ |
| 85 | ata_opcode_name(ATA_CMD_SEC_ERASE_PREP), \ |
| 86 | ata_opcode_name(ATA_CMD_SEC_ERASE_UNIT), \ |
| 87 | ata_opcode_name(ATA_CMD_SEC_FREEZE_LOCK), \ |
| 88 | ata_opcode_name(ATA_CMD_SEC_DISABLE_PASS), \ |
| 89 | ata_opcode_name(ATA_CMD_CONFIG_STREAM), \ |
| 90 | ata_opcode_name(ATA_CMD_SMART), \ |
| 91 | ata_opcode_name(ATA_CMD_MEDIA_LOCK), \ |
| 92 | ata_opcode_name(ATA_CMD_MEDIA_UNLOCK), \ |
| 93 | ata_opcode_name(ATA_CMD_DSM), \ |
| 94 | ata_opcode_name(ATA_CMD_CHK_MED_CRD_TYP), \ |
| 95 | ata_opcode_name(ATA_CMD_CFA_REQ_EXT_ERR), \ |
| 96 | ata_opcode_name(ATA_CMD_CFA_WRITE_NE), \ |
| 97 | ata_opcode_name(ATA_CMD_CFA_TRANS_SECT), \ |
| 98 | ata_opcode_name(ATA_CMD_CFA_ERASE), \ |
| 99 | ata_opcode_name(ATA_CMD_CFA_WRITE_MULT_NE), \ |
| 100 | ata_opcode_name(ATA_CMD_REQ_SENSE_DATA), \ |
| 101 | ata_opcode_name(ATA_CMD_SANITIZE_DEVICE), \ |
| 102 | ata_opcode_name(ATA_CMD_ZAC_MGMT_IN), \ |
| 103 | ata_opcode_name(ATA_CMD_ZAC_MGMT_OUT), \ |
| 104 | ata_opcode_name(ATA_CMD_RESTORE), \ |
| 105 | ata_opcode_name(ATA_CMD_READ_LONG), \ |
| 106 | ata_opcode_name(ATA_CMD_READ_LONG_ONCE), \ |
| 107 | ata_opcode_name(ATA_CMD_WRITE_LONG), \ |
| 108 | ata_opcode_name(ATA_CMD_WRITE_LONG_ONCE)) |
| 109 | |
| 110 | #define ata_error_name(result) { result, #result } |
| 111 | #define show_error_name(val) \ |
| 112 | __print_symbolic(val, \ |
| 113 | ata_error_name(ATA_ICRC), \ |
| 114 | ata_error_name(ATA_UNC), \ |
| 115 | ata_error_name(ATA_MC), \ |
| 116 | ata_error_name(ATA_IDNF), \ |
| 117 | ata_error_name(ATA_MCR), \ |
| 118 | ata_error_name(ATA_ABORTED), \ |
| 119 | ata_error_name(ATA_TRK0NF), \ |
| 120 | ata_error_name(ATA_AMNF)) |
| 121 | |
| 122 | #define ata_protocol_name(proto) { proto, #proto } |
| 123 | #define show_protocol_name(val) \ |
| 124 | __print_symbolic(val, \ |
| 125 | ata_protocol_name(ATA_PROT_UNKNOWN), \ |
| 126 | ata_protocol_name(ATA_PROT_NODATA), \ |
| 127 | ata_protocol_name(ATA_PROT_PIO), \ |
| 128 | ata_protocol_name(ATA_PROT_DMA), \ |
| 129 | ata_protocol_name(ATA_PROT_NCQ), \ |
| 130 | ata_protocol_name(ATA_PROT_NCQ_NODATA), \ |
| 131 | ata_protocol_name(ATAPI_PROT_NODATA), \ |
| 132 | ata_protocol_name(ATAPI_PROT_PIO), \ |
| 133 | ata_protocol_name(ATAPI_PROT_DMA)) |
| 134 | |
| 135 | #define ata_class_name(class) { class, #class } |
| 136 | #define show_class_name(val) \ |
| 137 | __print_symbolic(val, \ |
| 138 | ata_class_name(ATA_DEV_UNKNOWN), \ |
| 139 | ata_class_name(ATA_DEV_ATA), \ |
| 140 | ata_class_name(ATA_DEV_ATA_UNSUP), \ |
| 141 | ata_class_name(ATA_DEV_ATAPI), \ |
| 142 | ata_class_name(ATA_DEV_ATAPI_UNSUP), \ |
| 143 | ata_class_name(ATA_DEV_PMP), \ |
| 144 | ata_class_name(ATA_DEV_PMP_UNSUP), \ |
| 145 | ata_class_name(ATA_DEV_SEMB), \ |
| 146 | ata_class_name(ATA_DEV_SEMB_UNSUP), \ |
| 147 | ata_class_name(ATA_DEV_ZAC), \ |
| 148 | ata_class_name(ATA_DEV_ZAC_UNSUP), \ |
| 149 | ata_class_name(ATA_DEV_NONE)) |
| 150 | |
| 151 | #define ata_sff_hsm_state_name(state) { state, #state } |
| 152 | #define show_sff_hsm_state_name(val) \ |
| 153 | __print_symbolic(val, \ |
| 154 | ata_sff_hsm_state_name(HSM_ST_IDLE), \ |
| 155 | ata_sff_hsm_state_name(HSM_ST_FIRST), \ |
| 156 | ata_sff_hsm_state_name(HSM_ST), \ |
| 157 | ata_sff_hsm_state_name(HSM_ST_LAST), \ |
| 158 | ata_sff_hsm_state_name(HSM_ST_ERR)) |
| 159 | |
| 160 | const char *libata_trace_parse_status(struct trace_seq*, unsigned char); |
| 161 | #define __parse_status(s) libata_trace_parse_status(p, s) |
| 162 | |
| 163 | const char *libata_trace_parse_host_stat(struct trace_seq *, unsigned char); |
| 164 | #define __parse_host_stat(s) libata_trace_parse_host_stat(p, s) |
| 165 | |
| 166 | const char *libata_trace_parse_eh_action(struct trace_seq *, unsigned int); |
| 167 | #define __parse_eh_action(a) libata_trace_parse_eh_action(p, a) |
| 168 | |
| 169 | const char *libata_trace_parse_eh_err_mask(struct trace_seq *, unsigned int); |
| 170 | #define __parse_eh_err_mask(m) libata_trace_parse_eh_err_mask(p, m) |
| 171 | |
| 172 | const char *libata_trace_parse_qc_flags(struct trace_seq *, unsigned int); |
| 173 | #define __parse_qc_flags(f) libata_trace_parse_qc_flags(p, f) |
| 174 | |
| 175 | const char *libata_trace_parse_tf_flags(struct trace_seq *, unsigned int); |
| 176 | #define __parse_tf_flags(f) libata_trace_parse_tf_flags(p, f) |
| 177 | |
| 178 | const char *libata_trace_parse_subcmd(struct trace_seq *, unsigned char, |
| 179 | unsigned char, unsigned char); |
| 180 | #define __parse_subcmd(c,f,h) libata_trace_parse_subcmd(p, c, f, h) |
| 181 | |
| 182 | DECLARE_EVENT_CLASS(ata_qc_issue_template, |
| 183 | |
| 184 | TP_PROTO(struct ata_queued_cmd *qc), |
| 185 | |
| 186 | TP_ARGS(qc), |
| 187 | |
| 188 | TP_STRUCT__entry( |
| 189 | __field( unsigned int, ata_port ) |
| 190 | __field( unsigned int, ata_dev ) |
| 191 | __field( unsigned int, tag ) |
| 192 | __field( unsigned char, cmd ) |
| 193 | __field( unsigned char, dev ) |
| 194 | __field( unsigned char, lbal ) |
| 195 | __field( unsigned char, lbam ) |
| 196 | __field( unsigned char, lbah ) |
| 197 | __field( unsigned char, nsect ) |
| 198 | __field( unsigned char, feature ) |
| 199 | __field( unsigned char, hob_lbal ) |
| 200 | __field( unsigned char, hob_lbam ) |
| 201 | __field( unsigned char, hob_lbah ) |
| 202 | __field( unsigned char, hob_nsect ) |
| 203 | __field( unsigned char, hob_feature ) |
| 204 | __field( unsigned char, ctl ) |
| 205 | __field( unsigned char, proto ) |
| 206 | __field( unsigned long, flags ) |
| 207 | ), |
| 208 | |
| 209 | TP_fast_assign( |
| 210 | __entry->ata_port = qc->ap->print_id; |
| 211 | __entry->ata_dev = qc->dev->link->pmp + qc->dev->devno; |
| 212 | __entry->tag = qc->tag; |
| 213 | __entry->proto = qc->tf.protocol; |
| 214 | __entry->cmd = qc->tf.command; |
| 215 | __entry->dev = qc->tf.device; |
| 216 | __entry->lbal = qc->tf.lbal; |
| 217 | __entry->lbam = qc->tf.lbam; |
| 218 | __entry->lbah = qc->tf.lbah; |
| 219 | __entry->hob_lbal = qc->tf.hob_lbal; |
| 220 | __entry->hob_lbam = qc->tf.hob_lbam; |
| 221 | __entry->hob_lbah = qc->tf.hob_lbah; |
| 222 | __entry->feature = qc->tf.feature; |
| 223 | __entry->hob_feature = qc->tf.hob_feature; |
| 224 | __entry->nsect = qc->tf.nsect; |
| 225 | __entry->hob_nsect = qc->tf.hob_nsect; |
| 226 | ), |
| 227 | |
| 228 | TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s cmd=%s%s " \ |
| 229 | " tf=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)" , |
| 230 | __entry->ata_port, __entry->ata_dev, __entry->tag, |
| 231 | show_protocol_name(__entry->proto), |
| 232 | show_opcode_name(__entry->cmd), |
| 233 | __parse_subcmd(__entry->cmd, __entry->feature, __entry->hob_nsect), |
| 234 | __entry->cmd, __entry->feature, __entry->nsect, |
| 235 | __entry->lbal, __entry->lbam, __entry->lbah, |
| 236 | __entry->hob_feature, __entry->hob_nsect, |
| 237 | __entry->hob_lbal, __entry->hob_lbam, __entry->hob_lbah, |
| 238 | __entry->dev) |
| 239 | ); |
| 240 | |
| 241 | DEFINE_EVENT(ata_qc_issue_template, ata_qc_prep, |
| 242 | TP_PROTO(struct ata_queued_cmd *qc), |
| 243 | TP_ARGS(qc)); |
| 244 | |
| 245 | DEFINE_EVENT(ata_qc_issue_template, ata_qc_issue, |
| 246 | TP_PROTO(struct ata_queued_cmd *qc), |
| 247 | TP_ARGS(qc)); |
| 248 | |
| 249 | DECLARE_EVENT_CLASS(ata_qc_complete_template, |
| 250 | |
| 251 | TP_PROTO(struct ata_queued_cmd *qc), |
| 252 | |
| 253 | TP_ARGS(qc), |
| 254 | |
| 255 | TP_STRUCT__entry( |
| 256 | __field( unsigned int, ata_port ) |
| 257 | __field( unsigned int, ata_dev ) |
| 258 | __field( unsigned int, tag ) |
| 259 | __field( unsigned char, status ) |
| 260 | __field( unsigned char, dev ) |
| 261 | __field( unsigned char, lbal ) |
| 262 | __field( unsigned char, lbam ) |
| 263 | __field( unsigned char, lbah ) |
| 264 | __field( unsigned char, nsect ) |
| 265 | __field( unsigned char, error ) |
| 266 | __field( unsigned char, hob_lbal ) |
| 267 | __field( unsigned char, hob_lbam ) |
| 268 | __field( unsigned char, hob_lbah ) |
| 269 | __field( unsigned char, hob_nsect ) |
| 270 | __field( unsigned char, hob_feature ) |
| 271 | __field( unsigned char, ctl ) |
| 272 | __field( unsigned long, flags ) |
| 273 | ), |
| 274 | |
| 275 | TP_fast_assign( |
| 276 | __entry->ata_port = qc->ap->print_id; |
| 277 | __entry->ata_dev = qc->dev->link->pmp + qc->dev->devno; |
| 278 | __entry->tag = qc->tag; |
| 279 | __entry->status = qc->result_tf.command; |
| 280 | __entry->dev = qc->result_tf.device; |
| 281 | __entry->lbal = qc->result_tf.lbal; |
| 282 | __entry->lbam = qc->result_tf.lbam; |
| 283 | __entry->lbah = qc->result_tf.lbah; |
| 284 | __entry->hob_lbal = qc->result_tf.hob_lbal; |
| 285 | __entry->hob_lbam = qc->result_tf.hob_lbam; |
| 286 | __entry->hob_lbah = qc->result_tf.hob_lbah; |
| 287 | __entry->error = qc->result_tf.feature; |
| 288 | __entry->hob_feature = qc->result_tf.hob_feature; |
| 289 | __entry->nsect = qc->result_tf.nsect; |
| 290 | __entry->hob_nsect = qc->result_tf.hob_nsect; |
| 291 | __entry->flags = qc->flags; |
| 292 | ), |
| 293 | |
| 294 | TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s status=%s " \ |
| 295 | " res=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)" , |
| 296 | __entry->ata_port, __entry->ata_dev, __entry->tag, |
| 297 | __parse_qc_flags(__entry->flags), |
| 298 | __parse_status(__entry->status), |
| 299 | __entry->status, __entry->error, __entry->nsect, |
| 300 | __entry->lbal, __entry->lbam, __entry->lbah, |
| 301 | __entry->hob_feature, __entry->hob_nsect, |
| 302 | __entry->hob_lbal, __entry->hob_lbam, __entry->hob_lbah, |
| 303 | __entry->dev) |
| 304 | ); |
| 305 | |
| 306 | DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_internal, |
| 307 | TP_PROTO(struct ata_queued_cmd *qc), |
| 308 | TP_ARGS(qc)); |
| 309 | |
| 310 | DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_failed, |
| 311 | TP_PROTO(struct ata_queued_cmd *qc), |
| 312 | TP_ARGS(qc)); |
| 313 | |
| 314 | DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_done, |
| 315 | TP_PROTO(struct ata_queued_cmd *qc), |
| 316 | TP_ARGS(qc)); |
| 317 | |
| 318 | TRACE_EVENT(ata_tf_load, |
| 319 | |
| 320 | TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf), |
| 321 | |
| 322 | TP_ARGS(ap, tf), |
| 323 | |
| 324 | TP_STRUCT__entry( |
| 325 | __field( unsigned int, ata_port ) |
| 326 | __field( unsigned char, cmd ) |
| 327 | __field( unsigned char, dev ) |
| 328 | __field( unsigned char, lbal ) |
| 329 | __field( unsigned char, lbam ) |
| 330 | __field( unsigned char, lbah ) |
| 331 | __field( unsigned char, nsect ) |
| 332 | __field( unsigned char, feature ) |
| 333 | __field( unsigned char, hob_lbal ) |
| 334 | __field( unsigned char, hob_lbam ) |
| 335 | __field( unsigned char, hob_lbah ) |
| 336 | __field( unsigned char, hob_nsect ) |
| 337 | __field( unsigned char, hob_feature ) |
| 338 | __field( unsigned char, proto ) |
| 339 | ), |
| 340 | |
| 341 | TP_fast_assign( |
| 342 | __entry->ata_port = ap->print_id; |
| 343 | __entry->proto = tf->protocol; |
| 344 | __entry->cmd = tf->command; |
| 345 | __entry->dev = tf->device; |
| 346 | __entry->lbal = tf->lbal; |
| 347 | __entry->lbam = tf->lbam; |
| 348 | __entry->lbah = tf->lbah; |
| 349 | __entry->hob_lbal = tf->hob_lbal; |
| 350 | __entry->hob_lbam = tf->hob_lbam; |
| 351 | __entry->hob_lbah = tf->hob_lbah; |
| 352 | __entry->feature = tf->feature; |
| 353 | __entry->hob_feature = tf->hob_feature; |
| 354 | __entry->nsect = tf->nsect; |
| 355 | __entry->hob_nsect = tf->hob_nsect; |
| 356 | ), |
| 357 | |
| 358 | TP_printk("ata_port=%u proto=%s cmd=%s%s " \ |
| 359 | " tf=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)" , |
| 360 | __entry->ata_port, |
| 361 | show_protocol_name(__entry->proto), |
| 362 | show_opcode_name(__entry->cmd), |
| 363 | __parse_subcmd(__entry->cmd, __entry->feature, __entry->hob_nsect), |
| 364 | __entry->cmd, __entry->feature, __entry->nsect, |
| 365 | __entry->lbal, __entry->lbam, __entry->lbah, |
| 366 | __entry->hob_feature, __entry->hob_nsect, |
| 367 | __entry->hob_lbal, __entry->hob_lbam, __entry->hob_lbah, |
| 368 | __entry->dev) |
| 369 | ); |
| 370 | |
| 371 | DECLARE_EVENT_CLASS(ata_exec_command_template, |
| 372 | |
| 373 | TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag), |
| 374 | |
| 375 | TP_ARGS(ap, tf, tag), |
| 376 | |
| 377 | TP_STRUCT__entry( |
| 378 | __field( unsigned int, ata_port ) |
| 379 | __field( unsigned int, tag ) |
| 380 | __field( unsigned char, cmd ) |
| 381 | __field( unsigned char, feature ) |
| 382 | __field( unsigned char, hob_nsect ) |
| 383 | __field( unsigned char, proto ) |
| 384 | ), |
| 385 | |
| 386 | TP_fast_assign( |
| 387 | __entry->ata_port = ap->print_id; |
| 388 | __entry->tag = tag; |
| 389 | __entry->proto = tf->protocol; |
| 390 | __entry->cmd = tf->command; |
| 391 | __entry->feature = tf->feature; |
| 392 | __entry->hob_nsect = tf->hob_nsect; |
| 393 | ), |
| 394 | |
| 395 | TP_printk("ata_port=%u tag=%d proto=%s cmd=%s%s" , |
| 396 | __entry->ata_port, __entry->tag, |
| 397 | show_protocol_name(__entry->proto), |
| 398 | show_opcode_name(__entry->cmd), |
| 399 | __parse_subcmd(__entry->cmd, __entry->feature, __entry->hob_nsect)) |
| 400 | ); |
| 401 | |
| 402 | DEFINE_EVENT(ata_exec_command_template, ata_exec_command, |
| 403 | TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag), |
| 404 | TP_ARGS(ap, tf, tag)); |
| 405 | |
| 406 | DEFINE_EVENT(ata_exec_command_template, ata_bmdma_setup, |
| 407 | TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag), |
| 408 | TP_ARGS(ap, tf, tag)); |
| 409 | |
| 410 | DEFINE_EVENT(ata_exec_command_template, ata_bmdma_start, |
| 411 | TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag), |
| 412 | TP_ARGS(ap, tf, tag)); |
| 413 | |
| 414 | DEFINE_EVENT(ata_exec_command_template, ata_bmdma_stop, |
| 415 | TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag), |
| 416 | TP_ARGS(ap, tf, tag)); |
| 417 | |
| 418 | TRACE_EVENT(ata_bmdma_status, |
| 419 | |
| 420 | TP_PROTO(struct ata_port *ap, unsigned int host_stat), |
| 421 | |
| 422 | TP_ARGS(ap, host_stat), |
| 423 | |
| 424 | TP_STRUCT__entry( |
| 425 | __field( unsigned int, ata_port ) |
| 426 | __field( unsigned int, tag ) |
| 427 | __field( unsigned char, host_stat ) |
| 428 | ), |
| 429 | |
| 430 | TP_fast_assign( |
| 431 | __entry->ata_port = ap->print_id; |
| 432 | __entry->host_stat = host_stat; |
| 433 | ), |
| 434 | |
| 435 | TP_printk("ata_port=%u host_stat=%s" , |
| 436 | __entry->ata_port, |
| 437 | __parse_host_stat(__entry->host_stat)) |
| 438 | ); |
| 439 | |
| 440 | TRACE_EVENT(ata_eh_link_autopsy, |
| 441 | |
| 442 | TP_PROTO(struct ata_device *dev, unsigned int eh_action, unsigned int eh_err_mask), |
| 443 | |
| 444 | TP_ARGS(dev, eh_action, eh_err_mask), |
| 445 | |
| 446 | TP_STRUCT__entry( |
| 447 | __field( unsigned int, ata_port ) |
| 448 | __field( unsigned int, ata_dev ) |
| 449 | __field( unsigned int, eh_action ) |
| 450 | __field( unsigned int, eh_err_mask) |
| 451 | ), |
| 452 | |
| 453 | TP_fast_assign( |
| 454 | __entry->ata_port = dev->link->ap->print_id; |
| 455 | __entry->ata_dev = dev->link->pmp + dev->devno; |
| 456 | __entry->eh_action = eh_action; |
| 457 | __entry->eh_err_mask = eh_err_mask; |
| 458 | ), |
| 459 | |
| 460 | TP_printk("ata_port=%u ata_dev=%u eh_action=%s err_mask=%s" , |
| 461 | __entry->ata_port, __entry->ata_dev, |
| 462 | __parse_eh_action(__entry->eh_action), |
| 463 | __parse_eh_err_mask(__entry->eh_err_mask)) |
| 464 | ); |
| 465 | |
| 466 | TRACE_EVENT(ata_eh_link_autopsy_qc, |
| 467 | |
| 468 | TP_PROTO(struct ata_queued_cmd *qc), |
| 469 | |
| 470 | TP_ARGS(qc), |
| 471 | |
| 472 | TP_STRUCT__entry( |
| 473 | __field( unsigned int, ata_port ) |
| 474 | __field( unsigned int, ata_dev ) |
| 475 | __field( unsigned int, tag ) |
| 476 | __field( unsigned int, qc_flags ) |
| 477 | __field( unsigned int, eh_err_mask) |
| 478 | ), |
| 479 | |
| 480 | TP_fast_assign( |
| 481 | __entry->ata_port = qc->ap->print_id; |
| 482 | __entry->ata_dev = qc->dev->link->pmp + qc->dev->devno; |
| 483 | __entry->tag = qc->tag; |
| 484 | __entry->qc_flags = qc->flags; |
| 485 | __entry->eh_err_mask = qc->err_mask; |
| 486 | ), |
| 487 | |
| 488 | TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s err_mask=%s" , |
| 489 | __entry->ata_port, __entry->ata_dev, __entry->tag, |
| 490 | __parse_qc_flags(__entry->qc_flags), |
| 491 | __parse_eh_err_mask(__entry->eh_err_mask)) |
| 492 | ); |
| 493 | |
| 494 | DECLARE_EVENT_CLASS(ata_eh_action_template, |
| 495 | |
| 496 | TP_PROTO(struct ata_link *link, unsigned int devno, unsigned int eh_action), |
| 497 | |
| 498 | TP_ARGS(link, devno, eh_action), |
| 499 | |
| 500 | TP_STRUCT__entry( |
| 501 | __field( unsigned int, ata_port ) |
| 502 | __field( unsigned int, ata_dev ) |
| 503 | __field( unsigned int, eh_action ) |
| 504 | ), |
| 505 | |
| 506 | TP_fast_assign( |
| 507 | __entry->ata_port = link->ap->print_id; |
| 508 | __entry->ata_dev = link->pmp + devno; |
| 509 | __entry->eh_action = eh_action; |
| 510 | ), |
| 511 | |
| 512 | TP_printk("ata_port=%u ata_dev=%u eh_action=%s" , |
| 513 | __entry->ata_port, __entry->ata_dev, |
| 514 | __parse_eh_action(__entry->eh_action)) |
| 515 | ); |
| 516 | |
| 517 | DEFINE_EVENT(ata_eh_action_template, ata_eh_about_to_do, |
| 518 | TP_PROTO(struct ata_link *link, unsigned int devno, unsigned int eh_action), |
| 519 | TP_ARGS(link, devno, eh_action)); |
| 520 | |
| 521 | DEFINE_EVENT(ata_eh_action_template, ata_eh_done, |
| 522 | TP_PROTO(struct ata_link *link, unsigned int devno, unsigned int eh_action), |
| 523 | TP_ARGS(link, devno, eh_action)); |
| 524 | |
| 525 | DECLARE_EVENT_CLASS(ata_link_reset_begin_template, |
| 526 | |
| 527 | TP_PROTO(struct ata_link *link, unsigned int *class, unsigned long deadline), |
| 528 | |
| 529 | TP_ARGS(link, class, deadline), |
| 530 | |
| 531 | TP_STRUCT__entry( |
| 532 | __field( unsigned int, ata_port ) |
| 533 | __array( unsigned int, class, 2 ) |
| 534 | __field( unsigned long, deadline ) |
| 535 | ), |
| 536 | |
| 537 | TP_fast_assign( |
| 538 | __entry->ata_port = link->ap->print_id; |
| 539 | memcpy(__entry->class, class, 2); |
| 540 | __entry->deadline = deadline; |
| 541 | ), |
| 542 | |
| 543 | TP_printk("ata_port=%u deadline=%lu classes=[%s,%s]" , |
| 544 | __entry->ata_port, __entry->deadline, |
| 545 | show_class_name(__entry->class[0]), |
| 546 | show_class_name(__entry->class[1])) |
| 547 | ); |
| 548 | |
| 549 | DEFINE_EVENT(ata_link_reset_begin_template, ata_link_hardreset_begin, |
| 550 | TP_PROTO(struct ata_link *link, unsigned int *class, unsigned long deadline), |
| 551 | TP_ARGS(link, class, deadline)); |
| 552 | |
| 553 | DEFINE_EVENT(ata_link_reset_begin_template, ata_slave_hardreset_begin, |
| 554 | TP_PROTO(struct ata_link *link, unsigned int *class, unsigned long deadline), |
| 555 | TP_ARGS(link, class, deadline)); |
| 556 | |
| 557 | DEFINE_EVENT(ata_link_reset_begin_template, ata_link_softreset_begin, |
| 558 | TP_PROTO(struct ata_link *link, unsigned int *class, unsigned long deadline), |
| 559 | TP_ARGS(link, class, deadline)); |
| 560 | |
| 561 | DECLARE_EVENT_CLASS(ata_link_reset_end_template, |
| 562 | |
| 563 | TP_PROTO(struct ata_link *link, unsigned int *class, int rc), |
| 564 | |
| 565 | TP_ARGS(link, class, rc), |
| 566 | |
| 567 | TP_STRUCT__entry( |
| 568 | __field( unsigned int, ata_port ) |
| 569 | __array( unsigned int, class, 2 ) |
| 570 | __field( int, rc ) |
| 571 | ), |
| 572 | |
| 573 | TP_fast_assign( |
| 574 | __entry->ata_port = link->ap->print_id; |
| 575 | memcpy(__entry->class, class, 2); |
| 576 | __entry->rc = rc; |
| 577 | ), |
| 578 | |
| 579 | TP_printk("ata_port=%u rc=%d class=[%s,%s]" , |
| 580 | __entry->ata_port, __entry->rc, |
| 581 | show_class_name(__entry->class[0]), |
| 582 | show_class_name(__entry->class[1])) |
| 583 | ); |
| 584 | |
| 585 | DEFINE_EVENT(ata_link_reset_end_template, ata_link_hardreset_end, |
| 586 | TP_PROTO(struct ata_link *link, unsigned int *class, int rc), |
| 587 | TP_ARGS(link, class, rc)); |
| 588 | |
| 589 | DEFINE_EVENT(ata_link_reset_end_template, ata_slave_hardreset_end, |
| 590 | TP_PROTO(struct ata_link *link, unsigned int *class, int rc), |
| 591 | TP_ARGS(link, class, rc)); |
| 592 | |
| 593 | DEFINE_EVENT(ata_link_reset_end_template, ata_link_softreset_end, |
| 594 | TP_PROTO(struct ata_link *link, unsigned int *class, int rc), |
| 595 | TP_ARGS(link, class, rc)); |
| 596 | |
| 597 | DEFINE_EVENT(ata_link_reset_end_template, ata_link_postreset, |
| 598 | TP_PROTO(struct ata_link *link, unsigned int *class, int rc), |
| 599 | TP_ARGS(link, class, rc)); |
| 600 | |
| 601 | DEFINE_EVENT(ata_link_reset_end_template, ata_slave_postreset, |
| 602 | TP_PROTO(struct ata_link *link, unsigned int *class, int rc), |
| 603 | TP_ARGS(link, class, rc)); |
| 604 | |
| 605 | DECLARE_EVENT_CLASS(ata_port_eh_begin_template, |
| 606 | |
| 607 | TP_PROTO(struct ata_port *ap), |
| 608 | |
| 609 | TP_ARGS(ap), |
| 610 | |
| 611 | TP_STRUCT__entry( |
| 612 | __field( unsigned int, ata_port ) |
| 613 | ), |
| 614 | |
| 615 | TP_fast_assign( |
| 616 | __entry->ata_port = ap->print_id; |
| 617 | ), |
| 618 | |
| 619 | TP_printk("ata_port=%u" , __entry->ata_port) |
| 620 | ); |
| 621 | |
| 622 | DEFINE_EVENT(ata_port_eh_begin_template, ata_std_sched_eh, |
| 623 | TP_PROTO(struct ata_port *ap), |
| 624 | TP_ARGS(ap)); |
| 625 | |
| 626 | DEFINE_EVENT(ata_port_eh_begin_template, ata_port_freeze, |
| 627 | TP_PROTO(struct ata_port *ap), |
| 628 | TP_ARGS(ap)); |
| 629 | |
| 630 | DEFINE_EVENT(ata_port_eh_begin_template, ata_port_thaw, |
| 631 | TP_PROTO(struct ata_port *ap), |
| 632 | TP_ARGS(ap)); |
| 633 | |
| 634 | DECLARE_EVENT_CLASS(ata_sff_hsm_template, |
| 635 | |
| 636 | TP_PROTO(struct ata_queued_cmd *qc, unsigned char status), |
| 637 | |
| 638 | TP_ARGS(qc, status), |
| 639 | |
| 640 | TP_STRUCT__entry( |
| 641 | __field( unsigned int, ata_port ) |
| 642 | __field( unsigned int, ata_dev ) |
| 643 | __field( unsigned int, tag ) |
| 644 | __field( unsigned int, qc_flags ) |
| 645 | __field( unsigned int, protocol ) |
| 646 | __field( unsigned int, hsm_state ) |
| 647 | __field( unsigned char, dev_state ) |
| 648 | ), |
| 649 | |
| 650 | TP_fast_assign( |
| 651 | __entry->ata_port = qc->ap->print_id; |
| 652 | __entry->ata_dev = qc->dev->link->pmp + qc->dev->devno; |
| 653 | __entry->tag = qc->tag; |
| 654 | __entry->qc_flags = qc->flags; |
| 655 | __entry->protocol = qc->tf.protocol; |
| 656 | __entry->hsm_state = qc->ap->hsm_task_state; |
| 657 | __entry->dev_state = status; |
| 658 | ), |
| 659 | |
| 660 | TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s flags=%s task_state=%s dev_stat=0x%X" , |
| 661 | __entry->ata_port, __entry->ata_dev, __entry->tag, |
| 662 | show_protocol_name(__entry->protocol), |
| 663 | __parse_qc_flags(__entry->qc_flags), |
| 664 | show_sff_hsm_state_name(__entry->hsm_state), |
| 665 | __entry->dev_state) |
| 666 | ); |
| 667 | |
| 668 | DEFINE_EVENT(ata_sff_hsm_template, ata_sff_hsm_state, |
| 669 | TP_PROTO(struct ata_queued_cmd *qc, unsigned char state), |
| 670 | TP_ARGS(qc, state)); |
| 671 | |
| 672 | DEFINE_EVENT(ata_sff_hsm_template, ata_sff_hsm_command_complete, |
| 673 | TP_PROTO(struct ata_queued_cmd *qc, unsigned char state), |
| 674 | TP_ARGS(qc, state)); |
| 675 | |
| 676 | DEFINE_EVENT(ata_sff_hsm_template, ata_sff_port_intr, |
| 677 | TP_PROTO(struct ata_queued_cmd *qc, unsigned char state), |
| 678 | TP_ARGS(qc, state)); |
| 679 | |
| 680 | DECLARE_EVENT_CLASS(ata_transfer_data_template, |
| 681 | |
| 682 | TP_PROTO(struct ata_queued_cmd *qc, unsigned int offset, unsigned int count), |
| 683 | |
| 684 | TP_ARGS(qc, offset, count), |
| 685 | |
| 686 | TP_STRUCT__entry( |
| 687 | __field( unsigned int, ata_port ) |
| 688 | __field( unsigned int, ata_dev ) |
| 689 | __field( unsigned int, tag ) |
| 690 | __field( unsigned int, flags ) |
| 691 | __field( unsigned int, offset ) |
| 692 | __field( unsigned int, bytes ) |
| 693 | ), |
| 694 | |
| 695 | TP_fast_assign( |
| 696 | __entry->ata_port = qc->ap->print_id; |
| 697 | __entry->ata_dev = qc->dev->link->pmp + qc->dev->devno; |
| 698 | __entry->tag = qc->tag; |
| 699 | __entry->flags = qc->tf.flags; |
| 700 | __entry->offset = offset; |
| 701 | __entry->bytes = count; |
| 702 | ), |
| 703 | |
| 704 | TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s offset=%u bytes=%u" , |
| 705 | __entry->ata_port, __entry->ata_dev, __entry->tag, |
| 706 | __parse_tf_flags(__entry->flags), |
| 707 | __entry->offset, __entry->bytes) |
| 708 | ); |
| 709 | |
| 710 | DEFINE_EVENT(ata_transfer_data_template, ata_sff_pio_transfer_data, |
| 711 | TP_PROTO(struct ata_queued_cmd *qc, unsigned int offset, unsigned int count), |
| 712 | TP_ARGS(qc, offset, count)); |
| 713 | |
| 714 | DEFINE_EVENT(ata_transfer_data_template, atapi_pio_transfer_data, |
| 715 | TP_PROTO(struct ata_queued_cmd *qc, unsigned int offset, unsigned int count), |
| 716 | TP_ARGS(qc, offset, count)); |
| 717 | |
| 718 | DEFINE_EVENT(ata_transfer_data_template, atapi_send_cdb, |
| 719 | TP_PROTO(struct ata_queued_cmd *qc, unsigned int offset, unsigned int count), |
| 720 | TP_ARGS(qc, offset, count)); |
| 721 | |
| 722 | DECLARE_EVENT_CLASS(ata_sff_template, |
| 723 | |
| 724 | TP_PROTO(struct ata_port *ap), |
| 725 | |
| 726 | TP_ARGS(ap), |
| 727 | |
| 728 | TP_STRUCT__entry( |
| 729 | __field( unsigned int, ata_port ) |
| 730 | __field( unsigned char, hsm_state ) |
| 731 | ), |
| 732 | |
| 733 | TP_fast_assign( |
| 734 | __entry->ata_port = ap->print_id; |
| 735 | __entry->hsm_state = ap->hsm_task_state; |
| 736 | ), |
| 737 | |
| 738 | TP_printk("ata_port=%u task_state=%s" , |
| 739 | __entry->ata_port, |
| 740 | show_sff_hsm_state_name(__entry->hsm_state)) |
| 741 | ); |
| 742 | |
| 743 | DEFINE_EVENT(ata_sff_template, ata_sff_flush_pio_task, |
| 744 | TP_PROTO(struct ata_port *ap), |
| 745 | TP_ARGS(ap)); |
| 746 | |
| 747 | #endif /* _TRACE_LIBATA_H */ |
| 748 | |
| 749 | /* This part must be outside protection */ |
| 750 | #include <trace/define_trace.h> |
| 751 | |