1*52fa7bf9SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2a36c61f9SKrishna Gudipati /* 3889d0d42SAnil Gurumurthy * Copyright (c) 2005-2014 Brocade Communications Systems, Inc. 4889d0d42SAnil Gurumurthy * Copyright (c) 2014- QLogic Corporation. 5a36c61f9SKrishna Gudipati * All rights reserved 6889d0d42SAnil Gurumurthy * www.qlogic.com 7a36c61f9SKrishna Gudipati * 831e1d569SAnil Gurumurthy * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter. 9a36c61f9SKrishna Gudipati */ 10a36c61f9SKrishna Gudipati 11a36c61f9SKrishna Gudipati #ifndef __BFI_MS_H__ 12a36c61f9SKrishna Gudipati #define __BFI_MS_H__ 13a36c61f9SKrishna Gudipati 14a36c61f9SKrishna Gudipati #include "bfi.h" 15a36c61f9SKrishna Gudipati #include "bfa_fc.h" 16a36c61f9SKrishna Gudipati #include "bfa_defs_svc.h" 17a36c61f9SKrishna Gudipati 18a36c61f9SKrishna Gudipati #pragma pack(1) 19a36c61f9SKrishna Gudipati 20a36c61f9SKrishna Gudipati enum bfi_iocfc_h2i_msgs { 21a36c61f9SKrishna Gudipati BFI_IOCFC_H2I_CFG_REQ = 1, 22a36c61f9SKrishna Gudipati BFI_IOCFC_H2I_SET_INTR_REQ = 2, 23a36c61f9SKrishna Gudipati BFI_IOCFC_H2I_UPDATEQ_REQ = 3, 24db9d8a75SKrishna Gudipati BFI_IOCFC_H2I_FAA_QUERY_REQ = 4, 25db9d8a75SKrishna Gudipati BFI_IOCFC_H2I_ADDR_REQ = 5, 26a36c61f9SKrishna Gudipati }; 27a36c61f9SKrishna Gudipati 28a36c61f9SKrishna Gudipati enum bfi_iocfc_i2h_msgs { 29a36c61f9SKrishna Gudipati BFI_IOCFC_I2H_CFG_REPLY = BFA_I2HM(1), 30a36c61f9SKrishna Gudipati BFI_IOCFC_I2H_UPDATEQ_RSP = BFA_I2HM(3), 31db9d8a75SKrishna Gudipati BFI_IOCFC_I2H_FAA_QUERY_RSP = BFA_I2HM(4), 32db9d8a75SKrishna Gudipati BFI_IOCFC_I2H_ADDR_MSG = BFA_I2HM(5), 33a36c61f9SKrishna Gudipati }; 34a36c61f9SKrishna Gudipati 35a36c61f9SKrishna Gudipati struct bfi_iocfc_cfg_s { 36a36c61f9SKrishna Gudipati u8 num_cqs; /* Number of CQs to be used */ 37a36c61f9SKrishna Gudipati u8 sense_buf_len; /* SCSI sense length */ 38a36c61f9SKrishna Gudipati u16 rsvd_1; 39a36c61f9SKrishna Gudipati u32 endian_sig; /* endian signature of host */ 404507025dSKrishna Gudipati u8 rsvd_2; 414507025dSKrishna Gudipati u8 single_msix_vec; 424507025dSKrishna Gudipati u8 rsvd[2]; 43e2187d7fSKrishna Gudipati __be16 num_ioim_reqs; 44e2187d7fSKrishna Gudipati __be16 num_fwtio_reqs; 454507025dSKrishna Gudipati 46a36c61f9SKrishna Gudipati 47acdc79a6SJing Huang /* 48a36c61f9SKrishna Gudipati * Request and response circular queue base addresses, size and 49a36c61f9SKrishna Gudipati * shadow index pointers. 50a36c61f9SKrishna Gudipati */ 51a36c61f9SKrishna Gudipati union bfi_addr_u req_cq_ba[BFI_IOC_MAX_CQS]; 52a36c61f9SKrishna Gudipati union bfi_addr_u req_shadow_ci[BFI_IOC_MAX_CQS]; 5350444a34SMaggie __be16 req_cq_elems[BFI_IOC_MAX_CQS]; 54a36c61f9SKrishna Gudipati union bfi_addr_u rsp_cq_ba[BFI_IOC_MAX_CQS]; 55a36c61f9SKrishna Gudipati union bfi_addr_u rsp_shadow_pi[BFI_IOC_MAX_CQS]; 5650444a34SMaggie __be16 rsp_cq_elems[BFI_IOC_MAX_CQS]; 57a36c61f9SKrishna Gudipati 58a36c61f9SKrishna Gudipati union bfi_addr_u stats_addr; /* DMA-able address for stats */ 59a36c61f9SKrishna Gudipati union bfi_addr_u cfgrsp_addr; /* config response dma address */ 604507025dSKrishna Gudipati union bfi_addr_u ioim_snsbase[BFI_IOIM_SNSBUF_SEGS]; 614507025dSKrishna Gudipati /* IO sense buf base addr segments */ 62a36c61f9SKrishna Gudipati struct bfa_iocfc_intr_attr_s intr_attr; /* IOC interrupt attributes */ 63a36c61f9SKrishna Gudipati }; 64a36c61f9SKrishna Gudipati 65acdc79a6SJing Huang /* 66a36c61f9SKrishna Gudipati * Boot target wwn information for this port. This contains either the stored 67a36c61f9SKrishna Gudipati * or discovered boot target port wwns for the port. 68a36c61f9SKrishna Gudipati */ 69a36c61f9SKrishna Gudipati struct bfi_iocfc_bootwwns { 70a36c61f9SKrishna Gudipati wwn_t wwn[BFA_BOOT_BOOTLUN_MAX]; 71a36c61f9SKrishna Gudipati u8 nwwns; 72a36c61f9SKrishna Gudipati u8 rsvd[7]; 73a36c61f9SKrishna Gudipati }; 74a36c61f9SKrishna Gudipati 7511189208SKrishna Gudipati /** 7611189208SKrishna Gudipati * Queue configuration response from firmware 7711189208SKrishna Gudipati */ 7811189208SKrishna Gudipati struct bfi_iocfc_qreg_s { 7911189208SKrishna Gudipati u32 cpe_q_ci_off[BFI_IOC_MAX_CQS]; 8011189208SKrishna Gudipati u32 cpe_q_pi_off[BFI_IOC_MAX_CQS]; 8111189208SKrishna Gudipati u32 cpe_qctl_off[BFI_IOC_MAX_CQS]; 8211189208SKrishna Gudipati u32 rme_q_ci_off[BFI_IOC_MAX_CQS]; 8311189208SKrishna Gudipati u32 rme_q_pi_off[BFI_IOC_MAX_CQS]; 8411189208SKrishna Gudipati u32 rme_qctl_off[BFI_IOC_MAX_CQS]; 853fd45980SKrishna Gudipati u8 hw_qid[BFI_IOC_MAX_CQS]; 8611189208SKrishna Gudipati }; 8711189208SKrishna Gudipati 88a36c61f9SKrishna Gudipati struct bfi_iocfc_cfgrsp_s { 89a36c61f9SKrishna Gudipati struct bfa_iocfc_fwcfg_s fwcfg; 90a36c61f9SKrishna Gudipati struct bfa_iocfc_intr_attr_s intr_attr; 91a36c61f9SKrishna Gudipati struct bfi_iocfc_bootwwns bootwwns; 92a36c61f9SKrishna Gudipati struct bfi_pbc_s pbc_cfg; 9311189208SKrishna Gudipati struct bfi_iocfc_qreg_s qreg; 94a36c61f9SKrishna Gudipati }; 95a36c61f9SKrishna Gudipati 96acdc79a6SJing Huang /* 97a36c61f9SKrishna Gudipati * BFI_IOCFC_H2I_CFG_REQ message 98a36c61f9SKrishna Gudipati */ 99a36c61f9SKrishna Gudipati struct bfi_iocfc_cfg_req_s { 100a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; 101a36c61f9SKrishna Gudipati union bfi_addr_u ioc_cfg_dma_addr; 102a36c61f9SKrishna Gudipati }; 103a36c61f9SKrishna Gudipati 104a36c61f9SKrishna Gudipati 105acdc79a6SJing Huang /* 106a36c61f9SKrishna Gudipati * BFI_IOCFC_I2H_CFG_REPLY message 107a36c61f9SKrishna Gudipati */ 108a36c61f9SKrishna Gudipati struct bfi_iocfc_cfg_reply_s { 109a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 110a36c61f9SKrishna Gudipati u8 cfg_success; /* cfg reply status */ 111a36c61f9SKrishna Gudipati u8 lpu_bm; /* LPUs assigned for this IOC */ 112a36c61f9SKrishna Gudipati u8 rsvd[2]; 113a36c61f9SKrishna Gudipati }; 114a36c61f9SKrishna Gudipati 115a36c61f9SKrishna Gudipati 116acdc79a6SJing Huang /* 117a36c61f9SKrishna Gudipati * BFI_IOCFC_H2I_SET_INTR_REQ message 118a36c61f9SKrishna Gudipati */ 119a36c61f9SKrishna Gudipati struct bfi_iocfc_set_intr_req_s { 120a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 121a36c61f9SKrishna Gudipati u8 coalesce; /* enable intr coalescing */ 122a36c61f9SKrishna Gudipati u8 rsvd[3]; 12350444a34SMaggie __be16 delay; /* delay timer 0..1125us */ 12450444a34SMaggie __be16 latency; /* latency timer 0..225us */ 125a36c61f9SKrishna Gudipati }; 126a36c61f9SKrishna Gudipati 127a36c61f9SKrishna Gudipati 128acdc79a6SJing Huang /* 129a36c61f9SKrishna Gudipati * BFI_IOCFC_H2I_UPDATEQ_REQ message 130a36c61f9SKrishna Gudipati */ 131a36c61f9SKrishna Gudipati struct bfi_iocfc_updateq_req_s { 132a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 133a36c61f9SKrishna Gudipati u32 reqq_ba; /* reqq base addr */ 134a36c61f9SKrishna Gudipati u32 rspq_ba; /* rspq base addr */ 135a36c61f9SKrishna Gudipati u32 reqq_sci; /* reqq shadow ci */ 136a36c61f9SKrishna Gudipati u32 rspq_spi; /* rspq shadow pi */ 137a36c61f9SKrishna Gudipati }; 138a36c61f9SKrishna Gudipati 139a36c61f9SKrishna Gudipati 140acdc79a6SJing Huang /* 141a36c61f9SKrishna Gudipati * BFI_IOCFC_I2H_UPDATEQ_RSP message 142a36c61f9SKrishna Gudipati */ 143a36c61f9SKrishna Gudipati struct bfi_iocfc_updateq_rsp_s { 144a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 145a36c61f9SKrishna Gudipati u8 status; /* updateq status */ 146a36c61f9SKrishna Gudipati u8 rsvd[3]; 147a36c61f9SKrishna Gudipati }; 148a36c61f9SKrishna Gudipati 149a36c61f9SKrishna Gudipati 150acdc79a6SJing Huang /* 151a36c61f9SKrishna Gudipati * H2I Messages 152a36c61f9SKrishna Gudipati */ 153a36c61f9SKrishna Gudipati union bfi_iocfc_h2i_msg_u { 154a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; 155a36c61f9SKrishna Gudipati struct bfi_iocfc_cfg_req_s cfg_req; 156a36c61f9SKrishna Gudipati struct bfi_iocfc_updateq_req_s updateq_req; 157a36c61f9SKrishna Gudipati u32 mboxmsg[BFI_IOC_MSGSZ]; 158a36c61f9SKrishna Gudipati }; 159a36c61f9SKrishna Gudipati 160a36c61f9SKrishna Gudipati 161acdc79a6SJing Huang /* 162a36c61f9SKrishna Gudipati * I2H Messages 163a36c61f9SKrishna Gudipati */ 164a36c61f9SKrishna Gudipati union bfi_iocfc_i2h_msg_u { 165a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; 166a36c61f9SKrishna Gudipati struct bfi_iocfc_cfg_reply_s cfg_reply; 167a36c61f9SKrishna Gudipati struct bfi_iocfc_updateq_rsp_s updateq_rsp; 168a36c61f9SKrishna Gudipati u32 mboxmsg[BFI_IOC_MSGSZ]; 169a36c61f9SKrishna Gudipati }; 170a36c61f9SKrishna Gudipati 171a714134aSKrishna Gudipati /* 172a714134aSKrishna Gudipati * BFI_IOCFC_H2I_FAA_ENABLE_REQ BFI_IOCFC_H2I_FAA_DISABLE_REQ message 173a714134aSKrishna Gudipati */ 174a714134aSKrishna Gudipati struct bfi_faa_en_dis_s { 175a714134aSKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 176a714134aSKrishna Gudipati }; 177a714134aSKrishna Gudipati 178db9d8a75SKrishna Gudipati struct bfi_faa_addr_msg_s { 179db9d8a75SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 180db9d8a75SKrishna Gudipati u8 rsvd[4]; 181db9d8a75SKrishna Gudipati wwn_t pwwn; /* Fabric acquired PWWN */ 182db9d8a75SKrishna Gudipati wwn_t nwwn; /* Fabric acquired PWWN */ 183db9d8a75SKrishna Gudipati }; 184db9d8a75SKrishna Gudipati 185a714134aSKrishna Gudipati /* 186a714134aSKrishna Gudipati * BFI_IOCFC_H2I_FAA_QUERY_REQ message 187a714134aSKrishna Gudipati */ 188a714134aSKrishna Gudipati struct bfi_faa_query_s { 189a714134aSKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 190a714134aSKrishna Gudipati u8 faa_status; /* FAA status */ 191a714134aSKrishna Gudipati u8 addr_source; /* PWWN source */ 192a714134aSKrishna Gudipati u8 rsvd[2]; 193a714134aSKrishna Gudipati wwn_t faa; /* Fabric acquired PWWN */ 194a714134aSKrishna Gudipati }; 195a714134aSKrishna Gudipati 196a714134aSKrishna Gudipati /* 197a714134aSKrishna Gudipati * BFI_IOCFC_I2H_FAA_ENABLE_RSP, BFI_IOCFC_I2H_FAA_DISABLE_RSP message 198a714134aSKrishna Gudipati */ 199a714134aSKrishna Gudipati struct bfi_faa_en_dis_rsp_s { 200a714134aSKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 201a714134aSKrishna Gudipati u8 status; /* updateq status */ 202a714134aSKrishna Gudipati u8 rsvd[3]; 203a714134aSKrishna Gudipati }; 204a714134aSKrishna Gudipati 205a714134aSKrishna Gudipati /* 206a714134aSKrishna Gudipati * BFI_IOCFC_I2H_FAA_QUERY_RSP message 207a714134aSKrishna Gudipati */ 208a714134aSKrishna Gudipati #define bfi_faa_query_rsp_t struct bfi_faa_query_s 209a36c61f9SKrishna Gudipati 210a36c61f9SKrishna Gudipati enum bfi_fcport_h2i { 211a36c61f9SKrishna Gudipati BFI_FCPORT_H2I_ENABLE_REQ = (1), 212a36c61f9SKrishna Gudipati BFI_FCPORT_H2I_DISABLE_REQ = (2), 213a36c61f9SKrishna Gudipati BFI_FCPORT_H2I_SET_SVC_PARAMS_REQ = (3), 214a36c61f9SKrishna Gudipati BFI_FCPORT_H2I_STATS_GET_REQ = (4), 215a36c61f9SKrishna Gudipati BFI_FCPORT_H2I_STATS_CLEAR_REQ = (5), 216a36c61f9SKrishna Gudipati }; 217a36c61f9SKrishna Gudipati 218a36c61f9SKrishna Gudipati 219a36c61f9SKrishna Gudipati enum bfi_fcport_i2h { 220a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_ENABLE_RSP = BFA_I2HM(1), 221a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_DISABLE_RSP = BFA_I2HM(2), 222a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_SET_SVC_PARAMS_RSP = BFA_I2HM(3), 223a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_STATS_GET_RSP = BFA_I2HM(4), 224a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_STATS_CLEAR_RSP = BFA_I2HM(5), 225a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_EVENT = BFA_I2HM(6), 226a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_TRUNK_SCN = BFA_I2HM(7), 227a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_ENABLE_AEN = BFA_I2HM(8), 228a36c61f9SKrishna Gudipati BFI_FCPORT_I2H_DISABLE_AEN = BFA_I2HM(9), 229a36c61f9SKrishna Gudipati }; 230a36c61f9SKrishna Gudipati 231a36c61f9SKrishna Gudipati 232acdc79a6SJing Huang /* 233a36c61f9SKrishna Gudipati * Generic REQ type 234a36c61f9SKrishna Gudipati */ 235a36c61f9SKrishna Gudipati struct bfi_fcport_req_s { 236a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* msg header */ 237a36c61f9SKrishna Gudipati u32 msgtag; /* msgtag for reply */ 238a36c61f9SKrishna Gudipati }; 239a36c61f9SKrishna Gudipati 240acdc79a6SJing Huang /* 241a36c61f9SKrishna Gudipati * Generic RSP type 242a36c61f9SKrishna Gudipati */ 243a36c61f9SKrishna Gudipati struct bfi_fcport_rsp_s { 244a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 245a36c61f9SKrishna Gudipati u8 status; /* port enable status */ 246a36c61f9SKrishna Gudipati u8 rsvd[3]; 247f3a060caSKrishna Gudipati struct bfa_port_cfg_s port_cfg;/* port configuration */ 248a36c61f9SKrishna Gudipati u32 msgtag; /* msgtag for reply */ 249a36c61f9SKrishna Gudipati }; 250a36c61f9SKrishna Gudipati 251acdc79a6SJing Huang /* 252a36c61f9SKrishna Gudipati * BFI_FCPORT_H2I_ENABLE_REQ 253a36c61f9SKrishna Gudipati */ 254a36c61f9SKrishna Gudipati struct bfi_fcport_enable_req_s { 255a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* msg header */ 256a36c61f9SKrishna Gudipati u32 rsvd1; 257a36c61f9SKrishna Gudipati wwn_t nwwn; /* node wwn of physical port */ 258a36c61f9SKrishna Gudipati wwn_t pwwn; /* port wwn of physical port */ 259a36c61f9SKrishna Gudipati struct bfa_port_cfg_s port_cfg; /* port configuration */ 260a36c61f9SKrishna Gudipati union bfi_addr_u stats_dma_addr; /* DMA address for stats */ 261a36c61f9SKrishna Gudipati u32 msgtag; /* msgtag for reply */ 262f3a060caSKrishna Gudipati u8 use_flash_cfg; /* get prot cfg from flash */ 263f3a060caSKrishna Gudipati u8 rsvd2[3]; 264a36c61f9SKrishna Gudipati }; 265a36c61f9SKrishna Gudipati 266acdc79a6SJing Huang /* 267a36c61f9SKrishna Gudipati * BFI_FCPORT_H2I_SET_SVC_PARAMS_REQ 268a36c61f9SKrishna Gudipati */ 269a36c61f9SKrishna Gudipati struct bfi_fcport_set_svc_params_req_s { 270a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* msg header */ 27150444a34SMaggie __be16 tx_bbcredit; /* Tx credits */ 272bbe37a67SVijaya Mohan Guvva u8 rsvd[2]; 273a36c61f9SKrishna Gudipati }; 274a36c61f9SKrishna Gudipati 275acdc79a6SJing Huang /* 276a36c61f9SKrishna Gudipati * BFI_FCPORT_I2H_EVENT 277a36c61f9SKrishna Gudipati */ 278a36c61f9SKrishna Gudipati struct bfi_fcport_event_s { 279a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 280a36c61f9SKrishna Gudipati struct bfa_port_link_s link_state; 281a36c61f9SKrishna Gudipati }; 282a36c61f9SKrishna Gudipati 283acdc79a6SJing Huang /* 284a36c61f9SKrishna Gudipati * BFI_FCPORT_I2H_TRUNK_SCN 285a36c61f9SKrishna Gudipati */ 286a36c61f9SKrishna Gudipati struct bfi_fcport_trunk_link_s { 287a36c61f9SKrishna Gudipati wwn_t trunk_wwn; 288a36c61f9SKrishna Gudipati u8 fctl; /* bfa_trunk_link_fctl_t */ 289a36c61f9SKrishna Gudipati u8 state; /* bfa_trunk_link_state_t */ 290a36c61f9SKrishna Gudipati u8 speed; /* bfa_port_speed_t */ 291a36c61f9SKrishna Gudipati u8 rsvd; 29250444a34SMaggie __be32 deskew; 293a36c61f9SKrishna Gudipati }; 294a36c61f9SKrishna Gudipati 295a36c61f9SKrishna Gudipati #define BFI_FCPORT_MAX_LINKS 2 296a36c61f9SKrishna Gudipati struct bfi_fcport_trunk_scn_s { 297a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; 298a36c61f9SKrishna Gudipati u8 trunk_state; /* bfa_trunk_state_t */ 299a36c61f9SKrishna Gudipati u8 trunk_speed; /* bfa_port_speed_t */ 300a36c61f9SKrishna Gudipati u8 rsvd_a[2]; 301a36c61f9SKrishna Gudipati struct bfi_fcport_trunk_link_s tlink[BFI_FCPORT_MAX_LINKS]; 302a36c61f9SKrishna Gudipati }; 303a36c61f9SKrishna Gudipati 304acdc79a6SJing Huang /* 305a36c61f9SKrishna Gudipati * fcport H2I message 306a36c61f9SKrishna Gudipati */ 307a36c61f9SKrishna Gudipati union bfi_fcport_h2i_msg_u { 308a36c61f9SKrishna Gudipati struct bfi_mhdr_s *mhdr; 309a36c61f9SKrishna Gudipati struct bfi_fcport_enable_req_s *penable; 310a36c61f9SKrishna Gudipati struct bfi_fcport_req_s *pdisable; 311a36c61f9SKrishna Gudipati struct bfi_fcport_set_svc_params_req_s *psetsvcparams; 312a36c61f9SKrishna Gudipati struct bfi_fcport_req_s *pstatsget; 313a36c61f9SKrishna Gudipati struct bfi_fcport_req_s *pstatsclear; 314a36c61f9SKrishna Gudipati }; 315a36c61f9SKrishna Gudipati 316acdc79a6SJing Huang /* 317a36c61f9SKrishna Gudipati * fcport I2H message 318a36c61f9SKrishna Gudipati */ 319a36c61f9SKrishna Gudipati union bfi_fcport_i2h_msg_u { 320a36c61f9SKrishna Gudipati struct bfi_msg_s *msg; 321a36c61f9SKrishna Gudipati struct bfi_fcport_rsp_s *penable_rsp; 322a36c61f9SKrishna Gudipati struct bfi_fcport_rsp_s *pdisable_rsp; 323a36c61f9SKrishna Gudipati struct bfi_fcport_rsp_s *psetsvcparams_rsp; 324a36c61f9SKrishna Gudipati struct bfi_fcport_rsp_s *pstatsget_rsp; 325a36c61f9SKrishna Gudipati struct bfi_fcport_rsp_s *pstatsclear_rsp; 326a36c61f9SKrishna Gudipati struct bfi_fcport_event_s *event; 327a36c61f9SKrishna Gudipati struct bfi_fcport_trunk_scn_s *trunk_scn; 328a36c61f9SKrishna Gudipati }; 329a36c61f9SKrishna Gudipati 330a36c61f9SKrishna Gudipati enum bfi_fcxp_h2i { 331a36c61f9SKrishna Gudipati BFI_FCXP_H2I_SEND_REQ = 1, 332a36c61f9SKrishna Gudipati }; 333a36c61f9SKrishna Gudipati 334a36c61f9SKrishna Gudipati enum bfi_fcxp_i2h { 335a36c61f9SKrishna Gudipati BFI_FCXP_I2H_SEND_RSP = BFA_I2HM(1), 336a36c61f9SKrishna Gudipati }; 337a36c61f9SKrishna Gudipati 338a36c61f9SKrishna Gudipati #define BFA_FCXP_MAX_SGES 2 339a36c61f9SKrishna Gudipati 340acdc79a6SJing Huang /* 341a36c61f9SKrishna Gudipati * FCXP send request structure 342a36c61f9SKrishna Gudipati */ 343a36c61f9SKrishna Gudipati struct bfi_fcxp_send_req_s { 344a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 34550444a34SMaggie __be16 fcxp_tag; /* driver request tag */ 34650444a34SMaggie __be16 max_frmsz; /* max send frame size */ 34750444a34SMaggie __be16 vf_id; /* vsan tag if applicable */ 348a36c61f9SKrishna Gudipati u16 rport_fw_hndl; /* FW Handle for the remote port */ 349a36c61f9SKrishna Gudipati u8 class; /* FC class used for req/rsp */ 350a36c61f9SKrishna Gudipati u8 rsp_timeout; /* timeout in secs, 0-no response */ 351a36c61f9SKrishna Gudipati u8 cts; /* continue sequence */ 3523fd45980SKrishna Gudipati u8 lp_fwtag; /* lport tag */ 353a36c61f9SKrishna Gudipati struct fchs_s fchs; /* request FC header structure */ 35450444a34SMaggie __be32 req_len; /* request payload length */ 35550444a34SMaggie __be32 rsp_maxlen; /* max response length expected */ 35685ce928dSKrishna Gudipati struct bfi_alen_s req_alen; /* request buffer */ 35785ce928dSKrishna Gudipati struct bfi_alen_s rsp_alen; /* response buffer */ 358a36c61f9SKrishna Gudipati }; 359a36c61f9SKrishna Gudipati 360acdc79a6SJing Huang /* 361a36c61f9SKrishna Gudipati * FCXP send response structure 362a36c61f9SKrishna Gudipati */ 363a36c61f9SKrishna Gudipati struct bfi_fcxp_send_rsp_s { 364a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 36550444a34SMaggie __be16 fcxp_tag; /* send request tag */ 366a36c61f9SKrishna Gudipati u8 req_status; /* request status */ 367a36c61f9SKrishna Gudipati u8 rsvd; 36850444a34SMaggie __be32 rsp_len; /* actual response length */ 36950444a34SMaggie __be32 residue_len; /* residual response length */ 370a36c61f9SKrishna Gudipati struct fchs_s fchs; /* response FC header structure */ 371a36c61f9SKrishna Gudipati }; 372a36c61f9SKrishna Gudipati 373a36c61f9SKrishna Gudipati enum bfi_uf_h2i { 374a36c61f9SKrishna Gudipati BFI_UF_H2I_BUF_POST = 1, 375a36c61f9SKrishna Gudipati }; 376a36c61f9SKrishna Gudipati 377a36c61f9SKrishna Gudipati enum bfi_uf_i2h { 378a36c61f9SKrishna Gudipati BFI_UF_I2H_FRM_RCVD = BFA_I2HM(1), 379a36c61f9SKrishna Gudipati }; 380a36c61f9SKrishna Gudipati 381a36c61f9SKrishna Gudipati #define BFA_UF_MAX_SGES 2 382a36c61f9SKrishna Gudipati 383a36c61f9SKrishna Gudipati struct bfi_uf_buf_post_s { 384a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 385a36c61f9SKrishna Gudipati u16 buf_tag; /* buffer tag */ 38650444a34SMaggie __be16 buf_len; /* total buffer length */ 38785ce928dSKrishna Gudipati struct bfi_alen_s alen; /* buffer address/len pair */ 388a36c61f9SKrishna Gudipati }; 389a36c61f9SKrishna Gudipati 390a36c61f9SKrishna Gudipati struct bfi_uf_frm_rcvd_s { 391a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 392a36c61f9SKrishna Gudipati u16 buf_tag; /* buffer tag */ 393a36c61f9SKrishna Gudipati u16 rsvd; 394a36c61f9SKrishna Gudipati u16 frm_len; /* received frame length */ 395a36c61f9SKrishna Gudipati u16 xfr_len; /* tranferred length */ 396a36c61f9SKrishna Gudipati }; 397a36c61f9SKrishna Gudipati 398a36c61f9SKrishna Gudipati enum bfi_lps_h2i_msgs { 399a36c61f9SKrishna Gudipati BFI_LPS_H2I_LOGIN_REQ = 1, 400a36c61f9SKrishna Gudipati BFI_LPS_H2I_LOGOUT_REQ = 2, 401b704495cSKrishna Gudipati BFI_LPS_H2I_N2N_PID_REQ = 3, 402a36c61f9SKrishna Gudipati }; 403a36c61f9SKrishna Gudipati 404a36c61f9SKrishna Gudipati enum bfi_lps_i2h_msgs { 40543ffdf4dSKrishna Gudipati BFI_LPS_I2H_LOGIN_RSP = BFA_I2HM(1), 40643ffdf4dSKrishna Gudipati BFI_LPS_I2H_LOGOUT_RSP = BFA_I2HM(2), 40743ffdf4dSKrishna Gudipati BFI_LPS_I2H_CVL_EVENT = BFA_I2HM(3), 408a36c61f9SKrishna Gudipati }; 409a36c61f9SKrishna Gudipati 410a36c61f9SKrishna Gudipati struct bfi_lps_login_req_s { 411a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 4123fd45980SKrishna Gudipati u8 bfa_tag; 413a36c61f9SKrishna Gudipati u8 alpa; 41450444a34SMaggie __be16 pdu_size; 415a36c61f9SKrishna Gudipati wwn_t pwwn; 416a36c61f9SKrishna Gudipati wwn_t nwwn; 417a36c61f9SKrishna Gudipati u8 fdisc; 418a36c61f9SKrishna Gudipati u8 auth_en; 419dd5aaf45SKrishna Gudipati u8 lps_role; 420be540a99SKrishna Gudipati u8 bb_scn; 421e6826c96SKrishna Gudipati u32 vvl_flag; 422a36c61f9SKrishna Gudipati }; 423a36c61f9SKrishna Gudipati 424a36c61f9SKrishna Gudipati struct bfi_lps_login_rsp_s { 425a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 4263fd45980SKrishna Gudipati u8 fw_tag; 427a36c61f9SKrishna Gudipati u8 status; 428a36c61f9SKrishna Gudipati u8 lsrjt_rsn; 429a36c61f9SKrishna Gudipati u8 lsrjt_expl; 430a36c61f9SKrishna Gudipati wwn_t port_name; 431a36c61f9SKrishna Gudipati wwn_t node_name; 43250444a34SMaggie __be16 bb_credit; 433a36c61f9SKrishna Gudipati u8 f_port; 434a36c61f9SKrishna Gudipati u8 npiv_en; 435a36c61f9SKrishna Gudipati u32 lp_pid:24; 436a36c61f9SKrishna Gudipati u32 auth_req:8; 437a36c61f9SKrishna Gudipati mac_t lp_mac; 438a36c61f9SKrishna Gudipati mac_t fcf_mac; 439a36c61f9SKrishna Gudipati u8 ext_status; 440a36c61f9SKrishna Gudipati u8 brcd_switch; /* attached peer is brcd switch */ 4413fd45980SKrishna Gudipati u8 bfa_tag; 442bbe37a67SVijaya Mohan Guvva u8 rsvd; 443a36c61f9SKrishna Gudipati }; 444a36c61f9SKrishna Gudipati 445a36c61f9SKrishna Gudipati struct bfi_lps_logout_req_s { 446a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 4473fd45980SKrishna Gudipati u8 fw_tag; 448a36c61f9SKrishna Gudipati u8 rsvd[3]; 449a36c61f9SKrishna Gudipati wwn_t port_name; 450a36c61f9SKrishna Gudipati }; 451a36c61f9SKrishna Gudipati 452a36c61f9SKrishna Gudipati struct bfi_lps_logout_rsp_s { 453a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 4543fd45980SKrishna Gudipati u8 bfa_tag; 455a36c61f9SKrishna Gudipati u8 status; 456a36c61f9SKrishna Gudipati u8 rsvd[2]; 457a36c61f9SKrishna Gudipati }; 458a36c61f9SKrishna Gudipati 459a36c61f9SKrishna Gudipati struct bfi_lps_cvl_event_s { 460a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 4613fd45980SKrishna Gudipati u8 bfa_tag; 462a36c61f9SKrishna Gudipati u8 rsvd[3]; 463a36c61f9SKrishna Gudipati }; 464a36c61f9SKrishna Gudipati 465b704495cSKrishna Gudipati struct bfi_lps_n2n_pid_req_s { 466b704495cSKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 4673fd45980SKrishna Gudipati u8 fw_tag; 468b704495cSKrishna Gudipati u32 lp_pid:24; 469b704495cSKrishna Gudipati }; 470b704495cSKrishna Gudipati 471a36c61f9SKrishna Gudipati union bfi_lps_h2i_msg_u { 472a36c61f9SKrishna Gudipati struct bfi_mhdr_s *msg; 473a36c61f9SKrishna Gudipati struct bfi_lps_login_req_s *login_req; 474a36c61f9SKrishna Gudipati struct bfi_lps_logout_req_s *logout_req; 475b704495cSKrishna Gudipati struct bfi_lps_n2n_pid_req_s *n2n_pid_req; 476a36c61f9SKrishna Gudipati }; 477a36c61f9SKrishna Gudipati 478a36c61f9SKrishna Gudipati union bfi_lps_i2h_msg_u { 479a36c61f9SKrishna Gudipati struct bfi_msg_s *msg; 480a36c61f9SKrishna Gudipati struct bfi_lps_login_rsp_s *login_rsp; 481a36c61f9SKrishna Gudipati struct bfi_lps_logout_rsp_s *logout_rsp; 482a36c61f9SKrishna Gudipati struct bfi_lps_cvl_event_s *cvl_event; 483a36c61f9SKrishna Gudipati }; 484a36c61f9SKrishna Gudipati 485a36c61f9SKrishna Gudipati enum bfi_rport_h2i_msgs { 486a36c61f9SKrishna Gudipati BFI_RPORT_H2I_CREATE_REQ = 1, 487a36c61f9SKrishna Gudipati BFI_RPORT_H2I_DELETE_REQ = 2, 488a36c61f9SKrishna Gudipati BFI_RPORT_H2I_SET_SPEED_REQ = 3, 489a36c61f9SKrishna Gudipati }; 490a36c61f9SKrishna Gudipati 491a36c61f9SKrishna Gudipati enum bfi_rport_i2h_msgs { 492a36c61f9SKrishna Gudipati BFI_RPORT_I2H_CREATE_RSP = BFA_I2HM(1), 493a36c61f9SKrishna Gudipati BFI_RPORT_I2H_DELETE_RSP = BFA_I2HM(2), 494a36c61f9SKrishna Gudipati BFI_RPORT_I2H_QOS_SCN = BFA_I2HM(3), 495bc0e2c2aSKrishna Gudipati BFI_RPORT_I2H_LIP_SCN_ONLINE = BFA_I2HM(4), 496bc0e2c2aSKrishna Gudipati BFI_RPORT_I2H_LIP_SCN_OFFLINE = BFA_I2HM(5), 497bc0e2c2aSKrishna Gudipati BFI_RPORT_I2H_NO_DEV = BFA_I2HM(6), 498a36c61f9SKrishna Gudipati }; 499a36c61f9SKrishna Gudipati 500a36c61f9SKrishna Gudipati struct bfi_rport_create_req_s { 501a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 502a36c61f9SKrishna Gudipati u16 bfa_handle; /* host rport handle */ 50350444a34SMaggie __be16 max_frmsz; /* max rcv pdu size */ 504a36c61f9SKrishna Gudipati u32 pid:24, /* remote port ID */ 5053fd45980SKrishna Gudipati lp_fwtag:8; /* local port tag */ 506a36c61f9SKrishna Gudipati u32 local_pid:24, /* local port ID */ 507a36c61f9SKrishna Gudipati cisc:8; 508a36c61f9SKrishna Gudipati u8 fc_class; /* supported FC classes */ 509a36c61f9SKrishna Gudipati u8 vf_en; /* virtual fabric enable */ 510a36c61f9SKrishna Gudipati u16 vf_id; /* virtual fabric ID */ 511a36c61f9SKrishna Gudipati }; 512a36c61f9SKrishna Gudipati 513a36c61f9SKrishna Gudipati struct bfi_rport_create_rsp_s { 514a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 515a36c61f9SKrishna Gudipati u8 status; /* rport creation status */ 516a36c61f9SKrishna Gudipati u8 rsvd[3]; 517a36c61f9SKrishna Gudipati u16 bfa_handle; /* host rport handle */ 518a36c61f9SKrishna Gudipati u16 fw_handle; /* firmware rport handle */ 519a36c61f9SKrishna Gudipati struct bfa_rport_qos_attr_s qos_attr; /* QoS Attributes */ 520a36c61f9SKrishna Gudipati }; 521a36c61f9SKrishna Gudipati 522a36c61f9SKrishna Gudipati struct bfa_rport_speed_req_s { 523a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 524a36c61f9SKrishna Gudipati u16 fw_handle; /* firmware rport handle */ 525a36c61f9SKrishna Gudipati u8 speed; /* rport's speed via RPSC */ 526a36c61f9SKrishna Gudipati u8 rsvd; 527a36c61f9SKrishna Gudipati }; 528a36c61f9SKrishna Gudipati 529a36c61f9SKrishna Gudipati struct bfi_rport_delete_req_s { 530a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 531a36c61f9SKrishna Gudipati u16 fw_handle; /* firmware rport handle */ 532a36c61f9SKrishna Gudipati u16 rsvd; 533a36c61f9SKrishna Gudipati }; 534a36c61f9SKrishna Gudipati 535a36c61f9SKrishna Gudipati struct bfi_rport_delete_rsp_s { 536a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 537a36c61f9SKrishna Gudipati u16 bfa_handle; /* host rport handle */ 538a36c61f9SKrishna Gudipati u8 status; /* rport deletion status */ 539a36c61f9SKrishna Gudipati u8 rsvd; 540a36c61f9SKrishna Gudipati }; 541a36c61f9SKrishna Gudipati 542a36c61f9SKrishna Gudipati struct bfi_rport_qos_scn_s { 543a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 544a36c61f9SKrishna Gudipati u16 bfa_handle; /* host rport handle */ 545a36c61f9SKrishna Gudipati u16 rsvd; 546a36c61f9SKrishna Gudipati struct bfa_rport_qos_attr_s old_qos_attr; /* Old QoS Attributes */ 547a36c61f9SKrishna Gudipati struct bfa_rport_qos_attr_s new_qos_attr; /* New QoS Attributes */ 548a36c61f9SKrishna Gudipati }; 549a36c61f9SKrishna Gudipati 550bc0e2c2aSKrishna Gudipati struct bfi_rport_lip_scn_s { 551bc0e2c2aSKrishna Gudipati struct bfi_mhdr_s mh; /*!< common msg header */ 552bc0e2c2aSKrishna Gudipati u16 bfa_handle; /*!< host rport handle */ 553bc0e2c2aSKrishna Gudipati u8 status; /*!< scn online status */ 554bc0e2c2aSKrishna Gudipati u8 rsvd; 555bc0e2c2aSKrishna Gudipati struct bfa_fcport_loop_info_s loop_info; 556bc0e2c2aSKrishna Gudipati }; 557bc0e2c2aSKrishna Gudipati 558a36c61f9SKrishna Gudipati union bfi_rport_h2i_msg_u { 559a36c61f9SKrishna Gudipati struct bfi_msg_s *msg; 560a36c61f9SKrishna Gudipati struct bfi_rport_create_req_s *create_req; 561a36c61f9SKrishna Gudipati struct bfi_rport_delete_req_s *delete_req; 562a36c61f9SKrishna Gudipati struct bfi_rport_speed_req_s *speed_req; 563a36c61f9SKrishna Gudipati }; 564a36c61f9SKrishna Gudipati 565a36c61f9SKrishna Gudipati union bfi_rport_i2h_msg_u { 566a36c61f9SKrishna Gudipati struct bfi_msg_s *msg; 567a36c61f9SKrishna Gudipati struct bfi_rport_create_rsp_s *create_rsp; 568a36c61f9SKrishna Gudipati struct bfi_rport_delete_rsp_s *delete_rsp; 569a36c61f9SKrishna Gudipati struct bfi_rport_qos_scn_s *qos_scn_evt; 570bc0e2c2aSKrishna Gudipati struct bfi_rport_lip_scn_s *lip_scn; 571a36c61f9SKrishna Gudipati }; 572a36c61f9SKrishna Gudipati 573a36c61f9SKrishna Gudipati /* 574a36c61f9SKrishna Gudipati * Initiator mode I-T nexus interface defines. 575a36c61f9SKrishna Gudipati */ 576a36c61f9SKrishna Gudipati 577dd5aaf45SKrishna Gudipati enum bfi_itn_h2i { 578dd5aaf45SKrishna Gudipati BFI_ITN_H2I_CREATE_REQ = 1, /* i-t nexus creation */ 579dd5aaf45SKrishna Gudipati BFI_ITN_H2I_DELETE_REQ = 2, /* i-t nexus deletion */ 580a36c61f9SKrishna Gudipati }; 581a36c61f9SKrishna Gudipati 582dd5aaf45SKrishna Gudipati enum bfi_itn_i2h { 583dd5aaf45SKrishna Gudipati BFI_ITN_I2H_CREATE_RSP = BFA_I2HM(1), 584dd5aaf45SKrishna Gudipati BFI_ITN_I2H_DELETE_RSP = BFA_I2HM(2), 585dd5aaf45SKrishna Gudipati BFI_ITN_I2H_SLER_EVENT = BFA_I2HM(3), 586a36c61f9SKrishna Gudipati }; 587a36c61f9SKrishna Gudipati 588dd5aaf45SKrishna Gudipati struct bfi_itn_create_req_s { 589a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 590a36c61f9SKrishna Gudipati u16 fw_handle; /* f/w handle for itnim */ 591a36c61f9SKrishna Gudipati u8 class; /* FC class for IO */ 592a36c61f9SKrishna Gudipati u8 seq_rec; /* sequence recovery support */ 593a36c61f9SKrishna Gudipati u8 msg_no; /* seq id of the msg */ 594dd5aaf45SKrishna Gudipati u8 role; 595a36c61f9SKrishna Gudipati }; 596a36c61f9SKrishna Gudipati 597dd5aaf45SKrishna Gudipati struct bfi_itn_create_rsp_s { 598a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 599a36c61f9SKrishna Gudipati u16 bfa_handle; /* bfa handle for itnim */ 600a36c61f9SKrishna Gudipati u8 status; /* fcp request status */ 601a36c61f9SKrishna Gudipati u8 seq_id; /* seq id of the msg */ 602a36c61f9SKrishna Gudipati }; 603a36c61f9SKrishna Gudipati 604dd5aaf45SKrishna Gudipati struct bfi_itn_delete_req_s { 605a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 606a36c61f9SKrishna Gudipati u16 fw_handle; /* f/w itnim handle */ 607a36c61f9SKrishna Gudipati u8 seq_id; /* seq id of the msg */ 608a36c61f9SKrishna Gudipati u8 rsvd; 609a36c61f9SKrishna Gudipati }; 610a36c61f9SKrishna Gudipati 611dd5aaf45SKrishna Gudipati struct bfi_itn_delete_rsp_s { 612a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 613a36c61f9SKrishna Gudipati u16 bfa_handle; /* bfa handle for itnim */ 614a36c61f9SKrishna Gudipati u8 status; /* fcp request status */ 615a36c61f9SKrishna Gudipati u8 seq_id; /* seq id of the msg */ 616a36c61f9SKrishna Gudipati }; 617a36c61f9SKrishna Gudipati 618dd5aaf45SKrishna Gudipati struct bfi_itn_sler_event_s { 619a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 620a36c61f9SKrishna Gudipati u16 bfa_handle; /* bfa handle for itnim */ 621a36c61f9SKrishna Gudipati u16 rsvd; 622a36c61f9SKrishna Gudipati }; 623a36c61f9SKrishna Gudipati 624dd5aaf45SKrishna Gudipati union bfi_itn_h2i_msg_u { 625dd5aaf45SKrishna Gudipati struct bfi_itn_create_req_s *create_req; 626dd5aaf45SKrishna Gudipati struct bfi_itn_delete_req_s *delete_req; 627a36c61f9SKrishna Gudipati struct bfi_msg_s *msg; 628a36c61f9SKrishna Gudipati }; 629a36c61f9SKrishna Gudipati 630dd5aaf45SKrishna Gudipati union bfi_itn_i2h_msg_u { 631dd5aaf45SKrishna Gudipati struct bfi_itn_create_rsp_s *create_rsp; 632dd5aaf45SKrishna Gudipati struct bfi_itn_delete_rsp_s *delete_rsp; 633dd5aaf45SKrishna Gudipati struct bfi_itn_sler_event_s *sler_event; 634a36c61f9SKrishna Gudipati struct bfi_msg_s *msg; 635a36c61f9SKrishna Gudipati }; 636a36c61f9SKrishna Gudipati 637a36c61f9SKrishna Gudipati /* 638a36c61f9SKrishna Gudipati * Initiator mode IO interface defines. 639a36c61f9SKrishna Gudipati */ 640a36c61f9SKrishna Gudipati 641a36c61f9SKrishna Gudipati enum bfi_ioim_h2i { 642a36c61f9SKrishna Gudipati BFI_IOIM_H2I_IOABORT_REQ = 1, /* IO abort request */ 643a36c61f9SKrishna Gudipati BFI_IOIM_H2I_IOCLEANUP_REQ = 2, /* IO cleanup request */ 644a36c61f9SKrishna Gudipati }; 645a36c61f9SKrishna Gudipati 646a36c61f9SKrishna Gudipati enum bfi_ioim_i2h { 647a36c61f9SKrishna Gudipati BFI_IOIM_I2H_IO_RSP = BFA_I2HM(1), /* non-fp IO response */ 648a36c61f9SKrishna Gudipati BFI_IOIM_I2H_IOABORT_RSP = BFA_I2HM(2), /* ABORT rsp */ 649a36c61f9SKrishna Gudipati }; 650a36c61f9SKrishna Gudipati 651acdc79a6SJing Huang /* 652a36c61f9SKrishna Gudipati * IO command DIF info 653a36c61f9SKrishna Gudipati */ 654a36c61f9SKrishna Gudipati struct bfi_ioim_dif_s { 655a36c61f9SKrishna Gudipati u32 dif_info[4]; 656a36c61f9SKrishna Gudipati }; 657a36c61f9SKrishna Gudipati 658acdc79a6SJing Huang /* 659a36c61f9SKrishna Gudipati * FCP IO messages overview 660a36c61f9SKrishna Gudipati * 661a36c61f9SKrishna Gudipati * @note 662a36c61f9SKrishna Gudipati * - Max CDB length supported is 64 bytes. 663a36c61f9SKrishna Gudipati * - SCSI Linked commands and SCSI bi-directional Commands not 664a36c61f9SKrishna Gudipati * supported. 665a36c61f9SKrishna Gudipati * 666a36c61f9SKrishna Gudipati */ 667a36c61f9SKrishna Gudipati struct bfi_ioim_req_s { 668a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 66950444a34SMaggie __be16 io_tag; /* I/O tag */ 670a36c61f9SKrishna Gudipati u16 rport_hdl; /* itnim/rport firmware handle */ 671a36c61f9SKrishna Gudipati struct fcp_cmnd_s cmnd; /* IO request info */ 672a36c61f9SKrishna Gudipati 673acdc79a6SJing Huang /* 674a36c61f9SKrishna Gudipati * SG elements array within the IO request must be double word 675550116d2SMasahiro Yamada * aligned. This alignment is required to optimize SGM setup for the IO. 676a36c61f9SKrishna Gudipati */ 677a36c61f9SKrishna Gudipati struct bfi_sge_s sges[BFI_SGE_INLINE_MAX]; 678a36c61f9SKrishna Gudipati u8 io_timeout; 679a36c61f9SKrishna Gudipati u8 dif_en; 680a36c61f9SKrishna Gudipati u8 rsvd_a[2]; 681a36c61f9SKrishna Gudipati struct bfi_ioim_dif_s dif; 682a36c61f9SKrishna Gudipati }; 683a36c61f9SKrishna Gudipati 684acdc79a6SJing Huang /* 685a36c61f9SKrishna Gudipati * This table shows various IO status codes from firmware and their 686a36c61f9SKrishna Gudipati * meaning. Host driver can use these status codes to further process 687a36c61f9SKrishna Gudipati * IO completions. 688a36c61f9SKrishna Gudipati * 689a36c61f9SKrishna Gudipati * BFI_IOIM_STS_OK : IO completed with error free SCSI & 690a36c61f9SKrishna Gudipati * transport status. 691a36c61f9SKrishna Gudipati * io-tag can be reused. 692a36c61f9SKrishna Gudipati * 693a36c61f9SKrishna Gudipati * BFA_IOIM_STS_SCSI_ERR : IO completed with scsi error. 694a36c61f9SKrishna Gudipati * - io-tag can be reused. 695a36c61f9SKrishna Gudipati * 696a36c61f9SKrishna Gudipati * BFI_IOIM_STS_HOST_ABORTED : IO was aborted successfully due to 697a36c61f9SKrishna Gudipati * host request. 698a36c61f9SKrishna Gudipati * - io-tag cannot be reused yet. 699a36c61f9SKrishna Gudipati * 700a36c61f9SKrishna Gudipati * BFI_IOIM_STS_ABORTED : IO was aborted successfully 701a36c61f9SKrishna Gudipati * internally by f/w. 702a36c61f9SKrishna Gudipati * - io-tag cannot be reused yet. 703a36c61f9SKrishna Gudipati * 704a36c61f9SKrishna Gudipati * BFI_IOIM_STS_TIMEDOUT : IO timedout and ABTS/RRQ is happening 705a36c61f9SKrishna Gudipati * in the firmware and 706a36c61f9SKrishna Gudipati * - io-tag cannot be reused yet. 707a36c61f9SKrishna Gudipati * 708a36c61f9SKrishna Gudipati * BFI_IOIM_STS_SQER_NEEDED : Firmware could not recover the IO 709a36c61f9SKrishna Gudipati * with sequence level error 710a36c61f9SKrishna Gudipati * logic and hence host needs to retry 711a36c61f9SKrishna Gudipati * this IO with a different IO tag 712a36c61f9SKrishna Gudipati * - io-tag cannot be used yet. 713a36c61f9SKrishna Gudipati * 714a36c61f9SKrishna Gudipati * BFI_IOIM_STS_NEXUS_ABORT : Second Level Error Recovery from host 715a36c61f9SKrishna Gudipati * is required because 2 consecutive ABTS 716a36c61f9SKrishna Gudipati * timedout and host needs logout and 717a36c61f9SKrishna Gudipati * re-login with the target 718a36c61f9SKrishna Gudipati * - io-tag cannot be used yet. 719a36c61f9SKrishna Gudipati * 720a36c61f9SKrishna Gudipati * BFI_IOIM_STS_UNDERRUN : IO completed with SCSI status good, 721a36c61f9SKrishna Gudipati * but the data tranferred is less than 722a36c61f9SKrishna Gudipati * the fcp data length in the command. 723a36c61f9SKrishna Gudipati * ex. SCSI INQUIRY where transferred 724a36c61f9SKrishna Gudipati * data length and residue count in FCP 725a36c61f9SKrishna Gudipati * response accounts for total fcp-dl 726a36c61f9SKrishna Gudipati * - io-tag can be reused. 727a36c61f9SKrishna Gudipati * 728a36c61f9SKrishna Gudipati * BFI_IOIM_STS_OVERRUN : IO completed with SCSI status good, 729a36c61f9SKrishna Gudipati * but the data transerred is more than 730a36c61f9SKrishna Gudipati * fcp data length in the command. ex. 731a36c61f9SKrishna Gudipati * TAPE IOs where blocks can of unequal 732a36c61f9SKrishna Gudipati * lengths. 733a36c61f9SKrishna Gudipati * - io-tag can be reused. 734a36c61f9SKrishna Gudipati * 735a36c61f9SKrishna Gudipati * BFI_IOIM_STS_RES_FREE : Firmware has completed using io-tag 736a36c61f9SKrishna Gudipati * during abort process 737a36c61f9SKrishna Gudipati * - io-tag can be reused. 738a36c61f9SKrishna Gudipati * 739a36c61f9SKrishna Gudipati * BFI_IOIM_STS_PROTO_ERR : Firmware detected a protocol error. 740a36c61f9SKrishna Gudipati * ex target sent more data than 741a36c61f9SKrishna Gudipati * requested, or there was data frame 742a36c61f9SKrishna Gudipati * loss and other reasons 743a36c61f9SKrishna Gudipati * - io-tag cannot be used yet. 744a36c61f9SKrishna Gudipati * 745a36c61f9SKrishna Gudipati * BFI_IOIM_STS_DIF_ERR : Firwmare detected DIF error. ex: DIF 746a36c61f9SKrishna Gudipati * CRC err or Ref Tag err or App tag err. 747a36c61f9SKrishna Gudipati * - io-tag can be reused. 748a36c61f9SKrishna Gudipati * 749a36c61f9SKrishna Gudipati * BFA_IOIM_STS_TSK_MGT_ABORT : IO was aborted because of Task 750a36c61f9SKrishna Gudipati * Management command from the host 751a36c61f9SKrishna Gudipati * - io-tag can be reused. 752a36c61f9SKrishna Gudipati * 753a36c61f9SKrishna Gudipati * BFI_IOIM_STS_UTAG : Firmware does not know about this 754a36c61f9SKrishna Gudipati * io_tag. 755a36c61f9SKrishna Gudipati * - io-tag can be reused. 756a36c61f9SKrishna Gudipati */ 757a36c61f9SKrishna Gudipati enum bfi_ioim_status { 758a36c61f9SKrishna Gudipati BFI_IOIM_STS_OK = 0, 759a36c61f9SKrishna Gudipati BFI_IOIM_STS_HOST_ABORTED = 1, 760a36c61f9SKrishna Gudipati BFI_IOIM_STS_ABORTED = 2, 761a36c61f9SKrishna Gudipati BFI_IOIM_STS_TIMEDOUT = 3, 762a36c61f9SKrishna Gudipati BFI_IOIM_STS_RES_FREE = 4, 763a36c61f9SKrishna Gudipati BFI_IOIM_STS_SQER_NEEDED = 5, 764a36c61f9SKrishna Gudipati BFI_IOIM_STS_PROTO_ERR = 6, 765a36c61f9SKrishna Gudipati BFI_IOIM_STS_UTAG = 7, 766a36c61f9SKrishna Gudipati BFI_IOIM_STS_PATHTOV = 8, 767a36c61f9SKrishna Gudipati }; 768a36c61f9SKrishna Gudipati 769acdc79a6SJing Huang /* 770a36c61f9SKrishna Gudipati * I/O response message 771a36c61f9SKrishna Gudipati */ 772a36c61f9SKrishna Gudipati struct bfi_ioim_rsp_s { 773a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* common msg header */ 77450444a34SMaggie __be16 io_tag; /* completed IO tag */ 775a36c61f9SKrishna Gudipati u16 bfa_rport_hndl; /* releated rport handle */ 776a36c61f9SKrishna Gudipati u8 io_status; /* IO completion status */ 777a36c61f9SKrishna Gudipati u8 reuse_io_tag; /* IO tag can be reused */ 778a36c61f9SKrishna Gudipati u16 abort_tag; /* host abort request tag */ 779a36c61f9SKrishna Gudipati u8 scsi_status; /* scsi status from target */ 780a36c61f9SKrishna Gudipati u8 sns_len; /* scsi sense length */ 781a36c61f9SKrishna Gudipati u8 resid_flags; /* IO residue flags */ 782a36c61f9SKrishna Gudipati u8 rsvd_a; 78350444a34SMaggie __be32 residue; /* IO residual length in bytes */ 784a36c61f9SKrishna Gudipati u32 rsvd_b[3]; 785a36c61f9SKrishna Gudipati }; 786a36c61f9SKrishna Gudipati 787a36c61f9SKrishna Gudipati struct bfi_ioim_abort_req_s { 788a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 78950444a34SMaggie __be16 io_tag; /* I/O tag */ 790a36c61f9SKrishna Gudipati u16 abort_tag; /* unique request tag */ 791a36c61f9SKrishna Gudipati }; 792a36c61f9SKrishna Gudipati 793a36c61f9SKrishna Gudipati /* 794a36c61f9SKrishna Gudipati * Initiator mode task management command interface defines. 795a36c61f9SKrishna Gudipati */ 796a36c61f9SKrishna Gudipati 797a36c61f9SKrishna Gudipati enum bfi_tskim_h2i { 798a36c61f9SKrishna Gudipati BFI_TSKIM_H2I_TM_REQ = 1, /* task-mgmt command */ 799a36c61f9SKrishna Gudipati BFI_TSKIM_H2I_ABORT_REQ = 2, /* task-mgmt command */ 800a36c61f9SKrishna Gudipati }; 801a36c61f9SKrishna Gudipati 802a36c61f9SKrishna Gudipati enum bfi_tskim_i2h { 803a36c61f9SKrishna Gudipati BFI_TSKIM_I2H_TM_RSP = BFA_I2HM(1), 804a36c61f9SKrishna Gudipati }; 805a36c61f9SKrishna Gudipati 806a36c61f9SKrishna Gudipati struct bfi_tskim_req_s { 807a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 80850444a34SMaggie __be16 tsk_tag; /* task management tag */ 809a36c61f9SKrishna Gudipati u16 itn_fhdl; /* itn firmware handle */ 810f314878aSMaggie Zhang struct scsi_lun lun; /* LU number */ 811a36c61f9SKrishna Gudipati u8 tm_flags; /* see enum fcp_tm_cmnd */ 812a36c61f9SKrishna Gudipati u8 t_secs; /* Timeout value in seconds */ 813a36c61f9SKrishna Gudipati u8 rsvd[2]; 814a36c61f9SKrishna Gudipati }; 815a36c61f9SKrishna Gudipati 816a36c61f9SKrishna Gudipati struct bfi_tskim_abortreq_s { 817a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 81850444a34SMaggie __be16 tsk_tag; /* task management tag */ 819a36c61f9SKrishna Gudipati u16 rsvd; 820a36c61f9SKrishna Gudipati }; 821a36c61f9SKrishna Gudipati 822a36c61f9SKrishna Gudipati enum bfi_tskim_status { 823a36c61f9SKrishna Gudipati /* 824a36c61f9SKrishna Gudipati * Following are FCP-4 spec defined status codes, 825a36c61f9SKrishna Gudipati * **DO NOT CHANGE THEM ** 826a36c61f9SKrishna Gudipati */ 827a36c61f9SKrishna Gudipati BFI_TSKIM_STS_OK = 0, 828a36c61f9SKrishna Gudipati BFI_TSKIM_STS_NOT_SUPP = 4, 829a36c61f9SKrishna Gudipati BFI_TSKIM_STS_FAILED = 5, 830a36c61f9SKrishna Gudipati 831acdc79a6SJing Huang /* 832a36c61f9SKrishna Gudipati * Defined by BFA 833a36c61f9SKrishna Gudipati */ 834a36c61f9SKrishna Gudipati BFI_TSKIM_STS_TIMEOUT = 10, /* TM request timedout */ 835a36c61f9SKrishna Gudipati BFI_TSKIM_STS_ABORTED = 11, /* Aborted on host request */ 8361306e31dSKrishna Gudipati BFI_TSKIM_STS_UTAG = 12, /* unknown tag for request */ 837a36c61f9SKrishna Gudipati }; 838a36c61f9SKrishna Gudipati 839a36c61f9SKrishna Gudipati struct bfi_tskim_rsp_s { 840a36c61f9SKrishna Gudipati struct bfi_mhdr_s mh; /* Common msg header */ 84150444a34SMaggie __be16 tsk_tag; /* task mgmt cmnd tag */ 842a36c61f9SKrishna Gudipati u8 tsk_status; /* @ref bfi_tskim_status */ 843a36c61f9SKrishna Gudipati u8 rsvd; 844a36c61f9SKrishna Gudipati }; 845a36c61f9SKrishna Gudipati 846a36c61f9SKrishna Gudipati #pragma pack() 847a36c61f9SKrishna Gudipati 84811189208SKrishna Gudipati /* 84911189208SKrishna Gudipati * Crossbow PCI MSI-X vector defines 85011189208SKrishna Gudipati */ 85111189208SKrishna Gudipati enum { 85211189208SKrishna Gudipati BFI_MSIX_CPE_QMIN_CB = 0, 85311189208SKrishna Gudipati BFI_MSIX_CPE_QMAX_CB = 7, 85411189208SKrishna Gudipati BFI_MSIX_RME_QMIN_CB = 8, 85511189208SKrishna Gudipati BFI_MSIX_RME_QMAX_CB = 15, 85611189208SKrishna Gudipati BFI_MSIX_CB_MAX = 22, 85711189208SKrishna Gudipati }; 85811189208SKrishna Gudipati 85911189208SKrishna Gudipati /* 86011189208SKrishna Gudipati * Catapult FC PCI MSI-X vector defines 86111189208SKrishna Gudipati */ 86211189208SKrishna Gudipati enum { 86311189208SKrishna Gudipati BFI_MSIX_LPU_ERR_CT = 0, 86411189208SKrishna Gudipati BFI_MSIX_CPE_QMIN_CT = 1, 86511189208SKrishna Gudipati BFI_MSIX_CPE_QMAX_CT = 4, 86611189208SKrishna Gudipati BFI_MSIX_RME_QMIN_CT = 5, 86711189208SKrishna Gudipati BFI_MSIX_RME_QMAX_CT = 8, 86811189208SKrishna Gudipati BFI_MSIX_CT_MAX = 9, 86911189208SKrishna Gudipati }; 87011189208SKrishna Gudipati 871a36c61f9SKrishna Gudipati #endif /* __BFI_MS_H__ */ 872