4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  24  */
  25 
  26 #ifndef _LIBSCSI_H
  27 #define _LIBSCSI_H
  28 
  29 #ifdef  __cplusplus
  30 extern "C" {
  31 #endif
  32 
  33 #include <sys/types.h>
  34 #include <sys/sysmacros.h>
  35 #include <sys/scsi/impl/spc3_types.h>
  36 #include <stdarg.h>
  37 
  38 #define LIBSCSI_VERSION         1
  39 #define LIBSCSI_STATUS_INVALID  ((sam4_status_t)-1)
  40 #define LIBSCSI_DEFAULT_ENGINE_PATH     "/usr/lib/scsi/plugins/scsi/engines"
  41 #define LIBSCSI_DEFAULT_ENGINE  "uscsi"
  42 
  43 /*
 
  99         void (*lseo_target_name)(libscsi_hdl_t *, void *, char *, size_t);
 100 } libscsi_engine_ops_t;
 101 
 102 typedef struct libscsi_engine {
 103         const char *lse_name;
 104         uint_t lse_libversion;
 105         const libscsi_engine_ops_t *lse_ops;
 106 } libscsi_engine_t;
 107 
 108 extern libscsi_hdl_t *libscsi_init(uint_t, libscsi_errno_t *);
 109 extern void libscsi_fini(libscsi_hdl_t *);
 110 
 111 extern libscsi_target_t *libscsi_open(libscsi_hdl_t *, const char *,
 112     const void *);
 113 extern void libscsi_close(libscsi_hdl_t *, libscsi_target_t *);
 114 extern libscsi_hdl_t *libscsi_get_handle(libscsi_target_t *);
 115 
 116 extern const char *libscsi_vendor(libscsi_target_t *);
 117 extern const char *libscsi_product(libscsi_target_t *);
 118 extern const char *libscsi_revision(libscsi_target_t *);
 119 
 120 extern libscsi_errno_t libscsi_errno(libscsi_hdl_t *);
 121 extern const char *libscsi_errmsg(libscsi_hdl_t *);
 122 extern const char *libscsi_strerror(libscsi_errno_t);
 123 extern const char *libscsi_errname(libscsi_errno_t);
 124 extern libscsi_errno_t libscsi_errcode(const char *);
 125 
 126 extern libscsi_action_t *libscsi_action_alloc(libscsi_hdl_t *, spc3_cmd_t,
 127     uint_t, void *, size_t);
 128 extern sam4_status_t libscsi_action_get_status(const libscsi_action_t *);
 129 extern void libscsi_action_set_timeout(libscsi_action_t *, uint32_t);
 130 extern uint32_t libscsi_action_get_timeout(const libscsi_action_t *);
 131 extern uint_t libscsi_action_get_flags(const libscsi_action_t *);
 132 extern uint8_t *libscsi_action_get_cdb(const libscsi_action_t *);
 133 extern int libscsi_action_get_buffer(const libscsi_action_t *,
 134     uint8_t **, size_t *, size_t *);
 135 extern int libscsi_action_get_sense(const libscsi_action_t *,
 136     uint8_t **, size_t *, size_t *);
 137 extern int libscsi_action_parse_sense(const libscsi_action_t *, uint64_t *,
 138     uint64_t *, uint64_t *, diskaddr_t *);
 
 | 
 
 
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  24  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  25  */
  26 
  27 #ifndef _LIBSCSI_H
  28 #define _LIBSCSI_H
  29 
  30 #ifdef  __cplusplus
  31 extern "C" {
  32 #endif
  33 
  34 #include <sys/types.h>
  35 #include <sys/sysmacros.h>
  36 #include <sys/scsi/impl/spc3_types.h>
  37 #include <stdarg.h>
  38 
  39 #define LIBSCSI_VERSION         1
  40 #define LIBSCSI_STATUS_INVALID  ((sam4_status_t)-1)
  41 #define LIBSCSI_DEFAULT_ENGINE_PATH     "/usr/lib/scsi/plugins/scsi/engines"
  42 #define LIBSCSI_DEFAULT_ENGINE  "uscsi"
  43 
  44 /*
 
 100         void (*lseo_target_name)(libscsi_hdl_t *, void *, char *, size_t);
 101 } libscsi_engine_ops_t;
 102 
 103 typedef struct libscsi_engine {
 104         const char *lse_name;
 105         uint_t lse_libversion;
 106         const libscsi_engine_ops_t *lse_ops;
 107 } libscsi_engine_t;
 108 
 109 extern libscsi_hdl_t *libscsi_init(uint_t, libscsi_errno_t *);
 110 extern void libscsi_fini(libscsi_hdl_t *);
 111 
 112 extern libscsi_target_t *libscsi_open(libscsi_hdl_t *, const char *,
 113     const void *);
 114 extern void libscsi_close(libscsi_hdl_t *, libscsi_target_t *);
 115 extern libscsi_hdl_t *libscsi_get_handle(libscsi_target_t *);
 116 
 117 extern const char *libscsi_vendor(libscsi_target_t *);
 118 extern const char *libscsi_product(libscsi_target_t *);
 119 extern const char *libscsi_revision(libscsi_target_t *);
 120 extern const char *libscsi_lid(libscsi_target_t *);
 121 extern const char *libscsi_usn(libscsi_target_t *);
 122 
 123 extern libscsi_errno_t libscsi_errno(libscsi_hdl_t *);
 124 extern const char *libscsi_errmsg(libscsi_hdl_t *);
 125 extern const char *libscsi_strerror(libscsi_errno_t);
 126 extern const char *libscsi_errname(libscsi_errno_t);
 127 extern libscsi_errno_t libscsi_errcode(const char *);
 128 
 129 extern libscsi_action_t *libscsi_action_alloc(libscsi_hdl_t *, spc3_cmd_t,
 130     uint_t, void *, size_t);
 131 extern sam4_status_t libscsi_action_get_status(const libscsi_action_t *);
 132 extern void libscsi_action_set_timeout(libscsi_action_t *, uint32_t);
 133 extern uint32_t libscsi_action_get_timeout(const libscsi_action_t *);
 134 extern uint_t libscsi_action_get_flags(const libscsi_action_t *);
 135 extern uint8_t *libscsi_action_get_cdb(const libscsi_action_t *);
 136 extern int libscsi_action_get_buffer(const libscsi_action_t *,
 137     uint8_t **, size_t *, size_t *);
 138 extern int libscsi_action_get_sense(const libscsi_action_t *,
 139     uint8_t **, size_t *, size_t *);
 140 extern int libscsi_action_parse_sense(const libscsi_action_t *, uint64_t *,
 141     uint64_t *, uint64_t *, diskaddr_t *);
 
 |