linux/drivers/scsi/elx/efct/efct_xport.h
<<
>>
Prefs
   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
  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        /* 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
 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 /* __EFCT_XPORT_H__ */
 187