1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright 2013 Cisco Systems, Inc. All rights reserved. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * This program is free software; you may redistribute it and/or modify 5*4882a593Smuzhiyun * it under the terms of the GNU General Public License as published by 6*4882a593Smuzhiyun * the Free Software Foundation; version 2 of the License. 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 9*4882a593Smuzhiyun * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 10*4882a593Smuzhiyun * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 11*4882a593Smuzhiyun * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 12*4882a593Smuzhiyun * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13*4882a593Smuzhiyun * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 14*4882a593Smuzhiyun * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 15*4882a593Smuzhiyun * SOFTWARE. 16*4882a593Smuzhiyun */ 17*4882a593Smuzhiyun #ifndef _FNIC_STATS_H_ 18*4882a593Smuzhiyun #define _FNIC_STATS_H_ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun struct stats_timestamps { 21*4882a593Smuzhiyun struct timespec64 last_reset_time; 22*4882a593Smuzhiyun struct timespec64 last_read_time; 23*4882a593Smuzhiyun }; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun struct io_path_stats { 26*4882a593Smuzhiyun atomic64_t active_ios; 27*4882a593Smuzhiyun atomic64_t max_active_ios; 28*4882a593Smuzhiyun atomic64_t io_completions; 29*4882a593Smuzhiyun atomic64_t io_failures; 30*4882a593Smuzhiyun atomic64_t ioreq_null; 31*4882a593Smuzhiyun atomic64_t alloc_failures; 32*4882a593Smuzhiyun atomic64_t sc_null; 33*4882a593Smuzhiyun atomic64_t io_not_found; 34*4882a593Smuzhiyun atomic64_t num_ios; 35*4882a593Smuzhiyun atomic64_t io_btw_0_to_10_msec; 36*4882a593Smuzhiyun atomic64_t io_btw_10_to_100_msec; 37*4882a593Smuzhiyun atomic64_t io_btw_100_to_500_msec; 38*4882a593Smuzhiyun atomic64_t io_btw_500_to_5000_msec; 39*4882a593Smuzhiyun atomic64_t io_btw_5000_to_10000_msec; 40*4882a593Smuzhiyun atomic64_t io_btw_10000_to_30000_msec; 41*4882a593Smuzhiyun atomic64_t io_greater_than_30000_msec; 42*4882a593Smuzhiyun atomic64_t current_max_io_time; 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun struct abort_stats { 46*4882a593Smuzhiyun atomic64_t aborts; 47*4882a593Smuzhiyun atomic64_t abort_failures; 48*4882a593Smuzhiyun atomic64_t abort_drv_timeouts; 49*4882a593Smuzhiyun atomic64_t abort_fw_timeouts; 50*4882a593Smuzhiyun atomic64_t abort_io_not_found; 51*4882a593Smuzhiyun atomic64_t abort_issued_btw_0_to_6_sec; 52*4882a593Smuzhiyun atomic64_t abort_issued_btw_6_to_20_sec; 53*4882a593Smuzhiyun atomic64_t abort_issued_btw_20_to_30_sec; 54*4882a593Smuzhiyun atomic64_t abort_issued_btw_30_to_40_sec; 55*4882a593Smuzhiyun atomic64_t abort_issued_btw_40_to_50_sec; 56*4882a593Smuzhiyun atomic64_t abort_issued_btw_50_to_60_sec; 57*4882a593Smuzhiyun atomic64_t abort_issued_greater_than_60_sec; 58*4882a593Smuzhiyun }; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun struct terminate_stats { 61*4882a593Smuzhiyun atomic64_t terminates; 62*4882a593Smuzhiyun atomic64_t max_terminates; 63*4882a593Smuzhiyun atomic64_t terminate_drv_timeouts; 64*4882a593Smuzhiyun atomic64_t terminate_fw_timeouts; 65*4882a593Smuzhiyun atomic64_t terminate_io_not_found; 66*4882a593Smuzhiyun atomic64_t terminate_failures; 67*4882a593Smuzhiyun }; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun struct reset_stats { 70*4882a593Smuzhiyun atomic64_t device_resets; 71*4882a593Smuzhiyun atomic64_t device_reset_failures; 72*4882a593Smuzhiyun atomic64_t device_reset_aborts; 73*4882a593Smuzhiyun atomic64_t device_reset_timeouts; 74*4882a593Smuzhiyun atomic64_t device_reset_terminates; 75*4882a593Smuzhiyun atomic64_t fw_resets; 76*4882a593Smuzhiyun atomic64_t fw_reset_completions; 77*4882a593Smuzhiyun atomic64_t fw_reset_failures; 78*4882a593Smuzhiyun atomic64_t fnic_resets; 79*4882a593Smuzhiyun atomic64_t fnic_reset_completions; 80*4882a593Smuzhiyun atomic64_t fnic_reset_failures; 81*4882a593Smuzhiyun }; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun struct fw_stats { 84*4882a593Smuzhiyun atomic64_t active_fw_reqs; 85*4882a593Smuzhiyun atomic64_t max_fw_reqs; 86*4882a593Smuzhiyun atomic64_t fw_out_of_resources; 87*4882a593Smuzhiyun atomic64_t io_fw_errs; 88*4882a593Smuzhiyun }; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun struct vlan_stats { 91*4882a593Smuzhiyun atomic64_t vlan_disc_reqs; 92*4882a593Smuzhiyun atomic64_t resp_withno_vlanID; 93*4882a593Smuzhiyun atomic64_t sol_expiry_count; 94*4882a593Smuzhiyun atomic64_t flogi_rejects; 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun struct misc_stats { 98*4882a593Smuzhiyun u64 last_isr_time; 99*4882a593Smuzhiyun u64 last_ack_time; 100*4882a593Smuzhiyun atomic64_t max_isr_jiffies; 101*4882a593Smuzhiyun atomic64_t max_isr_time_ms; 102*4882a593Smuzhiyun atomic64_t corr_work_done; 103*4882a593Smuzhiyun atomic64_t isr_count; 104*4882a593Smuzhiyun atomic64_t max_cq_entries; 105*4882a593Smuzhiyun atomic64_t ack_index_out_of_range; 106*4882a593Smuzhiyun atomic64_t data_count_mismatch; 107*4882a593Smuzhiyun atomic64_t fcpio_timeout; 108*4882a593Smuzhiyun atomic64_t fcpio_aborted; 109*4882a593Smuzhiyun atomic64_t sgl_invalid; 110*4882a593Smuzhiyun atomic64_t mss_invalid; 111*4882a593Smuzhiyun atomic64_t abts_cpwq_alloc_failures; 112*4882a593Smuzhiyun atomic64_t devrst_cpwq_alloc_failures; 113*4882a593Smuzhiyun atomic64_t io_cpwq_alloc_failures; 114*4882a593Smuzhiyun atomic64_t no_icmnd_itmf_cmpls; 115*4882a593Smuzhiyun atomic64_t check_condition; 116*4882a593Smuzhiyun atomic64_t queue_fulls; 117*4882a593Smuzhiyun atomic64_t rport_not_ready; 118*4882a593Smuzhiyun atomic64_t frame_errors; 119*4882a593Smuzhiyun atomic64_t current_port_speed; 120*4882a593Smuzhiyun }; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun struct fnic_stats { 123*4882a593Smuzhiyun struct stats_timestamps stats_timestamps; 124*4882a593Smuzhiyun struct io_path_stats io_stats; 125*4882a593Smuzhiyun struct abort_stats abts_stats; 126*4882a593Smuzhiyun struct terminate_stats term_stats; 127*4882a593Smuzhiyun struct reset_stats reset_stats; 128*4882a593Smuzhiyun struct fw_stats fw_stats; 129*4882a593Smuzhiyun struct vlan_stats vlan_stats; 130*4882a593Smuzhiyun struct misc_stats misc_stats; 131*4882a593Smuzhiyun }; 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun struct stats_debug_info { 134*4882a593Smuzhiyun char *debug_buffer; 135*4882a593Smuzhiyun void *i_private; 136*4882a593Smuzhiyun int buf_size; 137*4882a593Smuzhiyun int buffer_len; 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun int fnic_get_stats_data(struct stats_debug_info *, struct fnic_stats *); 141*4882a593Smuzhiyun void fnic_stats_debugfs_init(struct fnic *); 142*4882a593Smuzhiyun void fnic_stats_debugfs_remove(struct fnic *); 143*4882a593Smuzhiyun #endif /* _FNIC_STATS_H_ */ 144