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