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