162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/* Copyright 2013 Cisco Systems, Inc.  All rights reserved. */
362306a36Sopenharmony_ci#ifndef _FNIC_STATS_H_
462306a36Sopenharmony_ci#define _FNIC_STATS_H_
562306a36Sopenharmony_ci
662306a36Sopenharmony_cistruct stats_timestamps {
762306a36Sopenharmony_ci	struct timespec64 last_reset_time;
862306a36Sopenharmony_ci	struct timespec64 last_read_time;
962306a36Sopenharmony_ci};
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistruct io_path_stats {
1262306a36Sopenharmony_ci	atomic64_t active_ios;
1362306a36Sopenharmony_ci	atomic64_t max_active_ios;
1462306a36Sopenharmony_ci	atomic64_t io_completions;
1562306a36Sopenharmony_ci	atomic64_t io_failures;
1662306a36Sopenharmony_ci	atomic64_t ioreq_null;
1762306a36Sopenharmony_ci	atomic64_t alloc_failures;
1862306a36Sopenharmony_ci	atomic64_t sc_null;
1962306a36Sopenharmony_ci	atomic64_t io_not_found;
2062306a36Sopenharmony_ci	atomic64_t num_ios;
2162306a36Sopenharmony_ci	atomic64_t io_btw_0_to_10_msec;
2262306a36Sopenharmony_ci	atomic64_t io_btw_10_to_100_msec;
2362306a36Sopenharmony_ci	atomic64_t io_btw_100_to_500_msec;
2462306a36Sopenharmony_ci	atomic64_t io_btw_500_to_5000_msec;
2562306a36Sopenharmony_ci	atomic64_t io_btw_5000_to_10000_msec;
2662306a36Sopenharmony_ci	atomic64_t io_btw_10000_to_30000_msec;
2762306a36Sopenharmony_ci	atomic64_t io_greater_than_30000_msec;
2862306a36Sopenharmony_ci	atomic64_t current_max_io_time;
2962306a36Sopenharmony_ci};
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistruct abort_stats {
3262306a36Sopenharmony_ci	atomic64_t aborts;
3362306a36Sopenharmony_ci	atomic64_t abort_failures;
3462306a36Sopenharmony_ci	atomic64_t abort_drv_timeouts;
3562306a36Sopenharmony_ci	atomic64_t abort_fw_timeouts;
3662306a36Sopenharmony_ci	atomic64_t abort_io_not_found;
3762306a36Sopenharmony_ci	atomic64_t abort_issued_btw_0_to_6_sec;
3862306a36Sopenharmony_ci	atomic64_t abort_issued_btw_6_to_20_sec;
3962306a36Sopenharmony_ci	atomic64_t abort_issued_btw_20_to_30_sec;
4062306a36Sopenharmony_ci	atomic64_t abort_issued_btw_30_to_40_sec;
4162306a36Sopenharmony_ci	atomic64_t abort_issued_btw_40_to_50_sec;
4262306a36Sopenharmony_ci	atomic64_t abort_issued_btw_50_to_60_sec;
4362306a36Sopenharmony_ci	atomic64_t abort_issued_greater_than_60_sec;
4462306a36Sopenharmony_ci};
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_cistruct terminate_stats {
4762306a36Sopenharmony_ci	atomic64_t terminates;
4862306a36Sopenharmony_ci	atomic64_t max_terminates;
4962306a36Sopenharmony_ci	atomic64_t terminate_drv_timeouts;
5062306a36Sopenharmony_ci	atomic64_t terminate_fw_timeouts;
5162306a36Sopenharmony_ci	atomic64_t terminate_io_not_found;
5262306a36Sopenharmony_ci	atomic64_t terminate_failures;
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistruct reset_stats {
5662306a36Sopenharmony_ci	atomic64_t device_resets;
5762306a36Sopenharmony_ci	atomic64_t device_reset_failures;
5862306a36Sopenharmony_ci	atomic64_t device_reset_aborts;
5962306a36Sopenharmony_ci	atomic64_t device_reset_timeouts;
6062306a36Sopenharmony_ci	atomic64_t device_reset_terminates;
6162306a36Sopenharmony_ci	atomic64_t fw_resets;
6262306a36Sopenharmony_ci	atomic64_t fw_reset_completions;
6362306a36Sopenharmony_ci	atomic64_t fw_reset_failures;
6462306a36Sopenharmony_ci	atomic64_t fnic_resets;
6562306a36Sopenharmony_ci	atomic64_t fnic_reset_completions;
6662306a36Sopenharmony_ci	atomic64_t fnic_reset_failures;
6762306a36Sopenharmony_ci};
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_cistruct fw_stats {
7062306a36Sopenharmony_ci	atomic64_t active_fw_reqs;
7162306a36Sopenharmony_ci	atomic64_t max_fw_reqs;
7262306a36Sopenharmony_ci	atomic64_t fw_out_of_resources;
7362306a36Sopenharmony_ci	atomic64_t io_fw_errs;
7462306a36Sopenharmony_ci};
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_cistruct vlan_stats {
7762306a36Sopenharmony_ci	atomic64_t vlan_disc_reqs;
7862306a36Sopenharmony_ci	atomic64_t resp_withno_vlanID;
7962306a36Sopenharmony_ci	atomic64_t sol_expiry_count;
8062306a36Sopenharmony_ci	atomic64_t flogi_rejects;
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cistruct misc_stats {
8462306a36Sopenharmony_ci	u64 last_isr_time;
8562306a36Sopenharmony_ci	u64 last_ack_time;
8662306a36Sopenharmony_ci	atomic64_t max_isr_jiffies;
8762306a36Sopenharmony_ci	atomic64_t max_isr_time_ms;
8862306a36Sopenharmony_ci	atomic64_t corr_work_done;
8962306a36Sopenharmony_ci	atomic64_t isr_count;
9062306a36Sopenharmony_ci	atomic64_t max_cq_entries;
9162306a36Sopenharmony_ci	atomic64_t ack_index_out_of_range;
9262306a36Sopenharmony_ci	atomic64_t data_count_mismatch;
9362306a36Sopenharmony_ci	atomic64_t fcpio_timeout;
9462306a36Sopenharmony_ci	atomic64_t fcpio_aborted;
9562306a36Sopenharmony_ci	atomic64_t sgl_invalid;
9662306a36Sopenharmony_ci	atomic64_t mss_invalid;
9762306a36Sopenharmony_ci	atomic64_t abts_cpwq_alloc_failures;
9862306a36Sopenharmony_ci	atomic64_t devrst_cpwq_alloc_failures;
9962306a36Sopenharmony_ci	atomic64_t io_cpwq_alloc_failures;
10062306a36Sopenharmony_ci	atomic64_t no_icmnd_itmf_cmpls;
10162306a36Sopenharmony_ci	atomic64_t check_condition;
10262306a36Sopenharmony_ci	atomic64_t queue_fulls;
10362306a36Sopenharmony_ci	atomic64_t rport_not_ready;
10462306a36Sopenharmony_ci	atomic64_t frame_errors;
10562306a36Sopenharmony_ci	atomic64_t current_port_speed;
10662306a36Sopenharmony_ci};
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_cistruct fnic_stats {
10962306a36Sopenharmony_ci	struct stats_timestamps stats_timestamps;
11062306a36Sopenharmony_ci	struct io_path_stats io_stats;
11162306a36Sopenharmony_ci	struct abort_stats abts_stats;
11262306a36Sopenharmony_ci	struct terminate_stats term_stats;
11362306a36Sopenharmony_ci	struct reset_stats reset_stats;
11462306a36Sopenharmony_ci	struct fw_stats fw_stats;
11562306a36Sopenharmony_ci	struct vlan_stats vlan_stats;
11662306a36Sopenharmony_ci	struct misc_stats misc_stats;
11762306a36Sopenharmony_ci};
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_cistruct stats_debug_info {
12062306a36Sopenharmony_ci	char *debug_buffer;
12162306a36Sopenharmony_ci	void *i_private;
12262306a36Sopenharmony_ci	int buf_size;
12362306a36Sopenharmony_ci	int buffer_len;
12462306a36Sopenharmony_ci};
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ciint fnic_get_stats_data(struct stats_debug_info *, struct fnic_stats *);
12762306a36Sopenharmony_civoid fnic_stats_debugfs_init(struct fnic *);
12862306a36Sopenharmony_civoid fnic_stats_debugfs_remove(struct fnic *);
12962306a36Sopenharmony_ci#endif /* _FNIC_STATS_H_ */
130