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