brintos

brintos / linux-shallow public Read only

0
0
Text · 14.2 KiB · 5e6b601 Raw
507 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * zfcp device driver4 *5 * Interface to the FSF support functions.6 *7 * Copyright IBM Corp. 2002, 20208 */9 10#ifndef FSF_H11#define FSF_H12 13#include <linux/pfn.h>14#include <linux/scatterlist.h>15#include <scsi/libfc.h>16 17#define FSF_QTCB_CURRENT_VERSION		0x0000000118 19/* FSF commands */20#define	FSF_QTCB_FCP_CMND			0x0000000121#define	FSF_QTCB_ABORT_FCP_CMND			0x0000000222#define	FSF_QTCB_OPEN_PORT_WITH_DID		0x0000000523#define	FSF_QTCB_OPEN_LUN			0x0000000624#define	FSF_QTCB_CLOSE_LUN			0x0000000725#define	FSF_QTCB_CLOSE_PORT			0x0000000826#define	FSF_QTCB_CLOSE_PHYSICAL_PORT		0x0000000927#define	FSF_QTCB_SEND_ELS			0x0000000B28#define	FSF_QTCB_SEND_GENERIC			0x0000000C29#define	FSF_QTCB_EXCHANGE_CONFIG_DATA		0x0000000D30#define	FSF_QTCB_EXCHANGE_PORT_DATA		0x0000000E31#define FSF_QTCB_DOWNLOAD_CONTROL_FILE		0x0000001232#define FSF_QTCB_UPLOAD_CONTROL_FILE		0x0000001333 34/* FSF QTCB types */35#define FSF_IO_COMMAND				0x0000000136#define FSF_SUPPORT_COMMAND			0x0000000237#define FSF_CONFIG_COMMAND			0x0000000338#define FSF_PORT_COMMAND			0x0000000439 40/* FSF protocol states */41#define FSF_PROT_GOOD				0x0000000142#define FSF_PROT_QTCB_VERSION_ERROR		0x0000001043#define FSF_PROT_SEQ_NUMB_ERROR			0x0000002044#define FSF_PROT_UNSUPP_QTCB_TYPE		0x0000004045#define FSF_PROT_HOST_CONNECTION_INITIALIZING	0x0000008046#define FSF_PROT_FSF_STATUS_PRESENTED		0x0000010047#define FSF_PROT_DUPLICATE_REQUEST_ID		0x0000020048#define FSF_PROT_LINK_DOWN                      0x0000040049#define FSF_PROT_REEST_QUEUE                    0x0000080050#define FSF_PROT_ERROR_STATE			0x0100000051 52/* FSF states */53#define FSF_GOOD				0x0000000054#define FSF_PORT_ALREADY_OPEN			0x0000000155#define FSF_LUN_ALREADY_OPEN			0x0000000256#define FSF_PORT_HANDLE_NOT_VALID		0x0000000357#define FSF_LUN_HANDLE_NOT_VALID		0x0000000458#define FSF_HANDLE_MISMATCH			0x0000000559#define FSF_SERVICE_CLASS_NOT_SUPPORTED		0x0000000660#define FSF_FCPLUN_NOT_VALID			0x0000000961#define FSF_LUN_SHARING_VIOLATION               0x0000001262#define FSF_FCP_COMMAND_DOES_NOT_EXIST		0x0000002263#define FSF_DIRECTION_INDICATOR_NOT_VALID	0x0000003064#define FSF_CMND_LENGTH_NOT_VALID		0x0000003365#define FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED	0x0000004066#define FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED	0x0000004167#define FSF_ELS_COMMAND_REJECTED		0x0000005068#define FSF_GENERIC_COMMAND_REJECTED		0x0000005169#define FSF_PORT_BOXED				0x0000005970#define FSF_LUN_BOXED				0x0000005A71#define FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE	0x0000005B72#define FSF_PAYLOAD_SIZE_MISMATCH		0x0000006073#define FSF_REQUEST_SIZE_TOO_LARGE		0x0000006174#define FSF_RESPONSE_SIZE_TOO_LARGE		0x0000006275#define FSF_SBAL_MISMATCH			0x0000006376#define FSF_INCONSISTENT_PROT_DATA		0x0000007077#define FSF_INVALID_PROT_PARM			0x0000007178#define FSF_BLOCK_GUARD_CHECK_FAILURE		0x0000008179#define FSF_APP_TAG_CHECK_FAILURE		0x0000008280#define FSF_REF_TAG_CHECK_FAILURE		0x0000008381#define FSF_SECURITY_ERROR			0x0000009082#define FSF_ADAPTER_STATUS_AVAILABLE		0x000000AD83#define FSF_FCP_RSP_AVAILABLE			0x000000AF84#define FSF_UNKNOWN_COMMAND			0x000000E285#define FSF_UNKNOWN_OP_SUBTYPE                  0x000000E386#define FSF_INVALID_COMMAND_OPTION              0x000000E587 88#define FSF_PROT_STATUS_QUAL_SIZE		1689#define FSF_STATUS_QUALIFIER_SIZE		1690 91/* FSF status qualifier, recommendations */92#define FSF_SQ_NO_RECOM				0x0093#define FSF_SQ_FCP_RSP_AVAILABLE		0x0194#define FSF_SQ_RETRY_IF_POSSIBLE		0x0295#define FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED	0x0396#define FSF_SQ_INVOKE_LINK_TEST_PROCEDURE	0x0497#define FSF_SQ_COMMAND_ABORTED			0x0698#define FSF_SQ_NO_RETRY_POSSIBLE		0x0799 100/* FSF status qualifier (most significant 4 bytes), local link down */101#define FSF_PSQ_LINK_NO_LIGHT			0x00000004102#define FSF_PSQ_LINK_WRAP_PLUG			0x00000008103#define FSF_PSQ_LINK_NO_FCP			0x00000010104#define FSF_PSQ_LINK_FIRMWARE_UPDATE		0x00000020105#define FSF_PSQ_LINK_INVALID_WWPN		0x00000100106#define FSF_PSQ_LINK_NO_NPIV_SUPPORT		0x00000200107#define FSF_PSQ_LINK_NO_FCP_RESOURCES		0x00000400108#define FSF_PSQ_LINK_NO_FABRIC_RESOURCES	0x00000800109#define FSF_PSQ_LINK_FABRIC_LOGIN_UNABLE	0x00001000110#define FSF_PSQ_LINK_WWPN_ASSIGNMENT_CORRUPTED	0x00002000111#define FSF_PSQ_LINK_MODE_TABLE_CURRUPTED	0x00004000112#define FSF_PSQ_LINK_NO_WWPN_ASSIGNMENT		0x00008000113 114/* FSF status qualifier, security error */115#define FSF_SQ_SECURITY_REQUIRED		0x00000001116#define FSF_SQ_SECURITY_TIMEOUT			0x00000002117#define FSF_SQ_SECURITY_KM_UNAVAILABLE		0x00000003118#define FSF_SQ_SECURITY_RKM_UNAVAILABLE		0x00000004119#define FSF_SQ_SECURITY_AUTH_FAILURE		0x00000005120#define FSF_SQ_SECURITY_ENC_FAILURE		0x00000010121 122/* payload size in status read buffer */123#define FSF_STATUS_READ_PAYLOAD_SIZE		4032124 125/* number of status read buffers that should be sent by ULP */126#define FSF_STATUS_READS_RECOM			16127 128/* status types in status read buffer */129#define FSF_STATUS_READ_PORT_CLOSED		0x00000001130#define FSF_STATUS_READ_INCOMING_ELS		0x00000002131#define FSF_STATUS_READ_SENSE_DATA_AVAIL        0x00000003132#define FSF_STATUS_READ_BIT_ERROR_THRESHOLD	0x00000004133#define FSF_STATUS_READ_LINK_DOWN		0x00000005134#define FSF_STATUS_READ_LINK_UP          	0x00000006135#define FSF_STATUS_READ_NOTIFICATION_LOST	0x00000009136#define FSF_STATUS_READ_FEATURE_UPDATE_ALERT	0x0000000C137#define FSF_STATUS_READ_VERSION_CHANGE		0x0000000D138 139/* status subtypes for link down */140#define FSF_STATUS_READ_SUB_NO_PHYSICAL_LINK	0x00000000141#define FSF_STATUS_READ_SUB_FDISC_FAILED	0x00000001142#define FSF_STATUS_READ_SUB_FIRMWARE_UPDATE	0x00000002143 144/* status subtypes for unsolicited status notification lost */145#define FSF_STATUS_READ_SUB_INCOMING_ELS	0x00000001146#define FSF_STATUS_READ_SUB_VERSION_CHANGE	0x00000100147 148/* status subtypes for version change */149#define FSF_STATUS_READ_SUB_LIC_CHANGE		0x00000001150 151/* topologie that is detected by the adapter */152#define FSF_TOPO_P2P				0x00000001153#define FSF_TOPO_FABRIC				0x00000002154#define FSF_TOPO_AL				0x00000003155 156/* data direction for FCP commands */157#define FSF_DATADIR_WRITE			0x00000001158#define FSF_DATADIR_READ			0x00000002159#define FSF_DATADIR_CMND			0x00000004160#define FSF_DATADIR_DIF_WRITE_INSERT		0x00000009161#define FSF_DATADIR_DIF_READ_STRIP		0x0000000a162#define FSF_DATADIR_DIF_WRITE_CONVERT		0x0000000b163#define FSF_DATADIR_DIF_READ_CONVERT		0X0000000c164 165/* data protection control flags */166#define FSF_APP_TAG_CHECK_ENABLE		0x10167 168/* fc service class */169#define FSF_CLASS_3				0x00000003170 171/* logging space behind QTCB */172#define FSF_QTCB_LOG_SIZE			1024173 174/* channel features */175#define FSF_FEATURE_NOTIFICATION_LOST		0x00000008176#define FSF_FEATURE_HBAAPI_MANAGEMENT           0x00000010177#define FSF_FEATURE_ELS_CT_CHAINED_SBALS	0x00000020178#define FSF_FEATURE_UPDATE_ALERT		0x00000100179#define FSF_FEATURE_MEASUREMENT_DATA		0x00000200180#define FSF_FEATURE_REQUEST_SFP_DATA		0x00000200181#define FSF_FEATURE_REPORT_SFP_DATA		0x00000800182#define FSF_FEATURE_FC_SECURITY			0x00001000183#define FSF_FEATURE_DIF_PROT_TYPE1		0x00010000184#define FSF_FEATURE_DIX_PROT_TCPIP		0x00020000185 186/* host connection features */187#define FSF_FEATURE_NPIV_MODE			0x00000001188 189/* option */190#define FSF_OPEN_LUN_SUPPRESS_BOXING		0x00000001191 192/* FC security algorithms */193#define FSF_FC_SECURITY_AUTH			0x00000001194#define FSF_FC_SECURITY_ENC_FCSP2		0x00000002195#define FSF_FC_SECURITY_ENC_ERAS		0x00000004196 197struct fsf_queue_designator {198	u8  cssid;199	u8  chpid;200	u8  hla;201	u8  ua;202	u32 res1;203} __attribute__ ((packed));204 205struct fsf_bit_error_payload {206	u32 res1;207	u32 link_failure_error_count;208	u32 loss_of_sync_error_count;209	u32 loss_of_signal_error_count;210	u32 primitive_sequence_error_count;211	u32 invalid_transmission_word_error_count;212	u32 crc_error_count;213	u32 primitive_sequence_event_timeout_count;214	u32 elastic_buffer_overrun_error_count;215	u32 fcal_arbitration_timeout_count;216	u32 advertised_receive_b2b_credit;217	u32 current_receive_b2b_credit;218	u32 advertised_transmit_b2b_credit;219	u32 current_transmit_b2b_credit;220} __attribute__ ((packed));221 222struct fsf_link_down_info {223	u32 error_code;224	u32 res1;225	u8 res2[2];226	u8 primary_status;227	u8 ioerr_code;228	u8 action_code;229	u8 reason_code;230	u8 explanation_code;231	u8 vendor_specific_code;232} __attribute__ ((packed));233 234struct fsf_version_change {235	u32 current_version;236	u32 previous_version;237} __packed;238 239struct fsf_status_read_buffer {240	u32 status_type;241	u32 status_subtype;242	u32 length;243	u32 res1;244	struct fsf_queue_designator queue_designator;245	u8 res2;246	u8 d_id[3];247	u32 class;248	u64 fcp_lun;249	u8  res3[24];250	union {251		u8  data[FSF_STATUS_READ_PAYLOAD_SIZE];252		u32 word[FSF_STATUS_READ_PAYLOAD_SIZE/sizeof(u32)];253		struct fsf_link_down_info link_down_info;254		struct fsf_bit_error_payload bit_error;255		struct fsf_version_change version_change;256	} payload;257} __attribute__ ((packed));258 259struct fsf_qual_version_error {260	u32 fsf_version;261	u32 res1[3];262} __attribute__ ((packed));263 264struct fsf_qual_sequence_error {265	u32 exp_req_seq_no;266	u32 res1[3];267} __attribute__ ((packed));268 269struct fsf_qual_latency_info {270	u32 channel_lat;271	u32 fabric_lat;272	u8 res1[8];273} __attribute__ ((packed));274 275union fsf_prot_status_qual {276	u32 word[FSF_PROT_STATUS_QUAL_SIZE / sizeof(u32)];277	u64 doubleword[FSF_PROT_STATUS_QUAL_SIZE / sizeof(u64)];278	struct fsf_qual_version_error   version_error;279	struct fsf_qual_sequence_error  sequence_error;280	struct fsf_link_down_info link_down_info;281	struct fsf_qual_latency_info latency_info;282} __attribute__ ((packed));283 284struct fsf_qtcb_prefix {285	u64 req_id;286	u32 qtcb_version;287	u32 ulp_info;288	u32 qtcb_type;289	u32 req_seq_no;290	u32 prot_status;291	union fsf_prot_status_qual prot_status_qual;292	u8  res1[20];293} __attribute__ ((packed));294 295struct fsf_statistics_info {296	u64 input_req;297	u64 output_req;298	u64 control_req;299	u64 input_mb;300	u64 output_mb;301	u64 seconds_act;302} __attribute__ ((packed));303 304union fsf_status_qual {305	u8  byte[FSF_STATUS_QUALIFIER_SIZE];306	u16 halfword[FSF_STATUS_QUALIFIER_SIZE / sizeof (u16)];307	u32 word[FSF_STATUS_QUALIFIER_SIZE / sizeof (u32)];308	u64 doubleword[FSF_STATUS_QUALIFIER_SIZE / sizeof(u64)];309	struct fsf_queue_designator fsf_queue_designator;310	struct fsf_link_down_info link_down_info;311} __attribute__ ((packed));312 313struct fsf_qtcb_header {314	u64 req_handle;315	u32 fsf_command;316	u32 res1;317	u32 port_handle;318	u32 lun_handle;319	u32 res2;320	u32 fsf_status;321	union fsf_status_qual fsf_status_qual;322	u8  res3[28];323	u16 log_start;324	u16 log_length;325	u8  res4[16];326} __attribute__ ((packed));327 328#define FSF_PLOGI_MIN_LEN	112329 330#define FSF_FCP_CMND_SIZE	288331#define FSF_FCP_RSP_SIZE	128332 333struct fsf_qtcb_bottom_io {334	u32 data_direction;335	u32 service_class;336	u8  res1;337	u8  data_prot_flags;338	u16 app_tag_value;339	u32 ref_tag_value;340	u32 fcp_cmnd_length;341	u32 data_block_length;342	u32 prot_data_length;343	u8  res2[4];344	union {345		u8		byte[FSF_FCP_CMND_SIZE];346		struct fcp_cmnd iu;347	}   fcp_cmnd;348	union {349		u8			 byte[FSF_FCP_RSP_SIZE];350		struct fcp_resp_with_ext iu;351	}   fcp_rsp;352	u8  res3[64];353} __attribute__ ((packed));354 355struct fsf_qtcb_bottom_support {356	u32 operation_subtype;357	u8  res1[13];358	u8 d_id[3];359	u32 option;360	u64 fcp_lun;361	u64 res2;362	u64 req_handle;363	u32 service_class;364	u8  res3[3];365	u8  timeout;366        u32 lun_access_info;367	u32 connection_info;368	u8  res4[176];369	u32 els1_length;370	u32 els2_length;371	u32 req_buf_length;372	u32 resp_buf_length;373	u8  els[256];374} __attribute__ ((packed));375 376#define ZFCP_FSF_TIMER_INT_MASK	0x3FFF377 378struct fsf_qtcb_bottom_config {379	u32 lic_version;380	u32 feature_selection;381	u32 high_qtcb_version;382	u32 low_qtcb_version;383	u32 max_qtcb_size;384	u32 max_data_transfer_size;385	u32 adapter_features;386	u32 connection_features;387	u32 fc_topology;388	u32 fc_link_speed;	/* one of ZFCP_FSF_PORTSPEED_* */389	u32 adapter_type;390	u8 res0;391	u8 peer_d_id[3];392	u16 status_read_buf_num;393	u16 timer_interval;394	u8 res2[9];395	u8 s_id[3];396	u8 nport_serv_param[128];397	u8 res3[8];398	u32 adapter_ports;399	u32 hardware_version;400	u8 serial_number[32];401	u8 plogi_payload[112];402	struct fsf_statistics_info stat_info;403	u8 res4[112];404} __attribute__ ((packed));405 406struct fsf_qtcb_bottom_port {407	u64 wwpn;408	u32 fc_port_id;409	u32 port_type;410	u32 port_state;411	u32 class_of_service;	/* should be 0x00000006 for class 2 and 3 */412	u8 supported_fc4_types[32]; /* should be 0x00000100 for scsi fcp */413	u8 active_fc4_types[32];414	u32 supported_speed;	/* any combination of ZFCP_FSF_PORTSPEED_* */415	u32 maximum_frame_size;	/* fixed value of 2112 */416	u64 seconds_since_last_reset;417	u64 tx_frames;418	u64 tx_words;419	u64 rx_frames;420	u64 rx_words;421	u64 lip;		/* 0 */422	u64 nos;		/* currently 0 */423	u64 error_frames;	/* currently 0 */424	u64 dumped_frames;	/* currently 0 */425	u64 link_failure;426	u64 loss_of_sync;427	u64 loss_of_signal;428	u64 psp_error_counts;429	u64 invalid_tx_words;430	u64 invalid_crcs;431	u64 input_requests;432	u64 output_requests;433	u64 control_requests;434	u64 input_mb;		/* where 1 MByte == 1.000.000 Bytes */435	u64 output_mb;		/* where 1 MByte == 1.000.000 Bytes */436	u8 cp_util;437	u8 cb_util;438	u8 a_util;439	u8 res2;440	s16 temperature;441	u16 vcc;442	u16 tx_bias;443	u16 tx_power;444	u16 rx_power;445	union {446		u16 raw;447		struct {448			u16 fec_active		:1;449			u16:7;450			u16 connector_type	:2;451			u16 sfp_invalid		:1;452			u16 optical_port	:1;453			u16 port_tx_type	:4;454		};455	} sfp_flags;456	u32 fc_security_algorithms;457	u8 res3[236];458} __attribute__ ((packed));459 460union fsf_qtcb_bottom {461	struct fsf_qtcb_bottom_io      io;462	struct fsf_qtcb_bottom_support support;463	struct fsf_qtcb_bottom_config  config;464	struct fsf_qtcb_bottom_port port;465};466 467struct fsf_qtcb {468	struct fsf_qtcb_prefix prefix;469	struct fsf_qtcb_header header;470	union  fsf_qtcb_bottom bottom;471	u8 log[FSF_QTCB_LOG_SIZE];472} __attribute__ ((packed));473 474struct zfcp_blk_drv_data {475#define ZFCP_BLK_DRV_DATA_MAGIC			0x1476	u32 magic;477#define ZFCP_BLK_LAT_VALID			0x1478#define ZFCP_BLK_REQ_ERROR			0x2479	u16 flags;480	u8 inb_usage;481	u8 outb_usage;482	u64 channel_lat;483	u64 fabric_lat;484} __attribute__ ((packed));485 486/**487 * struct zfcp_fsf_ct_els - zfcp data for ct or els request488 * @req: scatter-gather list for request, points to &zfcp_fc_req.sg_req or BSG489 * @resp: scatter-gather list for response, points to &zfcp_fc_req.sg_rsp or BSG490 * @handler: handler function (called for response to the request)491 * @handler_data: data passed to handler function492 * @port: Optional pointer to port for zfcp internal ELS (only test link ADISC)493 * @status: used to pass error status to calling function494 * @d_id: Destination ID of either open WKA port for CT or of D_ID for ELS495 */496struct zfcp_fsf_ct_els {497	struct scatterlist *req;498	struct scatterlist *resp;499	void (*handler)(void *);500	void *handler_data;501	struct zfcp_port *port;502	int status;503	u32 d_id;504};505 506#endif				/* FSF_H */507