struct bfi_iocfc_cfg_s {
u8 num_cqs; /* Number of CQs to be used */
u8 sense_buf_len; /* SCSI sense length */
u16 rsvd_1;
u32 endian_sig; /* endian signature of host */
u8 rsvd_2;
u8 single_msix_vec;
u8 rsvd[2];
__be16 num_ioim_reqs;
__be16 num_fwtio_reqs;
/* * Request and response circular queue base addresses, size and * shadow index pointers.
*/ union bfi_addr_u req_cq_ba[BFI_IOC_MAX_CQS]; union bfi_addr_u req_shadow_ci[BFI_IOC_MAX_CQS];
__be16 req_cq_elems[BFI_IOC_MAX_CQS]; union bfi_addr_u rsp_cq_ba[BFI_IOC_MAX_CQS]; union bfi_addr_u rsp_shadow_pi[BFI_IOC_MAX_CQS];
__be16 rsp_cq_elems[BFI_IOC_MAX_CQS];
union bfi_addr_u stats_addr; /* DMA-able address for stats */ union bfi_addr_u cfgrsp_addr; /* config response dma address */ union bfi_addr_u ioim_snsbase[BFI_IOIM_SNSBUF_SEGS]; /* IO sense buf base addr segments */ struct bfa_iocfc_intr_attr_s intr_attr; /* IOC interrupt attributes */
};
/* * Boot target wwn information for this port. This contains either the stored * or discovered boot target port wwns for the port.
*/ struct bfi_iocfc_bootwwns {
wwn_t wwn[BFA_BOOT_BOOTLUN_MAX];
u8 nwwns;
u8 rsvd[7];
};
/* * FCP IO messages overview * * @note * - Max CDB length supported is 64 bytes. * - SCSI Linked commands and SCSI bi-directional Commands not * supported. *
*/ struct bfi_ioim_req_s { struct bfi_mhdr_s mh; /* Common msg header */
__be16 io_tag; /* I/O tag */
u16 rport_hdl; /* itnim/rport firmware handle */ struct fcp_cmnd_s cmnd; /* IO request info */
/* * SG elements array within the IO request must be double word * aligned. This alignment is required to optimize SGM setup for the IO.
*/ struct bfi_sge_s sges[BFI_SGE_INLINE_MAX];
u8 io_timeout;
u8 dif_en;
u8 rsvd_a[2]; struct bfi_ioim_dif_s dif;
};
/* * This table shows various IO status codes from firmware and their * meaning. Host driver can use these status codes to further process * IO completions. * * BFI_IOIM_STS_OK : IO completed with error free SCSI & * transport status. * io-tag can be reused. * * BFA_IOIM_STS_SCSI_ERR : IO completed with scsi error. * - io-tag can be reused. * * BFI_IOIM_STS_HOST_ABORTED : IO was aborted successfully due to * host request. * - io-tag cannot be reused yet. * * BFI_IOIM_STS_ABORTED : IO was aborted successfully * internally by f/w. * - io-tag cannot be reused yet. * * BFI_IOIM_STS_TIMEDOUT : IO timedout and ABTS/RRQ is happening * in the firmware and * - io-tag cannot be reused yet. * * BFI_IOIM_STS_SQER_NEEDED : Firmware could not recover the IO * with sequence level error * logic and hence host needs to retry * this IO with a different IO tag * - io-tag cannot be used yet. * * BFI_IOIM_STS_NEXUS_ABORT : Second Level Error Recovery from host * is required because 2 consecutive ABTS * timedout and host needs logout and * re-login with the target * - io-tag cannot be used yet. * * BFI_IOIM_STS_UNDERRUN : IO completed with SCSI status good, * but the data tranferred is less than * the fcp data length in the command. * ex. SCSI INQUIRY where transferred * data length and residue count in FCP * response accounts for total fcp-dl * - io-tag can be reused. * * BFI_IOIM_STS_OVERRUN : IO completed with SCSI status good, * but the data transerred is more than * fcp data length in the command. ex. * TAPE IOs where blocks can of unequal * lengths. * - io-tag can be reused. * * BFI_IOIM_STS_RES_FREE : Firmware has completed using io-tag * during abort process * - io-tag can be reused. * * BFI_IOIM_STS_PROTO_ERR : Firmware detected a protocol error. * ex target sent more data than * requested, or there was data frame * loss and other reasons * - io-tag cannot be used yet. * * BFI_IOIM_STS_DIF_ERR : Firwmare detected DIF error. ex: DIF * CRC err or Ref Tag err or App tag err. * - io-tag can be reused. * * BFA_IOIM_STS_TSK_MGT_ABORT : IO was aborted because of Task * Management command from the host * - io-tag can be reused. * * BFI_IOIM_STS_UTAG : Firmware does not know about this * io_tag. * - io-tag can be reused.
*/ enum bfi_ioim_status {
BFI_IOIM_STS_OK = 0,
BFI_IOIM_STS_HOST_ABORTED = 1,
BFI_IOIM_STS_ABORTED = 2,
BFI_IOIM_STS_TIMEDOUT = 3,
BFI_IOIM_STS_RES_FREE = 4,
BFI_IOIM_STS_SQER_NEEDED = 5,
BFI_IOIM_STS_PROTO_ERR = 6,
BFI_IOIM_STS_UTAG = 7,
BFI_IOIM_STS_PATHTOV = 8,
};
/* * I/O response message
*/ struct bfi_ioim_rsp_s { struct bfi_mhdr_s mh; /* common msg header */
__be16 io_tag; /* completed IO tag */
u16 bfa_rport_hndl; /* releated rport handle */
u8 io_status; /* IO completion status */
u8 reuse_io_tag; /* IO tag can be reused */
u16 abort_tag; /* host abort request tag */
u8 scsi_status; /* scsi status from target */
u8 sns_len; /* scsi sense length */
u8 resid_flags; /* IO residue flags */
u8 rsvd_a;
__be32 residue; /* IO residual length in bytes */
u32 rsvd_b[3];
};
struct bfi_ioim_abort_req_s { struct bfi_mhdr_s mh; /* Common msg header */
__be16 io_tag; /* I/O tag */
u16 abort_tag; /* unique request tag */
};
enum bfi_tskim_status { /* * Following are FCP-4 spec defined status codes, * **DO NOT CHANGE THEM **
*/
BFI_TSKIM_STS_OK = 0,
BFI_TSKIM_STS_NOT_SUPP = 4,
BFI_TSKIM_STS_FAILED = 5,
/* * Defined by BFA
*/
BFI_TSKIM_STS_TIMEOUT = 10, /* TM request timedout */
BFI_TSKIM_STS_ABORTED = 11, /* Aborted on host request */
BFI_TSKIM_STS_UTAG = 12, /* unknown tag for request */
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.