cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

efct_xport.h (4711B)


      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__ */