mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 17:14:14 +08:00
libata-trace: decode subcommands
Some commands like FPDMA RECEIVE or NCQ NON DATA can encapsulate other commands to NCQ transport. So decode the subcmds, too. Signed-off-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
fe5af0cc30
commit
a570384964
@ -149,3 +149,46 @@ libata_trace_parse_qc_flags(struct trace_seq *p, unsigned int qc_flags)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char *
|
||||
libata_trace_parse_subcmd(struct trace_seq *p, unsigned char cmd,
|
||||
unsigned char feature, unsigned char hob_nsect)
|
||||
{
|
||||
const char *ret = trace_seq_buffer_ptr(p);
|
||||
|
||||
switch (cmd) {
|
||||
case ATA_CMD_FPDMA_RECV:
|
||||
switch (hob_nsect & 0x5f) {
|
||||
case ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT:
|
||||
trace_seq_printf(p, " READ_LOG_DMA_EXT");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ATA_CMD_FPDMA_SEND:
|
||||
switch (hob_nsect & 0x5f) {
|
||||
case ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT:
|
||||
trace_seq_printf(p, " WRITE_LOG_DMA_EXT");
|
||||
break;
|
||||
case ATA_SUBCMD_FPDMA_SEND_DSM:
|
||||
trace_seq_printf(p, " DATASET_MANAGEMENT");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ATA_CMD_NCQ_NON_DATA:
|
||||
switch (feature) {
|
||||
case ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE:
|
||||
trace_seq_printf(p, " ABORT_QUEUE");
|
||||
break;
|
||||
case ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES:
|
||||
trace_seq_printf(p, " SET_FEATURES");
|
||||
break;
|
||||
case ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT:
|
||||
trace_seq_printf(p, " ZERO_EXT");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
trace_seq_putc(p, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -313,6 +313,11 @@ enum {
|
||||
ATA_SUBCMD_FPDMA_SEND_DSM = 0x00,
|
||||
ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 0x02,
|
||||
|
||||
/* Subcmds for ATA_CMD_NCQ_NON_DATA */
|
||||
ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0x00,
|
||||
ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 0x05,
|
||||
ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 0x06,
|
||||
|
||||
/* READ_LOG_EXT pages */
|
||||
ATA_LOG_DIRECTORY = 0x0,
|
||||
ATA_LOG_SATA_NCQ = 0x10,
|
||||
@ -338,6 +343,18 @@ enum {
|
||||
ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = (1 << 0),
|
||||
ATA_LOG_NCQ_SEND_RECV_SIZE = 0x10,
|
||||
|
||||
/* NCQ Non-Data log */
|
||||
ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0x00,
|
||||
ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0x00,
|
||||
ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = (1 << 0),
|
||||
ATA_LOG_NCQ_NON_DATA_ABORT_ALL = (1 << 1),
|
||||
ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = (1 << 2),
|
||||
ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = (1 << 3),
|
||||
ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = (1 << 4),
|
||||
ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 0x1C,
|
||||
ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = (1 << 0),
|
||||
ATA_LOG_NCQ_NON_DATA_SIZE = 0x40,
|
||||
|
||||
/* READ/WRITE LONG (obsolete) */
|
||||
ATA_CMD_READ_LONG = 0x22,
|
||||
ATA_CMD_READ_LONG_ONCE = 0x23,
|
||||
|
@ -140,6 +140,10 @@ const char *libata_trace_parse_eh_err_mask(struct trace_seq *, unsigned int);
|
||||
const char *libata_trace_parse_qc_flags(struct trace_seq *, unsigned int);
|
||||
#define __parse_qc_flags(f) libata_trace_parse_qc_flags(p, f)
|
||||
|
||||
const char *libata_trace_parse_subcmd(struct trace_seq *, unsigned char,
|
||||
unsigned char, unsigned char);
|
||||
#define __parse_subcmd(c,f,h) libata_trace_parse_subcmd(p, c, f, h)
|
||||
|
||||
TRACE_EVENT(ata_qc_issue,
|
||||
|
||||
TP_PROTO(struct ata_queued_cmd *qc),
|
||||
@ -186,11 +190,12 @@ TRACE_EVENT(ata_qc_issue,
|
||||
__entry->hob_nsect = qc->tf.hob_nsect;
|
||||
),
|
||||
|
||||
TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s cmd=%s " \
|
||||
TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s cmd=%s%s " \
|
||||
" tf=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)",
|
||||
__entry->ata_port, __entry->ata_dev, __entry->tag,
|
||||
show_protocol_name(__entry->proto),
|
||||
show_opcode_name(__entry->cmd),
|
||||
__parse_subcmd(__entry->cmd, __entry->feature, __entry->hob_nsect),
|
||||
__entry->cmd, __entry->feature, __entry->nsect,
|
||||
__entry->lbal, __entry->lbam, __entry->lbah,
|
||||
__entry->hob_feature, __entry->hob_nsect,
|
||||
|
Loading…
Reference in New Issue
Block a user