162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright(c) 2007 Intel Corporation. All rights reserved. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Maintained at www.Open-FCoE.org 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef _FC_ELS_H_ 962306a36Sopenharmony_ci#define _FC_ELS_H_ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/types.h> 1262306a36Sopenharmony_ci#include <asm/byteorder.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* 1562306a36Sopenharmony_ci * Fibre Channel Switch - Enhanced Link Services definitions. 1662306a36Sopenharmony_ci * From T11 FC-LS Rev 1.2 June 7, 2005. 1762306a36Sopenharmony_ci */ 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci/* 2062306a36Sopenharmony_ci * ELS Command codes - byte 0 of the frame payload 2162306a36Sopenharmony_ci */ 2262306a36Sopenharmony_cienum fc_els_cmd { 2362306a36Sopenharmony_ci ELS_LS_RJT = 0x01, /* ESL reject */ 2462306a36Sopenharmony_ci ELS_LS_ACC = 0x02, /* ESL Accept */ 2562306a36Sopenharmony_ci ELS_PLOGI = 0x03, /* N_Port login */ 2662306a36Sopenharmony_ci ELS_FLOGI = 0x04, /* F_Port login */ 2762306a36Sopenharmony_ci ELS_LOGO = 0x05, /* Logout */ 2862306a36Sopenharmony_ci ELS_ABTX = 0x06, /* Abort exchange - obsolete */ 2962306a36Sopenharmony_ci ELS_RCS = 0x07, /* read connection status */ 3062306a36Sopenharmony_ci ELS_RES = 0x08, /* read exchange status block */ 3162306a36Sopenharmony_ci ELS_RSS = 0x09, /* read sequence status block */ 3262306a36Sopenharmony_ci ELS_RSI = 0x0a, /* read sequence initiative */ 3362306a36Sopenharmony_ci ELS_ESTS = 0x0b, /* establish streaming */ 3462306a36Sopenharmony_ci ELS_ESTC = 0x0c, /* estimate credit */ 3562306a36Sopenharmony_ci ELS_ADVC = 0x0d, /* advise credit */ 3662306a36Sopenharmony_ci ELS_RTV = 0x0e, /* read timeout value */ 3762306a36Sopenharmony_ci ELS_RLS = 0x0f, /* read link error status block */ 3862306a36Sopenharmony_ci ELS_ECHO = 0x10, /* echo */ 3962306a36Sopenharmony_ci ELS_TEST = 0x11, /* test */ 4062306a36Sopenharmony_ci ELS_RRQ = 0x12, /* reinstate recovery qualifier */ 4162306a36Sopenharmony_ci ELS_REC = 0x13, /* read exchange concise */ 4262306a36Sopenharmony_ci ELS_SRR = 0x14, /* sequence retransmission request */ 4362306a36Sopenharmony_ci ELS_FPIN = 0x16, /* Fabric Performance Impact Notification */ 4462306a36Sopenharmony_ci ELS_EDC = 0x17, /* Exchange Diagnostic Capabilities */ 4562306a36Sopenharmony_ci ELS_RDP = 0x18, /* Read Diagnostic Parameters */ 4662306a36Sopenharmony_ci ELS_RDF = 0x19, /* Register Diagnostic Functions */ 4762306a36Sopenharmony_ci ELS_PRLI = 0x20, /* process login */ 4862306a36Sopenharmony_ci ELS_PRLO = 0x21, /* process logout */ 4962306a36Sopenharmony_ci ELS_SCN = 0x22, /* state change notification */ 5062306a36Sopenharmony_ci ELS_TPLS = 0x23, /* test process login state */ 5162306a36Sopenharmony_ci ELS_TPRLO = 0x24, /* third party process logout */ 5262306a36Sopenharmony_ci ELS_LCLM = 0x25, /* login control list mgmt (obs) */ 5362306a36Sopenharmony_ci ELS_GAID = 0x30, /* get alias_ID */ 5462306a36Sopenharmony_ci ELS_FACT = 0x31, /* fabric activate alias_id */ 5562306a36Sopenharmony_ci ELS_FDACDT = 0x32, /* fabric deactivate alias_id */ 5662306a36Sopenharmony_ci ELS_NACT = 0x33, /* N-port activate alias_id */ 5762306a36Sopenharmony_ci ELS_NDACT = 0x34, /* N-port deactivate alias_id */ 5862306a36Sopenharmony_ci ELS_QOSR = 0x40, /* quality of service request */ 5962306a36Sopenharmony_ci ELS_RVCS = 0x41, /* read virtual circuit status */ 6062306a36Sopenharmony_ci ELS_PDISC = 0x50, /* discover N_port service params */ 6162306a36Sopenharmony_ci ELS_FDISC = 0x51, /* discover F_port service params */ 6262306a36Sopenharmony_ci ELS_ADISC = 0x52, /* discover address */ 6362306a36Sopenharmony_ci ELS_RNC = 0x53, /* report node cap (obs) */ 6462306a36Sopenharmony_ci ELS_FARP_REQ = 0x54, /* FC ARP request */ 6562306a36Sopenharmony_ci ELS_FARP_REPL = 0x55, /* FC ARP reply */ 6662306a36Sopenharmony_ci ELS_RPS = 0x56, /* read port status block */ 6762306a36Sopenharmony_ci ELS_RPL = 0x57, /* read port list */ 6862306a36Sopenharmony_ci ELS_RPBC = 0x58, /* read port buffer condition */ 6962306a36Sopenharmony_ci ELS_FAN = 0x60, /* fabric address notification */ 7062306a36Sopenharmony_ci ELS_RSCN = 0x61, /* registered state change notification */ 7162306a36Sopenharmony_ci ELS_SCR = 0x62, /* state change registration */ 7262306a36Sopenharmony_ci ELS_RNFT = 0x63, /* report node FC-4 types */ 7362306a36Sopenharmony_ci ELS_CSR = 0x68, /* clock synch. request */ 7462306a36Sopenharmony_ci ELS_CSU = 0x69, /* clock synch. update */ 7562306a36Sopenharmony_ci ELS_LINIT = 0x70, /* loop initialize */ 7662306a36Sopenharmony_ci ELS_LSTS = 0x72, /* loop status */ 7762306a36Sopenharmony_ci ELS_RNID = 0x78, /* request node ID data */ 7862306a36Sopenharmony_ci ELS_RLIR = 0x79, /* registered link incident report */ 7962306a36Sopenharmony_ci ELS_LIRR = 0x7a, /* link incident record registration */ 8062306a36Sopenharmony_ci ELS_SRL = 0x7b, /* scan remote loop */ 8162306a36Sopenharmony_ci ELS_SBRP = 0x7c, /* set bit-error reporting params */ 8262306a36Sopenharmony_ci ELS_RPSC = 0x7d, /* report speed capabilities */ 8362306a36Sopenharmony_ci ELS_QSA = 0x7e, /* query security attributes */ 8462306a36Sopenharmony_ci ELS_EVFP = 0x7f, /* exchange virt. fabrics params */ 8562306a36Sopenharmony_ci ELS_LKA = 0x80, /* link keep-alive */ 8662306a36Sopenharmony_ci ELS_AUTH_ELS = 0x90, /* authentication ELS */ 8762306a36Sopenharmony_ci}; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci/* 9062306a36Sopenharmony_ci * Initializer useful for decoding table. 9162306a36Sopenharmony_ci * Please keep this in sync with the above definitions. 9262306a36Sopenharmony_ci */ 9362306a36Sopenharmony_ci#define FC_ELS_CMDS_INIT { \ 9462306a36Sopenharmony_ci [ELS_LS_RJT] = "LS_RJT", \ 9562306a36Sopenharmony_ci [ELS_LS_ACC] = "LS_ACC", \ 9662306a36Sopenharmony_ci [ELS_PLOGI] = "PLOGI", \ 9762306a36Sopenharmony_ci [ELS_FLOGI] = "FLOGI", \ 9862306a36Sopenharmony_ci [ELS_LOGO] = "LOGO", \ 9962306a36Sopenharmony_ci [ELS_ABTX] = "ABTX", \ 10062306a36Sopenharmony_ci [ELS_RCS] = "RCS", \ 10162306a36Sopenharmony_ci [ELS_RES] = "RES", \ 10262306a36Sopenharmony_ci [ELS_RSS] = "RSS", \ 10362306a36Sopenharmony_ci [ELS_RSI] = "RSI", \ 10462306a36Sopenharmony_ci [ELS_ESTS] = "ESTS", \ 10562306a36Sopenharmony_ci [ELS_ESTC] = "ESTC", \ 10662306a36Sopenharmony_ci [ELS_ADVC] = "ADVC", \ 10762306a36Sopenharmony_ci [ELS_RTV] = "RTV", \ 10862306a36Sopenharmony_ci [ELS_RLS] = "RLS", \ 10962306a36Sopenharmony_ci [ELS_ECHO] = "ECHO", \ 11062306a36Sopenharmony_ci [ELS_TEST] = "TEST", \ 11162306a36Sopenharmony_ci [ELS_RRQ] = "RRQ", \ 11262306a36Sopenharmony_ci [ELS_REC] = "REC", \ 11362306a36Sopenharmony_ci [ELS_SRR] = "SRR", \ 11462306a36Sopenharmony_ci [ELS_FPIN] = "FPIN", \ 11562306a36Sopenharmony_ci [ELS_EDC] = "EDC", \ 11662306a36Sopenharmony_ci [ELS_RDP] = "RDP", \ 11762306a36Sopenharmony_ci [ELS_RDF] = "RDF", \ 11862306a36Sopenharmony_ci [ELS_PRLI] = "PRLI", \ 11962306a36Sopenharmony_ci [ELS_PRLO] = "PRLO", \ 12062306a36Sopenharmony_ci [ELS_SCN] = "SCN", \ 12162306a36Sopenharmony_ci [ELS_TPLS] = "TPLS", \ 12262306a36Sopenharmony_ci [ELS_TPRLO] = "TPRLO", \ 12362306a36Sopenharmony_ci [ELS_LCLM] = "LCLM", \ 12462306a36Sopenharmony_ci [ELS_GAID] = "GAID", \ 12562306a36Sopenharmony_ci [ELS_FACT] = "FACT", \ 12662306a36Sopenharmony_ci [ELS_FDACDT] = "FDACDT", \ 12762306a36Sopenharmony_ci [ELS_NACT] = "NACT", \ 12862306a36Sopenharmony_ci [ELS_NDACT] = "NDACT", \ 12962306a36Sopenharmony_ci [ELS_QOSR] = "QOSR", \ 13062306a36Sopenharmony_ci [ELS_RVCS] = "RVCS", \ 13162306a36Sopenharmony_ci [ELS_PDISC] = "PDISC", \ 13262306a36Sopenharmony_ci [ELS_FDISC] = "FDISC", \ 13362306a36Sopenharmony_ci [ELS_ADISC] = "ADISC", \ 13462306a36Sopenharmony_ci [ELS_RNC] = "RNC", \ 13562306a36Sopenharmony_ci [ELS_FARP_REQ] = "FARP_REQ", \ 13662306a36Sopenharmony_ci [ELS_FARP_REPL] = "FARP_REPL", \ 13762306a36Sopenharmony_ci [ELS_RPS] = "RPS", \ 13862306a36Sopenharmony_ci [ELS_RPL] = "RPL", \ 13962306a36Sopenharmony_ci [ELS_RPBC] = "RPBC", \ 14062306a36Sopenharmony_ci [ELS_FAN] = "FAN", \ 14162306a36Sopenharmony_ci [ELS_RSCN] = "RSCN", \ 14262306a36Sopenharmony_ci [ELS_SCR] = "SCR", \ 14362306a36Sopenharmony_ci [ELS_RNFT] = "RNFT", \ 14462306a36Sopenharmony_ci [ELS_CSR] = "CSR", \ 14562306a36Sopenharmony_ci [ELS_CSU] = "CSU", \ 14662306a36Sopenharmony_ci [ELS_LINIT] = "LINIT", \ 14762306a36Sopenharmony_ci [ELS_LSTS] = "LSTS", \ 14862306a36Sopenharmony_ci [ELS_RNID] = "RNID", \ 14962306a36Sopenharmony_ci [ELS_RLIR] = "RLIR", \ 15062306a36Sopenharmony_ci [ELS_LIRR] = "LIRR", \ 15162306a36Sopenharmony_ci [ELS_SRL] = "SRL", \ 15262306a36Sopenharmony_ci [ELS_SBRP] = "SBRP", \ 15362306a36Sopenharmony_ci [ELS_RPSC] = "RPSC", \ 15462306a36Sopenharmony_ci [ELS_QSA] = "QSA", \ 15562306a36Sopenharmony_ci [ELS_EVFP] = "EVFP", \ 15662306a36Sopenharmony_ci [ELS_LKA] = "LKA", \ 15762306a36Sopenharmony_ci [ELS_AUTH_ELS] = "AUTH_ELS", \ 15862306a36Sopenharmony_ci} 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci/* 16162306a36Sopenharmony_ci * LS_ACC payload. 16262306a36Sopenharmony_ci */ 16362306a36Sopenharmony_cistruct fc_els_ls_acc { 16462306a36Sopenharmony_ci __u8 la_cmd; /* command code ELS_LS_ACC */ 16562306a36Sopenharmony_ci __u8 la_resv[3]; /* reserved */ 16662306a36Sopenharmony_ci}; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci/* 16962306a36Sopenharmony_ci * ELS reject payload. 17062306a36Sopenharmony_ci */ 17162306a36Sopenharmony_cistruct fc_els_ls_rjt { 17262306a36Sopenharmony_ci __u8 er_cmd; /* command code ELS_LS_RJT */ 17362306a36Sopenharmony_ci __u8 er_resv[4]; /* reserved must be zero */ 17462306a36Sopenharmony_ci __u8 er_reason; /* reason (enum fc_els_rjt_reason below) */ 17562306a36Sopenharmony_ci __u8 er_explan; /* explanation (enum fc_els_rjt_explan below) */ 17662306a36Sopenharmony_ci __u8 er_vendor; /* vendor specific code */ 17762306a36Sopenharmony_ci}; 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci/* 18062306a36Sopenharmony_ci * ELS reject reason codes (er_reason). 18162306a36Sopenharmony_ci */ 18262306a36Sopenharmony_cienum fc_els_rjt_reason { 18362306a36Sopenharmony_ci ELS_RJT_NONE = 0, /* no reject - not to be sent */ 18462306a36Sopenharmony_ci ELS_RJT_INVAL = 0x01, /* invalid ELS command code */ 18562306a36Sopenharmony_ci ELS_RJT_LOGIC = 0x03, /* logical error */ 18662306a36Sopenharmony_ci ELS_RJT_BUSY = 0x05, /* logical busy */ 18762306a36Sopenharmony_ci ELS_RJT_PROT = 0x07, /* protocol error */ 18862306a36Sopenharmony_ci ELS_RJT_UNAB = 0x09, /* unable to perform command request */ 18962306a36Sopenharmony_ci ELS_RJT_UNSUP = 0x0b, /* command not supported */ 19062306a36Sopenharmony_ci ELS_RJT_INPROG = 0x0e, /* command already in progress */ 19162306a36Sopenharmony_ci ELS_RJT_FIP = 0x20, /* FIP error */ 19262306a36Sopenharmony_ci ELS_RJT_VENDOR = 0xff, /* vendor specific error */ 19362306a36Sopenharmony_ci}; 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci/* 19762306a36Sopenharmony_ci * reason code explanation (er_explan). 19862306a36Sopenharmony_ci */ 19962306a36Sopenharmony_cienum fc_els_rjt_explan { 20062306a36Sopenharmony_ci ELS_EXPL_NONE = 0x00, /* No additional explanation */ 20162306a36Sopenharmony_ci ELS_EXPL_SPP_OPT_ERR = 0x01, /* service parameter error - options */ 20262306a36Sopenharmony_ci ELS_EXPL_SPP_ICTL_ERR = 0x03, /* service parm error - initiator ctl */ 20362306a36Sopenharmony_ci ELS_EXPL_AH = 0x11, /* invalid association header */ 20462306a36Sopenharmony_ci ELS_EXPL_AH_REQ = 0x13, /* association_header required */ 20562306a36Sopenharmony_ci ELS_EXPL_SID = 0x15, /* invalid originator S_ID */ 20662306a36Sopenharmony_ci ELS_EXPL_OXID_RXID = 0x17, /* invalid OX_ID-RX_ID combination */ 20762306a36Sopenharmony_ci ELS_EXPL_INPROG = 0x19, /* Request already in progress */ 20862306a36Sopenharmony_ci ELS_EXPL_PLOGI_REQD = 0x1e, /* N_Port login required */ 20962306a36Sopenharmony_ci ELS_EXPL_INSUF_RES = 0x29, /* insufficient resources */ 21062306a36Sopenharmony_ci ELS_EXPL_UNAB_DATA = 0x2a, /* unable to supply requested data */ 21162306a36Sopenharmony_ci ELS_EXPL_UNSUPR = 0x2c, /* Request not supported */ 21262306a36Sopenharmony_ci ELS_EXPL_INV_LEN = 0x2d, /* Invalid payload length */ 21362306a36Sopenharmony_ci ELS_EXPL_NOT_NEIGHBOR = 0x62, /* VN2VN_Port not in neighbor set */ 21462306a36Sopenharmony_ci /* TBD - above definitions incomplete */ 21562306a36Sopenharmony_ci}; 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci/* 21862306a36Sopenharmony_ci * Link Service TLV Descriptor Tag Values 21962306a36Sopenharmony_ci */ 22062306a36Sopenharmony_cienum fc_ls_tlv_dtag { 22162306a36Sopenharmony_ci ELS_DTAG_LS_REQ_INFO = 0x00000001, 22262306a36Sopenharmony_ci /* Link Service Request Information Descriptor */ 22362306a36Sopenharmony_ci ELS_DTAG_LNK_FAULT_CAP = 0x0001000D, 22462306a36Sopenharmony_ci /* Link Fault Capability Descriptor */ 22562306a36Sopenharmony_ci ELS_DTAG_CG_SIGNAL_CAP = 0x0001000F, 22662306a36Sopenharmony_ci /* Congestion Signaling Capability Descriptor */ 22762306a36Sopenharmony_ci ELS_DTAG_LNK_INTEGRITY = 0x00020001, 22862306a36Sopenharmony_ci /* Link Integrity Notification Descriptor */ 22962306a36Sopenharmony_ci ELS_DTAG_DELIVERY = 0x00020002, 23062306a36Sopenharmony_ci /* Delivery Notification Descriptor */ 23162306a36Sopenharmony_ci ELS_DTAG_PEER_CONGEST = 0x00020003, 23262306a36Sopenharmony_ci /* Peer Congestion Notification Descriptor */ 23362306a36Sopenharmony_ci ELS_DTAG_CONGESTION = 0x00020004, 23462306a36Sopenharmony_ci /* Congestion Notification Descriptor */ 23562306a36Sopenharmony_ci ELS_DTAG_FPIN_REGISTER = 0x00030001, 23662306a36Sopenharmony_ci /* FPIN Registration Descriptor */ 23762306a36Sopenharmony_ci}; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci/* 24062306a36Sopenharmony_ci * Initializer useful for decoding table. 24162306a36Sopenharmony_ci * Please keep this in sync with the above definitions. 24262306a36Sopenharmony_ci */ 24362306a36Sopenharmony_ci#define FC_LS_TLV_DTAG_INIT { \ 24462306a36Sopenharmony_ci { ELS_DTAG_LS_REQ_INFO, "Link Service Request Information" }, \ 24562306a36Sopenharmony_ci { ELS_DTAG_LNK_FAULT_CAP, "Link Fault Capability" }, \ 24662306a36Sopenharmony_ci { ELS_DTAG_CG_SIGNAL_CAP, "Congestion Signaling Capability" }, \ 24762306a36Sopenharmony_ci { ELS_DTAG_LNK_INTEGRITY, "Link Integrity Notification" }, \ 24862306a36Sopenharmony_ci { ELS_DTAG_DELIVERY, "Delivery Notification Present" }, \ 24962306a36Sopenharmony_ci { ELS_DTAG_PEER_CONGEST, "Peer Congestion Notification" }, \ 25062306a36Sopenharmony_ci { ELS_DTAG_CONGESTION, "Congestion Notification" }, \ 25162306a36Sopenharmony_ci { ELS_DTAG_FPIN_REGISTER, "FPIN Registration" }, \ 25262306a36Sopenharmony_ci} 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci/* 25662306a36Sopenharmony_ci * Generic Link Service TLV Descriptor format 25762306a36Sopenharmony_ci * 25862306a36Sopenharmony_ci * This structure, as it defines no payload, will also be referred to 25962306a36Sopenharmony_ci * as the "tlv header" - which contains the tag and len fields. 26062306a36Sopenharmony_ci */ 26162306a36Sopenharmony_cistruct fc_tlv_desc { 26262306a36Sopenharmony_ci __be32 desc_tag; /* Notification Descriptor Tag */ 26362306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes). 26462306a36Sopenharmony_ci * Size of descriptor excluding 26562306a36Sopenharmony_ci * desc_tag and desc_len fields. 26662306a36Sopenharmony_ci */ 26762306a36Sopenharmony_ci __u8 desc_value[]; /* Descriptor Value */ 26862306a36Sopenharmony_ci}; 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci/* Descriptor tag and len fields are considered the mandatory header 27162306a36Sopenharmony_ci * for a descriptor 27262306a36Sopenharmony_ci */ 27362306a36Sopenharmony_ci#define FC_TLV_DESC_HDR_SZ sizeof(struct fc_tlv_desc) 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci/* 27662306a36Sopenharmony_ci * Macro, used when initializing payloads, to return the descriptor length. 27762306a36Sopenharmony_ci * Length is size of descriptor minus the tag and len fields. 27862306a36Sopenharmony_ci */ 27962306a36Sopenharmony_ci#define FC_TLV_DESC_LENGTH_FROM_SZ(desc) \ 28062306a36Sopenharmony_ci (sizeof(desc) - FC_TLV_DESC_HDR_SZ) 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci/* Macro, used on received payloads, to return the descriptor length */ 28362306a36Sopenharmony_ci#define FC_TLV_DESC_SZ_FROM_LENGTH(tlv) \ 28462306a36Sopenharmony_ci (__be32_to_cpu((tlv)->desc_len) + FC_TLV_DESC_HDR_SZ) 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci/* 28762306a36Sopenharmony_ci * This helper is used to walk descriptors in a descriptor list. 28862306a36Sopenharmony_ci * Given the address of the current descriptor, which minimally contains a 28962306a36Sopenharmony_ci * tag and len field, calculate the address of the next descriptor based 29062306a36Sopenharmony_ci * on the len field. 29162306a36Sopenharmony_ci */ 29262306a36Sopenharmony_cistatic inline void *fc_tlv_next_desc(void *desc) 29362306a36Sopenharmony_ci{ 29462306a36Sopenharmony_ci struct fc_tlv_desc *tlv = desc; 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci return (desc + FC_TLV_DESC_SZ_FROM_LENGTH(tlv)); 29762306a36Sopenharmony_ci} 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci/* 30162306a36Sopenharmony_ci * Link Service Request Information Descriptor 30262306a36Sopenharmony_ci */ 30362306a36Sopenharmony_cistruct fc_els_lsri_desc { 30462306a36Sopenharmony_ci __be32 desc_tag; /* descriptor tag (0x0000 0001) */ 30562306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes) (4). 30662306a36Sopenharmony_ci * Size of descriptor excluding 30762306a36Sopenharmony_ci * desc_tag and desc_len fields. 30862306a36Sopenharmony_ci */ 30962306a36Sopenharmony_ci struct { 31062306a36Sopenharmony_ci __u8 cmd; /* ELS cmd byte */ 31162306a36Sopenharmony_ci __u8 bytes[3]; /* bytes 1..3 */ 31262306a36Sopenharmony_ci } rqst_w0; /* Request word 0 */ 31362306a36Sopenharmony_ci}; 31462306a36Sopenharmony_ci 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci/* 31762306a36Sopenharmony_ci * Common service parameters (N ports). 31862306a36Sopenharmony_ci */ 31962306a36Sopenharmony_cistruct fc_els_csp { 32062306a36Sopenharmony_ci __u8 sp_hi_ver; /* highest version supported (obs.) */ 32162306a36Sopenharmony_ci __u8 sp_lo_ver; /* highest version supported (obs.) */ 32262306a36Sopenharmony_ci __be16 sp_bb_cred; /* buffer-to-buffer credits */ 32362306a36Sopenharmony_ci __be16 sp_features; /* common feature flags */ 32462306a36Sopenharmony_ci __be16 sp_bb_data; /* b-b state number and data field sz */ 32562306a36Sopenharmony_ci union { 32662306a36Sopenharmony_ci struct { 32762306a36Sopenharmony_ci __be16 _sp_tot_seq; /* total concurrent sequences */ 32862306a36Sopenharmony_ci __be16 _sp_rel_off; /* rel. offset by info cat */ 32962306a36Sopenharmony_ci } sp_plogi; 33062306a36Sopenharmony_ci struct { 33162306a36Sopenharmony_ci __be32 _sp_r_a_tov; /* resource alloc. timeout msec */ 33262306a36Sopenharmony_ci } sp_flogi_acc; 33362306a36Sopenharmony_ci } sp_u; 33462306a36Sopenharmony_ci __be32 sp_e_d_tov; /* error detect timeout value */ 33562306a36Sopenharmony_ci}; 33662306a36Sopenharmony_ci#define sp_tot_seq sp_u.sp_plogi._sp_tot_seq 33762306a36Sopenharmony_ci#define sp_rel_off sp_u.sp_plogi._sp_rel_off 33862306a36Sopenharmony_ci#define sp_r_a_tov sp_u.sp_flogi_acc._sp_r_a_tov 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci#define FC_SP_BB_DATA_MASK 0xfff /* mask for data field size in sp_bb_data */ 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ci/* 34362306a36Sopenharmony_ci * Minimum and maximum values for max data field size in service parameters. 34462306a36Sopenharmony_ci */ 34562306a36Sopenharmony_ci#define FC_SP_MIN_MAX_PAYLOAD FC_MIN_MAX_PAYLOAD 34662306a36Sopenharmony_ci#define FC_SP_MAX_MAX_PAYLOAD FC_MAX_PAYLOAD 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci/* 34962306a36Sopenharmony_ci * sp_features 35062306a36Sopenharmony_ci */ 35162306a36Sopenharmony_ci#define FC_SP_FT_NPIV 0x8000 /* multiple N_Port_ID support (FLOGI) */ 35262306a36Sopenharmony_ci#define FC_SP_FT_CIRO 0x8000 /* continuously increasing rel off (PLOGI) */ 35362306a36Sopenharmony_ci#define FC_SP_FT_CLAD 0x8000 /* clean address (in FLOGI LS_ACC) */ 35462306a36Sopenharmony_ci#define FC_SP_FT_RAND 0x4000 /* random relative offset */ 35562306a36Sopenharmony_ci#define FC_SP_FT_VAL 0x2000 /* valid vendor version level */ 35662306a36Sopenharmony_ci#define FC_SP_FT_NPIV_ACC 0x2000 /* NPIV assignment (FLOGI LS_ACC) */ 35762306a36Sopenharmony_ci#define FC_SP_FT_FPORT 0x1000 /* F port (1) vs. N port (0) */ 35862306a36Sopenharmony_ci#define FC_SP_FT_ABB 0x0800 /* alternate BB_credit management */ 35962306a36Sopenharmony_ci#define FC_SP_FT_EDTR 0x0400 /* E_D_TOV Resolution is nanoseconds */ 36062306a36Sopenharmony_ci#define FC_SP_FT_MCAST 0x0200 /* multicast */ 36162306a36Sopenharmony_ci#define FC_SP_FT_BCAST 0x0100 /* broadcast */ 36262306a36Sopenharmony_ci#define FC_SP_FT_HUNT 0x0080 /* hunt group */ 36362306a36Sopenharmony_ci#define FC_SP_FT_SIMP 0x0040 /* dedicated simplex */ 36462306a36Sopenharmony_ci#define FC_SP_FT_SEC 0x0020 /* reserved for security */ 36562306a36Sopenharmony_ci#define FC_SP_FT_CSYN 0x0010 /* clock synch. supported */ 36662306a36Sopenharmony_ci#define FC_SP_FT_RTTOV 0x0008 /* R_T_TOV value 100 uS, else 100 mS */ 36762306a36Sopenharmony_ci#define FC_SP_FT_HALF 0x0004 /* dynamic half duplex */ 36862306a36Sopenharmony_ci#define FC_SP_FT_SEQC 0x0002 /* SEQ_CNT */ 36962306a36Sopenharmony_ci#define FC_SP_FT_PAYL 0x0001 /* FLOGI payload length 256, else 116 */ 37062306a36Sopenharmony_ci 37162306a36Sopenharmony_ci/* 37262306a36Sopenharmony_ci * Class-specific service parameters. 37362306a36Sopenharmony_ci */ 37462306a36Sopenharmony_cistruct fc_els_cssp { 37562306a36Sopenharmony_ci __be16 cp_class; /* class flags */ 37662306a36Sopenharmony_ci __be16 cp_init; /* initiator flags */ 37762306a36Sopenharmony_ci __be16 cp_recip; /* recipient flags */ 37862306a36Sopenharmony_ci __be16 cp_rdfs; /* receive data field size */ 37962306a36Sopenharmony_ci __be16 cp_con_seq; /* concurrent sequences */ 38062306a36Sopenharmony_ci __be16 cp_ee_cred; /* N-port end-to-end credit */ 38162306a36Sopenharmony_ci __u8 cp_resv1; /* reserved */ 38262306a36Sopenharmony_ci __u8 cp_open_seq; /* open sequences per exchange */ 38362306a36Sopenharmony_ci __u8 _cp_resv2[2]; /* reserved */ 38462306a36Sopenharmony_ci}; 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_ci/* 38762306a36Sopenharmony_ci * cp_class flags. 38862306a36Sopenharmony_ci */ 38962306a36Sopenharmony_ci#define FC_CPC_VALID 0x8000 /* class valid */ 39062306a36Sopenharmony_ci#define FC_CPC_IMIX 0x4000 /* intermix mode */ 39162306a36Sopenharmony_ci#define FC_CPC_SEQ 0x0800 /* sequential delivery */ 39262306a36Sopenharmony_ci#define FC_CPC_CAMP 0x0200 /* camp-on */ 39362306a36Sopenharmony_ci#define FC_CPC_PRI 0x0080 /* priority */ 39462306a36Sopenharmony_ci 39562306a36Sopenharmony_ci/* 39662306a36Sopenharmony_ci * cp_init flags. 39762306a36Sopenharmony_ci * (TBD: not all flags defined here). 39862306a36Sopenharmony_ci */ 39962306a36Sopenharmony_ci#define FC_CPI_CSYN 0x0010 /* clock synch. capable */ 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci/* 40262306a36Sopenharmony_ci * cp_recip flags. 40362306a36Sopenharmony_ci */ 40462306a36Sopenharmony_ci#define FC_CPR_CSYN 0x0008 /* clock synch. capable */ 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci/* 40762306a36Sopenharmony_ci * NFC_ELS_FLOGI: Fabric login request. 40862306a36Sopenharmony_ci * NFC_ELS_PLOGI: Port login request (same format). 40962306a36Sopenharmony_ci */ 41062306a36Sopenharmony_cistruct fc_els_flogi { 41162306a36Sopenharmony_ci __u8 fl_cmd; /* command */ 41262306a36Sopenharmony_ci __u8 _fl_resvd[3]; /* must be zero */ 41362306a36Sopenharmony_ci struct fc_els_csp fl_csp; /* common service parameters */ 41462306a36Sopenharmony_ci __be64 fl_wwpn; /* port name */ 41562306a36Sopenharmony_ci __be64 fl_wwnn; /* node name */ 41662306a36Sopenharmony_ci struct fc_els_cssp fl_cssp[4]; /* class 1-4 service parameters */ 41762306a36Sopenharmony_ci __u8 fl_vend[16]; /* vendor version level */ 41862306a36Sopenharmony_ci} __attribute__((__packed__)); 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_ci/* 42162306a36Sopenharmony_ci * Process login service parameter page. 42262306a36Sopenharmony_ci */ 42362306a36Sopenharmony_cistruct fc_els_spp { 42462306a36Sopenharmony_ci __u8 spp_type; /* type code or common service params */ 42562306a36Sopenharmony_ci __u8 spp_type_ext; /* type code extension */ 42662306a36Sopenharmony_ci __u8 spp_flags; 42762306a36Sopenharmony_ci __u8 _spp_resvd; 42862306a36Sopenharmony_ci __be32 spp_orig_pa; /* originator process associator */ 42962306a36Sopenharmony_ci __be32 spp_resp_pa; /* responder process associator */ 43062306a36Sopenharmony_ci __be32 spp_params; /* service parameters */ 43162306a36Sopenharmony_ci}; 43262306a36Sopenharmony_ci 43362306a36Sopenharmony_ci/* 43462306a36Sopenharmony_ci * spp_flags. 43562306a36Sopenharmony_ci */ 43662306a36Sopenharmony_ci#define FC_SPP_OPA_VAL 0x80 /* originator proc. assoc. valid */ 43762306a36Sopenharmony_ci#define FC_SPP_RPA_VAL 0x40 /* responder proc. assoc. valid */ 43862306a36Sopenharmony_ci#define FC_SPP_EST_IMG_PAIR 0x20 /* establish image pair */ 43962306a36Sopenharmony_ci#define FC_SPP_RESP_MASK 0x0f /* mask for response code (below) */ 44062306a36Sopenharmony_ci 44162306a36Sopenharmony_ci/* 44262306a36Sopenharmony_ci * SPP response code in spp_flags - lower 4 bits. 44362306a36Sopenharmony_ci */ 44462306a36Sopenharmony_cienum fc_els_spp_resp { 44562306a36Sopenharmony_ci FC_SPP_RESP_ACK = 1, /* request executed */ 44662306a36Sopenharmony_ci FC_SPP_RESP_RES = 2, /* unable due to lack of resources */ 44762306a36Sopenharmony_ci FC_SPP_RESP_INIT = 3, /* initialization not complete */ 44862306a36Sopenharmony_ci FC_SPP_RESP_NO_PA = 4, /* unknown process associator */ 44962306a36Sopenharmony_ci FC_SPP_RESP_CONF = 5, /* configuration precludes image pair */ 45062306a36Sopenharmony_ci FC_SPP_RESP_COND = 6, /* request completed conditionally */ 45162306a36Sopenharmony_ci FC_SPP_RESP_MULT = 7, /* unable to handle multiple SPPs */ 45262306a36Sopenharmony_ci FC_SPP_RESP_INVL = 8, /* SPP is invalid */ 45362306a36Sopenharmony_ci}; 45462306a36Sopenharmony_ci 45562306a36Sopenharmony_ci/* 45662306a36Sopenharmony_ci * ELS_RRQ - Reinstate Recovery Qualifier 45762306a36Sopenharmony_ci */ 45862306a36Sopenharmony_cistruct fc_els_rrq { 45962306a36Sopenharmony_ci __u8 rrq_cmd; /* command (0x12) */ 46062306a36Sopenharmony_ci __u8 rrq_zero[3]; /* specified as zero - part of cmd */ 46162306a36Sopenharmony_ci __u8 rrq_resvd; /* reserved */ 46262306a36Sopenharmony_ci __u8 rrq_s_id[3]; /* originator FID */ 46362306a36Sopenharmony_ci __be16 rrq_ox_id; /* originator exchange ID */ 46462306a36Sopenharmony_ci __be16 rrq_rx_id; /* responders exchange ID */ 46562306a36Sopenharmony_ci}; 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci/* 46862306a36Sopenharmony_ci * ELS_REC - Read exchange concise. 46962306a36Sopenharmony_ci */ 47062306a36Sopenharmony_cistruct fc_els_rec { 47162306a36Sopenharmony_ci __u8 rec_cmd; /* command (0x13) */ 47262306a36Sopenharmony_ci __u8 rec_zero[3]; /* specified as zero - part of cmd */ 47362306a36Sopenharmony_ci __u8 rec_resvd; /* reserved */ 47462306a36Sopenharmony_ci __u8 rec_s_id[3]; /* originator FID */ 47562306a36Sopenharmony_ci __be16 rec_ox_id; /* originator exchange ID */ 47662306a36Sopenharmony_ci __be16 rec_rx_id; /* responders exchange ID */ 47762306a36Sopenharmony_ci}; 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_ci/* 48062306a36Sopenharmony_ci * ELS_REC LS_ACC payload. 48162306a36Sopenharmony_ci */ 48262306a36Sopenharmony_cistruct fc_els_rec_acc { 48362306a36Sopenharmony_ci __u8 reca_cmd; /* accept (0x02) */ 48462306a36Sopenharmony_ci __u8 reca_zero[3]; /* specified as zero - part of cmd */ 48562306a36Sopenharmony_ci __be16 reca_ox_id; /* originator exchange ID */ 48662306a36Sopenharmony_ci __be16 reca_rx_id; /* responders exchange ID */ 48762306a36Sopenharmony_ci __u8 reca_resvd1; /* reserved */ 48862306a36Sopenharmony_ci __u8 reca_ofid[3]; /* originator FID */ 48962306a36Sopenharmony_ci __u8 reca_resvd2; /* reserved */ 49062306a36Sopenharmony_ci __u8 reca_rfid[3]; /* responder FID */ 49162306a36Sopenharmony_ci __be32 reca_fc4value; /* FC4 value */ 49262306a36Sopenharmony_ci __be32 reca_e_stat; /* ESB (exchange status block) status */ 49362306a36Sopenharmony_ci}; 49462306a36Sopenharmony_ci 49562306a36Sopenharmony_ci/* 49662306a36Sopenharmony_ci * ELS_PRLI - Process login request and response. 49762306a36Sopenharmony_ci */ 49862306a36Sopenharmony_cistruct fc_els_prli { 49962306a36Sopenharmony_ci __u8 prli_cmd; /* command */ 50062306a36Sopenharmony_ci __u8 prli_spp_len; /* length of each serv. parm. page */ 50162306a36Sopenharmony_ci __be16 prli_len; /* length of entire payload */ 50262306a36Sopenharmony_ci /* service parameter pages follow */ 50362306a36Sopenharmony_ci}; 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_ci/* 50662306a36Sopenharmony_ci * ELS_PRLO - Process logout request and response. 50762306a36Sopenharmony_ci */ 50862306a36Sopenharmony_cistruct fc_els_prlo { 50962306a36Sopenharmony_ci __u8 prlo_cmd; /* command */ 51062306a36Sopenharmony_ci __u8 prlo_obs; /* obsolete, but shall be set to 10h */ 51162306a36Sopenharmony_ci __be16 prlo_len; /* payload length */ 51262306a36Sopenharmony_ci}; 51362306a36Sopenharmony_ci 51462306a36Sopenharmony_ci/* 51562306a36Sopenharmony_ci * ELS_ADISC payload 51662306a36Sopenharmony_ci */ 51762306a36Sopenharmony_cistruct fc_els_adisc { 51862306a36Sopenharmony_ci __u8 adisc_cmd; 51962306a36Sopenharmony_ci __u8 adisc_resv[3]; 52062306a36Sopenharmony_ci __u8 adisc_resv1; 52162306a36Sopenharmony_ci __u8 adisc_hard_addr[3]; 52262306a36Sopenharmony_ci __be64 adisc_wwpn; 52362306a36Sopenharmony_ci __be64 adisc_wwnn; 52462306a36Sopenharmony_ci __u8 adisc_resv2; 52562306a36Sopenharmony_ci __u8 adisc_port_id[3]; 52662306a36Sopenharmony_ci} __attribute__((__packed__)); 52762306a36Sopenharmony_ci 52862306a36Sopenharmony_ci/* 52962306a36Sopenharmony_ci * ELS_LOGO - process or fabric logout. 53062306a36Sopenharmony_ci */ 53162306a36Sopenharmony_cistruct fc_els_logo { 53262306a36Sopenharmony_ci __u8 fl_cmd; /* command code */ 53362306a36Sopenharmony_ci __u8 fl_zero[3]; /* specified as zero - part of cmd */ 53462306a36Sopenharmony_ci __u8 fl_resvd; /* reserved */ 53562306a36Sopenharmony_ci __u8 fl_n_port_id[3];/* N port ID */ 53662306a36Sopenharmony_ci __be64 fl_n_port_wwn; /* port name */ 53762306a36Sopenharmony_ci}; 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_ci/* 54062306a36Sopenharmony_ci * ELS_RTV - read timeout value. 54162306a36Sopenharmony_ci */ 54262306a36Sopenharmony_cistruct fc_els_rtv { 54362306a36Sopenharmony_ci __u8 rtv_cmd; /* command code 0x0e */ 54462306a36Sopenharmony_ci __u8 rtv_zero[3]; /* specified as zero - part of cmd */ 54562306a36Sopenharmony_ci}; 54662306a36Sopenharmony_ci 54762306a36Sopenharmony_ci/* 54862306a36Sopenharmony_ci * LS_ACC for ELS_RTV - read timeout value. 54962306a36Sopenharmony_ci */ 55062306a36Sopenharmony_cistruct fc_els_rtv_acc { 55162306a36Sopenharmony_ci __u8 rtv_cmd; /* command code 0x02 */ 55262306a36Sopenharmony_ci __u8 rtv_zero[3]; /* specified as zero - part of cmd */ 55362306a36Sopenharmony_ci __be32 rtv_r_a_tov; /* resource allocation timeout value */ 55462306a36Sopenharmony_ci __be32 rtv_e_d_tov; /* error detection timeout value */ 55562306a36Sopenharmony_ci __be32 rtv_toq; /* timeout qualifier (see below) */ 55662306a36Sopenharmony_ci}; 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_ci/* 55962306a36Sopenharmony_ci * rtv_toq bits. 56062306a36Sopenharmony_ci */ 56162306a36Sopenharmony_ci#define FC_ELS_RTV_EDRES (1 << 26) /* E_D_TOV resolution is nS else mS */ 56262306a36Sopenharmony_ci#define FC_ELS_RTV_RTTOV (1 << 19) /* R_T_TOV is 100 uS else 100 mS */ 56362306a36Sopenharmony_ci 56462306a36Sopenharmony_ci/* 56562306a36Sopenharmony_ci * ELS_SCR - state change registration payload. 56662306a36Sopenharmony_ci */ 56762306a36Sopenharmony_cistruct fc_els_scr { 56862306a36Sopenharmony_ci __u8 scr_cmd; /* command code */ 56962306a36Sopenharmony_ci __u8 scr_resv[6]; /* reserved */ 57062306a36Sopenharmony_ci __u8 scr_reg_func; /* registration function (see below) */ 57162306a36Sopenharmony_ci}; 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_cienum fc_els_scr_func { 57462306a36Sopenharmony_ci ELS_SCRF_FAB = 1, /* fabric-detected registration */ 57562306a36Sopenharmony_ci ELS_SCRF_NPORT = 2, /* Nx_Port-detected registration */ 57662306a36Sopenharmony_ci ELS_SCRF_FULL = 3, /* full registration */ 57762306a36Sopenharmony_ci ELS_SCRF_CLEAR = 255, /* remove any current registrations */ 57862306a36Sopenharmony_ci}; 57962306a36Sopenharmony_ci 58062306a36Sopenharmony_ci/* 58162306a36Sopenharmony_ci * ELS_RSCN - registered state change notification payload. 58262306a36Sopenharmony_ci */ 58362306a36Sopenharmony_cistruct fc_els_rscn { 58462306a36Sopenharmony_ci __u8 rscn_cmd; /* RSCN opcode (0x61) */ 58562306a36Sopenharmony_ci __u8 rscn_page_len; /* page length (4) */ 58662306a36Sopenharmony_ci __be16 rscn_plen; /* payload length including this word */ 58762306a36Sopenharmony_ci 58862306a36Sopenharmony_ci /* followed by 4-byte generic affected Port_ID pages */ 58962306a36Sopenharmony_ci}; 59062306a36Sopenharmony_ci 59162306a36Sopenharmony_cistruct fc_els_rscn_page { 59262306a36Sopenharmony_ci __u8 rscn_page_flags; /* event and address format */ 59362306a36Sopenharmony_ci __u8 rscn_fid[3]; /* fabric ID */ 59462306a36Sopenharmony_ci}; 59562306a36Sopenharmony_ci 59662306a36Sopenharmony_ci#define ELS_RSCN_EV_QUAL_BIT 2 /* shift count for event qualifier */ 59762306a36Sopenharmony_ci#define ELS_RSCN_EV_QUAL_MASK 0xf /* mask for event qualifier */ 59862306a36Sopenharmony_ci#define ELS_RSCN_ADDR_FMT_BIT 0 /* shift count for address format */ 59962306a36Sopenharmony_ci#define ELS_RSCN_ADDR_FMT_MASK 0x3 /* mask for address format */ 60062306a36Sopenharmony_ci 60162306a36Sopenharmony_cienum fc_els_rscn_ev_qual { 60262306a36Sopenharmony_ci ELS_EV_QUAL_NONE = 0, /* unspecified */ 60362306a36Sopenharmony_ci ELS_EV_QUAL_NS_OBJ = 1, /* changed name server object */ 60462306a36Sopenharmony_ci ELS_EV_QUAL_PORT_ATTR = 2, /* changed port attribute */ 60562306a36Sopenharmony_ci ELS_EV_QUAL_SERV_OBJ = 3, /* changed service object */ 60662306a36Sopenharmony_ci ELS_EV_QUAL_SW_CONFIG = 4, /* changed switch configuration */ 60762306a36Sopenharmony_ci ELS_EV_QUAL_REM_OBJ = 5, /* removed object */ 60862306a36Sopenharmony_ci}; 60962306a36Sopenharmony_ci 61062306a36Sopenharmony_cienum fc_els_rscn_addr_fmt { 61162306a36Sopenharmony_ci ELS_ADDR_FMT_PORT = 0, /* rscn_fid is a port address */ 61262306a36Sopenharmony_ci ELS_ADDR_FMT_AREA = 1, /* rscn_fid is a area address */ 61362306a36Sopenharmony_ci ELS_ADDR_FMT_DOM = 2, /* rscn_fid is a domain address */ 61462306a36Sopenharmony_ci ELS_ADDR_FMT_FAB = 3, /* anything on fabric may have changed */ 61562306a36Sopenharmony_ci}; 61662306a36Sopenharmony_ci 61762306a36Sopenharmony_ci/* 61862306a36Sopenharmony_ci * ELS_RNID - request Node ID. 61962306a36Sopenharmony_ci */ 62062306a36Sopenharmony_cistruct fc_els_rnid { 62162306a36Sopenharmony_ci __u8 rnid_cmd; /* RNID opcode (0x78) */ 62262306a36Sopenharmony_ci __u8 rnid_resv[3]; /* reserved */ 62362306a36Sopenharmony_ci __u8 rnid_fmt; /* data format */ 62462306a36Sopenharmony_ci __u8 rnid_resv2[3]; /* reserved */ 62562306a36Sopenharmony_ci}; 62662306a36Sopenharmony_ci 62762306a36Sopenharmony_ci/* 62862306a36Sopenharmony_ci * Node Identification Data formats (rnid_fmt) 62962306a36Sopenharmony_ci */ 63062306a36Sopenharmony_cienum fc_els_rnid_fmt { 63162306a36Sopenharmony_ci ELS_RNIDF_NONE = 0, /* no specific identification data */ 63262306a36Sopenharmony_ci ELS_RNIDF_GEN = 0xdf, /* general topology discovery format */ 63362306a36Sopenharmony_ci}; 63462306a36Sopenharmony_ci 63562306a36Sopenharmony_ci/* 63662306a36Sopenharmony_ci * ELS_RNID response. 63762306a36Sopenharmony_ci */ 63862306a36Sopenharmony_cistruct fc_els_rnid_resp { 63962306a36Sopenharmony_ci __u8 rnid_cmd; /* response code (LS_ACC) */ 64062306a36Sopenharmony_ci __u8 rnid_resv[3]; /* reserved */ 64162306a36Sopenharmony_ci __u8 rnid_fmt; /* data format */ 64262306a36Sopenharmony_ci __u8 rnid_cid_len; /* common ID data length */ 64362306a36Sopenharmony_ci __u8 rnid_resv2; /* reserved */ 64462306a36Sopenharmony_ci __u8 rnid_sid_len; /* specific ID data length */ 64562306a36Sopenharmony_ci}; 64662306a36Sopenharmony_ci 64762306a36Sopenharmony_cistruct fc_els_rnid_cid { 64862306a36Sopenharmony_ci __be64 rnid_wwpn; /* N port name */ 64962306a36Sopenharmony_ci __be64 rnid_wwnn; /* node name */ 65062306a36Sopenharmony_ci}; 65162306a36Sopenharmony_ci 65262306a36Sopenharmony_cistruct fc_els_rnid_gen { 65362306a36Sopenharmony_ci __u8 rnid_vend_id[16]; /* vendor-unique ID */ 65462306a36Sopenharmony_ci __be32 rnid_atype; /* associated type (see below) */ 65562306a36Sopenharmony_ci __be32 rnid_phys_port; /* physical port number */ 65662306a36Sopenharmony_ci __be32 rnid_att_nodes; /* number of attached nodes */ 65762306a36Sopenharmony_ci __u8 rnid_node_mgmt; /* node management (see below) */ 65862306a36Sopenharmony_ci __u8 rnid_ip_ver; /* IP version (see below) */ 65962306a36Sopenharmony_ci __be16 rnid_prot_port; /* UDP / TCP port number */ 66062306a36Sopenharmony_ci __be32 rnid_ip_addr[4]; /* IP address */ 66162306a36Sopenharmony_ci __u8 rnid_resvd[2]; /* reserved */ 66262306a36Sopenharmony_ci __be16 rnid_vend_spec; /* vendor-specific field */ 66362306a36Sopenharmony_ci}; 66462306a36Sopenharmony_ci 66562306a36Sopenharmony_cienum fc_els_rnid_atype { 66662306a36Sopenharmony_ci ELS_RNIDA_UNK = 0x01, /* unknown */ 66762306a36Sopenharmony_ci ELS_RNIDA_OTHER = 0x02, /* none of the following */ 66862306a36Sopenharmony_ci ELS_RNIDA_HUB = 0x03, 66962306a36Sopenharmony_ci ELS_RNIDA_SWITCH = 0x04, 67062306a36Sopenharmony_ci ELS_RNIDA_GATEWAY = 0x05, 67162306a36Sopenharmony_ci ELS_RNIDA_CONV = 0x06, /* Obsolete, do not use this value */ 67262306a36Sopenharmony_ci ELS_RNIDA_HBA = 0x07, /* Obsolete, do not use this value */ 67362306a36Sopenharmony_ci ELS_RNIDA_PROXY = 0x08, /* Obsolete, do not use this value */ 67462306a36Sopenharmony_ci ELS_RNIDA_STORAGE = 0x09, 67562306a36Sopenharmony_ci ELS_RNIDA_HOST = 0x0a, 67662306a36Sopenharmony_ci ELS_RNIDA_SUBSYS = 0x0b, /* storage subsystem (e.g., RAID) */ 67762306a36Sopenharmony_ci ELS_RNIDA_ACCESS = 0x0e, /* access device (e.g. media changer) */ 67862306a36Sopenharmony_ci ELS_RNIDA_NAS = 0x11, /* NAS server */ 67962306a36Sopenharmony_ci ELS_RNIDA_BRIDGE = 0x12, /* bridge */ 68062306a36Sopenharmony_ci ELS_RNIDA_VIRT = 0x13, /* virtualization device */ 68162306a36Sopenharmony_ci ELS_RNIDA_MF = 0xff, /* multifunction device (bits below) */ 68262306a36Sopenharmony_ci ELS_RNIDA_MF_HUB = 1UL << 31, /* hub */ 68362306a36Sopenharmony_ci ELS_RNIDA_MF_SW = 1UL << 30, /* switch */ 68462306a36Sopenharmony_ci ELS_RNIDA_MF_GW = 1UL << 29, /* gateway */ 68562306a36Sopenharmony_ci ELS_RNIDA_MF_ST = 1UL << 28, /* storage */ 68662306a36Sopenharmony_ci ELS_RNIDA_MF_HOST = 1UL << 27, /* host */ 68762306a36Sopenharmony_ci ELS_RNIDA_MF_SUB = 1UL << 26, /* storage subsystem */ 68862306a36Sopenharmony_ci ELS_RNIDA_MF_ACC = 1UL << 25, /* storage access dev */ 68962306a36Sopenharmony_ci ELS_RNIDA_MF_WDM = 1UL << 24, /* wavelength division mux */ 69062306a36Sopenharmony_ci ELS_RNIDA_MF_NAS = 1UL << 23, /* NAS server */ 69162306a36Sopenharmony_ci ELS_RNIDA_MF_BR = 1UL << 22, /* bridge */ 69262306a36Sopenharmony_ci ELS_RNIDA_MF_VIRT = 1UL << 21, /* virtualization device */ 69362306a36Sopenharmony_ci}; 69462306a36Sopenharmony_ci 69562306a36Sopenharmony_cienum fc_els_rnid_mgmt { 69662306a36Sopenharmony_ci ELS_RNIDM_SNMP = 0, 69762306a36Sopenharmony_ci ELS_RNIDM_TELNET = 1, 69862306a36Sopenharmony_ci ELS_RNIDM_HTTP = 2, 69962306a36Sopenharmony_ci ELS_RNIDM_HTTPS = 3, 70062306a36Sopenharmony_ci ELS_RNIDM_XML = 4, /* HTTP + XML */ 70162306a36Sopenharmony_ci}; 70262306a36Sopenharmony_ci 70362306a36Sopenharmony_cienum fc_els_rnid_ipver { 70462306a36Sopenharmony_ci ELS_RNIDIP_NONE = 0, /* no IP support or node mgmt. */ 70562306a36Sopenharmony_ci ELS_RNIDIP_V4 = 1, /* IPv4 */ 70662306a36Sopenharmony_ci ELS_RNIDIP_V6 = 2, /* IPv6 */ 70762306a36Sopenharmony_ci}; 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci/* 71062306a36Sopenharmony_ci * ELS RPL - Read Port List. 71162306a36Sopenharmony_ci */ 71262306a36Sopenharmony_cistruct fc_els_rpl { 71362306a36Sopenharmony_ci __u8 rpl_cmd; /* command */ 71462306a36Sopenharmony_ci __u8 rpl_resv[5]; /* reserved - must be zero */ 71562306a36Sopenharmony_ci __be16 rpl_max_size; /* maximum response size or zero */ 71662306a36Sopenharmony_ci __u8 rpl_resv1; /* reserved - must be zero */ 71762306a36Sopenharmony_ci __u8 rpl_index[3]; /* starting index */ 71862306a36Sopenharmony_ci}; 71962306a36Sopenharmony_ci 72062306a36Sopenharmony_ci/* 72162306a36Sopenharmony_ci * Port number block in RPL response. 72262306a36Sopenharmony_ci */ 72362306a36Sopenharmony_cistruct fc_els_pnb { 72462306a36Sopenharmony_ci __be32 pnb_phys_pn; /* physical port number */ 72562306a36Sopenharmony_ci __u8 pnb_resv; /* reserved */ 72662306a36Sopenharmony_ci __u8 pnb_port_id[3]; /* port ID */ 72762306a36Sopenharmony_ci __be64 pnb_wwpn; /* port name */ 72862306a36Sopenharmony_ci}; 72962306a36Sopenharmony_ci 73062306a36Sopenharmony_ci/* 73162306a36Sopenharmony_ci * RPL LS_ACC response. 73262306a36Sopenharmony_ci */ 73362306a36Sopenharmony_cistruct fc_els_rpl_resp { 73462306a36Sopenharmony_ci __u8 rpl_cmd; /* ELS_LS_ACC */ 73562306a36Sopenharmony_ci __u8 rpl_resv1; /* reserved - must be zero */ 73662306a36Sopenharmony_ci __be16 rpl_plen; /* payload length */ 73762306a36Sopenharmony_ci __u8 rpl_resv2; /* reserved - must be zero */ 73862306a36Sopenharmony_ci __u8 rpl_llen[3]; /* list length */ 73962306a36Sopenharmony_ci __u8 rpl_resv3; /* reserved - must be zero */ 74062306a36Sopenharmony_ci __u8 rpl_index[3]; /* starting index */ 74162306a36Sopenharmony_ci struct fc_els_pnb rpl_pnb[1]; /* variable number of PNBs */ 74262306a36Sopenharmony_ci}; 74362306a36Sopenharmony_ci 74462306a36Sopenharmony_ci/* 74562306a36Sopenharmony_ci * Link Error Status Block. 74662306a36Sopenharmony_ci */ 74762306a36Sopenharmony_cistruct fc_els_lesb { 74862306a36Sopenharmony_ci __be32 lesb_link_fail; /* link failure count */ 74962306a36Sopenharmony_ci __be32 lesb_sync_loss; /* loss of synchronization count */ 75062306a36Sopenharmony_ci __be32 lesb_sig_loss; /* loss of signal count */ 75162306a36Sopenharmony_ci __be32 lesb_prim_err; /* primitive sequence error count */ 75262306a36Sopenharmony_ci __be32 lesb_inv_word; /* invalid transmission word count */ 75362306a36Sopenharmony_ci __be32 lesb_inv_crc; /* invalid CRC count */ 75462306a36Sopenharmony_ci}; 75562306a36Sopenharmony_ci 75662306a36Sopenharmony_ci/* 75762306a36Sopenharmony_ci * ELS RPS - Read Port Status Block request. 75862306a36Sopenharmony_ci */ 75962306a36Sopenharmony_cistruct fc_els_rps { 76062306a36Sopenharmony_ci __u8 rps_cmd; /* command */ 76162306a36Sopenharmony_ci __u8 rps_resv[2]; /* reserved - must be zero */ 76262306a36Sopenharmony_ci __u8 rps_flag; /* flag - see below */ 76362306a36Sopenharmony_ci __be64 rps_port_spec; /* port selection */ 76462306a36Sopenharmony_ci}; 76562306a36Sopenharmony_ci 76662306a36Sopenharmony_cienum fc_els_rps_flag { 76762306a36Sopenharmony_ci FC_ELS_RPS_DID = 0x00, /* port identified by D_ID of req. */ 76862306a36Sopenharmony_ci FC_ELS_RPS_PPN = 0x01, /* port_spec is physical port number */ 76962306a36Sopenharmony_ci FC_ELS_RPS_WWPN = 0x02, /* port_spec is port WWN */ 77062306a36Sopenharmony_ci}; 77162306a36Sopenharmony_ci 77262306a36Sopenharmony_ci/* 77362306a36Sopenharmony_ci * ELS RPS LS_ACC response. 77462306a36Sopenharmony_ci */ 77562306a36Sopenharmony_cistruct fc_els_rps_resp { 77662306a36Sopenharmony_ci __u8 rps_cmd; /* command - LS_ACC */ 77762306a36Sopenharmony_ci __u8 rps_resv[2]; /* reserved - must be zero */ 77862306a36Sopenharmony_ci __u8 rps_flag; /* flag - see below */ 77962306a36Sopenharmony_ci __u8 rps_resv2[2]; /* reserved */ 78062306a36Sopenharmony_ci __be16 rps_status; /* port status - see below */ 78162306a36Sopenharmony_ci struct fc_els_lesb rps_lesb; /* link error status block */ 78262306a36Sopenharmony_ci}; 78362306a36Sopenharmony_ci 78462306a36Sopenharmony_cienum fc_els_rps_resp_flag { 78562306a36Sopenharmony_ci FC_ELS_RPS_LPEV = 0x01, /* L_port extension valid */ 78662306a36Sopenharmony_ci}; 78762306a36Sopenharmony_ci 78862306a36Sopenharmony_cienum fc_els_rps_resp_status { 78962306a36Sopenharmony_ci FC_ELS_RPS_PTP = 1 << 5, /* point-to-point connection */ 79062306a36Sopenharmony_ci FC_ELS_RPS_LOOP = 1 << 4, /* loop mode */ 79162306a36Sopenharmony_ci FC_ELS_RPS_FAB = 1 << 3, /* fabric present */ 79262306a36Sopenharmony_ci FC_ELS_RPS_NO_SIG = 1 << 2, /* loss of signal */ 79362306a36Sopenharmony_ci FC_ELS_RPS_NO_SYNC = 1 << 1, /* loss of synchronization */ 79462306a36Sopenharmony_ci FC_ELS_RPS_RESET = 1 << 0, /* in link reset protocol */ 79562306a36Sopenharmony_ci}; 79662306a36Sopenharmony_ci 79762306a36Sopenharmony_ci/* 79862306a36Sopenharmony_ci * ELS LIRR - Link Incident Record Registration request. 79962306a36Sopenharmony_ci */ 80062306a36Sopenharmony_cistruct fc_els_lirr { 80162306a36Sopenharmony_ci __u8 lirr_cmd; /* command */ 80262306a36Sopenharmony_ci __u8 lirr_resv[3]; /* reserved - must be zero */ 80362306a36Sopenharmony_ci __u8 lirr_func; /* registration function */ 80462306a36Sopenharmony_ci __u8 lirr_fmt; /* FC-4 type of RLIR requested */ 80562306a36Sopenharmony_ci __u8 lirr_resv2[2]; /* reserved - must be zero */ 80662306a36Sopenharmony_ci}; 80762306a36Sopenharmony_ci 80862306a36Sopenharmony_cienum fc_els_lirr_func { 80962306a36Sopenharmony_ci ELS_LIRR_SET_COND = 0x01, /* set - conditionally receive */ 81062306a36Sopenharmony_ci ELS_LIRR_SET_UNCOND = 0x02, /* set - unconditionally receive */ 81162306a36Sopenharmony_ci ELS_LIRR_CLEAR = 0xff /* clear registration */ 81262306a36Sopenharmony_ci}; 81362306a36Sopenharmony_ci 81462306a36Sopenharmony_ci/* 81562306a36Sopenharmony_ci * ELS SRL - Scan Remote Loop request. 81662306a36Sopenharmony_ci */ 81762306a36Sopenharmony_cistruct fc_els_srl { 81862306a36Sopenharmony_ci __u8 srl_cmd; /* command */ 81962306a36Sopenharmony_ci __u8 srl_resv[3]; /* reserved - must be zero */ 82062306a36Sopenharmony_ci __u8 srl_flag; /* flag - see below */ 82162306a36Sopenharmony_ci __u8 srl_flag_param[3]; /* flag parameter */ 82262306a36Sopenharmony_ci}; 82362306a36Sopenharmony_ci 82462306a36Sopenharmony_cienum fc_els_srl_flag { 82562306a36Sopenharmony_ci FC_ELS_SRL_ALL = 0x00, /* scan all FL ports */ 82662306a36Sopenharmony_ci FC_ELS_SRL_ONE = 0x01, /* scan specified loop */ 82762306a36Sopenharmony_ci FC_ELS_SRL_EN_PER = 0x02, /* enable periodic scanning (param) */ 82862306a36Sopenharmony_ci FC_ELS_SRL_DIS_PER = 0x03, /* disable periodic scanning */ 82962306a36Sopenharmony_ci}; 83062306a36Sopenharmony_ci 83162306a36Sopenharmony_ci/* 83262306a36Sopenharmony_ci * ELS RLS - Read Link Error Status Block request. 83362306a36Sopenharmony_ci */ 83462306a36Sopenharmony_cistruct fc_els_rls { 83562306a36Sopenharmony_ci __u8 rls_cmd; /* command */ 83662306a36Sopenharmony_ci __u8 rls_resv[4]; /* reserved - must be zero */ 83762306a36Sopenharmony_ci __u8 rls_port_id[3]; /* port ID */ 83862306a36Sopenharmony_ci}; 83962306a36Sopenharmony_ci 84062306a36Sopenharmony_ci/* 84162306a36Sopenharmony_ci * ELS RLS LS_ACC Response. 84262306a36Sopenharmony_ci */ 84362306a36Sopenharmony_cistruct fc_els_rls_resp { 84462306a36Sopenharmony_ci __u8 rls_cmd; /* ELS_LS_ACC */ 84562306a36Sopenharmony_ci __u8 rls_resv[3]; /* reserved - must be zero */ 84662306a36Sopenharmony_ci struct fc_els_lesb rls_lesb; /* link error status block */ 84762306a36Sopenharmony_ci}; 84862306a36Sopenharmony_ci 84962306a36Sopenharmony_ci/* 85062306a36Sopenharmony_ci * ELS RLIR - Registered Link Incident Report. 85162306a36Sopenharmony_ci * This is followed by the CLIR and the CLID, described below. 85262306a36Sopenharmony_ci */ 85362306a36Sopenharmony_cistruct fc_els_rlir { 85462306a36Sopenharmony_ci __u8 rlir_cmd; /* command */ 85562306a36Sopenharmony_ci __u8 rlir_resv[3]; /* reserved - must be zero */ 85662306a36Sopenharmony_ci __u8 rlir_fmt; /* format (FC4-type if type specific) */ 85762306a36Sopenharmony_ci __u8 rlir_clr_len; /* common link incident record length */ 85862306a36Sopenharmony_ci __u8 rlir_cld_len; /* common link incident desc. length */ 85962306a36Sopenharmony_ci __u8 rlir_slr_len; /* spec. link incident record length */ 86062306a36Sopenharmony_ci}; 86162306a36Sopenharmony_ci 86262306a36Sopenharmony_ci/* 86362306a36Sopenharmony_ci * CLIR - Common Link Incident Record Data. - Sent via RLIR. 86462306a36Sopenharmony_ci */ 86562306a36Sopenharmony_cistruct fc_els_clir { 86662306a36Sopenharmony_ci __be64 clir_wwpn; /* incident port name */ 86762306a36Sopenharmony_ci __be64 clir_wwnn; /* incident port node name */ 86862306a36Sopenharmony_ci __u8 clir_port_type; /* incident port type */ 86962306a36Sopenharmony_ci __u8 clir_port_id[3]; /* incident port ID */ 87062306a36Sopenharmony_ci 87162306a36Sopenharmony_ci __be64 clir_conn_wwpn; /* connected port name */ 87262306a36Sopenharmony_ci __be64 clir_conn_wwnn; /* connected node name */ 87362306a36Sopenharmony_ci __be64 clir_fab_name; /* fabric name */ 87462306a36Sopenharmony_ci __be32 clir_phys_port; /* physical port number */ 87562306a36Sopenharmony_ci __be32 clir_trans_id; /* transaction ID */ 87662306a36Sopenharmony_ci __u8 clir_resv[3]; /* reserved */ 87762306a36Sopenharmony_ci __u8 clir_ts_fmt; /* time stamp format */ 87862306a36Sopenharmony_ci __be64 clir_timestamp; /* time stamp */ 87962306a36Sopenharmony_ci}; 88062306a36Sopenharmony_ci 88162306a36Sopenharmony_ci/* 88262306a36Sopenharmony_ci * CLIR clir_ts_fmt - time stamp format values. 88362306a36Sopenharmony_ci */ 88462306a36Sopenharmony_cienum fc_els_clir_ts_fmt { 88562306a36Sopenharmony_ci ELS_CLIR_TS_UNKNOWN = 0, /* time stamp field unknown */ 88662306a36Sopenharmony_ci ELS_CLIR_TS_SEC_FRAC = 1, /* time in seconds and fractions */ 88762306a36Sopenharmony_ci ELS_CLIR_TS_CSU = 2, /* time in clock synch update format */ 88862306a36Sopenharmony_ci}; 88962306a36Sopenharmony_ci 89062306a36Sopenharmony_ci/* 89162306a36Sopenharmony_ci * Common Link Incident Descriptor - sent via RLIR. 89262306a36Sopenharmony_ci */ 89362306a36Sopenharmony_cistruct fc_els_clid { 89462306a36Sopenharmony_ci __u8 clid_iq; /* incident qualifier flags */ 89562306a36Sopenharmony_ci __u8 clid_ic; /* incident code */ 89662306a36Sopenharmony_ci __be16 clid_epai; /* domain/area of ISL */ 89762306a36Sopenharmony_ci}; 89862306a36Sopenharmony_ci 89962306a36Sopenharmony_ci/* 90062306a36Sopenharmony_ci * CLID incident qualifier flags. 90162306a36Sopenharmony_ci */ 90262306a36Sopenharmony_cienum fc_els_clid_iq { 90362306a36Sopenharmony_ci ELS_CLID_SWITCH = 0x20, /* incident port is a switch node */ 90462306a36Sopenharmony_ci ELS_CLID_E_PORT = 0x10, /* incident is an ISL (E) port */ 90562306a36Sopenharmony_ci ELS_CLID_SEV_MASK = 0x0c, /* severity 2-bit field mask */ 90662306a36Sopenharmony_ci ELS_CLID_SEV_INFO = 0x00, /* report is informational */ 90762306a36Sopenharmony_ci ELS_CLID_SEV_INOP = 0x08, /* link not operational */ 90862306a36Sopenharmony_ci ELS_CLID_SEV_DEG = 0x04, /* link degraded but operational */ 90962306a36Sopenharmony_ci ELS_CLID_LASER = 0x02, /* subassembly is a laser */ 91062306a36Sopenharmony_ci ELS_CLID_FRU = 0x01, /* format can identify a FRU */ 91162306a36Sopenharmony_ci}; 91262306a36Sopenharmony_ci 91362306a36Sopenharmony_ci/* 91462306a36Sopenharmony_ci * CLID incident code. 91562306a36Sopenharmony_ci */ 91662306a36Sopenharmony_cienum fc_els_clid_ic { 91762306a36Sopenharmony_ci ELS_CLID_IC_IMPL = 1, /* implicit incident */ 91862306a36Sopenharmony_ci ELS_CLID_IC_BER = 2, /* bit-error-rate threshold exceeded */ 91962306a36Sopenharmony_ci ELS_CLID_IC_LOS = 3, /* loss of synch or signal */ 92062306a36Sopenharmony_ci ELS_CLID_IC_NOS = 4, /* non-operational primitive sequence */ 92162306a36Sopenharmony_ci ELS_CLID_IC_PST = 5, /* primitive sequence timeout */ 92262306a36Sopenharmony_ci ELS_CLID_IC_INVAL = 6, /* invalid primitive sequence */ 92362306a36Sopenharmony_ci ELS_CLID_IC_LOOP_TO = 7, /* loop initialization time out */ 92462306a36Sopenharmony_ci ELS_CLID_IC_LIP = 8, /* receiving LIP */ 92562306a36Sopenharmony_ci}; 92662306a36Sopenharmony_ci 92762306a36Sopenharmony_ci/* 92862306a36Sopenharmony_ci * Link Integrity event types 92962306a36Sopenharmony_ci */ 93062306a36Sopenharmony_cienum fc_fpin_li_event_types { 93162306a36Sopenharmony_ci FPIN_LI_UNKNOWN = 0x0, 93262306a36Sopenharmony_ci FPIN_LI_LINK_FAILURE = 0x1, 93362306a36Sopenharmony_ci FPIN_LI_LOSS_OF_SYNC = 0x2, 93462306a36Sopenharmony_ci FPIN_LI_LOSS_OF_SIG = 0x3, 93562306a36Sopenharmony_ci FPIN_LI_PRIM_SEQ_ERR = 0x4, 93662306a36Sopenharmony_ci FPIN_LI_INVALID_TX_WD = 0x5, 93762306a36Sopenharmony_ci FPIN_LI_INVALID_CRC = 0x6, 93862306a36Sopenharmony_ci FPIN_LI_DEVICE_SPEC = 0xF, 93962306a36Sopenharmony_ci}; 94062306a36Sopenharmony_ci 94162306a36Sopenharmony_ci/* 94262306a36Sopenharmony_ci * Initializer useful for decoding table. 94362306a36Sopenharmony_ci * Please keep this in sync with the above definitions. 94462306a36Sopenharmony_ci */ 94562306a36Sopenharmony_ci#define FC_FPIN_LI_EVT_TYPES_INIT { \ 94662306a36Sopenharmony_ci { FPIN_LI_UNKNOWN, "Unknown" }, \ 94762306a36Sopenharmony_ci { FPIN_LI_LINK_FAILURE, "Link Failure" }, \ 94862306a36Sopenharmony_ci { FPIN_LI_LOSS_OF_SYNC, "Loss of Synchronization" }, \ 94962306a36Sopenharmony_ci { FPIN_LI_LOSS_OF_SIG, "Loss of Signal" }, \ 95062306a36Sopenharmony_ci { FPIN_LI_PRIM_SEQ_ERR, "Primitive Sequence Protocol Error" }, \ 95162306a36Sopenharmony_ci { FPIN_LI_INVALID_TX_WD, "Invalid Transmission Word" }, \ 95262306a36Sopenharmony_ci { FPIN_LI_INVALID_CRC, "Invalid CRC" }, \ 95362306a36Sopenharmony_ci { FPIN_LI_DEVICE_SPEC, "Device Specific" }, \ 95462306a36Sopenharmony_ci} 95562306a36Sopenharmony_ci 95662306a36Sopenharmony_ci/* 95762306a36Sopenharmony_ci * Delivery event types 95862306a36Sopenharmony_ci */ 95962306a36Sopenharmony_cienum fc_fpin_deli_event_types { 96062306a36Sopenharmony_ci FPIN_DELI_UNKNOWN = 0x0, 96162306a36Sopenharmony_ci FPIN_DELI_TIMEOUT = 0x1, 96262306a36Sopenharmony_ci FPIN_DELI_UNABLE_TO_ROUTE = 0x2, 96362306a36Sopenharmony_ci FPIN_DELI_DEVICE_SPEC = 0xF, 96462306a36Sopenharmony_ci}; 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_ci/* 96762306a36Sopenharmony_ci * Initializer useful for decoding table. 96862306a36Sopenharmony_ci * Please keep this in sync with the above definitions. 96962306a36Sopenharmony_ci */ 97062306a36Sopenharmony_ci#define FC_FPIN_DELI_EVT_TYPES_INIT { \ 97162306a36Sopenharmony_ci { FPIN_DELI_UNKNOWN, "Unknown" }, \ 97262306a36Sopenharmony_ci { FPIN_DELI_TIMEOUT, "Timeout" }, \ 97362306a36Sopenharmony_ci { FPIN_DELI_UNABLE_TO_ROUTE, "Unable to Route" }, \ 97462306a36Sopenharmony_ci { FPIN_DELI_DEVICE_SPEC, "Device Specific" }, \ 97562306a36Sopenharmony_ci} 97662306a36Sopenharmony_ci 97762306a36Sopenharmony_ci/* 97862306a36Sopenharmony_ci * Congestion event types 97962306a36Sopenharmony_ci */ 98062306a36Sopenharmony_cienum fc_fpin_congn_event_types { 98162306a36Sopenharmony_ci FPIN_CONGN_CLEAR = 0x0, 98262306a36Sopenharmony_ci FPIN_CONGN_LOST_CREDIT = 0x1, 98362306a36Sopenharmony_ci FPIN_CONGN_CREDIT_STALL = 0x2, 98462306a36Sopenharmony_ci FPIN_CONGN_OVERSUBSCRIPTION = 0x3, 98562306a36Sopenharmony_ci FPIN_CONGN_DEVICE_SPEC = 0xF, 98662306a36Sopenharmony_ci}; 98762306a36Sopenharmony_ci 98862306a36Sopenharmony_ci/* 98962306a36Sopenharmony_ci * Initializer useful for decoding table. 99062306a36Sopenharmony_ci * Please keep this in sync with the above definitions. 99162306a36Sopenharmony_ci */ 99262306a36Sopenharmony_ci#define FC_FPIN_CONGN_EVT_TYPES_INIT { \ 99362306a36Sopenharmony_ci { FPIN_CONGN_CLEAR, "Clear" }, \ 99462306a36Sopenharmony_ci { FPIN_CONGN_LOST_CREDIT, "Lost Credit" }, \ 99562306a36Sopenharmony_ci { FPIN_CONGN_CREDIT_STALL, "Credit Stall" }, \ 99662306a36Sopenharmony_ci { FPIN_CONGN_OVERSUBSCRIPTION, "Oversubscription" }, \ 99762306a36Sopenharmony_ci { FPIN_CONGN_DEVICE_SPEC, "Device Specific" }, \ 99862306a36Sopenharmony_ci} 99962306a36Sopenharmony_ci 100062306a36Sopenharmony_cienum fc_fpin_congn_severity_types { 100162306a36Sopenharmony_ci FPIN_CONGN_SEVERITY_WARNING = 0xF1, 100262306a36Sopenharmony_ci FPIN_CONGN_SEVERITY_ERROR = 0xF7, 100362306a36Sopenharmony_ci}; 100462306a36Sopenharmony_ci 100562306a36Sopenharmony_ci/* 100662306a36Sopenharmony_ci * Link Integrity Notification Descriptor 100762306a36Sopenharmony_ci */ 100862306a36Sopenharmony_cistruct fc_fn_li_desc { 100962306a36Sopenharmony_ci __be32 desc_tag; /* Descriptor Tag (0x00020001) */ 101062306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes). 101162306a36Sopenharmony_ci * Size of descriptor excluding 101262306a36Sopenharmony_ci * desc_tag and desc_len fields. 101362306a36Sopenharmony_ci */ 101462306a36Sopenharmony_ci __be64 detecting_wwpn; /* Port Name that detected event */ 101562306a36Sopenharmony_ci __be64 attached_wwpn; /* Port Name of device attached to 101662306a36Sopenharmony_ci * detecting Port Name 101762306a36Sopenharmony_ci */ 101862306a36Sopenharmony_ci __be16 event_type; /* see enum fc_fpin_li_event_types */ 101962306a36Sopenharmony_ci __be16 event_modifier; /* Implementation specific value 102062306a36Sopenharmony_ci * describing the event type 102162306a36Sopenharmony_ci */ 102262306a36Sopenharmony_ci __be32 event_threshold;/* duration in ms of the link 102362306a36Sopenharmony_ci * integrity detection cycle 102462306a36Sopenharmony_ci */ 102562306a36Sopenharmony_ci __be32 event_count; /* minimum number of event 102662306a36Sopenharmony_ci * occurrences during the event 102762306a36Sopenharmony_ci * threshold to caause the LI event 102862306a36Sopenharmony_ci */ 102962306a36Sopenharmony_ci __be32 pname_count; /* number of portname_list elements */ 103062306a36Sopenharmony_ci __be64 pname_list[]; /* list of N_Port_Names accessible 103162306a36Sopenharmony_ci * through the attached port 103262306a36Sopenharmony_ci */ 103362306a36Sopenharmony_ci}; 103462306a36Sopenharmony_ci 103562306a36Sopenharmony_ci/* 103662306a36Sopenharmony_ci * Delivery Notification Descriptor 103762306a36Sopenharmony_ci */ 103862306a36Sopenharmony_cistruct fc_fn_deli_desc { 103962306a36Sopenharmony_ci __be32 desc_tag; /* Descriptor Tag (0x00020002) */ 104062306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes). 104162306a36Sopenharmony_ci * Size of descriptor excluding 104262306a36Sopenharmony_ci * desc_tag and desc_len fields. 104362306a36Sopenharmony_ci */ 104462306a36Sopenharmony_ci __be64 detecting_wwpn; /* Port Name that detected event */ 104562306a36Sopenharmony_ci __be64 attached_wwpn; /* Port Name of device attached to 104662306a36Sopenharmony_ci * detecting Port Name 104762306a36Sopenharmony_ci */ 104862306a36Sopenharmony_ci __be32 deli_reason_code;/* see enum fc_fpin_deli_event_types */ 104962306a36Sopenharmony_ci}; 105062306a36Sopenharmony_ci 105162306a36Sopenharmony_ci/* 105262306a36Sopenharmony_ci * Peer Congestion Notification Descriptor 105362306a36Sopenharmony_ci */ 105462306a36Sopenharmony_cistruct fc_fn_peer_congn_desc { 105562306a36Sopenharmony_ci __be32 desc_tag; /* Descriptor Tag (0x00020003) */ 105662306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes). 105762306a36Sopenharmony_ci * Size of descriptor excluding 105862306a36Sopenharmony_ci * desc_tag and desc_len fields. 105962306a36Sopenharmony_ci */ 106062306a36Sopenharmony_ci __be64 detecting_wwpn; /* Port Name that detected event */ 106162306a36Sopenharmony_ci __be64 attached_wwpn; /* Port Name of device attached to 106262306a36Sopenharmony_ci * detecting Port Name 106362306a36Sopenharmony_ci */ 106462306a36Sopenharmony_ci __be16 event_type; /* see enum fc_fpin_congn_event_types */ 106562306a36Sopenharmony_ci __be16 event_modifier; /* Implementation specific value 106662306a36Sopenharmony_ci * describing the event type 106762306a36Sopenharmony_ci */ 106862306a36Sopenharmony_ci __be32 event_period; /* duration (ms) of the detected 106962306a36Sopenharmony_ci * congestion event 107062306a36Sopenharmony_ci */ 107162306a36Sopenharmony_ci __be32 pname_count; /* number of portname_list elements */ 107262306a36Sopenharmony_ci __be64 pname_list[]; /* list of N_Port_Names accessible 107362306a36Sopenharmony_ci * through the attached port 107462306a36Sopenharmony_ci */ 107562306a36Sopenharmony_ci}; 107662306a36Sopenharmony_ci 107762306a36Sopenharmony_ci/* 107862306a36Sopenharmony_ci * Congestion Notification Descriptor 107962306a36Sopenharmony_ci */ 108062306a36Sopenharmony_cistruct fc_fn_congn_desc { 108162306a36Sopenharmony_ci __be32 desc_tag; /* Descriptor Tag (0x00020004) */ 108262306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes). 108362306a36Sopenharmony_ci * Size of descriptor excluding 108462306a36Sopenharmony_ci * desc_tag and desc_len fields. 108562306a36Sopenharmony_ci */ 108662306a36Sopenharmony_ci __be16 event_type; /* see enum fc_fpin_congn_event_types */ 108762306a36Sopenharmony_ci __be16 event_modifier; /* Implementation specific value 108862306a36Sopenharmony_ci * describing the event type 108962306a36Sopenharmony_ci */ 109062306a36Sopenharmony_ci __be32 event_period; /* duration (ms) of the detected 109162306a36Sopenharmony_ci * congestion event 109262306a36Sopenharmony_ci */ 109362306a36Sopenharmony_ci __u8 severity; /* command */ 109462306a36Sopenharmony_ci __u8 resv[3]; /* reserved - must be zero */ 109562306a36Sopenharmony_ci}; 109662306a36Sopenharmony_ci 109762306a36Sopenharmony_ci/* 109862306a36Sopenharmony_ci * ELS_FPIN - Fabric Performance Impact Notification 109962306a36Sopenharmony_ci */ 110062306a36Sopenharmony_cistruct fc_els_fpin { 110162306a36Sopenharmony_ci __u8 fpin_cmd; /* command (0x16) */ 110262306a36Sopenharmony_ci __u8 fpin_zero[3]; /* specified as zero - part of cmd */ 110362306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor List (in bytes). 110462306a36Sopenharmony_ci * Size of ELS excluding fpin_cmd, 110562306a36Sopenharmony_ci * fpin_zero and desc_len fields. 110662306a36Sopenharmony_ci */ 110762306a36Sopenharmony_ci struct fc_tlv_desc fpin_desc[]; /* Descriptor list */ 110862306a36Sopenharmony_ci}; 110962306a36Sopenharmony_ci 111062306a36Sopenharmony_ci/* Diagnostic Function Descriptor - FPIN Registration */ 111162306a36Sopenharmony_cistruct fc_df_desc_fpin_reg { 111262306a36Sopenharmony_ci __be32 desc_tag; /* FPIN Registration (0x00030001) */ 111362306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes). 111462306a36Sopenharmony_ci * Size of descriptor excluding 111562306a36Sopenharmony_ci * desc_tag and desc_len fields. 111662306a36Sopenharmony_ci */ 111762306a36Sopenharmony_ci __be32 count; /* Number of desc_tags elements */ 111862306a36Sopenharmony_ci __be32 desc_tags[]; /* Array of Descriptor Tags. 111962306a36Sopenharmony_ci * Each tag indicates a function 112062306a36Sopenharmony_ci * supported by the N_Port (request) 112162306a36Sopenharmony_ci * or by the N_Port and Fabric 112262306a36Sopenharmony_ci * Controller (reply; may be a subset 112362306a36Sopenharmony_ci * of the request). 112462306a36Sopenharmony_ci * See ELS_FN_DTAG_xxx for tag values. 112562306a36Sopenharmony_ci */ 112662306a36Sopenharmony_ci}; 112762306a36Sopenharmony_ci 112862306a36Sopenharmony_ci/* 112962306a36Sopenharmony_ci * ELS_RDF - Register Diagnostic Functions 113062306a36Sopenharmony_ci */ 113162306a36Sopenharmony_cistruct fc_els_rdf { 113262306a36Sopenharmony_ci __u8 fpin_cmd; /* command (0x19) */ 113362306a36Sopenharmony_ci __u8 fpin_zero[3]; /* specified as zero - part of cmd */ 113462306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor List (in bytes). 113562306a36Sopenharmony_ci * Size of ELS excluding fpin_cmd, 113662306a36Sopenharmony_ci * fpin_zero and desc_len fields. 113762306a36Sopenharmony_ci */ 113862306a36Sopenharmony_ci struct fc_tlv_desc desc[]; /* Descriptor list */ 113962306a36Sopenharmony_ci}; 114062306a36Sopenharmony_ci 114162306a36Sopenharmony_ci/* 114262306a36Sopenharmony_ci * ELS RDF LS_ACC Response. 114362306a36Sopenharmony_ci */ 114462306a36Sopenharmony_cistruct fc_els_rdf_resp { 114562306a36Sopenharmony_ci struct fc_els_ls_acc acc_hdr; 114662306a36Sopenharmony_ci __be32 desc_list_len; /* Length of response (in 114762306a36Sopenharmony_ci * bytes). Excludes acc_hdr 114862306a36Sopenharmony_ci * and desc_list_len fields. 114962306a36Sopenharmony_ci */ 115062306a36Sopenharmony_ci struct fc_els_lsri_desc lsri; 115162306a36Sopenharmony_ci struct fc_tlv_desc desc[]; /* Supported Descriptor list */ 115262306a36Sopenharmony_ci}; 115362306a36Sopenharmony_ci 115462306a36Sopenharmony_ci 115562306a36Sopenharmony_ci/* 115662306a36Sopenharmony_ci * Diagnostic Capability Descriptors for EDC ELS 115762306a36Sopenharmony_ci */ 115862306a36Sopenharmony_ci 115962306a36Sopenharmony_ci/* 116062306a36Sopenharmony_ci * Diagnostic: Link Fault Capability Descriptor 116162306a36Sopenharmony_ci */ 116262306a36Sopenharmony_cistruct fc_diag_lnkflt_desc { 116362306a36Sopenharmony_ci __be32 desc_tag; /* Descriptor Tag (0x0001000D) */ 116462306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes). 116562306a36Sopenharmony_ci * Size of descriptor excluding 116662306a36Sopenharmony_ci * desc_tag and desc_len fields. 116762306a36Sopenharmony_ci * 12 bytes 116862306a36Sopenharmony_ci */ 116962306a36Sopenharmony_ci __be32 degrade_activate_threshold; 117062306a36Sopenharmony_ci __be32 degrade_deactivate_threshold; 117162306a36Sopenharmony_ci __be32 fec_degrade_interval; 117262306a36Sopenharmony_ci}; 117362306a36Sopenharmony_ci 117462306a36Sopenharmony_cienum fc_edc_cg_signal_cap_types { 117562306a36Sopenharmony_ci /* Note: Capability: bits 31:4 Rsvd; bits 3:0 are capabilities */ 117662306a36Sopenharmony_ci EDC_CG_SIG_NOTSUPPORTED = 0x00, /* neither supported */ 117762306a36Sopenharmony_ci EDC_CG_SIG_WARN_ONLY = 0x01, 117862306a36Sopenharmony_ci EDC_CG_SIG_WARN_ALARM = 0x02, /* both supported */ 117962306a36Sopenharmony_ci}; 118062306a36Sopenharmony_ci 118162306a36Sopenharmony_ci/* 118262306a36Sopenharmony_ci * Initializer useful for decoding table. 118362306a36Sopenharmony_ci * Please keep this in sync with the above definitions. 118462306a36Sopenharmony_ci */ 118562306a36Sopenharmony_ci#define FC_EDC_CG_SIGNAL_CAP_TYPES_INIT { \ 118662306a36Sopenharmony_ci { EDC_CG_SIG_NOTSUPPORTED, "Signaling Not Supported" }, \ 118762306a36Sopenharmony_ci { EDC_CG_SIG_WARN_ONLY, "Warning Signal" }, \ 118862306a36Sopenharmony_ci { EDC_CG_SIG_WARN_ALARM, "Warning and Alarm Signals" }, \ 118962306a36Sopenharmony_ci} 119062306a36Sopenharmony_ci 119162306a36Sopenharmony_cienum fc_diag_cg_sig_freq_types { 119262306a36Sopenharmony_ci EDC_CG_SIGFREQ_CNT_MIN = 1, /* Min Frequency Count */ 119362306a36Sopenharmony_ci EDC_CG_SIGFREQ_CNT_MAX = 999, /* Max Frequency Count */ 119462306a36Sopenharmony_ci 119562306a36Sopenharmony_ci EDC_CG_SIGFREQ_SEC = 0x1, /* Units: seconds */ 119662306a36Sopenharmony_ci EDC_CG_SIGFREQ_MSEC = 0x2, /* Units: milliseconds */ 119762306a36Sopenharmony_ci}; 119862306a36Sopenharmony_ci 119962306a36Sopenharmony_cistruct fc_diag_cg_sig_freq { 120062306a36Sopenharmony_ci __be16 count; /* Time between signals 120162306a36Sopenharmony_ci * note: upper 6 bits rsvd 120262306a36Sopenharmony_ci */ 120362306a36Sopenharmony_ci __be16 units; /* Time unit for count 120462306a36Sopenharmony_ci * note: upper 12 bits rsvd 120562306a36Sopenharmony_ci */ 120662306a36Sopenharmony_ci}; 120762306a36Sopenharmony_ci 120862306a36Sopenharmony_ci/* 120962306a36Sopenharmony_ci * Diagnostic: Congestion Signaling Capability Descriptor 121062306a36Sopenharmony_ci */ 121162306a36Sopenharmony_cistruct fc_diag_cg_sig_desc { 121262306a36Sopenharmony_ci __be32 desc_tag; /* Descriptor Tag (0x0001000F) */ 121362306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor (in bytes). 121462306a36Sopenharmony_ci * Size of descriptor excluding 121562306a36Sopenharmony_ci * desc_tag and desc_len fields. 121662306a36Sopenharmony_ci * 16 bytes 121762306a36Sopenharmony_ci */ 121862306a36Sopenharmony_ci __be32 xmt_signal_capability; 121962306a36Sopenharmony_ci struct fc_diag_cg_sig_freq xmt_signal_frequency; 122062306a36Sopenharmony_ci __be32 rcv_signal_capability; 122162306a36Sopenharmony_ci struct fc_diag_cg_sig_freq rcv_signal_frequency; 122262306a36Sopenharmony_ci}; 122362306a36Sopenharmony_ci 122462306a36Sopenharmony_ci/* 122562306a36Sopenharmony_ci * ELS_EDC - Exchange Diagnostic Capabilities 122662306a36Sopenharmony_ci */ 122762306a36Sopenharmony_cistruct fc_els_edc { 122862306a36Sopenharmony_ci __u8 edc_cmd; /* command (0x17) */ 122962306a36Sopenharmony_ci __u8 edc_zero[3]; /* specified as zero - part of cmd */ 123062306a36Sopenharmony_ci __be32 desc_len; /* Length of Descriptor List (in bytes). 123162306a36Sopenharmony_ci * Size of ELS excluding edc_cmd, 123262306a36Sopenharmony_ci * edc_zero and desc_len fields. 123362306a36Sopenharmony_ci */ 123462306a36Sopenharmony_ci struct fc_tlv_desc desc[]; 123562306a36Sopenharmony_ci /* Diagnostic Descriptor list */ 123662306a36Sopenharmony_ci}; 123762306a36Sopenharmony_ci 123862306a36Sopenharmony_ci/* 123962306a36Sopenharmony_ci * ELS EDC LS_ACC Response. 124062306a36Sopenharmony_ci */ 124162306a36Sopenharmony_cistruct fc_els_edc_resp { 124262306a36Sopenharmony_ci struct fc_els_ls_acc acc_hdr; 124362306a36Sopenharmony_ci __be32 desc_list_len; /* Length of response (in 124462306a36Sopenharmony_ci * bytes). Excludes acc_hdr 124562306a36Sopenharmony_ci * and desc_list_len fields. 124662306a36Sopenharmony_ci */ 124762306a36Sopenharmony_ci struct fc_els_lsri_desc lsri; 124862306a36Sopenharmony_ci struct fc_tlv_desc desc[]; 124962306a36Sopenharmony_ci /* Supported Diagnostic Descriptor list */ 125062306a36Sopenharmony_ci}; 125162306a36Sopenharmony_ci 125262306a36Sopenharmony_ci 125362306a36Sopenharmony_ci#endif /* _FC_ELS_H_ */ 1254