| /* |
| * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. |
| * All rights reserved |
| * www.brocade.com |
| * |
| * Linux driver for Brocade Fibre Channel Host Bus Adapter. |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License (GPL) Version 2 as |
| * published by the Free Software Foundation |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * General Public License for more details. |
| */ |
| |
| #ifndef __BFI_IOCFC_H__ |
| #define __BFI_IOCFC_H__ |
| |
| #include "bfi.h" |
| #include <bfi/bfi_pbc.h> |
| #include <defs/bfa_defs_ioc.h> |
| #include <defs/bfa_defs_iocfc.h> |
| #include <defs/bfa_defs_boot.h> |
| |
| #pragma pack(1) |
| |
| enum bfi_iocfc_h2i_msgs { |
| BFI_IOCFC_H2I_CFG_REQ = 1, |
| BFI_IOCFC_H2I_GET_STATS_REQ = 2, |
| BFI_IOCFC_H2I_CLEAR_STATS_REQ = 3, |
| BFI_IOCFC_H2I_SET_INTR_REQ = 4, |
| BFI_IOCFC_H2I_UPDATEQ_REQ = 5, |
| }; |
| |
| enum bfi_iocfc_i2h_msgs { |
| BFI_IOCFC_I2H_CFG_REPLY = BFA_I2HM(1), |
| BFI_IOCFC_I2H_GET_STATS_RSP = BFA_I2HM(2), |
| BFI_IOCFC_I2H_CLEAR_STATS_RSP = BFA_I2HM(3), |
| BFI_IOCFC_I2H_UPDATEQ_RSP = BFA_I2HM(5), |
| }; |
| |
| struct bfi_iocfc_cfg_s { |
| u8 num_cqs; /* Number of CQs to be used */ |
| u8 sense_buf_len; /* SCSI sense length */ |
| u8 trunk_enabled; /* port trunking enabled */ |
| u8 trunk_ports; /* trunk ports bit map */ |
| u32 endian_sig; /* endian signature of host */ |
| |
| /** |
| * 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]; |
| u16 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]; |
| u16 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; /* IO sense buffer base address */ |
| 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]; |
| }; |
| |
| struct bfi_iocfc_cfgrsp_s { |
| struct bfa_iocfc_fwcfg_s fwcfg; |
| struct bfa_iocfc_intr_attr_s intr_attr; |
| struct bfi_iocfc_bootwwns bootwwns; |
| struct bfi_pbc_s pbc_cfg; |
| }; |
| |
| /** |
| * BFI_IOCFC_H2I_CFG_REQ message |
| */ |
| struct bfi_iocfc_cfg_req_s { |
| struct bfi_mhdr_s mh; |
| union bfi_addr_u ioc_cfg_dma_addr; |
| }; |
| |
| /** |
| * BFI_IOCFC_I2H_CFG_REPLY message |
| */ |
| struct bfi_iocfc_cfg_reply_s { |
| struct bfi_mhdr_s mh; /* Common msg header */ |
| u8 cfg_success; /* cfg reply status */ |
| u8 lpu_bm; /* LPUs assigned for this IOC */ |
| u8 rsvd[2]; |
| }; |
| |
| /** |
| * BFI_IOCFC_H2I_GET_STATS_REQ & BFI_IOCFC_H2I_CLEAR_STATS_REQ messages |
| */ |
| struct bfi_iocfc_stats_req_s { |
| struct bfi_mhdr_s mh; /* msg header */ |
| u32 msgtag; /* msgtag for reply */ |
| }; |
| |
| /** |
| * BFI_IOCFC_I2H_GET_STATS_RSP & BFI_IOCFC_I2H_CLEAR_STATS_RSP messages |
| */ |
| struct bfi_iocfc_stats_rsp_s { |
| struct bfi_mhdr_s mh; /* common msg header */ |
| u8 status; /* reply status */ |
| u8 rsvd[3]; |
| u32 msgtag; /* msgtag for reply */ |
| }; |
| |
| /** |
| * BFI_IOCFC_H2I_SET_INTR_REQ message |
| */ |
| struct bfi_iocfc_set_intr_req_s { |
| struct bfi_mhdr_s mh; /* common msg header */ |
| u8 coalesce; /* enable intr coalescing*/ |
| u8 rsvd[3]; |
| u16 delay; /* delay timer 0..1125us */ |
| u16 latency; /* latency timer 0..225us */ |
| }; |
| |
| /** |
| * BFI_IOCFC_H2I_UPDATEQ_REQ message |
| */ |
| struct bfi_iocfc_updateq_req_s { |
| struct bfi_mhdr_s mh; /* common msg header */ |
| u32 reqq_ba; /* reqq base addr */ |
| u32 rspq_ba; /* rspq base addr */ |
| u32 reqq_sci; /* reqq shadow ci */ |
| u32 rspq_spi; /* rspq shadow pi */ |
| }; |
| |
| /** |
| * BFI_IOCFC_I2H_UPDATEQ_RSP message |
| */ |
| struct bfi_iocfc_updateq_rsp_s { |
| struct bfi_mhdr_s mh; /* common msg header */ |
| u8 status; /* updateq status */ |
| u8 rsvd[3]; |
| }; |
| |
| /** |
| * H2I Messages |
| */ |
| union bfi_iocfc_h2i_msg_u { |
| struct bfi_mhdr_s mh; |
| struct bfi_iocfc_cfg_req_s cfg_req; |
| struct bfi_iocfc_stats_req_s stats_get; |
| struct bfi_iocfc_stats_req_s stats_clr; |
| struct bfi_iocfc_updateq_req_s updateq_req; |
| u32 mboxmsg[BFI_IOC_MSGSZ]; |
| }; |
| |
| /** |
| * I2H Messages |
| */ |
| union bfi_iocfc_i2h_msg_u { |
| struct bfi_mhdr_s mh; |
| struct bfi_iocfc_cfg_reply_s cfg_reply; |
| struct bfi_iocfc_stats_rsp_s stats_get_rsp; |
| struct bfi_iocfc_stats_rsp_s stats_clr_rsp; |
| struct bfi_iocfc_updateq_rsp_s updateq_rsp; |
| u32 mboxmsg[BFI_IOC_MSGSZ]; |
| }; |
| |
| #pragma pack() |
| |
| #endif /* __BFI_IOCFC_H__ */ |
| |