1 /*
   2  * CDDL HEADER START
   3  *
   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  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  23  *
  24  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
  25  * Use is subject to license terms.
  26  */
  27 
  28 #ifndef _FC_TYPES_H
  29 #define _FC_TYPES_H
  30 
  31 
  32 
  33 /*
  34  * Types for FC Transport subsystems.
  35  *
  36  * This file picks up specific as well as generic type
  37  * defines, and also serves as a wrapper for many common
  38  * includes.
  39  */
  40 
  41 #include <sys/types.h>
  42 #include <sys/param.h>
  43 
  44 #ifdef  __cplusplus
  45 extern "C" {
  46 #endif
  47 
  48 #if !defined(_BIT_FIELDS_LTOH) && !defined(_BIT_FIELDS_HTOL)
  49 #error  One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
  50 #endif  /* _BIT_FIELDS_LTOH */
  51 
  52 #ifdef  _KERNEL
  53 #include <sys/systm.h>
  54 #include <sys/cmn_err.h>
  55 #include <sys/debug.h>
  56 #include <sys/devops.h>
  57 #include <sys/callb.h>
  58 #include <sys/disp.h>
  59 #include <sys/taskq.h>
  60 #endif  /* _KERNEL */
  61 
  62 #ifndef _SYS_SCSI_SCSI_TYPES_H
  63 
  64 
  65 typedef void *opaque_t;
  66 
  67 #endif /* _SYS_SCSI_SCSI_TYPES_H */
  68 
  69 /* Sysevent defs */
  70 #define EC_SUNFC                "EC_sunfc"
  71 #define ESC_SUNFC_PORT_ATTACH   "ESC_sunfc_port_attach"
  72 #define ESC_SUNFC_PORT_DETACH   "ESC_sunfc_port_detach"
  73 #define ESC_SUNFC_PORT_ONLINE   "ESC_sunfc_port_online"
  74 #define ESC_SUNFC_PORT_OFFLINE  "ESC_sunfc_port_offline"
  75 #define ESC_SUNFC_PORT_RSCN     "ESC_sunfc_port_rscn"
  76 #define ESC_SUNFC_TARGET_ADD    "ESC_sunfc_target_add"
  77 #define ESC_SUNFC_TARGET_REMOVE "ESC_sunfc_target_remove"
  78 #define ESC_SUNFC_DEVICE_ONLINE "ESC_sunfc_device_online"
  79 #define ESC_SUNFC_DEVICE_OFFLINE        "ESC_sunfc_device_offline"
  80 
  81 /* T11 FC-HBA state change tracking */
  82 typedef uint64_t    fc_hba_state_change_t;
  83 
  84 typedef struct port_id {
  85 #if     defined(_BIT_FIELDS_LTOH)
  86         uint32_t        port_id : 24,           /* Port Identifier */
  87                         priv_lilp_posit : 8;    /* LILP map position */
  88 #else
  89         uint32_t        priv_lilp_posit : 8,    /* LILP map position */
  90                         port_id : 24;           /* Port Identifier */
  91 #endif  /* _BIT_FIELDS_LTOH */
  92 } fc_portid_t;
  93 
  94 typedef struct hard_addr {
  95 #if     defined(_BIT_FIELDS_LTOH)
  96         uint32_t        hard_addr : 24,         /* hard address */
  97                         rsvd : 8;               /* reserved */
  98 #else
  99         uint32_t        rsvd : 8,
 100                         hard_addr : 24;         /* hard address */
 101 #endif  /* _BIT_FIELDS_LTOH */
 102 } fc_hardaddr_t;
 103 
 104 typedef struct port_type {
 105 #if defined(_BIT_FIELDS_LTOH)
 106         uint32_t        rsvd            : 24,
 107                         port_type       : 8;
 108 #else
 109         uint32_t        port_type       : 8,
 110                         rsvd            : 24;
 111 #endif  /* _BIT_FIELDS_LTOH */
 112 } fc_porttype_t;
 113 
 114 /*
 115  * FCA post reset behavior
 116  */
 117 typedef enum fc_reset_action {
 118         FC_RESET_RETURN_NONE,           /* Can't return any */
 119         FC_RESET_RETURN_ALL,            /* Return all commands reached here */
 120         FC_RESET_RETURN_OUTSTANDING     /* Return ones that haven't gone out */
 121 } fc_reset_action_t;
 122 
 123 /*
 124  * FCA DMA behavior on Unaligned buffers
 125  */
 126 typedef enum fc_dma_behavior {
 127         FC_ALLOW_STREAMING,             /* Streaming mode for all xfers */
 128         FC_NO_STREAMING                 /* Disable Streaming on unaligned */
 129                                         /* buffer or byte counts */
 130 } fc_dma_behavior_t;
 131 
 132 
 133 /*
 134  * FCA FCP command and response allocation in DVMA space
 135  */
 136 typedef enum fc_fcp_dma {
 137         FC_DVMA_SPACE,                  /* allocation should be in DVMA mem */
 138         FC_NO_DVMA_SPACE                /* allocation shouldn't be DVMA mem */
 139 } fc_fcp_dma_t;
 140 
 141 
 142 /*
 143  * struct to track rscn info both within the transport layer
 144  * and between the ULPs and transport.
 145  */
 146 typedef struct          fc_ulp_rscn_info {
 147         uint32_t        ulp_rscn_count;
 148 } fc_ulp_rscn_info_t;
 149 
 150 /*
 151  * Define a value for ulp_rscn_count to indicate that the contents
 152  * of the fc_ulp_rscn_info_t struct are invalid. Note that some parts of the
 153  * code assume that this value is zero, i.e., they use kmem_zalloc().
 154  */
 155 #define FC_INVALID_RSCN_COUNT           ((uint32_t)0)
 156 
 157 /*
 158  * FC Transport exported header files to all Consumers
 159  */
 160 
 161 #ifdef  _KERNEL
 162 #include <sys/fibre-channel/impl/fcph.h>
 163 #include <sys/fibre-channel/fc_appif.h>
 164 #include <sys/fibre-channel/impl/fc_linkapp.h>
 165 #include <sys/fibre-channel/impl/fcgs2.h>
 166 #include <sys/fibre-channel/impl/fc_fla.h>
 167 #include <sys/fibre-channel/impl/fcal.h>
 168 #include <sys/fibre-channel/impl/fctl.h>
 169 #include <sys/fibre-channel/impl/fc_error.h>
 170 #include <sys/fibre-channel/fcio.h>
 171 #include <sys/fibre-channel/ulp/fcp.h>
 172 #include <sys/fibre-channel/ulp/fcp_util.h>
 173 
 174 /*
 175  * For drivers which do not include these - must be last
 176  */
 177 #include <sys/ddi.h>
 178 #include <sys/sunddi.h>
 179 #include <sys/stat.h>
 180 #include <sys/sunndi.h>
 181 #include <sys/devctl.h>
 182 #endif  /* _KERNEL */
 183 
 184 #ifdef  __cplusplus
 185 }
 186 #endif
 187 
 188 #endif  /* _FC_TYPES_H */