This source file includes following definitions.
- fc_remote_port_chkready
- wwn_to_u64
- u64_to_wwn
- fc_vport_set_state
- fc_bsg_to_shost
- fc_bsg_to_rport
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 #ifndef SCSI_TRANSPORT_FC_H
  11 #define SCSI_TRANSPORT_FC_H
  12 
  13 #include <linux/sched.h>
  14 #include <linux/bsg-lib.h>
  15 #include <asm/unaligned.h>
  16 #include <scsi/scsi.h>
  17 #include <scsi/scsi_netlink.h>
  18 #include <scsi/scsi_host.h>
  19 
  20 struct scsi_transport_template;
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 enum fc_port_type {
  43         FC_PORTTYPE_UNKNOWN,
  44         FC_PORTTYPE_OTHER,
  45         FC_PORTTYPE_NOTPRESENT,
  46         FC_PORTTYPE_NPORT,              
  47         FC_PORTTYPE_NLPORT,             
  48         FC_PORTTYPE_LPORT,              
  49         FC_PORTTYPE_PTP,                
  50         FC_PORTTYPE_NPIV,               
  51 };
  52 
  53 
  54 
  55 
  56 
  57 
  58 enum fc_port_state {
  59         FC_PORTSTATE_UNKNOWN,
  60         FC_PORTSTATE_NOTPRESENT,
  61         FC_PORTSTATE_ONLINE,
  62         FC_PORTSTATE_OFFLINE,           
  63         FC_PORTSTATE_BLOCKED,
  64         FC_PORTSTATE_BYPASSED,
  65         FC_PORTSTATE_DIAGNOSTICS,
  66         FC_PORTSTATE_LINKDOWN,
  67         FC_PORTSTATE_ERROR,
  68         FC_PORTSTATE_LOOPBACK,
  69         FC_PORTSTATE_DELETED,
  70 };
  71 
  72 
  73 
  74 
  75 
  76 
  77 enum fc_vport_state {
  78         FC_VPORT_UNKNOWN,
  79         FC_VPORT_ACTIVE,
  80         FC_VPORT_DISABLED,
  81         FC_VPORT_LINKDOWN,
  82         FC_VPORT_INITIALIZING,
  83         FC_VPORT_NO_FABRIC_SUPP,
  84         FC_VPORT_NO_FABRIC_RSCS,
  85         FC_VPORT_FABRIC_LOGOUT,
  86         FC_VPORT_FABRIC_REJ_WWN,
  87         FC_VPORT_FAILED,
  88 };
  89 
  90 
  91 
  92 
  93 
  94 
  95 
  96 
  97 
  98 #define FC_COS_UNSPECIFIED              0
  99 #define FC_COS_CLASS1                   2
 100 #define FC_COS_CLASS2                   4
 101 #define FC_COS_CLASS3                   8
 102 #define FC_COS_CLASS4                   0x10
 103 #define FC_COS_CLASS6                   0x40
 104 
 105 
 106 
 107 
 108 
 109 
 110 
 111 #define FC_PORTSPEED_UNKNOWN            0 
 112 
 113 #define FC_PORTSPEED_1GBIT              1
 114 #define FC_PORTSPEED_2GBIT              2
 115 #define FC_PORTSPEED_10GBIT             4
 116 #define FC_PORTSPEED_4GBIT              8
 117 #define FC_PORTSPEED_8GBIT              0x10
 118 #define FC_PORTSPEED_16GBIT             0x20
 119 #define FC_PORTSPEED_32GBIT             0x40
 120 #define FC_PORTSPEED_20GBIT             0x80
 121 #define FC_PORTSPEED_40GBIT             0x100
 122 #define FC_PORTSPEED_50GBIT             0x200
 123 #define FC_PORTSPEED_100GBIT            0x400
 124 #define FC_PORTSPEED_25GBIT             0x800
 125 #define FC_PORTSPEED_64GBIT             0x1000
 126 #define FC_PORTSPEED_128GBIT            0x2000
 127 #define FC_PORTSPEED_NOT_NEGOTIATED     (1 << 15) 
 128 
 129 
 130 
 131 
 132 
 133 enum fc_tgtid_binding_type  {
 134         FC_TGTID_BIND_NONE,
 135         FC_TGTID_BIND_BY_WWPN,
 136         FC_TGTID_BIND_BY_WWNN,
 137         FC_TGTID_BIND_BY_ID,
 138 };
 139 
 140 
 141 
 142 
 143 
 144 
 145 
 146 #define FC_PORT_ROLE_UNKNOWN                    0x00
 147 #define FC_PORT_ROLE_FCP_TARGET                 0x01
 148 #define FC_PORT_ROLE_FCP_INITIATOR              0x02
 149 #define FC_PORT_ROLE_IP_PORT                    0x04
 150 #define FC_PORT_ROLE_FCP_DUMMY_INITIATOR        0x08
 151 #define FC_PORT_ROLE_NVME_INITIATOR             0x10
 152 #define FC_PORT_ROLE_NVME_TARGET                0x20
 153 #define FC_PORT_ROLE_NVME_DISCOVERY             0x40
 154 
 155 
 156 #define FC_RPORT_ROLE_UNKNOWN                   FC_PORT_ROLE_UNKNOWN
 157 #define FC_RPORT_ROLE_FCP_TARGET                FC_PORT_ROLE_FCP_TARGET
 158 #define FC_RPORT_ROLE_FCP_INITIATOR             FC_PORT_ROLE_FCP_INITIATOR
 159 #define FC_RPORT_ROLE_IP_PORT                   FC_PORT_ROLE_IP_PORT
 160 
 161 
 162 
 163 #define FC_VPORT_ATTR(_name,_mode,_show,_store)         \
 164 struct device_attribute dev_attr_vport_##_name =        \
 165         __ATTR(_name,_mode,_show,_store)
 166 
 167 
 168 
 169 
 170 
 171 
 172 
 173 
 174 
 175 
 176 
 177 
 178 #define FC_VPORT_SYMBOLIC_NAMELEN               64
 179 struct fc_vport_identifiers {
 180         u64 node_name;
 181         u64 port_name;
 182         u32 roles;
 183         bool disable;
 184         enum fc_port_type vport_type;   
 185         char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN];
 186 };
 187 
 188 
 189 
 190 
 191 
 192 
 193 
 194 
 195 
 196 
 197 
 198 
 199 
 200 
 201 
 202 
 203 
 204 
 205 
 206 
 207 
 208 
 209 
 210 
 211 
 212 
 213 
 214 
 215 
 216 
 217 struct fc_vport {
 218         
 219 
 220         
 221 
 222         
 223         enum fc_vport_state vport_state;
 224         enum fc_vport_state vport_last_state;
 225         u64 node_name;
 226         u64 port_name;
 227         u32 roles;
 228         u32 vport_id;           
 229         enum fc_port_type vport_type;
 230         char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN];
 231 
 232         
 233         void *dd_data;                  
 234 
 235         
 236         struct Scsi_Host *shost;        
 237         unsigned int channel;
 238         u32 number;
 239         u8 flags;
 240         struct list_head peers;
 241         struct device dev;
 242         struct work_struct vport_delete_work;
 243 } __attribute__((aligned(sizeof(unsigned long))));
 244 
 245 
 246 #define FC_VPORT_CREATING               0x01
 247 #define FC_VPORT_DELETING               0x02
 248 #define FC_VPORT_DELETED                0x04
 249 #define FC_VPORT_DEL                    0x06    
 250 
 251 #define dev_to_vport(d)                         \
 252         container_of(d, struct fc_vport, dev)
 253 #define transport_class_to_vport(dev)           \
 254         dev_to_vport(dev->parent)
 255 #define vport_to_shost(v)                       \
 256         (v->shost)
 257 #define vport_to_shost_channel(v)               \
 258         (v->channel)
 259 #define vport_to_parent(v)                      \
 260         (v->dev.parent)
 261 
 262 
 263 
 264 #define VPCERR_UNSUPPORTED              -ENOSYS         
 265 
 266 #define VPCERR_BAD_WWN                  -ENOTUNIQ       
 267 
 268 #define VPCERR_NO_FABRIC_SUPP           -EOPNOTSUPP     
 269 
 270 
 271 
 272 
 273 
 274 
 275 
 276 
 277 
 278 
 279 
 280 struct fc_rport_identifiers {
 281         u64 node_name;
 282         u64 port_name;
 283         u32 port_id;
 284         u32 roles;
 285 };
 286 
 287 
 288 
 289 #define FC_RPORT_ATTR(_name,_mode,_show,_store)                         \
 290 struct device_attribute dev_attr_rport_##_name =        \
 291         __ATTR(_name,_mode,_show,_store)
 292 
 293 
 294 
 295 
 296 
 297 
 298 
 299 
 300 
 301 
 302 
 303 
 304 
 305 
 306 
 307 
 308 
 309 
 310 
 311 
 312 
 313 
 314 
 315 
 316 
 317 
 318 
 319 
 320 
 321 struct fc_rport {       
 322         
 323         u32 maxframe_size;
 324         u32 supported_classes;
 325 
 326         
 327         u32 dev_loss_tmo;       
 328 
 329         
 330         u64 node_name;
 331         u64 port_name;
 332         u32 port_id;
 333         u32 roles;
 334         enum fc_port_state port_state;  
 335         u32 scsi_target_id;
 336         u32 fast_io_fail_tmo;
 337 
 338         
 339         void *dd_data;                  
 340 
 341         
 342         unsigned int channel;
 343         u32 number;
 344         u8 flags;
 345         struct list_head peers;
 346         struct device dev;
 347         struct delayed_work dev_loss_work;
 348         struct work_struct scan_work;
 349         struct delayed_work fail_io_work;
 350         struct work_struct stgt_delete_work;
 351         struct work_struct rport_delete_work;
 352         struct request_queue *rqst_q;   
 353 } __attribute__((aligned(sizeof(unsigned long))));
 354 
 355 
 356 #define FC_RPORT_DEVLOSS_PENDING        0x01
 357 #define FC_RPORT_SCAN_PENDING           0x02
 358 #define FC_RPORT_FAST_FAIL_TIMEDOUT     0x04
 359 #define FC_RPORT_DEVLOSS_CALLBK_DONE    0x08
 360 
 361 #define dev_to_rport(d)                         \
 362         container_of(d, struct fc_rport, dev)
 363 #define transport_class_to_rport(dev)   \
 364         dev_to_rport(dev->parent)
 365 #define rport_to_shost(r)                       \
 366         dev_to_shost(r->dev.parent)
 367 
 368 
 369 
 370 
 371 
 372 
 373 
 374 
 375 
 376 
 377 
 378 
 379 
 380 struct fc_starget_attrs {       
 381         
 382         u64 node_name;
 383         u64 port_name;
 384         u32 port_id;
 385 };
 386 
 387 #define fc_starget_node_name(x) \
 388         (((struct fc_starget_attrs *)&(x)->starget_data)->node_name)
 389 #define fc_starget_port_name(x) \
 390         (((struct fc_starget_attrs *)&(x)->starget_data)->port_name)
 391 #define fc_starget_port_id(x) \
 392         (((struct fc_starget_attrs *)&(x)->starget_data)->port_id)
 393 
 394 #define starget_to_rport(s)                     \
 395         scsi_is_fc_rport(s->dev.parent) ? dev_to_rport(s->dev.parent) : NULL
 396 
 397 
 398 
 399 
 400 
 401 
 402 
 403 struct fc_host_statistics {
 404         
 405         u64 seconds_since_last_reset;
 406         u64 tx_frames;
 407         u64 tx_words;
 408         u64 rx_frames;
 409         u64 rx_words;
 410         u64 lip_count;
 411         u64 nos_count;
 412         u64 error_frames;
 413         u64 dumped_frames;
 414         u64 link_failure_count;
 415         u64 loss_of_sync_count;
 416         u64 loss_of_signal_count;
 417         u64 prim_seq_protocol_err_count;
 418         u64 invalid_tx_word_count;
 419         u64 invalid_crc_count;
 420 
 421         
 422         u64 fcp_input_requests;
 423         u64 fcp_output_requests;
 424         u64 fcp_control_requests;
 425         u64 fcp_input_megabytes;
 426         u64 fcp_output_megabytes;
 427         u64 fcp_packet_alloc_failures;  
 428         u64 fcp_packet_aborts;          
 429         u64 fcp_frame_alloc_failures;   
 430 
 431         
 432         u64 fc_no_free_exch;            
 433         u64 fc_no_free_exch_xid;        
 434         u64 fc_xid_not_found;           
 435         u64 fc_xid_busy;                
 436         u64 fc_seq_not_found;           
 437         u64 fc_non_bls_resp;            
 438 
 439 };
 440 
 441 
 442 
 443 
 444 
 445 
 446 
 447 
 448 
 449 
 450 enum fc_host_event_code  {
 451         FCH_EVT_LIP                     = 0x1,
 452         FCH_EVT_LINKUP                  = 0x2,
 453         FCH_EVT_LINKDOWN                = 0x3,
 454         FCH_EVT_LIPRESET                = 0x4,
 455         FCH_EVT_RSCN                    = 0x5,
 456         FCH_EVT_ADAPTER_CHANGE          = 0x103,
 457         FCH_EVT_PORT_UNKNOWN            = 0x200,
 458         FCH_EVT_PORT_OFFLINE            = 0x201,
 459         FCH_EVT_PORT_ONLINE             = 0x202,
 460         FCH_EVT_PORT_FABRIC             = 0x204,
 461         FCH_EVT_LINK_UNKNOWN            = 0x500,
 462         FCH_EVT_LINK_FPIN               = 0x501,
 463         FCH_EVT_VENDOR_UNIQUE           = 0xffff,
 464 };
 465 
 466 
 467 
 468 
 469 
 470 
 471 
 472 
 473 
 474 
 475 
 476 
 477 
 478 
 479 
 480 
 481 
 482 
 483 
 484 #define FC_FC4_LIST_SIZE                32
 485 #define FC_SYMBOLIC_NAME_SIZE           256
 486 #define FC_VERSION_STRING_SIZE          64
 487 #define FC_SERIAL_NUMBER_SIZE           80
 488 
 489 struct fc_host_attrs {
 490         
 491         u64 node_name;
 492         u64 port_name;
 493         u64 permanent_port_name;
 494         u32 supported_classes;
 495         u8  supported_fc4s[FC_FC4_LIST_SIZE];
 496         u32 supported_speeds;
 497         u32 maxframe_size;
 498         u16 max_npiv_vports;
 499         char serial_number[FC_SERIAL_NUMBER_SIZE];
 500         char manufacturer[FC_SERIAL_NUMBER_SIZE];
 501         char model[FC_SYMBOLIC_NAME_SIZE];
 502         char model_description[FC_SYMBOLIC_NAME_SIZE];
 503         char hardware_version[FC_VERSION_STRING_SIZE];
 504         char driver_version[FC_VERSION_STRING_SIZE];
 505         char firmware_version[FC_VERSION_STRING_SIZE];
 506         char optionrom_version[FC_VERSION_STRING_SIZE];
 507 
 508         
 509         u32 port_id;
 510         enum fc_port_type port_type;
 511         enum fc_port_state port_state;
 512         u8  active_fc4s[FC_FC4_LIST_SIZE];
 513         u32 speed;
 514         u64 fabric_name;
 515         char symbolic_name[FC_SYMBOLIC_NAME_SIZE];
 516         char system_hostname[FC_SYMBOLIC_NAME_SIZE];
 517         u32 dev_loss_tmo;
 518 
 519         
 520         enum fc_tgtid_binding_type  tgtid_bind_type;
 521 
 522         
 523         struct list_head rports;
 524         struct list_head rport_bindings;
 525         struct list_head vports;
 526         u32 next_rport_number;
 527         u32 next_target_id;
 528         u32 next_vport_number;
 529         u16 npiv_vports_inuse;
 530 
 531         
 532         char work_q_name[20];
 533         struct workqueue_struct *work_q;
 534         char devloss_work_q_name[20];
 535         struct workqueue_struct *devloss_work_q;
 536 
 537         
 538         struct request_queue *rqst_q;
 539 };
 540 
 541 #define shost_to_fc_host(x) \
 542         ((struct fc_host_attrs *)(x)->shost_data)
 543 
 544 #define fc_host_node_name(x) \
 545         (((struct fc_host_attrs *)(x)->shost_data)->node_name)
 546 #define fc_host_port_name(x)    \
 547         (((struct fc_host_attrs *)(x)->shost_data)->port_name)
 548 #define fc_host_permanent_port_name(x)  \
 549         (((struct fc_host_attrs *)(x)->shost_data)->permanent_port_name)
 550 #define fc_host_supported_classes(x)    \
 551         (((struct fc_host_attrs *)(x)->shost_data)->supported_classes)
 552 #define fc_host_supported_fc4s(x)       \
 553         (((struct fc_host_attrs *)(x)->shost_data)->supported_fc4s)
 554 #define fc_host_supported_speeds(x)     \
 555         (((struct fc_host_attrs *)(x)->shost_data)->supported_speeds)
 556 #define fc_host_maxframe_size(x)        \
 557         (((struct fc_host_attrs *)(x)->shost_data)->maxframe_size)
 558 #define fc_host_max_npiv_vports(x)      \
 559         (((struct fc_host_attrs *)(x)->shost_data)->max_npiv_vports)
 560 #define fc_host_serial_number(x)        \
 561         (((struct fc_host_attrs *)(x)->shost_data)->serial_number)
 562 #define fc_host_manufacturer(x) \
 563         (((struct fc_host_attrs *)(x)->shost_data)->manufacturer)
 564 #define fc_host_model(x)        \
 565         (((struct fc_host_attrs *)(x)->shost_data)->model)
 566 #define fc_host_model_description(x)    \
 567         (((struct fc_host_attrs *)(x)->shost_data)->model_description)
 568 #define fc_host_hardware_version(x)     \
 569         (((struct fc_host_attrs *)(x)->shost_data)->hardware_version)
 570 #define fc_host_driver_version(x)       \
 571         (((struct fc_host_attrs *)(x)->shost_data)->driver_version)
 572 #define fc_host_firmware_version(x)     \
 573         (((struct fc_host_attrs *)(x)->shost_data)->firmware_version)
 574 #define fc_host_optionrom_version(x)    \
 575         (((struct fc_host_attrs *)(x)->shost_data)->optionrom_version)
 576 #define fc_host_port_id(x)      \
 577         (((struct fc_host_attrs *)(x)->shost_data)->port_id)
 578 #define fc_host_port_type(x)    \
 579         (((struct fc_host_attrs *)(x)->shost_data)->port_type)
 580 #define fc_host_port_state(x)   \
 581         (((struct fc_host_attrs *)(x)->shost_data)->port_state)
 582 #define fc_host_active_fc4s(x)  \
 583         (((struct fc_host_attrs *)(x)->shost_data)->active_fc4s)
 584 #define fc_host_speed(x)        \
 585         (((struct fc_host_attrs *)(x)->shost_data)->speed)
 586 #define fc_host_fabric_name(x)  \
 587         (((struct fc_host_attrs *)(x)->shost_data)->fabric_name)
 588 #define fc_host_symbolic_name(x)        \
 589         (((struct fc_host_attrs *)(x)->shost_data)->symbolic_name)
 590 #define fc_host_system_hostname(x)      \
 591         (((struct fc_host_attrs *)(x)->shost_data)->system_hostname)
 592 #define fc_host_tgtid_bind_type(x) \
 593         (((struct fc_host_attrs *)(x)->shost_data)->tgtid_bind_type)
 594 #define fc_host_rports(x) \
 595         (((struct fc_host_attrs *)(x)->shost_data)->rports)
 596 #define fc_host_rport_bindings(x) \
 597         (((struct fc_host_attrs *)(x)->shost_data)->rport_bindings)
 598 #define fc_host_vports(x) \
 599         (((struct fc_host_attrs *)(x)->shost_data)->vports)
 600 #define fc_host_next_rport_number(x) \
 601         (((struct fc_host_attrs *)(x)->shost_data)->next_rport_number)
 602 #define fc_host_next_target_id(x) \
 603         (((struct fc_host_attrs *)(x)->shost_data)->next_target_id)
 604 #define fc_host_next_vport_number(x) \
 605         (((struct fc_host_attrs *)(x)->shost_data)->next_vport_number)
 606 #define fc_host_npiv_vports_inuse(x)    \
 607         (((struct fc_host_attrs *)(x)->shost_data)->npiv_vports_inuse)
 608 #define fc_host_work_q_name(x) \
 609         (((struct fc_host_attrs *)(x)->shost_data)->work_q_name)
 610 #define fc_host_work_q(x) \
 611         (((struct fc_host_attrs *)(x)->shost_data)->work_q)
 612 #define fc_host_devloss_work_q_name(x) \
 613         (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q_name)
 614 #define fc_host_devloss_work_q(x) \
 615         (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q)
 616 #define fc_host_dev_loss_tmo(x) \
 617         (((struct fc_host_attrs *)(x)->shost_data)->dev_loss_tmo)
 618 
 619 
 620 struct fc_function_template {
 621         void    (*get_rport_dev_loss_tmo)(struct fc_rport *);
 622         void    (*set_rport_dev_loss_tmo)(struct fc_rport *, u32);
 623 
 624         void    (*get_starget_node_name)(struct scsi_target *);
 625         void    (*get_starget_port_name)(struct scsi_target *);
 626         void    (*get_starget_port_id)(struct scsi_target *);
 627 
 628         void    (*get_host_port_id)(struct Scsi_Host *);
 629         void    (*get_host_port_type)(struct Scsi_Host *);
 630         void    (*get_host_port_state)(struct Scsi_Host *);
 631         void    (*get_host_active_fc4s)(struct Scsi_Host *);
 632         void    (*get_host_speed)(struct Scsi_Host *);
 633         void    (*get_host_fabric_name)(struct Scsi_Host *);
 634         void    (*get_host_symbolic_name)(struct Scsi_Host *);
 635         void    (*set_host_system_hostname)(struct Scsi_Host *);
 636 
 637         struct fc_host_statistics * (*get_fc_host_stats)(struct Scsi_Host *);
 638         void    (*reset_fc_host_stats)(struct Scsi_Host *);
 639 
 640         int     (*issue_fc_host_lip)(struct Scsi_Host *);
 641 
 642         void    (*dev_loss_tmo_callbk)(struct fc_rport *);
 643         void    (*terminate_rport_io)(struct fc_rport *);
 644 
 645         void    (*set_vport_symbolic_name)(struct fc_vport *);
 646         int     (*vport_create)(struct fc_vport *, bool);
 647         int     (*vport_disable)(struct fc_vport *, bool);
 648         int     (*vport_delete)(struct fc_vport *);
 649 
 650         
 651         int     (*bsg_request)(struct bsg_job *);
 652         int     (*bsg_timeout)(struct bsg_job *);
 653 
 654         
 655         u32                             dd_fcrport_size;
 656         u32                             dd_fcvport_size;
 657         u32                             dd_bsg_size;
 658 
 659         
 660 
 661 
 662 
 663 
 664 
 665 
 666         
 667         unsigned long   show_rport_maxframe_size:1;
 668         unsigned long   show_rport_supported_classes:1;
 669         unsigned long   show_rport_dev_loss_tmo:1;
 670 
 671         
 672 
 673 
 674 
 675 
 676         unsigned long   show_starget_node_name:1;
 677         unsigned long   show_starget_port_name:1;
 678         unsigned long   show_starget_port_id:1;
 679 
 680         
 681         unsigned long   show_host_node_name:1;
 682         unsigned long   show_host_port_name:1;
 683         unsigned long   show_host_permanent_port_name:1;
 684         unsigned long   show_host_supported_classes:1;
 685         unsigned long   show_host_supported_fc4s:1;
 686         unsigned long   show_host_supported_speeds:1;
 687         unsigned long   show_host_maxframe_size:1;
 688         unsigned long   show_host_serial_number:1;
 689         unsigned long   show_host_manufacturer:1;
 690         unsigned long   show_host_model:1;
 691         unsigned long   show_host_model_description:1;
 692         unsigned long   show_host_hardware_version:1;
 693         unsigned long   show_host_driver_version:1;
 694         unsigned long   show_host_firmware_version:1;
 695         unsigned long   show_host_optionrom_version:1;
 696         
 697         unsigned long   show_host_port_id:1;
 698         unsigned long   show_host_port_type:1;
 699         unsigned long   show_host_port_state:1;
 700         unsigned long   show_host_active_fc4s:1;
 701         unsigned long   show_host_speed:1;
 702         unsigned long   show_host_fabric_name:1;
 703         unsigned long   show_host_symbolic_name:1;
 704         unsigned long   show_host_system_hostname:1;
 705 
 706         unsigned long   disable_target_scan:1;
 707 };
 708 
 709 
 710 
 711 
 712 
 713 
 714 
 715 
 716 
 717 
 718 static inline int
 719 fc_remote_port_chkready(struct fc_rport *rport)
 720 {
 721         int result;
 722 
 723         switch (rport->port_state) {
 724         case FC_PORTSTATE_ONLINE:
 725                 if (rport->roles & FC_PORT_ROLE_FCP_TARGET)
 726                         result = 0;
 727                 else if (rport->flags & FC_RPORT_DEVLOSS_PENDING)
 728                         result = DID_IMM_RETRY << 16;
 729                 else
 730                         result = DID_NO_CONNECT << 16;
 731                 break;
 732         case FC_PORTSTATE_BLOCKED:
 733                 if (rport->flags & FC_RPORT_FAST_FAIL_TIMEDOUT)
 734                         result = DID_TRANSPORT_FAILFAST << 16;
 735                 else
 736                         result = DID_IMM_RETRY << 16;
 737                 break;
 738         default:
 739                 result = DID_NO_CONNECT << 16;
 740                 break;
 741         }
 742         return result;
 743 }
 744 
 745 static inline u64 wwn_to_u64(const u8 *wwn)
 746 {
 747         return get_unaligned_be64(wwn);
 748 }
 749 
 750 static inline void u64_to_wwn(u64 inm, u8 *wwn)
 751 {
 752         put_unaligned_be64(inm, wwn);
 753 }
 754 
 755 
 756 
 757 
 758 
 759 
 760 
 761 
 762 
 763 
 764 
 765 
 766 static inline void
 767 fc_vport_set_state(struct fc_vport *vport, enum fc_vport_state new_state)
 768 {
 769         if ((new_state != FC_VPORT_UNKNOWN) &&
 770             (new_state != FC_VPORT_INITIALIZING))
 771                 vport->vport_last_state = vport->vport_state;
 772         vport->vport_state = new_state;
 773 }
 774 
 775 struct scsi_transport_template *fc_attach_transport(
 776                         struct fc_function_template *);
 777 void fc_release_transport(struct scsi_transport_template *);
 778 void fc_remove_host(struct Scsi_Host *);
 779 struct fc_rport *fc_remote_port_add(struct Scsi_Host *shost,
 780                         int channel, struct fc_rport_identifiers  *ids);
 781 void fc_remote_port_delete(struct fc_rport  *rport);
 782 void fc_remote_port_rolechg(struct fc_rport  *rport, u32 roles);
 783 int scsi_is_fc_rport(const struct device *);
 784 u32 fc_get_event_number(void);
 785 void fc_host_post_event(struct Scsi_Host *shost, u32 event_number,
 786                 enum fc_host_event_code event_code, u32 event_data);
 787 void fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number,
 788                 u32 data_len, char *data_buf, u64 vendor_id);
 789 void fc_host_post_fc_event(struct Scsi_Host *shost, u32 event_number,
 790                 enum fc_host_event_code event_code,
 791                 u32 data_len, char *data_buf, u64 vendor_id);
 792         
 793 
 794 
 795 
 796 
 797 
 798 void fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf);
 799 struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel,
 800                 struct fc_vport_identifiers *);
 801 int fc_vport_terminate(struct fc_vport *vport);
 802 int fc_block_rport(struct fc_rport *rport);
 803 int fc_block_scsi_eh(struct scsi_cmnd *cmnd);
 804 enum blk_eh_timer_return fc_eh_timed_out(struct scsi_cmnd *scmd);
 805 
 806 static inline struct Scsi_Host *fc_bsg_to_shost(struct bsg_job *job)
 807 {
 808         if (scsi_is_host_device(job->dev))
 809                 return dev_to_shost(job->dev);
 810         return rport_to_shost(dev_to_rport(job->dev));
 811 }
 812 
 813 static inline struct fc_rport *fc_bsg_to_rport(struct bsg_job *job)
 814 {
 815         if (scsi_is_fc_rport(job->dev))
 816                 return dev_to_rport(job->dev);
 817         return NULL;
 818 }
 819 
 820 #endif