Mention branches and keyring.
[releases.git] / efct / efct_xport.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2021 Broadcom. All Rights Reserved. The term
4  * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
5  */
6
7 #if !defined(__EFCT_XPORT_H__)
8 #define __EFCT_XPORT_H__
9
10 enum 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
19 enum 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
29 struct 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
76 struct 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
94 struct 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
100 union efct_xport_stats_u {
101         u32     value;
102         struct efct_xport_host_statistics stats;
103 };
104
105 struct 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
113 struct efct_xport {
114         struct efct             *efct;
115         /* wwpn requested by user for primary nport */
116         u64                     req_wwpn;
117         /* wwnn requested by user for primary nport */
118         u64                     req_wwnn;
119
120         /* Nodes */
121         /* number of allocated nodes */
122         u32                     nodes_count;
123         /* used to track how often IO pool is empty */
124         atomic_t                io_alloc_failed_count;
125         /* array of pointers to nodes */
126         struct efc_node         **nodes;
127
128         /* Io pool and counts */
129         /* pointer to IO pool */
130         struct efct_io_pool     *io_pool;
131         /* lock for io_pending_list */
132         spinlock_t              io_pending_lock;
133         /* list of IOs waiting for HW resources
134          *  lock: xport->io_pending_lock
135          *  link: efct_io_s->io_pending_link
136          */
137         struct list_head        io_pending_list;
138         /* count of totals IOS allocated */
139         atomic_t                io_total_alloc;
140         /* count of totals IOS free'd */
141         atomic_t                io_total_free;
142         /* count of totals IOS that were pended */
143         atomic_t                io_total_pending;
144         /* count of active IOS */
145         atomic_t                io_active_count;
146         /* count of pending IOS */
147         atomic_t                io_pending_count;
148         /* non-zero if efct_scsi_check_pending is executing */
149         atomic_t                io_pending_recursing;
150
151         /* Port */
152         /* requested link state */
153         u32                     configured_link_state;
154
155         /* Timer for Statistics */
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
161 struct efct_rport_data {
162         struct efc_node         *node;
163 };
164
165 struct efct_xport *
166 efct_xport_alloc(struct efct *efct);
167 int
168 efct_xport_attach(struct efct_xport *xport);
169 int
170 efct_xport_initialize(struct efct_xport *xport);
171 void
172 efct_xport_detach(struct efct_xport *xport);
173 int
174 efct_xport_control(struct efct_xport *xport, enum efct_xport_ctrl cmd, ...);
175 int
176 efct_xport_status(struct efct_xport *xport, enum efct_xport_status cmd,
177                   union efct_xport_stats_u *result);
178 void
179 efct_xport_free(struct efct_xport *xport);
180
181 struct scsi_transport_template *efct_attach_fc_transport(void);
182 struct scsi_transport_template *efct_attach_vport_fc_transport(void);
183 void
184 efct_release_fc_transport(struct scsi_transport_template *transport_template);
185
186 #endif /* __EFCT_XPORT_H__ */