LCOV - code coverage report
Current view: top level - spdk/lib/scsi - scsi.c (source / functions) Hit Total Coverage
Test: Combined Lines: 27 41 65.9 %
Date: 2024-12-15 12:38:17 Functions: 7 8 87.5 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 5 40 12.5 %

           Branch data     Line data    Source code
       1                 :            : /*   SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  *   Copyright (C) 2008-2012 Daisuke Aoyama <aoyama@peach.ne.jp>.
       3                 :            :  *   Copyright (C) 2016 Intel Corporation.
       4                 :            :  *   All rights reserved.
       5                 :            :  */
       6                 :            : 
       7                 :            : #include "scsi_internal.h"
       8                 :            : #include "spdk/util.h"
       9                 :            : 
      10                 :            : int
      11                 :        682 : spdk_scsi_init(void)
      12                 :            : {
      13                 :        682 :         return 0;
      14                 :            : }
      15                 :            : 
      16                 :            : void
      17                 :        679 : spdk_scsi_fini(void)
      18                 :            : {
      19                 :        679 : }
      20                 :            : 
      21                 :            : static void
      22                 :        886 : scsi_trace(void)
      23                 :            : {
      24                 :        886 :         spdk_trace_register_owner_type(OWNER_TYPE_SCSI_DEV, 'd');
      25                 :        886 :         spdk_trace_register_object(OBJECT_SCSI_TASK, 't');
      26                 :        886 :         spdk_trace_register_description("SCSI_TASK_DONE", TRACE_SCSI_TASK_DONE,
      27                 :            :                                         OWNER_TYPE_SCSI_DEV, OBJECT_SCSI_TASK, 0,
      28                 :            :                                         SPDK_TRACE_ARG_TYPE_INT, "");
      29                 :        886 :         spdk_trace_register_description("SCSI_TASK_START", TRACE_SCSI_TASK_START,
      30                 :            :                                         OWNER_TYPE_SCSI_DEV, OBJECT_SCSI_TASK, 0,
      31                 :            :                                         SPDK_TRACE_ARG_TYPE_INT, "");
      32                 :        886 : }
      33                 :        963 : SPDK_TRACE_REGISTER_FN(scsi_trace, "scsi", TRACE_GROUP_SCSI)
      34                 :            : 
      35                 :            : uint64_t
      36                 :     536412 : spdk_scsi_lun_id_int_to_fmt(int lun_id)
      37                 :            : {
      38                 :            :         uint64_t fmt_lun, method;
      39                 :            : 
      40         [ +  - ]:     536412 :         if (lun_id < 0x0100) {
      41                 :            :                 /* below 256 */
      42                 :     536412 :                 method = 0x00U;
      43         [ #  # ]:     536412 :                 fmt_lun = (method & 0x03U) << 62;
      44         [ #  # ]:     536412 :                 fmt_lun |= ((uint64_t)lun_id & 0x00ffU) << 48;
      45         [ #  # ]:          0 :         } else if (lun_id < 0x4000) {
      46                 :            :                 /* below 16384 */
      47                 :          0 :                 method = 0x01U;
      48         [ #  # ]:          0 :                 fmt_lun = (method & 0x03U) << 62;
      49         [ #  # ]:          0 :                 fmt_lun |= ((uint64_t)lun_id & 0x3fffU) << 48;
      50                 :          0 :         } else {
      51                 :            :                 /* XXX */
      52                 :          0 :                 fmt_lun = 0;
      53                 :            :         }
      54                 :            : 
      55                 :     536412 :         return fmt_lun;
      56                 :            : }
      57                 :            : 
      58                 :            : int
      59                 :   23187544 : spdk_scsi_lun_id_fmt_to_int(uint64_t fmt_lun)
      60                 :            : {
      61                 :            :         uint64_t method;
      62                 :            :         int lun_i;
      63                 :            : 
      64         [ #  # ]:   23187544 :         method = (fmt_lun >> 62) & 0x03U;
      65         [ #  # ]:   23187544 :         fmt_lun = fmt_lun >> 48;
      66         [ +  + ]:   23187544 :         if (method == 0x00U) {
      67                 :   23181892 :                 lun_i = (int)(fmt_lun & 0x00ffU);
      68         [ +  + ]:       5652 :         } else if (method == 0x01U) {
      69                 :       1913 :                 lun_i = (int)(fmt_lun & 0x3fffU);
      70                 :          0 :         } else {
      71                 :       3739 :                 lun_i = 0xffffU;
      72                 :            :         }
      73                 :   23187544 :         return lun_i;
      74                 :            : }
      75                 :            : 
      76                 :            : struct scsi_sbc_opcode_string {
      77                 :            :         enum spdk_sbc_opcode opc;
      78                 :            :         const char *str;
      79                 :            : };
      80                 :            : 
      81                 :            : static const struct scsi_sbc_opcode_string scsi_sbc_opcode_strings[] = {
      82                 :            :         { SPDK_SBC_COMPARE_AND_WRITE, "COMPARE AND WRITE" },
      83                 :            :         { SPDK_SBC_FORMAT_UNIT, "FORMAT UNIT" },
      84                 :            :         { SPDK_SBC_GET_LBA_STATUS, "GET LBA STATUS" },
      85                 :            :         { SPDK_SBC_ORWRITE_16, "ORWRITE 16" },
      86                 :            :         { SPDK_SBC_PRE_FETCH_10, "PRE FETCH 10" },
      87                 :            :         { SPDK_SBC_PRE_FETCH_16, "PRE FETCH 16" },
      88                 :            :         { SPDK_SBC_READ_6, "READ 6" },
      89                 :            :         { SPDK_SBC_READ_10, "READ 10" },
      90                 :            :         { SPDK_SBC_READ_12, "READ 12" },
      91                 :            :         { SPDK_SBC_READ_16, "READ 16" },
      92                 :            :         { SPDK_SBC_READ_ATTRIBUTE, "READ ATTRIBUTE" },
      93                 :            :         { SPDK_SBC_READ_BUFFER, "READ BUFFER" },
      94                 :            :         { SPDK_SBC_READ_CAPACITY_10, "READ CAPACITY 10" },
      95                 :            :         { SPDK_SBC_READ_DEFECT_DATA_10, "READ DEFECT DATA 10" },
      96                 :            :         { SPDK_SBC_READ_DEFECT_DATA_12, "READ DEFECT DATA 12" },
      97                 :            :         { SPDK_SBC_READ_LONG_10, "READ LONG 10" },
      98                 :            :         { SPDK_SBC_REASSIGN_BLOCKS, "REASSIGN BLOCKS" },
      99                 :            :         { SPDK_SBC_SANITIZE, "SANITIZE" },
     100                 :            :         { SPDK_SBC_START_STOP_UNIT, "START STOP UNIT" },
     101                 :            :         { SPDK_SBC_SYNCHRONIZE_CACHE_10, "SYNCHRONIZE CACHE 10" },
     102                 :            :         { SPDK_SBC_SYNCHRONIZE_CACHE_16, "SYNCHRONIZE CACHE 16" },
     103                 :            :         { SPDK_SBC_UNMAP, "UNMAP" },
     104                 :            :         { SPDK_SBC_VERIFY_10, "VERIFY 10" },
     105                 :            :         { SPDK_SBC_VERIFY_12, "VERIFY 12" },
     106                 :            :         { SPDK_SBC_VERIFY_16, "VERIFY 16" },
     107                 :            :         { SPDK_SBC_WRITE_6, "WRITE 6" },
     108                 :            :         { SPDK_SBC_WRITE_10, "WRITE 10" },
     109                 :            :         { SPDK_SBC_WRITE_12, "WRITE 12" },
     110                 :            :         { SPDK_SBC_WRITE_16, "WRITE 16" },
     111                 :            :         { SPDK_SBC_WRITE_AND_VERIFY_10, "WRITE AND VERIFY 10" },
     112                 :            :         { SPDK_SBC_WRITE_AND_VERIFY_12, "WRITE AND VERIFY 12" },
     113                 :            :         { SPDK_SBC_WRITE_AND_VERIFY_16, "WRITE AND VERIFY 16" },
     114                 :            :         { SPDK_SBC_WRITE_LONG_10, "WRITE LONG 10" },
     115                 :            :         { SPDK_SBC_WRITE_SAME_10, "WRITE SAME 10" },
     116                 :            :         { SPDK_SBC_WRITE_SAME_16, "WRITE SAME 16" },
     117                 :            :         { SPDK_SBC_XDREAD_10, "XDREAD 10" },
     118                 :            :         { SPDK_SBC_XDWRITE_10, "XDWRITE 10" },
     119                 :            :         { SPDK_SBC_XDWRITEREAD_10, "XDWRITEREAD 10" },
     120                 :            :         { SPDK_SBC_XPWRITE_10, "XPWRITE 10" }
     121                 :            : };
     122                 :            : 
     123                 :            : const char *
     124                 :          0 : spdk_scsi_sbc_opcode_string(uint8_t opcode, uint16_t sa)
     125                 :            : {
     126                 :            :         uint8_t i;
     127                 :            : 
     128                 :            :         /* FIXME: sa is unsupported currently, support variable length CDBs if necessary */
     129         [ #  # ]:          0 :         for (i = 0; i < SPDK_COUNTOF(scsi_sbc_opcode_strings); i++) {
     130   [ #  #  #  #  :          0 :                 if (scsi_sbc_opcode_strings[i].opc == opcode) {
          #  #  #  #  #  
                      # ]
     131   [ #  #  #  #  :          0 :                         return scsi_sbc_opcode_strings[i].str;
             #  #  #  # ]
     132                 :            :                 }
     133                 :          0 :         }
     134                 :            : 
     135                 :          0 :         return "UNKNOWN";
     136                 :          0 : }
     137                 :            : 
     138                 :        963 : SPDK_LOG_REGISTER_COMPONENT(scsi)

Generated by: LCOV version 1.14