178 lines
4.8 KiB
C
178 lines
4.8 KiB
C
|
/*
|
||
|
* 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 <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;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* 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__ */
|
||
|
|