forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.9 KiB
94 lines
2.9 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* |
|
* zfcp device driver |
|
* |
|
* Definitions for handling diagnostics in the the zfcp device driver. |
|
* |
|
* Copyright IBM Corp. 2018, 2020 |
|
*/ |
|
|
|
#ifndef ZFCP_DIAG_H |
|
#define ZFCP_DIAG_H |
|
|
|
#include <linux/spinlock.h> |
|
|
|
#include "zfcp_fsf.h" |
|
#include "zfcp_def.h" |
|
|
|
/** |
|
* struct zfcp_diag_header - general part of a diagnostic buffer. |
|
* @access_lock: lock protecting all the data in this buffer. |
|
* @updating: flag showing that an update for this buffer is currently running. |
|
* @incomplete: flag showing that the data in @buffer is incomplete. |
|
* @timestamp: time in jiffies when the data of this buffer was last captured. |
|
* @buffer: implementation-depending data of this buffer |
|
* @buffer_size: size of @buffer |
|
*/ |
|
struct zfcp_diag_header { |
|
spinlock_t access_lock; |
|
|
|
/* Flags */ |
|
u64 updating :1; |
|
u64 incomplete :1; |
|
|
|
unsigned long timestamp; |
|
|
|
void *buffer; |
|
size_t buffer_size; |
|
}; |
|
|
|
/** |
|
* struct zfcp_diag_adapter - central storage for all diagnostics concerning an |
|
* adapter. |
|
* @max_age: maximum age of data in diagnostic buffers before they need to be |
|
* refreshed (in ms). |
|
* @port_data: data retrieved using exchange port data. |
|
* @port_data.header: header with metadata for the cache in @port_data.data. |
|
* @port_data.data: cached QTCB Bottom of command exchange port data. |
|
* @config_data: data retrieved using exchange config data. |
|
* @config_data.header: header with metadata for the cache in @config_data.data. |
|
* @config_data.data: cached QTCB Bottom of command exchange config data. |
|
*/ |
|
struct zfcp_diag_adapter { |
|
unsigned long max_age; |
|
|
|
struct zfcp_diag_adapter_port_data { |
|
struct zfcp_diag_header header; |
|
struct fsf_qtcb_bottom_port data; |
|
} port_data; |
|
struct zfcp_diag_adapter_config_data { |
|
struct zfcp_diag_header header; |
|
struct fsf_qtcb_bottom_config data; |
|
} config_data; |
|
}; |
|
|
|
int zfcp_diag_adapter_setup(struct zfcp_adapter *const adapter); |
|
void zfcp_diag_adapter_free(struct zfcp_adapter *const adapter); |
|
|
|
void zfcp_diag_update_xdata(struct zfcp_diag_header *const hdr, |
|
const void *const data, const bool incomplete); |
|
|
|
/* |
|
* Function-Type used in zfcp_diag_update_buffer_limited() for the function |
|
* that does the buffer-implementation dependent work. |
|
*/ |
|
typedef int (*zfcp_diag_update_buffer_func)(struct zfcp_adapter *const adapter); |
|
|
|
int zfcp_diag_update_config_data_buffer(struct zfcp_adapter *const adapter); |
|
int zfcp_diag_update_port_data_buffer(struct zfcp_adapter *const adapter); |
|
int zfcp_diag_update_buffer_limited(struct zfcp_adapter *const adapter, |
|
struct zfcp_diag_header *const hdr, |
|
zfcp_diag_update_buffer_func buffer_update); |
|
|
|
/** |
|
* zfcp_diag_support_sfp() - Return %true if the @adapter supports reporting |
|
* SFP Data. |
|
* @adapter: adapter to test the availability of SFP Data reporting for. |
|
*/ |
|
static inline bool |
|
zfcp_diag_support_sfp(const struct zfcp_adapter *const adapter) |
|
{ |
|
return !!(adapter->adapter_features & FSF_FEATURE_REPORT_SFP_DATA); |
|
} |
|
|
|
#endif /* ZFCP_DIAG_H */
|
|
|