Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM libata
0004 
0005 #if !defined(_TRACE_LIBATA_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_LIBATA_H
0007 
0008 #include <linux/ata.h>
0009 #include <linux/libata.h>
0010 #include <linux/tracepoint.h>
0011 #include <linux/trace_seq.h>
0012 
0013 #define ata_opcode_name(opcode) { opcode, #opcode }
0014 #define show_opcode_name(val)                   \
0015     __print_symbolic(val,                   \
0016          ata_opcode_name(ATA_CMD_DEV_RESET),        \
0017          ata_opcode_name(ATA_CMD_CHK_POWER),        \
0018          ata_opcode_name(ATA_CMD_STANDBY),      \
0019          ata_opcode_name(ATA_CMD_IDLE),         \
0020          ata_opcode_name(ATA_CMD_EDD),          \
0021          ata_opcode_name(ATA_CMD_DOWNLOAD_MICRO),   \
0022          ata_opcode_name(ATA_CMD_DOWNLOAD_MICRO_DMA),   \
0023          ata_opcode_name(ATA_CMD_NOP),          \
0024          ata_opcode_name(ATA_CMD_FLUSH),        \
0025          ata_opcode_name(ATA_CMD_FLUSH_EXT),        \
0026          ata_opcode_name(ATA_CMD_ID_ATA),       \
0027          ata_opcode_name(ATA_CMD_ID_ATAPI),     \
0028          ata_opcode_name(ATA_CMD_SERVICE),      \
0029          ata_opcode_name(ATA_CMD_READ),         \
0030          ata_opcode_name(ATA_CMD_READ_EXT),     \
0031          ata_opcode_name(ATA_CMD_READ_QUEUED),      \
0032          ata_opcode_name(ATA_CMD_READ_STREAM_EXT),  \
0033          ata_opcode_name(ATA_CMD_READ_STREAM_DMA_EXT),  \
0034          ata_opcode_name(ATA_CMD_WRITE),        \
0035          ata_opcode_name(ATA_CMD_WRITE_EXT),        \
0036          ata_opcode_name(ATA_CMD_WRITE_QUEUED),     \
0037          ata_opcode_name(ATA_CMD_WRITE_STREAM_EXT), \
0038          ata_opcode_name(ATA_CMD_WRITE_STREAM_DMA_EXT), \
0039          ata_opcode_name(ATA_CMD_WRITE_FUA_EXT),    \
0040          ata_opcode_name(ATA_CMD_WRITE_QUEUED_FUA_EXT), \
0041          ata_opcode_name(ATA_CMD_FPDMA_READ),       \
0042          ata_opcode_name(ATA_CMD_FPDMA_WRITE),      \
0043          ata_opcode_name(ATA_CMD_NCQ_NON_DATA),     \
0044          ata_opcode_name(ATA_CMD_FPDMA_SEND),       \
0045          ata_opcode_name(ATA_CMD_FPDMA_RECV),       \
0046          ata_opcode_name(ATA_CMD_PIO_READ),     \
0047          ata_opcode_name(ATA_CMD_PIO_READ_EXT),     \
0048          ata_opcode_name(ATA_CMD_PIO_WRITE),        \
0049          ata_opcode_name(ATA_CMD_PIO_WRITE_EXT),    \
0050          ata_opcode_name(ATA_CMD_READ_MULTI),       \
0051          ata_opcode_name(ATA_CMD_READ_MULTI_EXT),   \
0052          ata_opcode_name(ATA_CMD_WRITE_MULTI),      \
0053          ata_opcode_name(ATA_CMD_WRITE_MULTI_EXT),  \
0054          ata_opcode_name(ATA_CMD_WRITE_MULTI_FUA_EXT),  \
0055          ata_opcode_name(ATA_CMD_SET_FEATURES),     \
0056          ata_opcode_name(ATA_CMD_SET_MULTI),        \
0057          ata_opcode_name(ATA_CMD_PACKET),       \
0058          ata_opcode_name(ATA_CMD_VERIFY),       \
0059          ata_opcode_name(ATA_CMD_VERIFY_EXT),       \
0060          ata_opcode_name(ATA_CMD_WRITE_UNCORR_EXT), \
0061          ata_opcode_name(ATA_CMD_STANDBYNOW1),      \
0062          ata_opcode_name(ATA_CMD_IDLEIMMEDIATE),    \
0063          ata_opcode_name(ATA_CMD_SLEEP),        \
0064          ata_opcode_name(ATA_CMD_INIT_DEV_PARAMS),  \
0065          ata_opcode_name(ATA_CMD_READ_NATIVE_MAX),  \
0066          ata_opcode_name(ATA_CMD_READ_NATIVE_MAX_EXT),  \
0067          ata_opcode_name(ATA_CMD_SET_MAX),      \
0068          ata_opcode_name(ATA_CMD_SET_MAX_EXT),      \
0069          ata_opcode_name(ATA_CMD_READ_LOG_EXT),     \
0070          ata_opcode_name(ATA_CMD_WRITE_LOG_EXT),    \
0071          ata_opcode_name(ATA_CMD_READ_LOG_DMA_EXT), \
0072          ata_opcode_name(ATA_CMD_WRITE_LOG_DMA_EXT),    \
0073          ata_opcode_name(ATA_CMD_TRUSTED_NONDATA),  \
0074          ata_opcode_name(ATA_CMD_TRUSTED_RCV),      \
0075          ata_opcode_name(ATA_CMD_TRUSTED_RCV_DMA),  \
0076          ata_opcode_name(ATA_CMD_TRUSTED_SND),      \
0077          ata_opcode_name(ATA_CMD_TRUSTED_SND_DMA),  \
0078          ata_opcode_name(ATA_CMD_PMP_READ),     \
0079          ata_opcode_name(ATA_CMD_PMP_READ_DMA),     \
0080          ata_opcode_name(ATA_CMD_PMP_WRITE),        \
0081          ata_opcode_name(ATA_CMD_PMP_WRITE_DMA),    \
0082          ata_opcode_name(ATA_CMD_CONF_OVERLAY),     \
0083          ata_opcode_name(ATA_CMD_SEC_SET_PASS),     \
0084          ata_opcode_name(ATA_CMD_SEC_UNLOCK),       \
0085          ata_opcode_name(ATA_CMD_SEC_ERASE_PREP),   \
0086          ata_opcode_name(ATA_CMD_SEC_ERASE_UNIT),   \
0087          ata_opcode_name(ATA_CMD_SEC_FREEZE_LOCK),  \
0088          ata_opcode_name(ATA_CMD_SEC_DISABLE_PASS), \
0089          ata_opcode_name(ATA_CMD_CONFIG_STREAM),    \
0090          ata_opcode_name(ATA_CMD_SMART),        \
0091          ata_opcode_name(ATA_CMD_MEDIA_LOCK),       \
0092          ata_opcode_name(ATA_CMD_MEDIA_UNLOCK),     \
0093          ata_opcode_name(ATA_CMD_DSM),          \
0094          ata_opcode_name(ATA_CMD_CHK_MED_CRD_TYP),  \
0095          ata_opcode_name(ATA_CMD_CFA_REQ_EXT_ERR),  \
0096          ata_opcode_name(ATA_CMD_CFA_WRITE_NE),     \
0097          ata_opcode_name(ATA_CMD_CFA_TRANS_SECT),   \
0098          ata_opcode_name(ATA_CMD_CFA_ERASE),        \
0099          ata_opcode_name(ATA_CMD_CFA_WRITE_MULT_NE),    \
0100          ata_opcode_name(ATA_CMD_REQ_SENSE_DATA),   \
0101          ata_opcode_name(ATA_CMD_SANITIZE_DEVICE),  \
0102          ata_opcode_name(ATA_CMD_ZAC_MGMT_IN),      \
0103          ata_opcode_name(ATA_CMD_ZAC_MGMT_OUT),     \
0104          ata_opcode_name(ATA_CMD_RESTORE),      \
0105          ata_opcode_name(ATA_CMD_READ_LONG),        \
0106          ata_opcode_name(ATA_CMD_READ_LONG_ONCE),   \
0107          ata_opcode_name(ATA_CMD_WRITE_LONG),       \
0108          ata_opcode_name(ATA_CMD_WRITE_LONG_ONCE))
0109 
0110 #define ata_error_name(result)  { result, #result }
0111 #define show_error_name(val)                \
0112     __print_symbolic(val,               \
0113         ata_error_name(ATA_ICRC),       \
0114         ata_error_name(ATA_UNC),        \
0115         ata_error_name(ATA_MC),         \
0116         ata_error_name(ATA_IDNF),       \
0117         ata_error_name(ATA_MCR),        \
0118         ata_error_name(ATA_ABORTED),        \
0119         ata_error_name(ATA_TRK0NF),     \
0120         ata_error_name(ATA_AMNF))
0121 
0122 #define ata_protocol_name(proto)    { proto, #proto }
0123 #define show_protocol_name(val)             \
0124     __print_symbolic(val,               \
0125         ata_protocol_name(ATA_PROT_UNKNOWN),    \
0126         ata_protocol_name(ATA_PROT_NODATA), \
0127         ata_protocol_name(ATA_PROT_PIO),    \
0128         ata_protocol_name(ATA_PROT_DMA),    \
0129         ata_protocol_name(ATA_PROT_NCQ),    \
0130         ata_protocol_name(ATA_PROT_NCQ_NODATA), \
0131         ata_protocol_name(ATAPI_PROT_NODATA),   \
0132         ata_protocol_name(ATAPI_PROT_PIO),  \
0133         ata_protocol_name(ATAPI_PROT_DMA))
0134 
0135 #define ata_class_name(class)   { class, #class }
0136 #define show_class_name(val)                \
0137     __print_symbolic(val,               \
0138         ata_class_name(ATA_DEV_UNKNOWN),    \
0139         ata_class_name(ATA_DEV_ATA),        \
0140         ata_class_name(ATA_DEV_ATA_UNSUP),  \
0141         ata_class_name(ATA_DEV_ATAPI),      \
0142         ata_class_name(ATA_DEV_ATAPI_UNSUP),    \
0143         ata_class_name(ATA_DEV_PMP),        \
0144         ata_class_name(ATA_DEV_PMP_UNSUP),  \
0145         ata_class_name(ATA_DEV_SEMB),       \
0146         ata_class_name(ATA_DEV_SEMB_UNSUP), \
0147         ata_class_name(ATA_DEV_ZAC),        \
0148         ata_class_name(ATA_DEV_ZAC_UNSUP),  \
0149         ata_class_name(ATA_DEV_NONE))
0150 
0151 #define ata_sff_hsm_state_name(state)   { state, #state }
0152 #define show_sff_hsm_state_name(val)                \
0153     __print_symbolic(val,               \
0154         ata_sff_hsm_state_name(HSM_ST_IDLE),    \
0155         ata_sff_hsm_state_name(HSM_ST_FIRST),   \
0156         ata_sff_hsm_state_name(HSM_ST),     \
0157         ata_sff_hsm_state_name(HSM_ST_LAST),    \
0158         ata_sff_hsm_state_name(HSM_ST_ERR))
0159 
0160 const char *libata_trace_parse_status(struct trace_seq*, unsigned char);
0161 #define __parse_status(s) libata_trace_parse_status(p, s)
0162 
0163 const char *libata_trace_parse_host_stat(struct trace_seq *, unsigned char);
0164 #define __parse_host_stat(s) libata_trace_parse_host_stat(p, s)
0165 
0166 const char *libata_trace_parse_eh_action(struct trace_seq *, unsigned int);
0167 #define __parse_eh_action(a) libata_trace_parse_eh_action(p, a)
0168 
0169 const char *libata_trace_parse_eh_err_mask(struct trace_seq *, unsigned int);
0170 #define __parse_eh_err_mask(m) libata_trace_parse_eh_err_mask(p, m)
0171 
0172 const char *libata_trace_parse_qc_flags(struct trace_seq *, unsigned int);
0173 #define __parse_qc_flags(f) libata_trace_parse_qc_flags(p, f)
0174 
0175 const char *libata_trace_parse_tf_flags(struct trace_seq *, unsigned int);
0176 #define __parse_tf_flags(f) libata_trace_parse_tf_flags(p, f)
0177 
0178 const char *libata_trace_parse_subcmd(struct trace_seq *, unsigned char,
0179                       unsigned char, unsigned char);
0180 #define __parse_subcmd(c,f,h) libata_trace_parse_subcmd(p, c, f, h)
0181 
0182 DECLARE_EVENT_CLASS(ata_qc_issue_template,
0183 
0184     TP_PROTO(struct ata_queued_cmd *qc),
0185 
0186     TP_ARGS(qc),
0187 
0188     TP_STRUCT__entry(
0189         __field( unsigned int,  ata_port )
0190         __field( unsigned int,  ata_dev )
0191         __field( unsigned int,  tag )
0192         __field( unsigned char, cmd )
0193         __field( unsigned char, dev )
0194         __field( unsigned char, lbal    )
0195         __field( unsigned char, lbam    )
0196         __field( unsigned char, lbah    )
0197         __field( unsigned char, nsect   )
0198         __field( unsigned char, feature )
0199         __field( unsigned char, hob_lbal )
0200         __field( unsigned char, hob_lbam )
0201         __field( unsigned char, hob_lbah )
0202         __field( unsigned char, hob_nsect )
0203         __field( unsigned char, hob_feature )
0204         __field( unsigned char, ctl )
0205         __field( unsigned char, proto )
0206         __field( unsigned long, flags )
0207     ),
0208 
0209     TP_fast_assign(
0210         __entry->ata_port   = qc->ap->print_id;
0211         __entry->ata_dev    = qc->dev->link->pmp + qc->dev->devno;
0212         __entry->tag        = qc->tag;
0213         __entry->proto      = qc->tf.protocol;
0214         __entry->cmd        = qc->tf.command;
0215         __entry->dev        = qc->tf.device;
0216         __entry->lbal       = qc->tf.lbal;
0217         __entry->lbam       = qc->tf.lbam;
0218         __entry->lbah       = qc->tf.lbah;
0219         __entry->hob_lbal   = qc->tf.hob_lbal;
0220         __entry->hob_lbam   = qc->tf.hob_lbam;
0221         __entry->hob_lbah   = qc->tf.hob_lbah;
0222         __entry->feature    = qc->tf.feature;
0223         __entry->hob_feature    = qc->tf.hob_feature;
0224         __entry->nsect      = qc->tf.nsect;
0225         __entry->hob_nsect  = qc->tf.hob_nsect;
0226     ),
0227 
0228     TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s cmd=%s%s " \
0229           " tf=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)",
0230           __entry->ata_port, __entry->ata_dev, __entry->tag,
0231           show_protocol_name(__entry->proto),
0232           show_opcode_name(__entry->cmd),
0233           __parse_subcmd(__entry->cmd, __entry->feature, __entry->hob_nsect),
0234           __entry->cmd, __entry->feature, __entry->nsect,
0235           __entry->lbal, __entry->lbam, __entry->lbah,
0236           __entry->hob_feature, __entry->hob_nsect,
0237           __entry->hob_lbal, __entry->hob_lbam, __entry->hob_lbah,
0238           __entry->dev)
0239 );
0240 
0241 DEFINE_EVENT(ata_qc_issue_template, ata_qc_prep,
0242          TP_PROTO(struct ata_queued_cmd *qc),
0243          TP_ARGS(qc));
0244 
0245 DEFINE_EVENT(ata_qc_issue_template, ata_qc_issue,
0246          TP_PROTO(struct ata_queued_cmd *qc),
0247          TP_ARGS(qc));
0248 
0249 DECLARE_EVENT_CLASS(ata_qc_complete_template,
0250 
0251     TP_PROTO(struct ata_queued_cmd *qc),
0252 
0253     TP_ARGS(qc),
0254 
0255     TP_STRUCT__entry(
0256         __field( unsigned int,  ata_port )
0257         __field( unsigned int,  ata_dev )
0258         __field( unsigned int,  tag )
0259         __field( unsigned char, status  )
0260         __field( unsigned char, dev )
0261         __field( unsigned char, lbal    )
0262         __field( unsigned char, lbam    )
0263         __field( unsigned char, lbah    )
0264         __field( unsigned char, nsect   )
0265         __field( unsigned char, error   )
0266         __field( unsigned char, hob_lbal )
0267         __field( unsigned char, hob_lbam )
0268         __field( unsigned char, hob_lbah )
0269         __field( unsigned char, hob_nsect )
0270         __field( unsigned char, hob_feature )
0271         __field( unsigned char, ctl )
0272         __field( unsigned long, flags )
0273     ),
0274 
0275     TP_fast_assign(
0276         __entry->ata_port   = qc->ap->print_id;
0277         __entry->ata_dev    = qc->dev->link->pmp + qc->dev->devno;
0278         __entry->tag        = qc->tag;
0279         __entry->status     = qc->result_tf.command;
0280         __entry->dev        = qc->result_tf.device;
0281         __entry->lbal       = qc->result_tf.lbal;
0282         __entry->lbam       = qc->result_tf.lbam;
0283         __entry->lbah       = qc->result_tf.lbah;
0284         __entry->hob_lbal   = qc->result_tf.hob_lbal;
0285         __entry->hob_lbam   = qc->result_tf.hob_lbam;
0286         __entry->hob_lbah   = qc->result_tf.hob_lbah;
0287         __entry->error      = qc->result_tf.feature;
0288         __entry->hob_feature    = qc->result_tf.hob_feature;
0289         __entry->nsect      = qc->result_tf.nsect;
0290         __entry->hob_nsect  = qc->result_tf.hob_nsect;
0291         __entry->flags      = qc->flags;
0292     ),
0293 
0294     TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s status=%s " \
0295           " res=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)",
0296           __entry->ata_port, __entry->ata_dev, __entry->tag,
0297           __parse_qc_flags(__entry->flags),
0298           __parse_status(__entry->status),
0299           __entry->status, __entry->error, __entry->nsect,
0300           __entry->lbal, __entry->lbam, __entry->lbah,
0301           __entry->hob_feature, __entry->hob_nsect,
0302           __entry->hob_lbal, __entry->hob_lbam, __entry->hob_lbah,
0303           __entry->dev)
0304 );
0305 
0306 DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_internal,
0307          TP_PROTO(struct ata_queued_cmd *qc),
0308          TP_ARGS(qc));
0309 
0310 DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_failed,
0311          TP_PROTO(struct ata_queued_cmd *qc),
0312          TP_ARGS(qc));
0313 
0314 DEFINE_EVENT(ata_qc_complete_template, ata_qc_complete_done,
0315          TP_PROTO(struct ata_queued_cmd *qc),
0316          TP_ARGS(qc));
0317 
0318 TRACE_EVENT(ata_tf_load,
0319 
0320     TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf),
0321 
0322     TP_ARGS(ap, tf),
0323 
0324     TP_STRUCT__entry(
0325         __field( unsigned int,  ata_port )
0326         __field( unsigned char, cmd )
0327         __field( unsigned char, dev )
0328         __field( unsigned char, lbal    )
0329         __field( unsigned char, lbam    )
0330         __field( unsigned char, lbah    )
0331         __field( unsigned char, nsect   )
0332         __field( unsigned char, feature )
0333         __field( unsigned char, hob_lbal )
0334         __field( unsigned char, hob_lbam )
0335         __field( unsigned char, hob_lbah )
0336         __field( unsigned char, hob_nsect )
0337         __field( unsigned char, hob_feature )
0338         __field( unsigned char, proto   )
0339     ),
0340 
0341     TP_fast_assign(
0342         __entry->ata_port   = ap->print_id;
0343         __entry->proto      = tf->protocol;
0344         __entry->cmd        = tf->command;
0345         __entry->dev        = tf->device;
0346         __entry->lbal       = tf->lbal;
0347         __entry->lbam       = tf->lbam;
0348         __entry->lbah       = tf->lbah;
0349         __entry->hob_lbal   = tf->hob_lbal;
0350         __entry->hob_lbam   = tf->hob_lbam;
0351         __entry->hob_lbah   = tf->hob_lbah;
0352         __entry->feature    = tf->feature;
0353         __entry->hob_feature    = tf->hob_feature;
0354         __entry->nsect      = tf->nsect;
0355         __entry->hob_nsect  = tf->hob_nsect;
0356     ),
0357 
0358     TP_printk("ata_port=%u proto=%s cmd=%s%s " \
0359           " tf=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)",
0360           __entry->ata_port,
0361           show_protocol_name(__entry->proto),
0362           show_opcode_name(__entry->cmd),
0363           __parse_subcmd(__entry->cmd, __entry->feature, __entry->hob_nsect),
0364           __entry->cmd, __entry->feature, __entry->nsect,
0365           __entry->lbal, __entry->lbam, __entry->lbah,
0366           __entry->hob_feature, __entry->hob_nsect,
0367           __entry->hob_lbal, __entry->hob_lbam, __entry->hob_lbah,
0368           __entry->dev)
0369 );
0370 
0371 DECLARE_EVENT_CLASS(ata_exec_command_template,
0372 
0373     TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag),
0374 
0375     TP_ARGS(ap, tf, tag),
0376 
0377     TP_STRUCT__entry(
0378         __field( unsigned int,  ata_port )
0379         __field( unsigned int,  tag )
0380         __field( unsigned char, cmd )
0381         __field( unsigned char, feature )
0382         __field( unsigned char, hob_nsect )
0383         __field( unsigned char, proto   )
0384     ),
0385 
0386     TP_fast_assign(
0387         __entry->ata_port   = ap->print_id;
0388         __entry->tag        = tag;
0389         __entry->proto      = tf->protocol;
0390         __entry->cmd        = tf->command;
0391         __entry->feature    = tf->feature;
0392         __entry->hob_nsect  = tf->hob_nsect;
0393     ),
0394 
0395     TP_printk("ata_port=%u tag=%d proto=%s cmd=%s%s",
0396           __entry->ata_port, __entry->tag,
0397           show_protocol_name(__entry->proto),
0398           show_opcode_name(__entry->cmd),
0399           __parse_subcmd(__entry->cmd, __entry->feature, __entry->hob_nsect))
0400 );
0401 
0402 DEFINE_EVENT(ata_exec_command_template, ata_exec_command,
0403          TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag),
0404          TP_ARGS(ap, tf, tag));
0405 
0406 DEFINE_EVENT(ata_exec_command_template, ata_bmdma_setup,
0407          TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag),
0408          TP_ARGS(ap, tf, tag));
0409 
0410 DEFINE_EVENT(ata_exec_command_template, ata_bmdma_start,
0411          TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag),
0412          TP_ARGS(ap, tf, tag));
0413 
0414 DEFINE_EVENT(ata_exec_command_template, ata_bmdma_stop,
0415          TP_PROTO(struct ata_port *ap, const struct ata_taskfile *tf, unsigned int tag),
0416          TP_ARGS(ap, tf, tag));
0417 
0418 TRACE_EVENT(ata_bmdma_status,
0419 
0420     TP_PROTO(struct ata_port *ap, unsigned int host_stat),
0421 
0422     TP_ARGS(ap, host_stat),
0423 
0424     TP_STRUCT__entry(
0425         __field( unsigned int,  ata_port )
0426         __field( unsigned int,  tag )
0427         __field( unsigned char, host_stat )
0428     ),
0429 
0430     TP_fast_assign(
0431         __entry->ata_port   = ap->print_id;
0432         __entry->host_stat  = host_stat;
0433     ),
0434 
0435     TP_printk("ata_port=%u host_stat=%s",
0436           __entry->ata_port,
0437           __parse_host_stat(__entry->host_stat))
0438 );
0439 
0440 TRACE_EVENT(ata_eh_link_autopsy,
0441 
0442     TP_PROTO(struct ata_device *dev, unsigned int eh_action, unsigned int eh_err_mask),
0443 
0444     TP_ARGS(dev, eh_action, eh_err_mask),
0445 
0446     TP_STRUCT__entry(
0447         __field( unsigned int,  ata_port )
0448         __field( unsigned int,  ata_dev )
0449         __field( unsigned int,  eh_action )
0450         __field( unsigned int,  eh_err_mask)
0451     ),
0452 
0453     TP_fast_assign(
0454         __entry->ata_port   = dev->link->ap->print_id;
0455         __entry->ata_dev    = dev->link->pmp + dev->devno;
0456         __entry->eh_action  = eh_action;
0457         __entry->eh_err_mask    = eh_err_mask;
0458     ),
0459 
0460     TP_printk("ata_port=%u ata_dev=%u eh_action=%s err_mask=%s",
0461           __entry->ata_port, __entry->ata_dev,
0462           __parse_eh_action(__entry->eh_action),
0463           __parse_eh_err_mask(__entry->eh_err_mask))
0464 );
0465 
0466 TRACE_EVENT(ata_eh_link_autopsy_qc,
0467 
0468     TP_PROTO(struct ata_queued_cmd *qc),
0469 
0470     TP_ARGS(qc),
0471 
0472     TP_STRUCT__entry(
0473         __field( unsigned int,  ata_port )
0474         __field( unsigned int,  ata_dev )
0475         __field( unsigned int,  tag )
0476         __field( unsigned int,  qc_flags )
0477         __field( unsigned int,  eh_err_mask)
0478     ),
0479 
0480     TP_fast_assign(
0481         __entry->ata_port   = qc->ap->print_id;
0482         __entry->ata_dev    = qc->dev->link->pmp + qc->dev->devno;
0483         __entry->tag        = qc->tag;
0484         __entry->qc_flags   = qc->flags;
0485         __entry->eh_err_mask    = qc->err_mask;
0486     ),
0487 
0488     TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s err_mask=%s",
0489           __entry->ata_port, __entry->ata_dev, __entry->tag,
0490           __parse_qc_flags(__entry->qc_flags),
0491           __parse_eh_err_mask(__entry->eh_err_mask))
0492 );
0493 
0494 DECLARE_EVENT_CLASS(ata_eh_action_template,
0495 
0496     TP_PROTO(struct ata_link *link, unsigned int devno, unsigned int eh_action),
0497 
0498     TP_ARGS(link, devno, eh_action),
0499 
0500     TP_STRUCT__entry(
0501         __field( unsigned int,  ata_port )
0502         __field( unsigned int,  ata_dev )
0503         __field( unsigned int,  eh_action )
0504     ),
0505 
0506     TP_fast_assign(
0507         __entry->ata_port   = link->ap->print_id;
0508         __entry->ata_dev    = link->pmp + devno;
0509         __entry->eh_action  = eh_action;
0510     ),
0511 
0512     TP_printk("ata_port=%u ata_dev=%u eh_action=%s",
0513           __entry->ata_port, __entry->ata_dev,
0514           __parse_eh_action(__entry->eh_action))
0515 );
0516 
0517 DEFINE_EVENT(ata_eh_action_template, ata_eh_about_to_do,
0518          TP_PROTO(struct ata_link *link, unsigned int devno, unsigned int eh_action),
0519          TP_ARGS(link, devno, eh_action));
0520 
0521 DEFINE_EVENT(ata_eh_action_template, ata_eh_done,
0522          TP_PROTO(struct ata_link *link, unsigned int devno, unsigned int eh_action),
0523          TP_ARGS(link, devno, eh_action));
0524 
0525 DECLARE_EVENT_CLASS(ata_link_reset_begin_template,
0526 
0527     TP_PROTO(struct ata_link *link, unsigned int *class, unsigned long deadline),
0528 
0529     TP_ARGS(link, class, deadline),
0530 
0531     TP_STRUCT__entry(
0532         __field( unsigned int,  ata_port )
0533         __array( unsigned int,  class, 2 )
0534         __field( unsigned long, deadline )
0535     ),
0536 
0537     TP_fast_assign(
0538         __entry->ata_port   = link->ap->print_id;
0539         memcpy(__entry->class, class, 2);
0540         __entry->deadline   = deadline;
0541     ),
0542 
0543     TP_printk("ata_port=%u deadline=%lu classes=[%s,%s]",
0544           __entry->ata_port, __entry->deadline,
0545           show_class_name(__entry->class[0]),
0546           show_class_name(__entry->class[1]))
0547 );
0548 
0549 DEFINE_EVENT(ata_link_reset_begin_template, ata_link_hardreset_begin,
0550          TP_PROTO(struct ata_link *link, unsigned int *class, unsigned long deadline),
0551          TP_ARGS(link, class, deadline));
0552 
0553 DEFINE_EVENT(ata_link_reset_begin_template, ata_slave_hardreset_begin,
0554          TP_PROTO(struct ata_link *link, unsigned int *class, unsigned long deadline),
0555          TP_ARGS(link, class, deadline));
0556 
0557 DEFINE_EVENT(ata_link_reset_begin_template, ata_link_softreset_begin,
0558          TP_PROTO(struct ata_link *link, unsigned int *class, unsigned long deadline),
0559          TP_ARGS(link, class, deadline));
0560 
0561 DECLARE_EVENT_CLASS(ata_link_reset_end_template,
0562 
0563     TP_PROTO(struct ata_link *link, unsigned int *class, int rc),
0564 
0565     TP_ARGS(link, class, rc),
0566 
0567     TP_STRUCT__entry(
0568         __field( unsigned int,  ata_port )
0569         __array( unsigned int,  class, 2 )
0570         __field( int,       rc  )
0571     ),
0572 
0573     TP_fast_assign(
0574         __entry->ata_port   = link->ap->print_id;
0575         memcpy(__entry->class, class, 2);
0576         __entry->rc     = rc;
0577     ),
0578 
0579     TP_printk("ata_port=%u rc=%d class=[%s,%s]",
0580           __entry->ata_port, __entry->rc,
0581           show_class_name(__entry->class[0]),
0582           show_class_name(__entry->class[1]))
0583 );
0584 
0585 DEFINE_EVENT(ata_link_reset_end_template, ata_link_hardreset_end,
0586          TP_PROTO(struct ata_link *link, unsigned int *class, int rc),
0587          TP_ARGS(link, class, rc));
0588 
0589 DEFINE_EVENT(ata_link_reset_end_template, ata_slave_hardreset_end,
0590          TP_PROTO(struct ata_link *link, unsigned int *class, int rc),
0591          TP_ARGS(link, class, rc));
0592 
0593 DEFINE_EVENT(ata_link_reset_end_template, ata_link_softreset_end,
0594          TP_PROTO(struct ata_link *link, unsigned int *class, int rc),
0595          TP_ARGS(link, class, rc));
0596 
0597 DEFINE_EVENT(ata_link_reset_end_template, ata_link_postreset,
0598          TP_PROTO(struct ata_link *link, unsigned int *class, int rc),
0599          TP_ARGS(link, class, rc));
0600 
0601 DEFINE_EVENT(ata_link_reset_end_template, ata_slave_postreset,
0602          TP_PROTO(struct ata_link *link, unsigned int *class, int rc),
0603          TP_ARGS(link, class, rc));
0604 
0605 DECLARE_EVENT_CLASS(ata_port_eh_begin_template,
0606 
0607     TP_PROTO(struct ata_port *ap),
0608 
0609     TP_ARGS(ap),
0610 
0611     TP_STRUCT__entry(
0612         __field( unsigned int,  ata_port )
0613     ),
0614 
0615     TP_fast_assign(
0616         __entry->ata_port   = ap->print_id;
0617     ),
0618 
0619     TP_printk("ata_port=%u", __entry->ata_port)
0620 );
0621 
0622 DEFINE_EVENT(ata_port_eh_begin_template, ata_std_sched_eh,
0623          TP_PROTO(struct ata_port *ap),
0624          TP_ARGS(ap));
0625 
0626 DEFINE_EVENT(ata_port_eh_begin_template, ata_port_freeze,
0627          TP_PROTO(struct ata_port *ap),
0628          TP_ARGS(ap));
0629 
0630 DEFINE_EVENT(ata_port_eh_begin_template, ata_port_thaw,
0631          TP_PROTO(struct ata_port *ap),
0632          TP_ARGS(ap));
0633 
0634 DECLARE_EVENT_CLASS(ata_sff_hsm_template,
0635 
0636     TP_PROTO(struct ata_queued_cmd *qc, unsigned char status),
0637 
0638     TP_ARGS(qc, status),
0639 
0640     TP_STRUCT__entry(
0641         __field( unsigned int,  ata_port )
0642         __field( unsigned int,  ata_dev )
0643         __field( unsigned int,  tag )
0644         __field( unsigned int,  qc_flags )
0645         __field( unsigned int,  protocol )
0646         __field( unsigned int,  hsm_state )
0647         __field( unsigned char, dev_state )
0648     ),
0649 
0650     TP_fast_assign(
0651         __entry->ata_port   = qc->ap->print_id;
0652         __entry->ata_dev    = qc->dev->link->pmp + qc->dev->devno;
0653         __entry->tag        = qc->tag;
0654         __entry->qc_flags   = qc->flags;
0655         __entry->protocol   = qc->tf.protocol;
0656         __entry->hsm_state  = qc->ap->hsm_task_state;
0657         __entry->dev_state  = status;
0658     ),
0659 
0660     TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s flags=%s task_state=%s dev_stat=0x%X",
0661           __entry->ata_port, __entry->ata_dev, __entry->tag,
0662           show_protocol_name(__entry->protocol),
0663           __parse_qc_flags(__entry->qc_flags),
0664           show_sff_hsm_state_name(__entry->hsm_state),
0665           __entry->dev_state)
0666 );
0667 
0668 DEFINE_EVENT(ata_sff_hsm_template, ata_sff_hsm_state,
0669     TP_PROTO(struct ata_queued_cmd *qc, unsigned char state),
0670     TP_ARGS(qc, state));
0671 
0672 DEFINE_EVENT(ata_sff_hsm_template, ata_sff_hsm_command_complete,
0673     TP_PROTO(struct ata_queued_cmd *qc, unsigned char state),
0674     TP_ARGS(qc, state));
0675 
0676 DEFINE_EVENT(ata_sff_hsm_template, ata_sff_port_intr,
0677     TP_PROTO(struct ata_queued_cmd *qc, unsigned char state),
0678     TP_ARGS(qc, state));
0679 
0680 DECLARE_EVENT_CLASS(ata_transfer_data_template,
0681 
0682     TP_PROTO(struct ata_queued_cmd *qc, unsigned int offset, unsigned int count),
0683 
0684     TP_ARGS(qc, offset, count),
0685 
0686     TP_STRUCT__entry(
0687         __field( unsigned int,  ata_port )
0688         __field( unsigned int,  ata_dev )
0689         __field( unsigned int,  tag )
0690         __field( unsigned int,  flags   )
0691         __field( unsigned int,  offset  )
0692         __field( unsigned int,  bytes   )
0693     ),
0694 
0695     TP_fast_assign(
0696         __entry->ata_port   = qc->ap->print_id;
0697         __entry->ata_dev    = qc->dev->link->pmp + qc->dev->devno;
0698         __entry->tag        = qc->tag;
0699         __entry->flags      = qc->tf.flags;
0700         __entry->offset     = offset;
0701         __entry->bytes      = count;
0702     ),
0703 
0704     TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s offset=%u bytes=%u",
0705           __entry->ata_port, __entry->ata_dev, __entry->tag,
0706           __parse_tf_flags(__entry->flags),
0707           __entry->offset, __entry->bytes)
0708 );
0709 
0710 DEFINE_EVENT(ata_transfer_data_template, ata_sff_pio_transfer_data,
0711          TP_PROTO(struct ata_queued_cmd *qc, unsigned int offset, unsigned int count),
0712          TP_ARGS(qc, offset, count));
0713 
0714 DEFINE_EVENT(ata_transfer_data_template, atapi_pio_transfer_data,
0715          TP_PROTO(struct ata_queued_cmd *qc, unsigned int offset, unsigned int count),
0716          TP_ARGS(qc, offset, count));
0717 
0718 DEFINE_EVENT(ata_transfer_data_template, atapi_send_cdb,
0719          TP_PROTO(struct ata_queued_cmd *qc, unsigned int offset, unsigned int count),
0720          TP_ARGS(qc, offset, count));
0721 
0722 DECLARE_EVENT_CLASS(ata_sff_template,
0723 
0724     TP_PROTO(struct ata_port *ap),
0725 
0726     TP_ARGS(ap),
0727 
0728     TP_STRUCT__entry(
0729         __field( unsigned int,  ata_port )
0730         __field( unsigned char, hsm_state )
0731     ),
0732 
0733     TP_fast_assign(
0734         __entry->ata_port   = ap->print_id;
0735         __entry->hsm_state  = ap->hsm_task_state;
0736     ),
0737 
0738     TP_printk("ata_port=%u task_state=%s",
0739           __entry->ata_port,
0740           show_sff_hsm_state_name(__entry->hsm_state))
0741 );
0742 
0743 DEFINE_EVENT(ata_sff_template, ata_sff_flush_pio_task,
0744          TP_PROTO(struct ata_port *ap),
0745          TP_ARGS(ap));
0746 
0747 #endif /*  _TRACE_LIBATA_H */
0748 
0749 /* This part must be outside protection */
0750 #include <trace/define_trace.h>