1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #undef TRACE_SYSTEM 3*4882a593Smuzhiyun #define TRACE_SYSTEM scsi 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #if !defined(_TRACE_SCSI_H) || defined(TRACE_HEADER_MULTI_READ) 6*4882a593Smuzhiyun #define _TRACE_SCSI_H 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <scsi/scsi_cmnd.h> 9*4882a593Smuzhiyun #include <scsi/scsi_host.h> 10*4882a593Smuzhiyun #include <linux/tracepoint.h> 11*4882a593Smuzhiyun #include <linux/trace_seq.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define scsi_opcode_name(opcode) { opcode, #opcode } 14*4882a593Smuzhiyun #define show_opcode_name(val) \ 15*4882a593Smuzhiyun __print_symbolic(val, \ 16*4882a593Smuzhiyun scsi_opcode_name(TEST_UNIT_READY), \ 17*4882a593Smuzhiyun scsi_opcode_name(REZERO_UNIT), \ 18*4882a593Smuzhiyun scsi_opcode_name(REQUEST_SENSE), \ 19*4882a593Smuzhiyun scsi_opcode_name(FORMAT_UNIT), \ 20*4882a593Smuzhiyun scsi_opcode_name(READ_BLOCK_LIMITS), \ 21*4882a593Smuzhiyun scsi_opcode_name(REASSIGN_BLOCKS), \ 22*4882a593Smuzhiyun scsi_opcode_name(INITIALIZE_ELEMENT_STATUS), \ 23*4882a593Smuzhiyun scsi_opcode_name(READ_6), \ 24*4882a593Smuzhiyun scsi_opcode_name(WRITE_6), \ 25*4882a593Smuzhiyun scsi_opcode_name(SEEK_6), \ 26*4882a593Smuzhiyun scsi_opcode_name(READ_REVERSE), \ 27*4882a593Smuzhiyun scsi_opcode_name(WRITE_FILEMARKS), \ 28*4882a593Smuzhiyun scsi_opcode_name(SPACE), \ 29*4882a593Smuzhiyun scsi_opcode_name(INQUIRY), \ 30*4882a593Smuzhiyun scsi_opcode_name(RECOVER_BUFFERED_DATA), \ 31*4882a593Smuzhiyun scsi_opcode_name(MODE_SELECT), \ 32*4882a593Smuzhiyun scsi_opcode_name(RESERVE), \ 33*4882a593Smuzhiyun scsi_opcode_name(RELEASE), \ 34*4882a593Smuzhiyun scsi_opcode_name(COPY), \ 35*4882a593Smuzhiyun scsi_opcode_name(ERASE), \ 36*4882a593Smuzhiyun scsi_opcode_name(MODE_SENSE), \ 37*4882a593Smuzhiyun scsi_opcode_name(START_STOP), \ 38*4882a593Smuzhiyun scsi_opcode_name(RECEIVE_DIAGNOSTIC), \ 39*4882a593Smuzhiyun scsi_opcode_name(SEND_DIAGNOSTIC), \ 40*4882a593Smuzhiyun scsi_opcode_name(ALLOW_MEDIUM_REMOVAL), \ 41*4882a593Smuzhiyun scsi_opcode_name(SET_WINDOW), \ 42*4882a593Smuzhiyun scsi_opcode_name(READ_CAPACITY), \ 43*4882a593Smuzhiyun scsi_opcode_name(READ_10), \ 44*4882a593Smuzhiyun scsi_opcode_name(WRITE_10), \ 45*4882a593Smuzhiyun scsi_opcode_name(SEEK_10), \ 46*4882a593Smuzhiyun scsi_opcode_name(POSITION_TO_ELEMENT), \ 47*4882a593Smuzhiyun scsi_opcode_name(WRITE_VERIFY), \ 48*4882a593Smuzhiyun scsi_opcode_name(VERIFY), \ 49*4882a593Smuzhiyun scsi_opcode_name(SEARCH_HIGH), \ 50*4882a593Smuzhiyun scsi_opcode_name(SEARCH_EQUAL), \ 51*4882a593Smuzhiyun scsi_opcode_name(SEARCH_LOW), \ 52*4882a593Smuzhiyun scsi_opcode_name(SET_LIMITS), \ 53*4882a593Smuzhiyun scsi_opcode_name(PRE_FETCH), \ 54*4882a593Smuzhiyun scsi_opcode_name(READ_POSITION), \ 55*4882a593Smuzhiyun scsi_opcode_name(SYNCHRONIZE_CACHE), \ 56*4882a593Smuzhiyun scsi_opcode_name(LOCK_UNLOCK_CACHE), \ 57*4882a593Smuzhiyun scsi_opcode_name(READ_DEFECT_DATA), \ 58*4882a593Smuzhiyun scsi_opcode_name(MEDIUM_SCAN), \ 59*4882a593Smuzhiyun scsi_opcode_name(COMPARE), \ 60*4882a593Smuzhiyun scsi_opcode_name(COPY_VERIFY), \ 61*4882a593Smuzhiyun scsi_opcode_name(WRITE_BUFFER), \ 62*4882a593Smuzhiyun scsi_opcode_name(READ_BUFFER), \ 63*4882a593Smuzhiyun scsi_opcode_name(UPDATE_BLOCK), \ 64*4882a593Smuzhiyun scsi_opcode_name(READ_LONG), \ 65*4882a593Smuzhiyun scsi_opcode_name(WRITE_LONG), \ 66*4882a593Smuzhiyun scsi_opcode_name(CHANGE_DEFINITION), \ 67*4882a593Smuzhiyun scsi_opcode_name(WRITE_SAME), \ 68*4882a593Smuzhiyun scsi_opcode_name(UNMAP), \ 69*4882a593Smuzhiyun scsi_opcode_name(READ_TOC), \ 70*4882a593Smuzhiyun scsi_opcode_name(LOG_SELECT), \ 71*4882a593Smuzhiyun scsi_opcode_name(LOG_SENSE), \ 72*4882a593Smuzhiyun scsi_opcode_name(XDWRITEREAD_10), \ 73*4882a593Smuzhiyun scsi_opcode_name(MODE_SELECT_10), \ 74*4882a593Smuzhiyun scsi_opcode_name(RESERVE_10), \ 75*4882a593Smuzhiyun scsi_opcode_name(RELEASE_10), \ 76*4882a593Smuzhiyun scsi_opcode_name(MODE_SENSE_10), \ 77*4882a593Smuzhiyun scsi_opcode_name(PERSISTENT_RESERVE_IN), \ 78*4882a593Smuzhiyun scsi_opcode_name(PERSISTENT_RESERVE_OUT), \ 79*4882a593Smuzhiyun scsi_opcode_name(VARIABLE_LENGTH_CMD), \ 80*4882a593Smuzhiyun scsi_opcode_name(REPORT_LUNS), \ 81*4882a593Smuzhiyun scsi_opcode_name(MAINTENANCE_IN), \ 82*4882a593Smuzhiyun scsi_opcode_name(MAINTENANCE_OUT), \ 83*4882a593Smuzhiyun scsi_opcode_name(MOVE_MEDIUM), \ 84*4882a593Smuzhiyun scsi_opcode_name(EXCHANGE_MEDIUM), \ 85*4882a593Smuzhiyun scsi_opcode_name(READ_12), \ 86*4882a593Smuzhiyun scsi_opcode_name(WRITE_12), \ 87*4882a593Smuzhiyun scsi_opcode_name(WRITE_VERIFY_12), \ 88*4882a593Smuzhiyun scsi_opcode_name(SEARCH_HIGH_12), \ 89*4882a593Smuzhiyun scsi_opcode_name(SEARCH_EQUAL_12), \ 90*4882a593Smuzhiyun scsi_opcode_name(SEARCH_LOW_12), \ 91*4882a593Smuzhiyun scsi_opcode_name(READ_ELEMENT_STATUS), \ 92*4882a593Smuzhiyun scsi_opcode_name(SEND_VOLUME_TAG), \ 93*4882a593Smuzhiyun scsi_opcode_name(WRITE_LONG_2), \ 94*4882a593Smuzhiyun scsi_opcode_name(READ_16), \ 95*4882a593Smuzhiyun scsi_opcode_name(WRITE_16), \ 96*4882a593Smuzhiyun scsi_opcode_name(VERIFY_16), \ 97*4882a593Smuzhiyun scsi_opcode_name(WRITE_SAME_16), \ 98*4882a593Smuzhiyun scsi_opcode_name(ZBC_OUT), \ 99*4882a593Smuzhiyun scsi_opcode_name(ZBC_IN), \ 100*4882a593Smuzhiyun scsi_opcode_name(SERVICE_ACTION_IN_16), \ 101*4882a593Smuzhiyun scsi_opcode_name(READ_32), \ 102*4882a593Smuzhiyun scsi_opcode_name(WRITE_32), \ 103*4882a593Smuzhiyun scsi_opcode_name(WRITE_SAME_32), \ 104*4882a593Smuzhiyun scsi_opcode_name(ATA_16), \ 105*4882a593Smuzhiyun scsi_opcode_name(ATA_12)) 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun #define scsi_hostbyte_name(result) { result, #result } 108*4882a593Smuzhiyun #define show_hostbyte_name(val) \ 109*4882a593Smuzhiyun __print_symbolic(val, \ 110*4882a593Smuzhiyun scsi_hostbyte_name(DID_OK), \ 111*4882a593Smuzhiyun scsi_hostbyte_name(DID_NO_CONNECT), \ 112*4882a593Smuzhiyun scsi_hostbyte_name(DID_BUS_BUSY), \ 113*4882a593Smuzhiyun scsi_hostbyte_name(DID_TIME_OUT), \ 114*4882a593Smuzhiyun scsi_hostbyte_name(DID_BAD_TARGET), \ 115*4882a593Smuzhiyun scsi_hostbyte_name(DID_ABORT), \ 116*4882a593Smuzhiyun scsi_hostbyte_name(DID_PARITY), \ 117*4882a593Smuzhiyun scsi_hostbyte_name(DID_ERROR), \ 118*4882a593Smuzhiyun scsi_hostbyte_name(DID_RESET), \ 119*4882a593Smuzhiyun scsi_hostbyte_name(DID_BAD_INTR), \ 120*4882a593Smuzhiyun scsi_hostbyte_name(DID_PASSTHROUGH), \ 121*4882a593Smuzhiyun scsi_hostbyte_name(DID_SOFT_ERROR), \ 122*4882a593Smuzhiyun scsi_hostbyte_name(DID_IMM_RETRY), \ 123*4882a593Smuzhiyun scsi_hostbyte_name(DID_REQUEUE), \ 124*4882a593Smuzhiyun scsi_hostbyte_name(DID_TRANSPORT_DISRUPTED), \ 125*4882a593Smuzhiyun scsi_hostbyte_name(DID_TRANSPORT_FAILFAST)) 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun #define scsi_driverbyte_name(result) { result, #result } 128*4882a593Smuzhiyun #define show_driverbyte_name(val) \ 129*4882a593Smuzhiyun __print_symbolic(val, \ 130*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_OK), \ 131*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_BUSY), \ 132*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_SOFT), \ 133*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_MEDIA), \ 134*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_ERROR), \ 135*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_INVALID), \ 136*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_TIMEOUT), \ 137*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_HARD), \ 138*4882a593Smuzhiyun scsi_driverbyte_name(DRIVER_SENSE)) 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun #define scsi_msgbyte_name(result) { result, #result } 141*4882a593Smuzhiyun #define show_msgbyte_name(val) \ 142*4882a593Smuzhiyun __print_symbolic(val, \ 143*4882a593Smuzhiyun scsi_msgbyte_name(COMMAND_COMPLETE), \ 144*4882a593Smuzhiyun scsi_msgbyte_name(EXTENDED_MESSAGE), \ 145*4882a593Smuzhiyun scsi_msgbyte_name(SAVE_POINTERS), \ 146*4882a593Smuzhiyun scsi_msgbyte_name(RESTORE_POINTERS), \ 147*4882a593Smuzhiyun scsi_msgbyte_name(DISCONNECT), \ 148*4882a593Smuzhiyun scsi_msgbyte_name(INITIATOR_ERROR), \ 149*4882a593Smuzhiyun scsi_msgbyte_name(ABORT_TASK_SET), \ 150*4882a593Smuzhiyun scsi_msgbyte_name(MESSAGE_REJECT), \ 151*4882a593Smuzhiyun scsi_msgbyte_name(NOP), \ 152*4882a593Smuzhiyun scsi_msgbyte_name(MSG_PARITY_ERROR), \ 153*4882a593Smuzhiyun scsi_msgbyte_name(LINKED_CMD_COMPLETE), \ 154*4882a593Smuzhiyun scsi_msgbyte_name(LINKED_FLG_CMD_COMPLETE), \ 155*4882a593Smuzhiyun scsi_msgbyte_name(TARGET_RESET), \ 156*4882a593Smuzhiyun scsi_msgbyte_name(ABORT_TASK), \ 157*4882a593Smuzhiyun scsi_msgbyte_name(CLEAR_TASK_SET), \ 158*4882a593Smuzhiyun scsi_msgbyte_name(INITIATE_RECOVERY), \ 159*4882a593Smuzhiyun scsi_msgbyte_name(RELEASE_RECOVERY), \ 160*4882a593Smuzhiyun scsi_msgbyte_name(CLEAR_ACA), \ 161*4882a593Smuzhiyun scsi_msgbyte_name(LOGICAL_UNIT_RESET), \ 162*4882a593Smuzhiyun scsi_msgbyte_name(SIMPLE_QUEUE_TAG), \ 163*4882a593Smuzhiyun scsi_msgbyte_name(HEAD_OF_QUEUE_TAG), \ 164*4882a593Smuzhiyun scsi_msgbyte_name(ORDERED_QUEUE_TAG), \ 165*4882a593Smuzhiyun scsi_msgbyte_name(IGNORE_WIDE_RESIDUE), \ 166*4882a593Smuzhiyun scsi_msgbyte_name(ACA), \ 167*4882a593Smuzhiyun scsi_msgbyte_name(QAS_REQUEST), \ 168*4882a593Smuzhiyun scsi_msgbyte_name(BUS_DEVICE_RESET), \ 169*4882a593Smuzhiyun scsi_msgbyte_name(ABORT)) 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun #define scsi_statusbyte_name(result) { result, #result } 172*4882a593Smuzhiyun #define show_statusbyte_name(val) \ 173*4882a593Smuzhiyun __print_symbolic(val, \ 174*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_GOOD), \ 175*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_CHECK_CONDITION), \ 176*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_CONDITION_MET), \ 177*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_BUSY), \ 178*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_INTERMEDIATE), \ 179*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_INTERMEDIATE_CONDITION_MET), \ 180*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_RESERVATION_CONFLICT), \ 181*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_COMMAND_TERMINATED), \ 182*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_TASK_SET_FULL), \ 183*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_ACA_ACTIVE), \ 184*4882a593Smuzhiyun scsi_statusbyte_name(SAM_STAT_TASK_ABORTED)) 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun #define scsi_prot_op_name(result) { result, #result } 187*4882a593Smuzhiyun #define show_prot_op_name(val) \ 188*4882a593Smuzhiyun __print_symbolic(val, \ 189*4882a593Smuzhiyun scsi_prot_op_name(SCSI_PROT_NORMAL), \ 190*4882a593Smuzhiyun scsi_prot_op_name(SCSI_PROT_READ_INSERT), \ 191*4882a593Smuzhiyun scsi_prot_op_name(SCSI_PROT_WRITE_STRIP), \ 192*4882a593Smuzhiyun scsi_prot_op_name(SCSI_PROT_READ_STRIP), \ 193*4882a593Smuzhiyun scsi_prot_op_name(SCSI_PROT_WRITE_INSERT), \ 194*4882a593Smuzhiyun scsi_prot_op_name(SCSI_PROT_READ_PASS), \ 195*4882a593Smuzhiyun scsi_prot_op_name(SCSI_PROT_WRITE_PASS)) 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun const char *scsi_trace_parse_cdb(struct trace_seq*, unsigned char*, int); 198*4882a593Smuzhiyun #define __parse_cdb(cdb, len) scsi_trace_parse_cdb(p, cdb, len) 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun TRACE_EVENT(scsi_dispatch_cmd_start, 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun TP_PROTO(struct scsi_cmnd *cmd), 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun TP_ARGS(cmd), 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun TP_STRUCT__entry( 207*4882a593Smuzhiyun __field( unsigned int, host_no ) 208*4882a593Smuzhiyun __field( unsigned int, channel ) 209*4882a593Smuzhiyun __field( unsigned int, id ) 210*4882a593Smuzhiyun __field( unsigned int, lun ) 211*4882a593Smuzhiyun __field( unsigned int, opcode ) 212*4882a593Smuzhiyun __field( unsigned int, cmd_len ) 213*4882a593Smuzhiyun __field( unsigned int, data_sglen ) 214*4882a593Smuzhiyun __field( unsigned int, prot_sglen ) 215*4882a593Smuzhiyun __field( unsigned char, prot_op ) 216*4882a593Smuzhiyun __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 217*4882a593Smuzhiyun ), 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun TP_fast_assign( 220*4882a593Smuzhiyun __entry->host_no = cmd->device->host->host_no; 221*4882a593Smuzhiyun __entry->channel = cmd->device->channel; 222*4882a593Smuzhiyun __entry->id = cmd->device->id; 223*4882a593Smuzhiyun __entry->lun = cmd->device->lun; 224*4882a593Smuzhiyun __entry->opcode = cmd->cmnd[0]; 225*4882a593Smuzhiyun __entry->cmd_len = cmd->cmd_len; 226*4882a593Smuzhiyun __entry->data_sglen = scsi_sg_count(cmd); 227*4882a593Smuzhiyun __entry->prot_sglen = scsi_prot_sg_count(cmd); 228*4882a593Smuzhiyun __entry->prot_op = scsi_get_prot_op(cmd); 229*4882a593Smuzhiyun memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 230*4882a593Smuzhiyun ), 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u prot_sgl=%u" \ 233*4882a593Smuzhiyun " prot_op=%s cmnd=(%s %s raw=%s)", 234*4882a593Smuzhiyun __entry->host_no, __entry->channel, __entry->id, 235*4882a593Smuzhiyun __entry->lun, __entry->data_sglen, __entry->prot_sglen, 236*4882a593Smuzhiyun show_prot_op_name(__entry->prot_op), 237*4882a593Smuzhiyun show_opcode_name(__entry->opcode), 238*4882a593Smuzhiyun __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 239*4882a593Smuzhiyun __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len)) 240*4882a593Smuzhiyun ); 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun TRACE_EVENT(scsi_dispatch_cmd_error, 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun TP_PROTO(struct scsi_cmnd *cmd, int rtn), 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun TP_ARGS(cmd, rtn), 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun TP_STRUCT__entry( 249*4882a593Smuzhiyun __field( unsigned int, host_no ) 250*4882a593Smuzhiyun __field( unsigned int, channel ) 251*4882a593Smuzhiyun __field( unsigned int, id ) 252*4882a593Smuzhiyun __field( unsigned int, lun ) 253*4882a593Smuzhiyun __field( int, rtn ) 254*4882a593Smuzhiyun __field( unsigned int, opcode ) 255*4882a593Smuzhiyun __field( unsigned int, cmd_len ) 256*4882a593Smuzhiyun __field( unsigned int, data_sglen ) 257*4882a593Smuzhiyun __field( unsigned int, prot_sglen ) 258*4882a593Smuzhiyun __field( unsigned char, prot_op ) 259*4882a593Smuzhiyun __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 260*4882a593Smuzhiyun ), 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun TP_fast_assign( 263*4882a593Smuzhiyun __entry->host_no = cmd->device->host->host_no; 264*4882a593Smuzhiyun __entry->channel = cmd->device->channel; 265*4882a593Smuzhiyun __entry->id = cmd->device->id; 266*4882a593Smuzhiyun __entry->lun = cmd->device->lun; 267*4882a593Smuzhiyun __entry->rtn = rtn; 268*4882a593Smuzhiyun __entry->opcode = cmd->cmnd[0]; 269*4882a593Smuzhiyun __entry->cmd_len = cmd->cmd_len; 270*4882a593Smuzhiyun __entry->data_sglen = scsi_sg_count(cmd); 271*4882a593Smuzhiyun __entry->prot_sglen = scsi_prot_sg_count(cmd); 272*4882a593Smuzhiyun __entry->prot_op = scsi_get_prot_op(cmd); 273*4882a593Smuzhiyun memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 274*4882a593Smuzhiyun ), 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u prot_sgl=%u" \ 277*4882a593Smuzhiyun " prot_op=%s cmnd=(%s %s raw=%s) rtn=%d", 278*4882a593Smuzhiyun __entry->host_no, __entry->channel, __entry->id, 279*4882a593Smuzhiyun __entry->lun, __entry->data_sglen, __entry->prot_sglen, 280*4882a593Smuzhiyun show_prot_op_name(__entry->prot_op), 281*4882a593Smuzhiyun show_opcode_name(__entry->opcode), 282*4882a593Smuzhiyun __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 283*4882a593Smuzhiyun __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len), 284*4882a593Smuzhiyun __entry->rtn) 285*4882a593Smuzhiyun ); 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun DECLARE_EVENT_CLASS(scsi_cmd_done_timeout_template, 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun TP_PROTO(struct scsi_cmnd *cmd), 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun TP_ARGS(cmd), 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun TP_STRUCT__entry( 294*4882a593Smuzhiyun __field( unsigned int, host_no ) 295*4882a593Smuzhiyun __field( unsigned int, channel ) 296*4882a593Smuzhiyun __field( unsigned int, id ) 297*4882a593Smuzhiyun __field( unsigned int, lun ) 298*4882a593Smuzhiyun __field( int, result ) 299*4882a593Smuzhiyun __field( unsigned int, opcode ) 300*4882a593Smuzhiyun __field( unsigned int, cmd_len ) 301*4882a593Smuzhiyun __field( unsigned int, data_sglen ) 302*4882a593Smuzhiyun __field( unsigned int, prot_sglen ) 303*4882a593Smuzhiyun __field( unsigned char, prot_op ) 304*4882a593Smuzhiyun __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 305*4882a593Smuzhiyun ), 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun TP_fast_assign( 308*4882a593Smuzhiyun __entry->host_no = cmd->device->host->host_no; 309*4882a593Smuzhiyun __entry->channel = cmd->device->channel; 310*4882a593Smuzhiyun __entry->id = cmd->device->id; 311*4882a593Smuzhiyun __entry->lun = cmd->device->lun; 312*4882a593Smuzhiyun __entry->result = cmd->result; 313*4882a593Smuzhiyun __entry->opcode = cmd->cmnd[0]; 314*4882a593Smuzhiyun __entry->cmd_len = cmd->cmd_len; 315*4882a593Smuzhiyun __entry->data_sglen = scsi_sg_count(cmd); 316*4882a593Smuzhiyun __entry->prot_sglen = scsi_prot_sg_count(cmd); 317*4882a593Smuzhiyun __entry->prot_op = scsi_get_prot_op(cmd); 318*4882a593Smuzhiyun memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 319*4882a593Smuzhiyun ), 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u " \ 322*4882a593Smuzhiyun "prot_sgl=%u prot_op=%s cmnd=(%s %s raw=%s) result=(driver=" \ 323*4882a593Smuzhiyun "%s host=%s message=%s status=%s)", 324*4882a593Smuzhiyun __entry->host_no, __entry->channel, __entry->id, 325*4882a593Smuzhiyun __entry->lun, __entry->data_sglen, __entry->prot_sglen, 326*4882a593Smuzhiyun show_prot_op_name(__entry->prot_op), 327*4882a593Smuzhiyun show_opcode_name(__entry->opcode), 328*4882a593Smuzhiyun __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 329*4882a593Smuzhiyun __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len), 330*4882a593Smuzhiyun show_driverbyte_name(((__entry->result) >> 24) & 0xff), 331*4882a593Smuzhiyun show_hostbyte_name(((__entry->result) >> 16) & 0xff), 332*4882a593Smuzhiyun show_msgbyte_name(((__entry->result) >> 8) & 0xff), 333*4882a593Smuzhiyun show_statusbyte_name(__entry->result & 0xff)) 334*4882a593Smuzhiyun ); 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun DEFINE_EVENT(scsi_cmd_done_timeout_template, scsi_dispatch_cmd_done, 337*4882a593Smuzhiyun TP_PROTO(struct scsi_cmnd *cmd), 338*4882a593Smuzhiyun TP_ARGS(cmd)); 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun DEFINE_EVENT(scsi_cmd_done_timeout_template, scsi_dispatch_cmd_timeout, 341*4882a593Smuzhiyun TP_PROTO(struct scsi_cmnd *cmd), 342*4882a593Smuzhiyun TP_ARGS(cmd)); 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun TRACE_EVENT(scsi_eh_wakeup, 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun TP_PROTO(struct Scsi_Host *shost), 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun TP_ARGS(shost), 349*4882a593Smuzhiyun 350*4882a593Smuzhiyun TP_STRUCT__entry( 351*4882a593Smuzhiyun __field( unsigned int, host_no ) 352*4882a593Smuzhiyun ), 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun TP_fast_assign( 355*4882a593Smuzhiyun __entry->host_no = shost->host_no; 356*4882a593Smuzhiyun ), 357*4882a593Smuzhiyun 358*4882a593Smuzhiyun TP_printk("host_no=%u", __entry->host_no) 359*4882a593Smuzhiyun ); 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun #endif /* _TRACE_SCSI_H */ 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun /* This part must be outside protection */ 364*4882a593Smuzhiyun #include <trace/define_trace.h> 365