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