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