brintos

brintos / linux-shallow public Read only

0
0
Text · 4.6 KiB · 89f3c20 Raw
187 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (C) 2021 Broadcom. All Rights Reserved. The term4 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.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_QUIESCED27};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	/* 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 resources134	 *  lock: xport->io_pending_lock135	 *  link: efct_io_s->io_pending_link136	 */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 161struct efct_rport_data {162	struct efc_node		*node;163};164 165struct efct_xport *166efct_xport_alloc(struct efct *efct);167int168efct_xport_attach(struct efct_xport *xport);169int170efct_xport_initialize(struct efct_xport *xport);171void172efct_xport_detach(struct efct_xport *xport);173int174efct_xport_control(struct efct_xport *xport, enum efct_xport_ctrl cmd, ...);175int176efct_xport_status(struct efct_xport *xport, enum efct_xport_status cmd,177		  union efct_xport_stats_u *result);178void179efct_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);183void184efct_release_fc_transport(struct scsi_transport_template *transport_template);185 186#endif /* __EFCT_XPORT_H__ */187