Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]

Diff markup

Differences between /linux/include/scsi/scsi_transport_fc.h (Version 2.6.11.8) and /linux/include/scsi/scsi_transport_fc.h (Version 2.6.25.8)


  1 /*                                             !!   1 /*
  2  *  FiberChannel transport specific attributes      2  *  FiberChannel transport specific attributes exported to sysfs.
  3  *                                                  3  *
  4  *  Copyright (c) 2003 Silicon Graphics, Inc.       4  *  Copyright (c) 2003 Silicon Graphics, Inc.  All rights reserved.
  5  *                                                  5  *
  6  *  This program is free software; you can red      6  *  This program is free software; you can redistribute it and/or modify
  7  *  it under the terms of the GNU General Publ      7  *  it under the terms of the GNU General Public License as published by
  8  *  the Free Software Foundation; either versi      8  *  the Free Software Foundation; either version 2 of the License, or
  9  *  (at your option) any later version.             9  *  (at your option) any later version.
 10  *                                                 10  *
 11  *  This program is distributed in the hope th     11  *  This program is distributed in the hope that it will be useful,
 12  *  but WITHOUT ANY WARRANTY; without even the     12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  *  MERCHANTABILITY or FITNESS FOR A PARTICULA     13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14  *  GNU General Public License for more detail     14  *  GNU General Public License for more details.
 15  *                                                 15  *
 16  *  You should have received a copy of the GNU     16  *  You should have received a copy of the GNU General Public License
 17  *  along with this program; if not, write to      17  *  along with this program; if not, write to the Free Software
 18  *  Foundation, Inc., 59 Temple Place, Suite 3     18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                                                   >>  19  *
                                                   >>  20  *  ========
                                                   >>  21  *
                                                   >>  22  *  Copyright (C) 2004-2007   James Smart, Emulex Corporation
                                                   >>  23  *    Rewrite for host, target, device, and remote port attributes,
                                                   >>  24  *    statistics, and service functions...
                                                   >>  25  *
 19  */                                                26  */
 20 #ifndef SCSI_TRANSPORT_FC_H                        27 #ifndef SCSI_TRANSPORT_FC_H
 21 #define SCSI_TRANSPORT_FC_H                        28 #define SCSI_TRANSPORT_FC_H
 22                                                    29 
 23 #include <linux/config.h>                      !!  30 #include <linux/sched.h>
                                                   >>  31 #include <scsi/scsi.h>
                                                   >>  32 #include <scsi/scsi_netlink.h>
 24                                                    33 
 25 struct scsi_transport_template;                    34 struct scsi_transport_template;
 26                                                    35 
 27                                                    36 
 28 /*                                                 37 /*
 29  * FC Port definitions - Following FC HBAAPI g     38  * FC Port definitions - Following FC HBAAPI guidelines
 30  *                                                 39  *
 31  * Note: Not all binary values for the differe     40  * Note: Not all binary values for the different fields match HBAAPI.
 32  *  Instead, we use densely packed ordinal val     41  *  Instead, we use densely packed ordinal values or enums.
 33  *  We get away with this as we never present      42  *  We get away with this as we never present the actual binary values
 34  *  externally. For sysfs, we always present t     43  *  externally. For sysfs, we always present the string that describes
 35  *  the value. Thus, an admin doesn't need a m     44  *  the value. Thus, an admin doesn't need a magic HBAAPI decoder ring
 36  *  to understand the values. The HBAAPI user-     45  *  to understand the values. The HBAAPI user-space library is free to
 37  *  convert the strings into the HBAAPI-specif     46  *  convert the strings into the HBAAPI-specified binary values.
 38  *                                                 47  *
 39  * Note: Not all HBAAPI-defined values are con     48  * Note: Not all HBAAPI-defined values are contained in the definitions
 40  *  below. Those not appropriate to an fc_host     49  *  below. Those not appropriate to an fc_host (e.g. FCP initiator) have
 41  *  been removed.                                  50  *  been removed.
 42  */                                                51  */
 43                                                    52 
 44 /*                                                 53 /*
 45  * fc_port_type: If you alter this, you also n     54  * fc_port_type: If you alter this, you also need to alter scsi_transport_fc.c
 46  * (for the ascii descriptions).                   55  * (for the ascii descriptions).
 47  */                                                56  */
 48 enum fc_port_type {                                57 enum fc_port_type {
 49         FC_PORTTYPE_UNKNOWN,                       58         FC_PORTTYPE_UNKNOWN,
 50         FC_PORTTYPE_OTHER,                         59         FC_PORTTYPE_OTHER,
 51         FC_PORTTYPE_NOTPRESENT,                    60         FC_PORTTYPE_NOTPRESENT,
 52         FC_PORTTYPE_NPORT,              /* Att     61         FC_PORTTYPE_NPORT,              /* Attached to FPort */
 53         FC_PORTTYPE_NLPORT,             /* (Pu     62         FC_PORTTYPE_NLPORT,             /* (Public) Loop w/ FLPort */
 54         FC_PORTTYPE_LPORT,              /* (Pr     63         FC_PORTTYPE_LPORT,              /* (Private) Loop w/o FLPort */
 55         FC_PORTTYPE_PTP,                /* Poi     64         FC_PORTTYPE_PTP,                /* Point to Point w/ another NPort */
                                                   >>  65         FC_PORTTYPE_NPIV,               /* VPORT based on NPIV */
 56 };                                                 66 };
 57                                                    67 
                                                   >>  68 
 58 /*                                                 69 /*
 59  * fc_port_state: If you alter this, you also      70  * fc_port_state: If you alter this, you also need to alter scsi_transport_fc.c
 60  * (for the ascii descriptions).                   71  * (for the ascii descriptions).
 61  */                                                72  */
 62 enum fc_port_state {                               73 enum fc_port_state {
 63         FC_PORTSTATE_UNKNOWN,                      74         FC_PORTSTATE_UNKNOWN,
                                                   >>  75         FC_PORTSTATE_NOTPRESENT,
 64         FC_PORTSTATE_ONLINE,                       76         FC_PORTSTATE_ONLINE,
 65         FC_PORTSTATE_OFFLINE,           /* Use     77         FC_PORTSTATE_OFFLINE,           /* User has taken Port Offline */
                                                   >>  78         FC_PORTSTATE_BLOCKED,
 66         FC_PORTSTATE_BYPASSED,                     79         FC_PORTSTATE_BYPASSED,
 67         FC_PORTSTATE_DIAGNOSTICS,                  80         FC_PORTSTATE_DIAGNOSTICS,
 68         FC_PORTSTATE_LINKDOWN,                     81         FC_PORTSTATE_LINKDOWN,
 69         FC_PORTSTATE_ERROR,                        82         FC_PORTSTATE_ERROR,
 70         FC_PORTSTATE_LOOPBACK,                     83         FC_PORTSTATE_LOOPBACK,
                                                   >>  84         FC_PORTSTATE_DELETED,
 71 };                                                 85 };
 72                                                    86 
 73                                                    87 
 74 /*                                             !!  88 /*
                                                   >>  89  * fc_vport_state: If you alter this, you also need to alter
                                                   >>  90  * scsi_transport_fc.c (for the ascii descriptions).
                                                   >>  91  */
                                                   >>  92 enum fc_vport_state {
                                                   >>  93         FC_VPORT_UNKNOWN,
                                                   >>  94         FC_VPORT_ACTIVE,
                                                   >>  95         FC_VPORT_DISABLED,
                                                   >>  96         FC_VPORT_LINKDOWN,
                                                   >>  97         FC_VPORT_INITIALIZING,
                                                   >>  98         FC_VPORT_NO_FABRIC_SUPP,
                                                   >>  99         FC_VPORT_NO_FABRIC_RSCS,
                                                   >> 100         FC_VPORT_FABRIC_LOGOUT,
                                                   >> 101         FC_VPORT_FABRIC_REJ_WWN,
                                                   >> 102         FC_VPORT_FAILED,
                                                   >> 103 };
                                                   >> 104 
                                                   >> 105 
                                                   >> 106 
                                                   >> 107 /*
 75  * FC Classes of Service                          108  * FC Classes of Service
 76  * Note: values are not enumerated, as they ca    109  * Note: values are not enumerated, as they can be "or'd" together
 77  * for reporting (e.g. report supported_classe    110  * for reporting (e.g. report supported_classes). If you alter this list,
 78  * you also need to alter scsi_transport_fc.c     111  * you also need to alter scsi_transport_fc.c (for the ascii descriptions).
 79  */                                               112  */
 80 #define FC_COS_UNSPECIFIED              0         113 #define FC_COS_UNSPECIFIED              0
 81 #define FC_COS_CLASS1                   2         114 #define FC_COS_CLASS1                   2
 82 #define FC_COS_CLASS2                   4         115 #define FC_COS_CLASS2                   4
 83 #define FC_COS_CLASS3                   8         116 #define FC_COS_CLASS3                   8
 84 #define FC_COS_CLASS4                   0x10      117 #define FC_COS_CLASS4                   0x10
 85 #define FC_COS_CLASS6                   0x40      118 #define FC_COS_CLASS6                   0x40
 86                                                   119 
 87 /*                                             !! 120 /*
 88  * FC Port Speeds                                 121  * FC Port Speeds
 89  * Note: values are not enumerated, as they ca    122  * Note: values are not enumerated, as they can be "or'd" together
 90  * for reporting (e.g. report supported_speeds    123  * for reporting (e.g. report supported_speeds). If you alter this list,
 91  * you also need to alter scsi_transport_fc.c     124  * you also need to alter scsi_transport_fc.c (for the ascii descriptions).
 92  */                                               125  */
 93 #define FC_PORTSPEED_UNKNOWN            0 /* U    126 #define FC_PORTSPEED_UNKNOWN            0 /* Unknown - transceiver
 94                                              i    127                                              incapable of reporting */
 95 #define FC_PORTSPEED_1GBIT              1         128 #define FC_PORTSPEED_1GBIT              1
 96 #define FC_PORTSPEED_2GBIT              2         129 #define FC_PORTSPEED_2GBIT              2
 97 #define FC_PORTSPEED_10GBIT             4      !! 130 #define FC_PORTSPEED_4GBIT              4
 98 #define FC_PORTSPEED_4GBIT              8      !! 131 #define FC_PORTSPEED_10GBIT             8
                                                   >> 132 #define FC_PORTSPEED_8GBIT              0x10
                                                   >> 133 #define FC_PORTSPEED_16GBIT             0x20
 99 #define FC_PORTSPEED_NOT_NEGOTIATED     (1 <<     134 #define FC_PORTSPEED_NOT_NEGOTIATED     (1 << 15) /* Speed not established */
100                                                   135 
101 /*                                                136 /*
102  * fc_tgtid_binding_type: If you alter this, y    137  * fc_tgtid_binding_type: If you alter this, you also need to alter
103  * scsi_transport_fc.c (for the ascii descript    138  * scsi_transport_fc.c (for the ascii descriptions).
104  */                                               139  */
105 enum fc_tgtid_binding_type  {                     140 enum fc_tgtid_binding_type  {
                                                   >> 141         FC_TGTID_BIND_NONE,
106         FC_TGTID_BIND_BY_WWPN,                    142         FC_TGTID_BIND_BY_WWPN,
107         FC_TGTID_BIND_BY_WWNN,                    143         FC_TGTID_BIND_BY_WWNN,
108         FC_TGTID_BIND_BY_ID,                      144         FC_TGTID_BIND_BY_ID,
109 };                                                145 };
110                                                   146 
                                                   >> 147 /*
                                                   >> 148  * FC Port Roles
                                                   >> 149  * Note: values are not enumerated, as they can be "or'd" together
                                                   >> 150  * for reporting (e.g. report roles). If you alter this list,
                                                   >> 151  * you also need to alter scsi_transport_fc.c (for the ascii descriptions).
                                                   >> 152  */
                                                   >> 153 #define FC_PORT_ROLE_UNKNOWN                    0x00
                                                   >> 154 #define FC_PORT_ROLE_FCP_TARGET                 0x01
                                                   >> 155 #define FC_PORT_ROLE_FCP_INITIATOR              0x02
                                                   >> 156 #define FC_PORT_ROLE_IP_PORT                    0x04
                                                   >> 157 
                                                   >> 158 /* The following are for compatibility */
                                                   >> 159 #define FC_RPORT_ROLE_UNKNOWN                   FC_PORT_ROLE_UNKNOWN
                                                   >> 160 #define FC_RPORT_ROLE_FCP_TARGET                FC_PORT_ROLE_FCP_TARGET
                                                   >> 161 #define FC_RPORT_ROLE_FCP_INITIATOR             FC_PORT_ROLE_FCP_INITIATOR
                                                   >> 162 #define FC_RPORT_ROLE_IP_PORT                   FC_PORT_ROLE_IP_PORT
                                                   >> 163 
                                                   >> 164 
                                                   >> 165 /* Macro for use in defining Virtual Port attributes */
                                                   >> 166 #define FC_VPORT_ATTR(_name,_mode,_show,_store)                         \
                                                   >> 167 struct class_device_attribute class_device_attr_vport_##_name =         \
                                                   >> 168         __ATTR(_name,_mode,_show,_store)
111                                                   169 
112                                                   170 
113 /*                                                171 /*
114  * FC Remote Port (Target) Attributes          !! 172  * FC Virtual Port Attributes
                                                   >> 173  *
                                                   >> 174  * This structure exists for each FC port is a virtual FC port. Virtual
                                                   >> 175  * ports share the physical link with the Physical port. Each virtual
                                                   >> 176  * ports has a unique presense on the SAN, and may be instantiated via
                                                   >> 177  * NPIV, Virtual Fabrics, or via additional ALPAs. As the vport is a
                                                   >> 178  * unique presense, each vport has it's own view of the fabric,
                                                   >> 179  * authentication privilege, and priorities.
                                                   >> 180  *
                                                   >> 181  * A virtual port may support 1 or more FC4 roles. Typically it is a
                                                   >> 182  * FCP Initiator. It could be a FCP Target, or exist sole for an IP over FC
                                                   >> 183  * roles. FC port attributes for the vport will be reported on any
                                                   >> 184  * fc_host class object allocated for an FCP Initiator.
                                                   >> 185  *
                                                   >> 186  * --
                                                   >> 187  *
                                                   >> 188  * Fixed attributes are not expected to change. The driver is
                                                   >> 189  * expected to set these values after receiving the fc_vport structure
                                                   >> 190  * via the vport_create() call from the transport.
                                                   >> 191  * The transport fully manages all get functions w/o driver interaction.
                                                   >> 192  *
                                                   >> 193  * Dynamic attributes are expected to change. The driver participates
                                                   >> 194  * in all get/set operations via functions provided by the driver.
                                                   >> 195  *
                                                   >> 196  * Private attributes are transport-managed values. They are fully
                                                   >> 197  * managed by the transport w/o driver interaction.
115  */                                               198  */
116                                                   199 
117 struct fc_starget_attrs {       /* aka fc_targ !! 200 #define FC_VPORT_SYMBOLIC_NAMELEN               64
118         int port_id;                           !! 201 struct fc_vport {
                                                   >> 202         /* Fixed Attributes */
                                                   >> 203 
                                                   >> 204         /* Dynamic Attributes */
                                                   >> 205 
                                                   >> 206         /* Private (Transport-managed) Attributes */
                                                   >> 207         enum fc_vport_state vport_state;
                                                   >> 208         enum fc_vport_state vport_last_state;
119         u64 node_name;                            209         u64 node_name;
120         u64 port_name;                            210         u64 port_name;
                                                   >> 211         u32 roles;
                                                   >> 212         u32 vport_id;           /* Admin Identifier for the vport */
                                                   >> 213         enum fc_port_type vport_type;
                                                   >> 214         char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN];
                                                   >> 215 
                                                   >> 216         /* exported data */
                                                   >> 217         void *dd_data;                  /* Used for driver-specific storage */
                                                   >> 218 
                                                   >> 219         /* internal data */
                                                   >> 220         struct Scsi_Host *shost;        /* Physical Port Parent */
                                                   >> 221         unsigned int channel;
                                                   >> 222         u32 number;
                                                   >> 223         u8 flags;
                                                   >> 224         struct list_head peers;
                                                   >> 225         struct device dev;
                                                   >> 226         struct work_struct vport_delete_work;
                                                   >> 227 } __attribute__((aligned(sizeof(unsigned long))));
                                                   >> 228 
                                                   >> 229 /* bit field values for struct fc_vport "flags" field: */
                                                   >> 230 #define FC_VPORT_CREATING               0x01
                                                   >> 231 #define FC_VPORT_DELETING               0x02
                                                   >> 232 #define FC_VPORT_DELETED                0x04
                                                   >> 233 #define FC_VPORT_DEL                    0x06    /* Any DELETE state */
                                                   >> 234 
                                                   >> 235 #define dev_to_vport(d)                         \
                                                   >> 236         container_of(d, struct fc_vport, dev)
                                                   >> 237 #define transport_class_to_vport(classdev)      \
                                                   >> 238         dev_to_vport(classdev->dev)
                                                   >> 239 #define vport_to_shost(v)                       \
                                                   >> 240         (v->shost)
                                                   >> 241 #define vport_to_shost_channel(v)               \
                                                   >> 242         (v->channel)
                                                   >> 243 #define vport_to_parent(v)                      \
                                                   >> 244         (v->dev.parent)
                                                   >> 245 
                                                   >> 246 
                                                   >> 247 /* Error return codes for vport_create() callback */
                                                   >> 248 #define VPCERR_UNSUPPORTED              -ENOSYS         /* no driver/adapter
                                                   >> 249                                                            support */
                                                   >> 250 #define VPCERR_BAD_WWN                  -ENOTUNIQ       /* driver validation
                                                   >> 251                                                            of WWNs failed */
                                                   >> 252 #define VPCERR_NO_FABRIC_SUPP           -EOPNOTSUPP     /* Fabric connection
                                                   >> 253                                                            is loop or the
                                                   >> 254                                                            Fabric Port does
                                                   >> 255                                                            not support NPIV */
                                                   >> 256 
                                                   >> 257 /*
                                                   >> 258  * fc_rport_identifiers: This set of data contains all elements
                                                   >> 259  * to uniquely identify a remote FC port. The driver uses this data
                                                   >> 260  * to report the existence of a remote FC port in the topology. Internally,
                                                   >> 261  * the transport uses this data for attributes and to manage consistent
                                                   >> 262  * target id bindings.
                                                   >> 263  */
                                                   >> 264 struct fc_rport_identifiers {
                                                   >> 265         u64 node_name;
                                                   >> 266         u64 port_name;
                                                   >> 267         u32 port_id;
                                                   >> 268         u32 roles;
                                                   >> 269 };
                                                   >> 270 
                                                   >> 271 
                                                   >> 272 /* Macro for use in defining Remote Port attributes */
                                                   >> 273 #define FC_RPORT_ATTR(_name,_mode,_show,_store)                         \
                                                   >> 274 struct class_device_attribute class_device_attr_rport_##_name =         \
                                                   >> 275         __ATTR(_name,_mode,_show,_store)
                                                   >> 276 
                                                   >> 277 
                                                   >> 278 /*
                                                   >> 279  * FC Remote Port Attributes
                                                   >> 280  *
                                                   >> 281  * This structure exists for each remote FC port that a LLDD notifies
                                                   >> 282  * the subsystem of.  A remote FC port may or may not be a SCSI Target,
                                                   >> 283  * also be a SCSI initiator, IP endpoint, etc. As such, the remote
                                                   >> 284  * port is considered a separate entity, independent of "role" (such
                                                   >> 285  * as scsi target).
                                                   >> 286  *
                                                   >> 287  * --
                                                   >> 288  *
                                                   >> 289  * Attributes are based on HBAAPI V2.0 definitions. Only those
                                                   >> 290  * attributes that are determinable by the local port (aka Host)
                                                   >> 291  * are contained.
                                                   >> 292  *
                                                   >> 293  * Fixed attributes are not expected to change. The driver is
                                                   >> 294  * expected to set these values after successfully calling
                                                   >> 295  * fc_remote_port_add(). The transport fully manages all get functions
                                                   >> 296  * w/o driver interaction.
                                                   >> 297  *
                                                   >> 298  * Dynamic attributes are expected to change. The driver participates
                                                   >> 299  * in all get/set operations via functions provided by the driver.
                                                   >> 300  *
                                                   >> 301  * Private attributes are transport-managed values. They are fully
                                                   >> 302  * managed by the transport w/o driver interaction.
                                                   >> 303  */
                                                   >> 304 
                                                   >> 305 struct fc_rport {       /* aka fc_starget_attrs */
                                                   >> 306         /* Fixed Attributes */
                                                   >> 307         u32 maxframe_size;
                                                   >> 308         u32 supported_classes;
                                                   >> 309 
                                                   >> 310         /* Dynamic Attributes */
121         u32 dev_loss_tmo;       /* Remote Port    311         u32 dev_loss_tmo;       /* Remote Port loss timeout in seconds. */
122         struct work_struct dev_loss_work;      !! 312 
                                                   >> 313         /* Private (Transport-managed) Attributes */
                                                   >> 314         u64 node_name;
                                                   >> 315         u64 port_name;
                                                   >> 316         u32 port_id;
                                                   >> 317         u32 roles;
                                                   >> 318         enum fc_port_state port_state;  /* Will only be ONLINE or UNKNOWN */
                                                   >> 319         u32 scsi_target_id;
                                                   >> 320         u32 fast_io_fail_tmo;
                                                   >> 321 
                                                   >> 322         /* exported data */
                                                   >> 323         void *dd_data;                  /* Used for driver-specific storage */
                                                   >> 324 
                                                   >> 325         /* internal data */
                                                   >> 326         unsigned int channel;
                                                   >> 327         u32 number;
                                                   >> 328         u8 flags;
                                                   >> 329         struct list_head peers;
                                                   >> 330         struct device dev;
                                                   >> 331         struct delayed_work dev_loss_work;
                                                   >> 332         struct work_struct scan_work;
                                                   >> 333         struct delayed_work fail_io_work;
                                                   >> 334         struct work_struct stgt_delete_work;
                                                   >> 335         struct work_struct rport_delete_work;
                                                   >> 336 } __attribute__((aligned(sizeof(unsigned long))));
                                                   >> 337 
                                                   >> 338 /* bit field values for struct fc_rport "flags" field: */
                                                   >> 339 #define FC_RPORT_DEVLOSS_PENDING        0x01
                                                   >> 340 #define FC_RPORT_SCAN_PENDING           0x02
                                                   >> 341 
                                                   >> 342 #define dev_to_rport(d)                         \
                                                   >> 343         container_of(d, struct fc_rport, dev)
                                                   >> 344 #define transport_class_to_rport(classdev)      \
                                                   >> 345         dev_to_rport(classdev->dev)
                                                   >> 346 #define rport_to_shost(r)                       \
                                                   >> 347         dev_to_shost(r->dev.parent)
                                                   >> 348 
                                                   >> 349 /*
                                                   >> 350  * FC SCSI Target Attributes
                                                   >> 351  *
                                                   >> 352  * The SCSI Target is considered an extention of a remote port (as
                                                   >> 353  * a remote port can be more than a SCSI Target). Within the scsi
                                                   >> 354  * subsystem, we leave the Target as a separate entity. Doing so
                                                   >> 355  * provides backward compatibility with prior FC transport api's,
                                                   >> 356  * and lets remote ports be handled entirely within the FC transport
                                                   >> 357  * and independently from the scsi subsystem. The drawback is that
                                                   >> 358  * some data will be duplicated.
                                                   >> 359  */
                                                   >> 360 
                                                   >> 361 struct fc_starget_attrs {       /* aka fc_target_attrs */
                                                   >> 362         /* Dynamic Attributes */
                                                   >> 363         u64 node_name;
                                                   >> 364         u64 port_name;
                                                   >> 365         u32 port_id;
123 };                                                366 };
124                                                   367 
125 #define fc_starget_port_id(x) \                << 
126         (((struct fc_starget_attrs *)&(x)->sta << 
127 #define fc_starget_node_name(x) \                 368 #define fc_starget_node_name(x) \
128         (((struct fc_starget_attrs *)&(x)->sta    369         (((struct fc_starget_attrs *)&(x)->starget_data)->node_name)
129 #define fc_starget_port_name(x) \                 370 #define fc_starget_port_name(x) \
130         (((struct fc_starget_attrs *)&(x)->sta    371         (((struct fc_starget_attrs *)&(x)->starget_data)->port_name)
131 #define fc_starget_dev_loss_tmo(x) \           !! 372 #define fc_starget_port_id(x) \
132         (((struct fc_starget_attrs *)&(x)->sta !! 373         (((struct fc_starget_attrs *)&(x)->starget_data)->port_id)
133 #define fc_starget_dev_loss_work(x) \          !! 374 
134         (((struct fc_starget_attrs *)&(x)->sta !! 375 #define starget_to_rport(s)                     \
                                                   >> 376         scsi_is_fc_rport(s->dev.parent) ? dev_to_rport(s->dev.parent) : NULL
135                                                   377 
136                                                   378 
137 /*                                                379 /*
138  * FC Local Port (Host) Statistics                380  * FC Local Port (Host) Statistics
139  */                                               381  */
140                                                   382 
141 /* FC Statistics - Following FC HBAAPI v2.0 gu    383 /* FC Statistics - Following FC HBAAPI v2.0 guidelines */
142 struct fc_host_statistics {                       384 struct fc_host_statistics {
143         /* port statistics */                     385         /* port statistics */
144         u64 seconds_since_last_reset;             386         u64 seconds_since_last_reset;
145         u64 tx_frames;                            387         u64 tx_frames;
146         u64 tx_words;                             388         u64 tx_words;
147         u64 rx_frames;                            389         u64 rx_frames;
148         u64 rx_words;                             390         u64 rx_words;
149         u64 lip_count;                            391         u64 lip_count;
150         u64 nos_count;                            392         u64 nos_count;
151         u64 error_frames;                         393         u64 error_frames;
152         u64 dumped_frames;                        394         u64 dumped_frames;
153         u64 link_failure_count;                   395         u64 link_failure_count;
154         u64 loss_of_sync_count;                   396         u64 loss_of_sync_count;
155         u64 loss_of_signal_count;                 397         u64 loss_of_signal_count;
156         u64 prim_seq_protocol_err_count;          398         u64 prim_seq_protocol_err_count;
157         u64 invalid_tx_word_count;                399         u64 invalid_tx_word_count;
158         u64 invalid_crc_count;                    400         u64 invalid_crc_count;
159                                                !! 401 
160         /* fc4 statistics  (only FCP supported    402         /* fc4 statistics  (only FCP supported currently) */
161         u64 fcp_input_requests;                   403         u64 fcp_input_requests;
162         u64 fcp_output_requests;                  404         u64 fcp_output_requests;
163         u64 fcp_control_requests;                 405         u64 fcp_control_requests;
164         u64 fcp_input_megabytes;                  406         u64 fcp_input_megabytes;
165         u64 fcp_output_megabytes;                 407         u64 fcp_output_megabytes;
166 };                                                408 };
167                                                   409 
168                                                   410 
169 /*                                                411 /*
                                                   >> 412  * FC Event Codes - Polled and Async, following FC HBAAPI v2.0 guidelines
                                                   >> 413  */
                                                   >> 414 
                                                   >> 415 /*
                                                   >> 416  * fc_host_event_code: If you alter this, you also need to alter
                                                   >> 417  * scsi_transport_fc.c (for the ascii descriptions).
                                                   >> 418  */
                                                   >> 419 enum fc_host_event_code  {
                                                   >> 420         FCH_EVT_LIP                     = 0x1,
                                                   >> 421         FCH_EVT_LINKUP                  = 0x2,
                                                   >> 422         FCH_EVT_LINKDOWN                = 0x3,
                                                   >> 423         FCH_EVT_LIPRESET                = 0x4,
                                                   >> 424         FCH_EVT_RSCN                    = 0x5,
                                                   >> 425         FCH_EVT_ADAPTER_CHANGE          = 0x103,
                                                   >> 426         FCH_EVT_PORT_UNKNOWN            = 0x200,
                                                   >> 427         FCH_EVT_PORT_OFFLINE            = 0x201,
                                                   >> 428         FCH_EVT_PORT_ONLINE             = 0x202,
                                                   >> 429         FCH_EVT_PORT_FABRIC             = 0x204,
                                                   >> 430         FCH_EVT_LINK_UNKNOWN            = 0x500,
                                                   >> 431         FCH_EVT_VENDOR_UNIQUE           = 0xffff,
                                                   >> 432 };
                                                   >> 433 
                                                   >> 434 
                                                   >> 435 /*
170  * FC Local Port (Host) Attributes                436  * FC Local Port (Host) Attributes
171  *                                                437  *
172  * Attributes are based on HBAAPI V2.0 definit    438  * Attributes are based on HBAAPI V2.0 definitions.
173  * Note: OSDeviceName is determined by user-sp    439  * Note: OSDeviceName is determined by user-space library
174  *                                                440  *
175  * Fixed attributes are not expected to change    441  * Fixed attributes are not expected to change. The driver is
176  * expected to set these values after successf    442  * expected to set these values after successfully calling scsi_add_host().
177  * The transport fully manages all get functio    443  * The transport fully manages all get functions w/o driver interaction.
178  *                                                444  *
179  * Dynamic attributes are expected to change.     445  * Dynamic attributes are expected to change. The driver participates
180  * in all get/set operations via functions pro    446  * in all get/set operations via functions provided by the driver.
181  *                                                447  *
182  * Private attributes are transport-managed va    448  * Private attributes are transport-managed values. They are fully
183  * managed by the transport w/o driver interac    449  * managed by the transport w/o driver interaction.
184  */                                               450  */
185                                                   451 
186 #define FC_FC4_LIST_SIZE                32        452 #define FC_FC4_LIST_SIZE                32
187 #define FC_SYMBOLIC_NAME_SIZE           256       453 #define FC_SYMBOLIC_NAME_SIZE           256
188 #define FC_VERSION_STRING_SIZE          64        454 #define FC_VERSION_STRING_SIZE          64
189 #define FC_SERIAL_NUMBER_SIZE           80        455 #define FC_SERIAL_NUMBER_SIZE           80
190                                                   456 
191 struct fc_host_attrs {                            457 struct fc_host_attrs {
192         /* Fixed Attributes */                    458         /* Fixed Attributes */
193         u64 node_name;                            459         u64 node_name;
194         u64 port_name;                            460         u64 port_name;
                                                   >> 461         u64 permanent_port_name;
195         u32 supported_classes;                    462         u32 supported_classes;
196         u8  supported_fc4s[FC_FC4_LIST_SIZE];     463         u8  supported_fc4s[FC_FC4_LIST_SIZE];
197         char symbolic_name[FC_SYMBOLIC_NAME_SI << 
198         u32 supported_speeds;                     464         u32 supported_speeds;
199         u32 maxframe_size;                        465         u32 maxframe_size;
200         char hardware_version[FC_VERSION_STRIN !! 466         u16 max_npiv_vports;
201         char firmware_version[FC_VERSION_STRIN << 
202         char serial_number[FC_SERIAL_NUMBER_SI    467         char serial_number[FC_SERIAL_NUMBER_SIZE];
203         char opt_rom_version[FC_VERSION_STRING << 
204         char driver_version[FC_VERSION_STRING_ << 
205                                                   468 
206         /* Dynamic Attributes */                  469         /* Dynamic Attributes */
207         u32 port_id;                              470         u32 port_id;
208         enum fc_port_type port_type;              471         enum fc_port_type port_type;
209         enum fc_port_state port_state;            472         enum fc_port_state port_state;
210         u8  active_fc4s[FC_FC4_LIST_SIZE];        473         u8  active_fc4s[FC_FC4_LIST_SIZE];
211         u32 speed;                                474         u32 speed;
212         u64 fabric_name;                          475         u64 fabric_name;
213         u32 link_down_tmo;      /* Link Down t !! 476         char symbolic_name[FC_SYMBOLIC_NAME_SIZE];
                                                   >> 477         char system_hostname[FC_SYMBOLIC_NAME_SIZE];
214                                                   478 
215         /* Private (Transport-managed) Attribu    479         /* Private (Transport-managed) Attributes */
216         enum fc_tgtid_binding_type  tgtid_bind    480         enum fc_tgtid_binding_type  tgtid_bind_type;
217                                                   481 
218         /* internal data */                       482         /* internal data */
219         struct work_struct link_down_work;     !! 483         struct list_head rports;
                                                   >> 484         struct list_head rport_bindings;
                                                   >> 485         struct list_head vports;
                                                   >> 486         u32 next_rport_number;
                                                   >> 487         u32 next_target_id;
                                                   >> 488         u32 next_vport_number;
                                                   >> 489         u16 npiv_vports_inuse;
                                                   >> 490 
                                                   >> 491         /* work queues for rport state manipulation */
                                                   >> 492         char work_q_name[KOBJ_NAME_LEN];
                                                   >> 493         struct workqueue_struct *work_q;
                                                   >> 494         char devloss_work_q_name[KOBJ_NAME_LEN];
                                                   >> 495         struct workqueue_struct *devloss_work_q;
220 };                                                496 };
221                                                   497 
                                                   >> 498 #define shost_to_fc_host(x) \
                                                   >> 499         ((struct fc_host_attrs *)(x)->shost_data)
                                                   >> 500 
222 #define fc_host_node_name(x) \                    501 #define fc_host_node_name(x) \
223         (((struct fc_host_attrs *)(x)->shost_d    502         (((struct fc_host_attrs *)(x)->shost_data)->node_name)
224 #define fc_host_port_name(x)    \                 503 #define fc_host_port_name(x)    \
225         (((struct fc_host_attrs *)(x)->shost_d    504         (((struct fc_host_attrs *)(x)->shost_data)->port_name)
                                                   >> 505 #define fc_host_permanent_port_name(x)  \
                                                   >> 506         (((struct fc_host_attrs *)(x)->shost_data)->permanent_port_name)
226 #define fc_host_supported_classes(x)    \         507 #define fc_host_supported_classes(x)    \
227         (((struct fc_host_attrs *)(x)->shost_d    508         (((struct fc_host_attrs *)(x)->shost_data)->supported_classes)
228 #define fc_host_supported_fc4s(x)       \         509 #define fc_host_supported_fc4s(x)       \
229         (((struct fc_host_attrs *)(x)->shost_d    510         (((struct fc_host_attrs *)(x)->shost_data)->supported_fc4s)
230 #define fc_host_symbolic_name(x)        \      << 
231         (((struct fc_host_attrs *)(x)->shost_d << 
232 #define fc_host_supported_speeds(x)     \         511 #define fc_host_supported_speeds(x)     \
233         (((struct fc_host_attrs *)(x)->shost_d    512         (((struct fc_host_attrs *)(x)->shost_data)->supported_speeds)
234 #define fc_host_maxframe_size(x)        \         513 #define fc_host_maxframe_size(x)        \
235         (((struct fc_host_attrs *)(x)->shost_d    514         (((struct fc_host_attrs *)(x)->shost_data)->maxframe_size)
236 #define fc_host_hardware_version(x)     \      !! 515 #define fc_host_max_npiv_vports(x)      \
237         (((struct fc_host_attrs *)(x)->shost_d !! 516         (((struct fc_host_attrs *)(x)->shost_data)->max_npiv_vports)
238 #define fc_host_firmware_version(x)     \      << 
239         (((struct fc_host_attrs *)(x)->shost_d << 
240 #define fc_host_serial_number(x)        \         517 #define fc_host_serial_number(x)        \
241         (((struct fc_host_attrs *)(x)->shost_d    518         (((struct fc_host_attrs *)(x)->shost_data)->serial_number)
242 #define fc_host_opt_rom_version(x)      \      << 
243         (((struct fc_host_attrs *)(x)->shost_d << 
244 #define fc_host_driver_version(x)       \      << 
245         (((struct fc_host_attrs *)(x)->shost_d << 
246 #define fc_host_port_id(x)      \                 519 #define fc_host_port_id(x)      \
247         (((struct fc_host_attrs *)(x)->shost_d    520         (((struct fc_host_attrs *)(x)->shost_data)->port_id)
248 #define fc_host_port_type(x)    \                 521 #define fc_host_port_type(x)    \
249         (((struct fc_host_attrs *)(x)->shost_d    522         (((struct fc_host_attrs *)(x)->shost_data)->port_type)
250 #define fc_host_port_state(x)   \                 523 #define fc_host_port_state(x)   \
251         (((struct fc_host_attrs *)(x)->shost_d    524         (((struct fc_host_attrs *)(x)->shost_data)->port_state)
252 #define fc_host_active_fc4s(x)  \                 525 #define fc_host_active_fc4s(x)  \
253         (((struct fc_host_attrs *)(x)->shost_d    526         (((struct fc_host_attrs *)(x)->shost_data)->active_fc4s)
254 #define fc_host_speed(x)        \                 527 #define fc_host_speed(x)        \
255         (((struct fc_host_attrs *)(x)->shost_d    528         (((struct fc_host_attrs *)(x)->shost_data)->speed)
256 #define fc_host_fabric_name(x)  \                 529 #define fc_host_fabric_name(x)  \
257         (((struct fc_host_attrs *)(x)->shost_d    530         (((struct fc_host_attrs *)(x)->shost_data)->fabric_name)
258 #define fc_host_link_down_tmo(x) \             !! 531 #define fc_host_symbolic_name(x)        \
259         (((struct fc_host_attrs *)(x)->shost_d !! 532         (((struct fc_host_attrs *)(x)->shost_data)->symbolic_name)
                                                   >> 533 #define fc_host_system_hostname(x)      \
                                                   >> 534         (((struct fc_host_attrs *)(x)->shost_data)->system_hostname)
260 #define fc_host_tgtid_bind_type(x) \              535 #define fc_host_tgtid_bind_type(x) \
261         (((struct fc_host_attrs *)(x)->shost_d    536         (((struct fc_host_attrs *)(x)->shost_data)->tgtid_bind_type)
262 #define fc_host_link_down_work(x) \            !! 537 #define fc_host_rports(x) \
263         (((struct fc_host_attrs *)(x)->shost_d !! 538         (((struct fc_host_attrs *)(x)->shost_data)->rports)
                                                   >> 539 #define fc_host_rport_bindings(x) \
                                                   >> 540         (((struct fc_host_attrs *)(x)->shost_data)->rport_bindings)
                                                   >> 541 #define fc_host_vports(x) \
                                                   >> 542         (((struct fc_host_attrs *)(x)->shost_data)->vports)
                                                   >> 543 #define fc_host_next_rport_number(x) \
                                                   >> 544         (((struct fc_host_attrs *)(x)->shost_data)->next_rport_number)
                                                   >> 545 #define fc_host_next_target_id(x) \
                                                   >> 546         (((struct fc_host_attrs *)(x)->shost_data)->next_target_id)
                                                   >> 547 #define fc_host_next_vport_number(x) \
                                                   >> 548         (((struct fc_host_attrs *)(x)->shost_data)->next_vport_number)
                                                   >> 549 #define fc_host_npiv_vports_inuse(x)    \
                                                   >> 550         (((struct fc_host_attrs *)(x)->shost_data)->npiv_vports_inuse)
                                                   >> 551 #define fc_host_work_q_name(x) \
                                                   >> 552         (((struct fc_host_attrs *)(x)->shost_data)->work_q_name)
                                                   >> 553 #define fc_host_work_q(x) \
                                                   >> 554         (((struct fc_host_attrs *)(x)->shost_data)->work_q)
                                                   >> 555 #define fc_host_devloss_work_q_name(x) \
                                                   >> 556         (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q_name)
                                                   >> 557 #define fc_host_devloss_work_q(x) \
                                                   >> 558         (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q)
264                                                   559 
265                                                   560 
266 /* The functions by which the transport class     561 /* The functions by which the transport class and the driver communicate */
267 struct fc_function_template {                     562 struct fc_function_template {
268         void    (*get_starget_port_id)(struct  !! 563         void    (*get_rport_dev_loss_tmo)(struct fc_rport *);
                                                   >> 564         void    (*set_rport_dev_loss_tmo)(struct fc_rport *, u32);
                                                   >> 565 
269         void    (*get_starget_node_name)(struc    566         void    (*get_starget_node_name)(struct scsi_target *);
270         void    (*get_starget_port_name)(struc    567         void    (*get_starget_port_name)(struct scsi_target *);
271         void    (*get_starget_dev_loss_tmo)(st !! 568         void    (*get_starget_port_id)(struct scsi_target *);
272         void    (*set_starget_dev_loss_tmo)(st << 
273                                                   569 
274         void    (*get_host_port_id)(struct Scs    570         void    (*get_host_port_id)(struct Scsi_Host *);
275         void    (*get_host_port_type)(struct S    571         void    (*get_host_port_type)(struct Scsi_Host *);
276         void    (*get_host_port_state)(struct     572         void    (*get_host_port_state)(struct Scsi_Host *);
277         void    (*get_host_active_fc4s)(struct    573         void    (*get_host_active_fc4s)(struct Scsi_Host *);
278         void    (*get_host_speed)(struct Scsi_    574         void    (*get_host_speed)(struct Scsi_Host *);
279         void    (*get_host_fabric_name)(struct    575         void    (*get_host_fabric_name)(struct Scsi_Host *);
280         void    (*get_host_link_down_tmo)(stru !! 576         void    (*get_host_symbolic_name)(struct Scsi_Host *);
281         void    (*set_host_link_down_tmo)(stru !! 577         void    (*set_host_system_hostname)(struct Scsi_Host *);
282                                                   578 
283         struct fc_host_statistics * (*get_fc_h    579         struct fc_host_statistics * (*get_fc_host_stats)(struct Scsi_Host *);
284         void    (*reset_fc_host_stats)(struct     580         void    (*reset_fc_host_stats)(struct Scsi_Host *);
285                                                   581 
286         /*                                     !! 582         int     (*issue_fc_host_lip)(struct Scsi_Host *);
                                                   >> 583 
                                                   >> 584         void    (*dev_loss_tmo_callbk)(struct fc_rport *);
                                                   >> 585         void    (*terminate_rport_io)(struct fc_rport *);
                                                   >> 586 
                                                   >> 587         void    (*set_vport_symbolic_name)(struct fc_vport *);
                                                   >> 588         int     (*vport_create)(struct fc_vport *, bool);
                                                   >> 589         int     (*vport_disable)(struct fc_vport *, bool);
                                                   >> 590         int     (*vport_delete)(struct fc_vport *);
                                                   >> 591 
                                                   >> 592         /* target-mode drivers' functions */
                                                   >> 593         int     (* tsk_mgmt_response)(struct Scsi_Host *, u64, u64, int);
                                                   >> 594         int     (* it_nexus_response)(struct Scsi_Host *, u64, int);
                                                   >> 595 
                                                   >> 596         /* allocation lengths for host-specific data */
                                                   >> 597         u32                             dd_fcrport_size;
                                                   >> 598         u32                             dd_fcvport_size;
                                                   >> 599 
                                                   >> 600         /*
287          * The driver sets these to tell the t    601          * The driver sets these to tell the transport class it
288          * wants the attributes displayed in s    602          * wants the attributes displayed in sysfs.  If the show_ flag
289          * is not set, the attribute will be p    603          * is not set, the attribute will be private to the transport
290          * class                               !! 604          * class
                                                   >> 605          */
                                                   >> 606 
                                                   >> 607         /* remote port fixed attributes */
                                                   >> 608         unsigned long   show_rport_maxframe_size:1;
                                                   >> 609         unsigned long   show_rport_supported_classes:1;
                                                   >> 610         unsigned long   show_rport_dev_loss_tmo:1;
                                                   >> 611 
                                                   >> 612         /*
                                                   >> 613          * target dynamic attributes
                                                   >> 614          * These should all be "1" if the driver uses the remote port
                                                   >> 615          * add/delete functions (so attributes reflect rport values).
291          */                                       616          */
292         unsigned long   show_starget_port_id:1 << 
293         unsigned long   show_starget_node_name    617         unsigned long   show_starget_node_name:1;
294         unsigned long   show_starget_port_name    618         unsigned long   show_starget_port_name:1;
295         unsigned long   show_starget_dev_loss_ !! 619         unsigned long   show_starget_port_id:1;
296                                                   620 
297         /* host fixed attributes */               621         /* host fixed attributes */
298         unsigned long   show_host_node_name:1;    622         unsigned long   show_host_node_name:1;
299         unsigned long   show_host_port_name:1;    623         unsigned long   show_host_port_name:1;
                                                   >> 624         unsigned long   show_host_permanent_port_name:1;
300         unsigned long   show_host_supported_cl    625         unsigned long   show_host_supported_classes:1;
301         unsigned long   show_host_supported_fc    626         unsigned long   show_host_supported_fc4s:1;
302         unsigned long   show_host_symbolic_nam << 
303         unsigned long   show_host_supported_sp    627         unsigned long   show_host_supported_speeds:1;
304         unsigned long   show_host_maxframe_siz    628         unsigned long   show_host_maxframe_size:1;
305         unsigned long   show_host_hardware_ver << 
306         unsigned long   show_host_firmware_ver << 
307         unsigned long   show_host_serial_numbe    629         unsigned long   show_host_serial_number:1;
308         unsigned long   show_host_opt_rom_vers << 
309         unsigned long   show_host_driver_versi << 
310         /* host dynamic attributes */             630         /* host dynamic attributes */
311         unsigned long   show_host_port_id:1;      631         unsigned long   show_host_port_id:1;
312         unsigned long   show_host_port_type:1;    632         unsigned long   show_host_port_type:1;
313         unsigned long   show_host_port_state:1    633         unsigned long   show_host_port_state:1;
314         unsigned long   show_host_active_fc4s:    634         unsigned long   show_host_active_fc4s:1;
315         unsigned long   show_host_speed:1;        635         unsigned long   show_host_speed:1;
316         unsigned long   show_host_fabric_name:    636         unsigned long   show_host_fabric_name:1;
317         unsigned long   show_host_link_down_tm !! 637         unsigned long   show_host_symbolic_name:1;
                                                   >> 638         unsigned long   show_host_system_hostname:1;
                                                   >> 639 
                                                   >> 640         unsigned long   disable_target_scan:1;
318 };                                                641 };
319                                                   642 
320                                                   643 
321 struct scsi_transport_template *fc_attach_tran !! 644 /**
                                                   >> 645  * fc_remote_port_chkready - called to validate the remote port state
                                                   >> 646  *   prior to initiating io to the port.
                                                   >> 647  *
                                                   >> 648  * Returns a scsi result code that can be returned by the LLDD.
                                                   >> 649  *
                                                   >> 650  * @rport:      remote port to be checked
                                                   >> 651  **/
                                                   >> 652 static inline int
                                                   >> 653 fc_remote_port_chkready(struct fc_rport *rport)
                                                   >> 654 {
                                                   >> 655         int result;
                                                   >> 656 
                                                   >> 657         switch (rport->port_state) {
                                                   >> 658         case FC_PORTSTATE_ONLINE:
                                                   >> 659                 if (rport->roles & FC_PORT_ROLE_FCP_TARGET)
                                                   >> 660                         result = 0;
                                                   >> 661                 else if (rport->flags & FC_RPORT_DEVLOSS_PENDING)
                                                   >> 662                         result = DID_IMM_RETRY << 16;
                                                   >> 663                 else
                                                   >> 664                         result = DID_NO_CONNECT << 16;
                                                   >> 665                 break;
                                                   >> 666         case FC_PORTSTATE_BLOCKED:
                                                   >> 667                 result = DID_IMM_RETRY << 16;
                                                   >> 668                 break;
                                                   >> 669         default:
                                                   >> 670                 result = DID_NO_CONNECT << 16;
                                                   >> 671                 break;
                                                   >> 672         }
                                                   >> 673         return result;
                                                   >> 674 }
                                                   >> 675 
                                                   >> 676 static inline u64 wwn_to_u64(u8 *wwn)
                                                   >> 677 {
                                                   >> 678         return (u64)wwn[0] << 56 | (u64)wwn[1] << 48 |
                                                   >> 679             (u64)wwn[2] << 40 | (u64)wwn[3] << 32 |
                                                   >> 680             (u64)wwn[4] << 24 | (u64)wwn[5] << 16 |
                                                   >> 681             (u64)wwn[6] <<  8 | (u64)wwn[7];
                                                   >> 682 }
                                                   >> 683 
                                                   >> 684 static inline void u64_to_wwn(u64 inm, u8 *wwn)
                                                   >> 685 {
                                                   >> 686         wwn[0] = (inm >> 56) & 0xff;
                                                   >> 687         wwn[1] = (inm >> 48) & 0xff;
                                                   >> 688         wwn[2] = (inm >> 40) & 0xff;
                                                   >> 689         wwn[3] = (inm >> 32) & 0xff;
                                                   >> 690         wwn[4] = (inm >> 24) & 0xff;
                                                   >> 691         wwn[5] = (inm >> 16) & 0xff;
                                                   >> 692         wwn[6] = (inm >> 8) & 0xff;
                                                   >> 693         wwn[7] = inm & 0xff;
                                                   >> 694 }
                                                   >> 695 
                                                   >> 696 /**
                                                   >> 697  * fc_vport_set_state() - called to set a vport's state. Saves the old state,
                                                   >> 698  *   excepting the transitory states of initializing and sending the ELS
                                                   >> 699  *   traffic to instantiate the vport on the link.
                                                   >> 700  *
                                                   >> 701  * Assumes the driver has surrounded this with the proper locking to ensure
                                                   >> 702  * a coherent state change.
                                                   >> 703  *
                                                   >> 704  * @vport:      virtual port whose state is changing
                                                   >> 705  * @new_state:  new state
                                                   >> 706  **/
                                                   >> 707 static inline void
                                                   >> 708 fc_vport_set_state(struct fc_vport *vport, enum fc_vport_state new_state)
                                                   >> 709 {
                                                   >> 710         if ((new_state != FC_VPORT_UNKNOWN) &&
                                                   >> 711             (new_state != FC_VPORT_INITIALIZING))
                                                   >> 712                 vport->vport_last_state = vport->vport_state;
                                                   >> 713         vport->vport_state = new_state;
                                                   >> 714 }
                                                   >> 715 
                                                   >> 716 
                                                   >> 717 struct scsi_transport_template *fc_attach_transport(
                                                   >> 718                         struct fc_function_template *);
322 void fc_release_transport(struct scsi_transpor    719 void fc_release_transport(struct scsi_transport_template *);
323 int fc_target_block(struct scsi_target *starge !! 720 void fc_remove_host(struct Scsi_Host *);
324 void fc_target_unblock(struct scsi_target *sta !! 721 struct fc_rport *fc_remote_port_add(struct Scsi_Host *shost,
325 int fc_host_block(struct Scsi_Host *shost);    !! 722                         int channel, struct fc_rport_identifiers  *ids);
326 void fc_host_unblock(struct Scsi_Host *shost); !! 723 void fc_remote_port_delete(struct fc_rport  *rport);
                                                   >> 724 void fc_remote_port_rolechg(struct fc_rport  *rport, u32 roles);
                                                   >> 725 int scsi_is_fc_rport(const struct device *);
                                                   >> 726 u32 fc_get_event_number(void);
                                                   >> 727 void fc_host_post_event(struct Scsi_Host *shost, u32 event_number,
                                                   >> 728                 enum fc_host_event_code event_code, u32 event_data);
                                                   >> 729 void fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number,
                                                   >> 730                 u32 data_len, char * data_buf, u64 vendor_id);
                                                   >> 731         /* Note: when specifying vendor_id to fc_host_post_vendor_event()
                                                   >> 732          *   be sure to read the Vendor Type and ID formatting requirements
                                                   >> 733          *   specified in scsi_netlink.h
                                                   >> 734          */
                                                   >> 735 int fc_vport_terminate(struct fc_vport *vport);
327                                                   736 
328 #endif /* SCSI_TRANSPORT_FC_H */                  737 #endif /* SCSI_TRANSPORT_FC_H */
329                                                   738 
  This page was automatically generated by the LXR engine.