1
2
3
4
5
6
7#if !defined(__EFCT_XPORT_H__)
8#define __EFCT_XPORT_H__
9
10enum efct_xport_ctrl {
11 EFCT_XPORT_PORT_ONLINE = 1,
12 EFCT_XPORT_PORT_OFFLINE,
13 EFCT_XPORT_SHUTDOWN,
14 EFCT_XPORT_POST_NODE_EVENT,
15 EFCT_XPORT_WWNN_SET,
16 EFCT_XPORT_WWPN_SET,
17};
18
19enum efct_xport_status {
20 EFCT_XPORT_PORT_STATUS,
21 EFCT_XPORT_CONFIG_PORT_STATUS,
22 EFCT_XPORT_LINK_SPEED,
23 EFCT_XPORT_IS_SUPPORTED_LINK_SPEED,
24 EFCT_XPORT_LINK_STATISTICS,
25 EFCT_XPORT_LINK_STAT_RESET,
26 EFCT_XPORT_IS_QUIESCED
27};
28
29struct efct_xport_link_stats {
30 bool rec;
31 bool gec;
32 bool w02of;
33 bool w03of;
34 bool w04of;
35 bool w05of;
36 bool w06of;
37 bool w07of;
38 bool w08of;
39 bool w09of;
40 bool w10of;
41 bool w11of;
42 bool w12of;
43 bool w13of;
44 bool w14of;
45 bool w15of;
46 bool w16of;
47 bool w17of;
48 bool w18of;
49 bool w19of;
50 bool w20of;
51 bool w21of;
52 bool clrc;
53 bool clof1;
54 u32 link_failure_error_count;
55 u32 loss_of_sync_error_count;
56 u32 loss_of_signal_error_count;
57 u32 primitive_sequence_error_count;
58 u32 invalid_transmission_word_error_count;
59 u32 crc_error_count;
60 u32 primitive_sequence_event_timeout_count;
61 u32 elastic_buffer_overrun_error_count;
62 u32 arbitration_fc_al_timeout_count;
63 u32 advertised_receive_bufftor_to_buffer_credit;
64 u32 current_receive_buffer_to_buffer_credit;
65 u32 advertised_transmit_buffer_to_buffer_credit;
66 u32 current_transmit_buffer_to_buffer_credit;
67 u32 received_eofa_count;
68 u32 received_eofdti_count;
69 u32 received_eofni_count;
70 u32 received_soff_count;
71 u32 received_dropped_no_aer_count;
72 u32 received_dropped_no_available_rpi_resources_count;
73 u32 received_dropped_no_available_xri_resources_count;
74};
75
76struct efct_xport_host_stats {
77 bool cc;
78 u32 transmit_kbyte_count;
79 u32 receive_kbyte_count;
80 u32 transmit_frame_count;
81 u32 receive_frame_count;
82 u32 transmit_sequence_count;
83 u32 receive_sequence_count;
84 u32 total_exchanges_originator;
85 u32 total_exchanges_responder;
86 u32 receive_p_bsy_count;
87 u32 receive_f_bsy_count;
88 u32 dropped_frames_due_to_no_rq_buffer_count;
89 u32 empty_rq_timeout_count;
90 u32 dropped_frames_due_to_no_xri_count;
91 u32 empty_xri_pool_count;
92};
93
94struct efct_xport_host_statistics {
95 struct completion done;
96 struct efct_xport_link_stats link_stats;
97 struct efct_xport_host_stats host_stats;
98};
99
100union efct_xport_stats_u {
101 u32 value;
102 struct efct_xport_host_statistics stats;
103};
104
105struct efct_xport_fcp_stats {
106 u64 input_bytes;
107 u64 output_bytes;
108 u64 input_requests;
109 u64 output_requests;
110 u64 control_requests;
111};
112
113struct efct_xport {
114 struct efct *efct;
115
116 u64 req_wwpn;
117
118 u64 req_wwnn;
119
120
121
122 u32 nodes_count;
123
124 atomic_t io_alloc_failed_count;
125
126 struct efc_node **nodes;
127
128
129
130 struct efct_io_pool *io_pool;
131
132 spinlock_t io_pending_lock;
133
134
135
136
137 struct list_head io_pending_list;
138
139 atomic_t io_total_alloc;
140
141 atomic_t io_total_free;
142
143 atomic_t io_total_pending;
144
145 atomic_t io_active_count;
146
147 atomic_t io_pending_count;
148
149 atomic_t io_pending_recursing;
150
151
152
153 u32 configured_link_state;
154
155
156 struct timer_list stats_timer;
157 union efct_xport_stats_u fc_xport_stats;
158 struct efct_xport_fcp_stats fcp_stats;
159};
160
161struct efct_rport_data {
162 struct efc_node *node;
163};
164
165struct efct_xport *
166efct_xport_alloc(struct efct *efct);
167int
168efct_xport_attach(struct efct_xport *xport);
169int
170efct_xport_initialize(struct efct_xport *xport);
171void
172efct_xport_detach(struct efct_xport *xport);
173int
174efct_xport_control(struct efct_xport *xport, enum efct_xport_ctrl cmd, ...);
175int
176efct_xport_status(struct efct_xport *xport, enum efct_xport_status cmd,
177 union efct_xport_stats_u *result);
178void
179efct_xport_free(struct efct_xport *xport);
180
181struct scsi_transport_template *efct_attach_fc_transport(void);
182struct scsi_transport_template *efct_attach_vport_fc_transport(void);
183void
184efct_release_fc_transport(struct scsi_transport_template *transport_template);
185
186#endif
187