18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2010 FUJITSU LIMITED 48c2ecf20Sopenharmony_ci * Copyright (C) 2010 Tomohiro Kusumi <kusumi.tomohiro@jp.fujitsu.com> 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci#include <linux/kernel.h> 78c2ecf20Sopenharmony_ci#include <linux/trace_seq.h> 88c2ecf20Sopenharmony_ci#include <asm/unaligned.h> 98c2ecf20Sopenharmony_ci#include <trace/events/scsi.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#define SERVICE_ACTION16(cdb) (cdb[1] & 0x1f) 128c2ecf20Sopenharmony_ci#define SERVICE_ACTION32(cdb) (get_unaligned_be16(&cdb[8])) 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_cistatic const char * 158c2ecf20Sopenharmony_ciscsi_trace_misc(struct trace_seq *, unsigned char *, int); 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_cistatic const char * 188c2ecf20Sopenharmony_ciscsi_trace_rw6(struct trace_seq *p, unsigned char *cdb, int len) 198c2ecf20Sopenharmony_ci{ 208c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p); 218c2ecf20Sopenharmony_ci u32 lba, txlen; 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci lba = get_unaligned_be24(&cdb[1]) & 0x1fffff; 248c2ecf20Sopenharmony_ci /* 258c2ecf20Sopenharmony_ci * From SBC-2: a TRANSFER LENGTH field set to zero specifies that 256 268c2ecf20Sopenharmony_ci * logical blocks shall be read (READ(6)) or written (WRITE(6)). 278c2ecf20Sopenharmony_ci */ 288c2ecf20Sopenharmony_ci txlen = cdb[4] ? cdb[4] : 256; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci trace_seq_printf(p, "lba=%u txlen=%u", lba, txlen); 318c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci return ret; 348c2ecf20Sopenharmony_ci} 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistatic const char * 378c2ecf20Sopenharmony_ciscsi_trace_rw10(struct trace_seq *p, unsigned char *cdb, int len) 388c2ecf20Sopenharmony_ci{ 398c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p); 408c2ecf20Sopenharmony_ci u32 lba, txlen; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci lba = get_unaligned_be32(&cdb[2]); 438c2ecf20Sopenharmony_ci txlen = get_unaligned_be16(&cdb[7]); 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci trace_seq_printf(p, "lba=%u txlen=%u protect=%u", lba, txlen, 468c2ecf20Sopenharmony_ci cdb[1] >> 5); 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci if (cdb[0] == WRITE_SAME) 498c2ecf20Sopenharmony_ci trace_seq_printf(p, " unmap=%u", cdb[1] >> 3 & 1); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci return ret; 548c2ecf20Sopenharmony_ci} 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_cistatic const char * 578c2ecf20Sopenharmony_ciscsi_trace_rw12(struct trace_seq *p, unsigned char *cdb, int len) 588c2ecf20Sopenharmony_ci{ 598c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p); 608c2ecf20Sopenharmony_ci u32 lba, txlen; 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci lba = get_unaligned_be32(&cdb[2]); 638c2ecf20Sopenharmony_ci txlen = get_unaligned_be32(&cdb[6]); 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci trace_seq_printf(p, "lba=%u txlen=%u protect=%u", lba, txlen, 668c2ecf20Sopenharmony_ci cdb[1] >> 5); 678c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci return ret; 708c2ecf20Sopenharmony_ci} 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_cistatic const char * 738c2ecf20Sopenharmony_ciscsi_trace_rw16(struct trace_seq *p, unsigned char *cdb, int len) 748c2ecf20Sopenharmony_ci{ 758c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p); 768c2ecf20Sopenharmony_ci u64 lba; 778c2ecf20Sopenharmony_ci u32 txlen; 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci lba = get_unaligned_be64(&cdb[2]); 808c2ecf20Sopenharmony_ci txlen = get_unaligned_be32(&cdb[10]); 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci trace_seq_printf(p, "lba=%llu txlen=%u protect=%u", lba, txlen, 838c2ecf20Sopenharmony_ci cdb[1] >> 5); 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci if (cdb[0] == WRITE_SAME_16) 868c2ecf20Sopenharmony_ci trace_seq_printf(p, " unmap=%u", cdb[1] >> 3 & 1); 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci return ret; 918c2ecf20Sopenharmony_ci} 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_cistatic const char * 948c2ecf20Sopenharmony_ciscsi_trace_rw32(struct trace_seq *p, unsigned char *cdb, int len) 958c2ecf20Sopenharmony_ci{ 968c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p), *cmd; 978c2ecf20Sopenharmony_ci u64 lba; 988c2ecf20Sopenharmony_ci u32 ei_lbrt, txlen; 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ci switch (SERVICE_ACTION32(cdb)) { 1018c2ecf20Sopenharmony_ci case READ_32: 1028c2ecf20Sopenharmony_ci cmd = "READ"; 1038c2ecf20Sopenharmony_ci break; 1048c2ecf20Sopenharmony_ci case VERIFY_32: 1058c2ecf20Sopenharmony_ci cmd = "VERIFY"; 1068c2ecf20Sopenharmony_ci break; 1078c2ecf20Sopenharmony_ci case WRITE_32: 1088c2ecf20Sopenharmony_ci cmd = "WRITE"; 1098c2ecf20Sopenharmony_ci break; 1108c2ecf20Sopenharmony_ci case WRITE_SAME_32: 1118c2ecf20Sopenharmony_ci cmd = "WRITE_SAME"; 1128c2ecf20Sopenharmony_ci break; 1138c2ecf20Sopenharmony_ci default: 1148c2ecf20Sopenharmony_ci trace_seq_puts(p, "UNKNOWN"); 1158c2ecf20Sopenharmony_ci goto out; 1168c2ecf20Sopenharmony_ci } 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci lba = get_unaligned_be64(&cdb[12]); 1198c2ecf20Sopenharmony_ci ei_lbrt = get_unaligned_be32(&cdb[20]); 1208c2ecf20Sopenharmony_ci txlen = get_unaligned_be32(&cdb[28]); 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ci trace_seq_printf(p, "%s_32 lba=%llu txlen=%u protect=%u ei_lbrt=%u", 1238c2ecf20Sopenharmony_ci cmd, lba, txlen, cdb[10] >> 5, ei_lbrt); 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ci if (SERVICE_ACTION32(cdb) == WRITE_SAME_32) 1268c2ecf20Sopenharmony_ci trace_seq_printf(p, " unmap=%u", cdb[10] >> 3 & 1); 1278c2ecf20Sopenharmony_ci 1288c2ecf20Sopenharmony_ciout: 1298c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci return ret; 1328c2ecf20Sopenharmony_ci} 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_cistatic const char * 1358c2ecf20Sopenharmony_ciscsi_trace_unmap(struct trace_seq *p, unsigned char *cdb, int len) 1368c2ecf20Sopenharmony_ci{ 1378c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p); 1388c2ecf20Sopenharmony_ci unsigned int regions = get_unaligned_be16(&cdb[7]); 1398c2ecf20Sopenharmony_ci 1408c2ecf20Sopenharmony_ci trace_seq_printf(p, "regions=%u", (regions - 8) / 16); 1418c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci return ret; 1448c2ecf20Sopenharmony_ci} 1458c2ecf20Sopenharmony_ci 1468c2ecf20Sopenharmony_cistatic const char * 1478c2ecf20Sopenharmony_ciscsi_trace_service_action_in(struct trace_seq *p, unsigned char *cdb, int len) 1488c2ecf20Sopenharmony_ci{ 1498c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p), *cmd; 1508c2ecf20Sopenharmony_ci u64 lba; 1518c2ecf20Sopenharmony_ci u32 alloc_len; 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ci switch (SERVICE_ACTION16(cdb)) { 1548c2ecf20Sopenharmony_ci case SAI_READ_CAPACITY_16: 1558c2ecf20Sopenharmony_ci cmd = "READ_CAPACITY_16"; 1568c2ecf20Sopenharmony_ci break; 1578c2ecf20Sopenharmony_ci case SAI_GET_LBA_STATUS: 1588c2ecf20Sopenharmony_ci cmd = "GET_LBA_STATUS"; 1598c2ecf20Sopenharmony_ci break; 1608c2ecf20Sopenharmony_ci default: 1618c2ecf20Sopenharmony_ci trace_seq_puts(p, "UNKNOWN"); 1628c2ecf20Sopenharmony_ci goto out; 1638c2ecf20Sopenharmony_ci } 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci lba = get_unaligned_be64(&cdb[2]); 1668c2ecf20Sopenharmony_ci alloc_len = get_unaligned_be32(&cdb[10]); 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ci trace_seq_printf(p, "%s lba=%llu alloc_len=%u", cmd, lba, alloc_len); 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ciout: 1718c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ci return ret; 1748c2ecf20Sopenharmony_ci} 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_cistatic const char * 1778c2ecf20Sopenharmony_ciscsi_trace_maintenance_in(struct trace_seq *p, unsigned char *cdb, int len) 1788c2ecf20Sopenharmony_ci{ 1798c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p), *cmd; 1808c2ecf20Sopenharmony_ci u32 alloc_len; 1818c2ecf20Sopenharmony_ci 1828c2ecf20Sopenharmony_ci switch (SERVICE_ACTION16(cdb)) { 1838c2ecf20Sopenharmony_ci case MI_REPORT_IDENTIFYING_INFORMATION: 1848c2ecf20Sopenharmony_ci cmd = "REPORT_IDENTIFYING_INFORMATION"; 1858c2ecf20Sopenharmony_ci break; 1868c2ecf20Sopenharmony_ci case MI_REPORT_TARGET_PGS: 1878c2ecf20Sopenharmony_ci cmd = "REPORT_TARGET_PORT_GROUPS"; 1888c2ecf20Sopenharmony_ci break; 1898c2ecf20Sopenharmony_ci case MI_REPORT_ALIASES: 1908c2ecf20Sopenharmony_ci cmd = "REPORT_ALIASES"; 1918c2ecf20Sopenharmony_ci break; 1928c2ecf20Sopenharmony_ci case MI_REPORT_SUPPORTED_OPERATION_CODES: 1938c2ecf20Sopenharmony_ci cmd = "REPORT_SUPPORTED_OPERATION_CODES"; 1948c2ecf20Sopenharmony_ci break; 1958c2ecf20Sopenharmony_ci case MI_REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS: 1968c2ecf20Sopenharmony_ci cmd = "REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS"; 1978c2ecf20Sopenharmony_ci break; 1988c2ecf20Sopenharmony_ci case MI_REPORT_PRIORITY: 1998c2ecf20Sopenharmony_ci cmd = "REPORT_PRIORITY"; 2008c2ecf20Sopenharmony_ci break; 2018c2ecf20Sopenharmony_ci case MI_REPORT_TIMESTAMP: 2028c2ecf20Sopenharmony_ci cmd = "REPORT_TIMESTAMP"; 2038c2ecf20Sopenharmony_ci break; 2048c2ecf20Sopenharmony_ci case MI_MANAGEMENT_PROTOCOL_IN: 2058c2ecf20Sopenharmony_ci cmd = "MANAGEMENT_PROTOCOL_IN"; 2068c2ecf20Sopenharmony_ci break; 2078c2ecf20Sopenharmony_ci default: 2088c2ecf20Sopenharmony_ci trace_seq_puts(p, "UNKNOWN"); 2098c2ecf20Sopenharmony_ci goto out; 2108c2ecf20Sopenharmony_ci } 2118c2ecf20Sopenharmony_ci 2128c2ecf20Sopenharmony_ci alloc_len = get_unaligned_be32(&cdb[6]); 2138c2ecf20Sopenharmony_ci 2148c2ecf20Sopenharmony_ci trace_seq_printf(p, "%s alloc_len=%u", cmd, alloc_len); 2158c2ecf20Sopenharmony_ci 2168c2ecf20Sopenharmony_ciout: 2178c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 2188c2ecf20Sopenharmony_ci 2198c2ecf20Sopenharmony_ci return ret; 2208c2ecf20Sopenharmony_ci} 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_cistatic const char * 2238c2ecf20Sopenharmony_ciscsi_trace_maintenance_out(struct trace_seq *p, unsigned char *cdb, int len) 2248c2ecf20Sopenharmony_ci{ 2258c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p), *cmd; 2268c2ecf20Sopenharmony_ci u32 alloc_len; 2278c2ecf20Sopenharmony_ci 2288c2ecf20Sopenharmony_ci switch (SERVICE_ACTION16(cdb)) { 2298c2ecf20Sopenharmony_ci case MO_SET_IDENTIFYING_INFORMATION: 2308c2ecf20Sopenharmony_ci cmd = "SET_IDENTIFYING_INFORMATION"; 2318c2ecf20Sopenharmony_ci break; 2328c2ecf20Sopenharmony_ci case MO_SET_TARGET_PGS: 2338c2ecf20Sopenharmony_ci cmd = "SET_TARGET_PORT_GROUPS"; 2348c2ecf20Sopenharmony_ci break; 2358c2ecf20Sopenharmony_ci case MO_CHANGE_ALIASES: 2368c2ecf20Sopenharmony_ci cmd = "CHANGE_ALIASES"; 2378c2ecf20Sopenharmony_ci break; 2388c2ecf20Sopenharmony_ci case MO_SET_PRIORITY: 2398c2ecf20Sopenharmony_ci cmd = "SET_PRIORITY"; 2408c2ecf20Sopenharmony_ci break; 2418c2ecf20Sopenharmony_ci case MO_SET_TIMESTAMP: 2428c2ecf20Sopenharmony_ci cmd = "SET_TIMESTAMP"; 2438c2ecf20Sopenharmony_ci break; 2448c2ecf20Sopenharmony_ci case MO_MANAGEMENT_PROTOCOL_OUT: 2458c2ecf20Sopenharmony_ci cmd = "MANAGEMENT_PROTOCOL_OUT"; 2468c2ecf20Sopenharmony_ci break; 2478c2ecf20Sopenharmony_ci default: 2488c2ecf20Sopenharmony_ci trace_seq_puts(p, "UNKNOWN"); 2498c2ecf20Sopenharmony_ci goto out; 2508c2ecf20Sopenharmony_ci } 2518c2ecf20Sopenharmony_ci 2528c2ecf20Sopenharmony_ci alloc_len = get_unaligned_be32(&cdb[6]); 2538c2ecf20Sopenharmony_ci 2548c2ecf20Sopenharmony_ci trace_seq_printf(p, "%s alloc_len=%u", cmd, alloc_len); 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_ciout: 2578c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 2588c2ecf20Sopenharmony_ci 2598c2ecf20Sopenharmony_ci return ret; 2608c2ecf20Sopenharmony_ci} 2618c2ecf20Sopenharmony_ci 2628c2ecf20Sopenharmony_cistatic const char * 2638c2ecf20Sopenharmony_ciscsi_trace_zbc_in(struct trace_seq *p, unsigned char *cdb, int len) 2648c2ecf20Sopenharmony_ci{ 2658c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p), *cmd; 2668c2ecf20Sopenharmony_ci u64 zone_id; 2678c2ecf20Sopenharmony_ci u32 alloc_len; 2688c2ecf20Sopenharmony_ci u8 options; 2698c2ecf20Sopenharmony_ci 2708c2ecf20Sopenharmony_ci switch (SERVICE_ACTION16(cdb)) { 2718c2ecf20Sopenharmony_ci case ZI_REPORT_ZONES: 2728c2ecf20Sopenharmony_ci cmd = "REPORT_ZONES"; 2738c2ecf20Sopenharmony_ci break; 2748c2ecf20Sopenharmony_ci default: 2758c2ecf20Sopenharmony_ci trace_seq_puts(p, "UNKNOWN"); 2768c2ecf20Sopenharmony_ci goto out; 2778c2ecf20Sopenharmony_ci } 2788c2ecf20Sopenharmony_ci 2798c2ecf20Sopenharmony_ci zone_id = get_unaligned_be64(&cdb[2]); 2808c2ecf20Sopenharmony_ci alloc_len = get_unaligned_be32(&cdb[10]); 2818c2ecf20Sopenharmony_ci options = cdb[14] & 0x3f; 2828c2ecf20Sopenharmony_ci 2838c2ecf20Sopenharmony_ci trace_seq_printf(p, "%s zone=%llu alloc_len=%u options=%u partial=%u", 2848c2ecf20Sopenharmony_ci cmd, (unsigned long long)zone_id, alloc_len, 2858c2ecf20Sopenharmony_ci options, (cdb[14] >> 7) & 1); 2868c2ecf20Sopenharmony_ci 2878c2ecf20Sopenharmony_ciout: 2888c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_ci return ret; 2918c2ecf20Sopenharmony_ci} 2928c2ecf20Sopenharmony_ci 2938c2ecf20Sopenharmony_cistatic const char * 2948c2ecf20Sopenharmony_ciscsi_trace_zbc_out(struct trace_seq *p, unsigned char *cdb, int len) 2958c2ecf20Sopenharmony_ci{ 2968c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p), *cmd; 2978c2ecf20Sopenharmony_ci u64 zone_id; 2988c2ecf20Sopenharmony_ci 2998c2ecf20Sopenharmony_ci switch (SERVICE_ACTION16(cdb)) { 3008c2ecf20Sopenharmony_ci case ZO_CLOSE_ZONE: 3018c2ecf20Sopenharmony_ci cmd = "CLOSE_ZONE"; 3028c2ecf20Sopenharmony_ci break; 3038c2ecf20Sopenharmony_ci case ZO_FINISH_ZONE: 3048c2ecf20Sopenharmony_ci cmd = "FINISH_ZONE"; 3058c2ecf20Sopenharmony_ci break; 3068c2ecf20Sopenharmony_ci case ZO_OPEN_ZONE: 3078c2ecf20Sopenharmony_ci cmd = "OPEN_ZONE"; 3088c2ecf20Sopenharmony_ci break; 3098c2ecf20Sopenharmony_ci case ZO_RESET_WRITE_POINTER: 3108c2ecf20Sopenharmony_ci cmd = "RESET_WRITE_POINTER"; 3118c2ecf20Sopenharmony_ci break; 3128c2ecf20Sopenharmony_ci default: 3138c2ecf20Sopenharmony_ci trace_seq_puts(p, "UNKNOWN"); 3148c2ecf20Sopenharmony_ci goto out; 3158c2ecf20Sopenharmony_ci } 3168c2ecf20Sopenharmony_ci 3178c2ecf20Sopenharmony_ci zone_id = get_unaligned_be64(&cdb[2]); 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_ci trace_seq_printf(p, "%s zone=%llu all=%u", cmd, 3208c2ecf20Sopenharmony_ci (unsigned long long)zone_id, cdb[14] & 1); 3218c2ecf20Sopenharmony_ci 3228c2ecf20Sopenharmony_ciout: 3238c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 3248c2ecf20Sopenharmony_ci 3258c2ecf20Sopenharmony_ci return ret; 3268c2ecf20Sopenharmony_ci} 3278c2ecf20Sopenharmony_ci 3288c2ecf20Sopenharmony_cistatic const char * 3298c2ecf20Sopenharmony_ciscsi_trace_varlen(struct trace_seq *p, unsigned char *cdb, int len) 3308c2ecf20Sopenharmony_ci{ 3318c2ecf20Sopenharmony_ci switch (SERVICE_ACTION32(cdb)) { 3328c2ecf20Sopenharmony_ci case READ_32: 3338c2ecf20Sopenharmony_ci case VERIFY_32: 3348c2ecf20Sopenharmony_ci case WRITE_32: 3358c2ecf20Sopenharmony_ci case WRITE_SAME_32: 3368c2ecf20Sopenharmony_ci return scsi_trace_rw32(p, cdb, len); 3378c2ecf20Sopenharmony_ci default: 3388c2ecf20Sopenharmony_ci return scsi_trace_misc(p, cdb, len); 3398c2ecf20Sopenharmony_ci } 3408c2ecf20Sopenharmony_ci} 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_cistatic const char * 3438c2ecf20Sopenharmony_ciscsi_trace_misc(struct trace_seq *p, unsigned char *cdb, int len) 3448c2ecf20Sopenharmony_ci{ 3458c2ecf20Sopenharmony_ci const char *ret = trace_seq_buffer_ptr(p); 3468c2ecf20Sopenharmony_ci 3478c2ecf20Sopenharmony_ci trace_seq_putc(p, '-'); 3488c2ecf20Sopenharmony_ci trace_seq_putc(p, 0); 3498c2ecf20Sopenharmony_ci 3508c2ecf20Sopenharmony_ci return ret; 3518c2ecf20Sopenharmony_ci} 3528c2ecf20Sopenharmony_ci 3538c2ecf20Sopenharmony_ciconst char * 3548c2ecf20Sopenharmony_ciscsi_trace_parse_cdb(struct trace_seq *p, unsigned char *cdb, int len) 3558c2ecf20Sopenharmony_ci{ 3568c2ecf20Sopenharmony_ci switch (cdb[0]) { 3578c2ecf20Sopenharmony_ci case READ_6: 3588c2ecf20Sopenharmony_ci case WRITE_6: 3598c2ecf20Sopenharmony_ci return scsi_trace_rw6(p, cdb, len); 3608c2ecf20Sopenharmony_ci case READ_10: 3618c2ecf20Sopenharmony_ci case VERIFY: 3628c2ecf20Sopenharmony_ci case WRITE_10: 3638c2ecf20Sopenharmony_ci case WRITE_SAME: 3648c2ecf20Sopenharmony_ci return scsi_trace_rw10(p, cdb, len); 3658c2ecf20Sopenharmony_ci case READ_12: 3668c2ecf20Sopenharmony_ci case VERIFY_12: 3678c2ecf20Sopenharmony_ci case WRITE_12: 3688c2ecf20Sopenharmony_ci return scsi_trace_rw12(p, cdb, len); 3698c2ecf20Sopenharmony_ci case READ_16: 3708c2ecf20Sopenharmony_ci case VERIFY_16: 3718c2ecf20Sopenharmony_ci case WRITE_16: 3728c2ecf20Sopenharmony_ci case WRITE_SAME_16: 3738c2ecf20Sopenharmony_ci return scsi_trace_rw16(p, cdb, len); 3748c2ecf20Sopenharmony_ci case UNMAP: 3758c2ecf20Sopenharmony_ci return scsi_trace_unmap(p, cdb, len); 3768c2ecf20Sopenharmony_ci case SERVICE_ACTION_IN_16: 3778c2ecf20Sopenharmony_ci return scsi_trace_service_action_in(p, cdb, len); 3788c2ecf20Sopenharmony_ci case VARIABLE_LENGTH_CMD: 3798c2ecf20Sopenharmony_ci return scsi_trace_varlen(p, cdb, len); 3808c2ecf20Sopenharmony_ci case MAINTENANCE_IN: 3818c2ecf20Sopenharmony_ci return scsi_trace_maintenance_in(p, cdb, len); 3828c2ecf20Sopenharmony_ci case MAINTENANCE_OUT: 3838c2ecf20Sopenharmony_ci return scsi_trace_maintenance_out(p, cdb, len); 3848c2ecf20Sopenharmony_ci case ZBC_IN: 3858c2ecf20Sopenharmony_ci return scsi_trace_zbc_in(p, cdb, len); 3868c2ecf20Sopenharmony_ci case ZBC_OUT: 3878c2ecf20Sopenharmony_ci return scsi_trace_zbc_out(p, cdb, len); 3888c2ecf20Sopenharmony_ci default: 3898c2ecf20Sopenharmony_ci return scsi_trace_misc(p, cdb, len); 3908c2ecf20Sopenharmony_ci } 3918c2ecf20Sopenharmony_ci} 392