root/drivers/ata/libata-trace.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. libata_trace_parse_status
  2. libata_trace_parse_eh_action
  3. libata_trace_parse_eh_err_mask
  4. libata_trace_parse_qc_flags
  5. libata_trace_parse_subcmd

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * libata-trace.c - trace functions for libata
   4  *
   5  * Copyright 2015 Hannes Reinecke
   6  * Copyright 2015 SUSE Linux GmbH
   7  */
   8 
   9 #include <linux/kernel.h>
  10 #include <linux/trace_seq.h>
  11 #include <trace/events/libata.h>
  12 
  13 const char *
  14 libata_trace_parse_status(struct trace_seq *p, unsigned char status)
  15 {
  16         const char *ret = trace_seq_buffer_ptr(p);
  17 
  18         trace_seq_printf(p, "{ ");
  19         if (status & ATA_BUSY)
  20                 trace_seq_printf(p, "BUSY ");
  21         if (status & ATA_DRDY)
  22                 trace_seq_printf(p, "DRDY ");
  23         if (status & ATA_DF)
  24                 trace_seq_printf(p, "DF ");
  25         if (status & ATA_DSC)
  26                 trace_seq_printf(p, "DSC ");
  27         if (status & ATA_DRQ)
  28                 trace_seq_printf(p, "DRQ ");
  29         if (status & ATA_CORR)
  30                 trace_seq_printf(p, "CORR ");
  31         if (status & ATA_SENSE)
  32                 trace_seq_printf(p, "SENSE ");
  33         if (status & ATA_ERR)
  34                 trace_seq_printf(p, "ERR ");
  35         trace_seq_putc(p, '}');
  36         trace_seq_putc(p, 0);
  37 
  38         return ret;
  39 }
  40 
  41 const char *
  42 libata_trace_parse_eh_action(struct trace_seq *p, unsigned int eh_action)
  43 {
  44         const char *ret = trace_seq_buffer_ptr(p);
  45 
  46         trace_seq_printf(p, "%x", eh_action);
  47         if (eh_action) {
  48                 trace_seq_printf(p, "{ ");
  49                 if (eh_action & ATA_EH_REVALIDATE)
  50                         trace_seq_printf(p, "REVALIDATE ");
  51                 if (eh_action & (ATA_EH_SOFTRESET | ATA_EH_HARDRESET))
  52                         trace_seq_printf(p, "RESET ");
  53                 else if (eh_action & ATA_EH_SOFTRESET)
  54                         trace_seq_printf(p, "SOFTRESET ");
  55                 else if (eh_action & ATA_EH_HARDRESET)
  56                         trace_seq_printf(p, "HARDRESET ");
  57                 if (eh_action & ATA_EH_ENABLE_LINK)
  58                         trace_seq_printf(p, "ENABLE_LINK ");
  59                 if (eh_action & ATA_EH_PARK)
  60                         trace_seq_printf(p, "PARK ");
  61                 trace_seq_putc(p, '}');
  62         }
  63         trace_seq_putc(p, 0);
  64 
  65         return ret;
  66 }
  67 
  68 const char *
  69 libata_trace_parse_eh_err_mask(struct trace_seq *p, unsigned int eh_err_mask)
  70 {
  71         const char *ret = trace_seq_buffer_ptr(p);
  72 
  73         trace_seq_printf(p, "%x", eh_err_mask);
  74         if (eh_err_mask) {
  75                 trace_seq_printf(p, "{ ");
  76                 if (eh_err_mask & AC_ERR_DEV)
  77                         trace_seq_printf(p, "DEV ");
  78                 if (eh_err_mask & AC_ERR_HSM)
  79                         trace_seq_printf(p, "HSM ");
  80                 if (eh_err_mask & AC_ERR_TIMEOUT)
  81                         trace_seq_printf(p, "TIMEOUT ");
  82                 if (eh_err_mask & AC_ERR_MEDIA)
  83                         trace_seq_printf(p, "MEDIA ");
  84                 if (eh_err_mask & AC_ERR_ATA_BUS)
  85                         trace_seq_printf(p, "ATA_BUS ");
  86                 if (eh_err_mask & AC_ERR_HOST_BUS)
  87                         trace_seq_printf(p, "HOST_BUS ");
  88                 if (eh_err_mask & AC_ERR_SYSTEM)
  89                         trace_seq_printf(p, "SYSTEM ");
  90                 if (eh_err_mask & AC_ERR_INVALID)
  91                         trace_seq_printf(p, "INVALID ");
  92                 if (eh_err_mask & AC_ERR_OTHER)
  93                         trace_seq_printf(p, "OTHER ");
  94                 if (eh_err_mask & AC_ERR_NODEV_HINT)
  95                         trace_seq_printf(p, "NODEV_HINT ");
  96                 if (eh_err_mask & AC_ERR_NCQ)
  97                         trace_seq_printf(p, "NCQ ");
  98                 trace_seq_putc(p, '}');
  99         }
 100         trace_seq_putc(p, 0);
 101 
 102         return ret;
 103 }
 104 
 105 const char *
 106 libata_trace_parse_qc_flags(struct trace_seq *p, unsigned int qc_flags)
 107 {
 108         const char *ret = trace_seq_buffer_ptr(p);
 109 
 110         trace_seq_printf(p, "%x", qc_flags);
 111         if (qc_flags) {
 112                 trace_seq_printf(p, "{ ");
 113                 if (qc_flags & ATA_QCFLAG_ACTIVE)
 114                         trace_seq_printf(p, "ACTIVE ");
 115                 if (qc_flags & ATA_QCFLAG_DMAMAP)
 116                         trace_seq_printf(p, "DMAMAP ");
 117                 if (qc_flags & ATA_QCFLAG_IO)
 118                         trace_seq_printf(p, "IO ");
 119                 if (qc_flags & ATA_QCFLAG_RESULT_TF)
 120                         trace_seq_printf(p, "RESULT_TF ");
 121                 if (qc_flags & ATA_QCFLAG_CLEAR_EXCL)
 122                         trace_seq_printf(p, "CLEAR_EXCL ");
 123                 if (qc_flags & ATA_QCFLAG_QUIET)
 124                         trace_seq_printf(p, "QUIET ");
 125                 if (qc_flags & ATA_QCFLAG_RETRY)
 126                         trace_seq_printf(p, "RETRY ");
 127                 if (qc_flags & ATA_QCFLAG_FAILED)
 128                         trace_seq_printf(p, "FAILED ");
 129                 if (qc_flags & ATA_QCFLAG_SENSE_VALID)
 130                         trace_seq_printf(p, "SENSE_VALID ");
 131                 if (qc_flags & ATA_QCFLAG_EH_SCHEDULED)
 132                         trace_seq_printf(p, "EH_SCHEDULED ");
 133                 trace_seq_putc(p, '}');
 134         }
 135         trace_seq_putc(p, 0);
 136 
 137         return ret;
 138 }
 139 
 140 const char *
 141 libata_trace_parse_subcmd(struct trace_seq *p, unsigned char cmd,
 142                           unsigned char feature, unsigned char hob_nsect)
 143 {
 144         const char *ret = trace_seq_buffer_ptr(p);
 145 
 146         switch (cmd) {
 147         case ATA_CMD_FPDMA_RECV:
 148                 switch (hob_nsect & 0x5f) {
 149                 case ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT:
 150                         trace_seq_printf(p, " READ_LOG_DMA_EXT");
 151                         break;
 152                 case ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN:
 153                         trace_seq_printf(p, " ZAC_MGMT_IN");
 154                         break;
 155                 }
 156                 break;
 157         case ATA_CMD_FPDMA_SEND:
 158                 switch (hob_nsect & 0x5f) {
 159                 case ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT:
 160                         trace_seq_printf(p, " WRITE_LOG_DMA_EXT");
 161                         break;
 162                 case ATA_SUBCMD_FPDMA_SEND_DSM:
 163                         trace_seq_printf(p, " DATASET_MANAGEMENT");
 164                         break;
 165                 }
 166                 break;
 167         case ATA_CMD_NCQ_NON_DATA:
 168                 switch (feature) {
 169                 case ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE:
 170                         trace_seq_printf(p, " ABORT_QUEUE");
 171                         break;
 172                 case ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES:
 173                         trace_seq_printf(p, " SET_FEATURES");
 174                         break;
 175                 case ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT:
 176                         trace_seq_printf(p, " ZERO_EXT");
 177                         break;
 178                 case ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT:
 179                         trace_seq_printf(p, " ZAC_MGMT_OUT");
 180                         break;
 181                 }
 182                 break;
 183         case ATA_CMD_ZAC_MGMT_IN:
 184                 switch (feature) {
 185                 case ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES:
 186                         trace_seq_printf(p, " REPORT_ZONES");
 187                         break;
 188                 }
 189                 break;
 190         case ATA_CMD_ZAC_MGMT_OUT:
 191                 switch (feature) {
 192                 case ATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE:
 193                         trace_seq_printf(p, " CLOSE_ZONE");
 194                         break;
 195                 case ATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE:
 196                         trace_seq_printf(p, " FINISH_ZONE");
 197                         break;
 198                 case ATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE:
 199                         trace_seq_printf(p, " OPEN_ZONE");
 200                         break;
 201                 case ATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER:
 202                         trace_seq_printf(p, " RESET_WRITE_POINTER");
 203                         break;
 204                 }
 205                 break;
 206         }
 207         trace_seq_putc(p, 0);
 208 
 209         return ret;
 210 }

/* [<][>][^][v][top][bottom][index][help] */