#ifndef __BNXE_BINDING_H
#define __BNXE_BINDING_H
#include "bcmtype.h"
#include "mac_drv_info.h"
#define BNXE_BINDING_VERSION \
((MAJVERSION << 16) | (MINVERSION << 8) | (REVVERSION << 0))
#define BNXE_BIND_FCOE 0x0ead0001
#define BNXE_UNBIND_FCOE 0x0ead0002
#define FCOE_MAX_EXCHANGES_SF 4096
#define FCOE_MAX_EXCHANGES_MF 2048
#ifndef BNXE_FCOE_WWN_SIZE
#define BNXE_FCOE_WWN_SIZE 8
#endif
typedef struct bnxe_wwn_info
{
uint32_t fcp_pwwn_provided;
uint8_t fcp_pwwn[BNXE_FCOE_WWN_SIZE];
uint32_t fcp_nwwn_provided;
uint8_t fcp_nwwn[BNXE_FCOE_WWN_SIZE];
} BnxeWwnInfo;
#define FCOE_INFO_FLAG_FORCE_LOAD 0x1
#define FCOE_INFO_FLAG_MF_MODE_MASK 0x6
#define FCOE_INFO_FLAG_MF_MODE_SF 0x0
#define FCOE_INFO_FLAG_MF_MODE_SD 0x2
#define FCOE_INFO_FLAG_MF_MODE_SI 0x4
#define FCOE_INFO_FLAG_MF_MODE_AFEX 0x6
#define FCOE_INFO_IS_MF_MODE_SF(flags) \
(((flags) & FCOE_INFO_FLAG_MF_MODE_MASK) == FCOE_INFO_FLAG_MF_MODE_SF)
#define FCOE_INFO_IS_MF_MODE_SD(flags) \
(((flags) & FCOE_INFO_FLAG_MF_MODE_MASK) == FCOE_INFO_FLAG_MF_MODE_SD)
#define FCOE_INFO_IS_MF_MODE_SI(flags) \
(((flags) & FCOE_INFO_FLAG_MF_MODE_MASK) == FCOE_INFO_FLAG_MF_MODE_SI)
#define FCOE_INFO_IS_MF_MODE_AFEX(flags) \
(((flags) & FCOE_INFO_FLAG_MF_MODE_MASK) == FCOE_INFO_FLAG_MF_MODE_AFEX)
typedef struct bnxe_fcoe_info
{
u32_t flags;
u32_t max_fcoe_conn;
u32_t max_fcoe_exchanges;
BnxeWwnInfo wwn;
} BnxeFcoeInfo;
typedef struct bnxe_fcoe_caps
{
struct fcoe_capabilities fcoe_caps;
} BnxeFcoeCaps;
#define CLI_CTL_LINK_UP 1
#define CLI_CTL_LINK_DOWN 2
#define CLI_CTL_UNLOAD 3
typedef boolean_t (*cli_ctl)(dev_info_t * pDev,
int cmd,
void * pData,
int dataLen);
typedef boolean_t (*cli_indicate_tx)(dev_info_t * pDev,
mblk_t * pMblk);
typedef boolean_t (*cli_indicate_rx)(dev_info_t * pDev,
mblk_t * pMblk);
typedef boolean_t (*cli_indicate_cqes)(dev_info_t * pDev,
void * cqes[],
int cqeCnt);
#define PRV_CTL_GET_MAC_ADDR 1
#define PRV_CTL_SET_MAC_ADDR 2
#define PRV_CTL_QUERY_PARAMS 3
#define PRV_CTL_DISABLE_INTR 4
#define PRV_CTL_ENABLE_INTR 5
#define PRV_CTL_MBA_BOOT 6
#define PRV_CTL_LINK_STATE 7
#define PRV_CTL_BOARD_TYPE 8
#define PRV_CTL_BOARD_SERNUM 9
#define PRV_CTL_BOOTCODE_VERSION 10
#define PRV_CTL_REPORT_FCOE_STATS 11
#define PRV_CTL_SET_CAPS 12
typedef boolean_t (*prv_ctl)(dev_info_t * pDev,
int cmd,
void * pData,
int dataLen);
#define PRV_TX_VLAN_TAG 1
typedef mblk_t * (*prv_tx)(dev_info_t * pDev,
mblk_t * pMblk,
u32_t flags,
u16_t vlan_tag);
typedef boolean_t (*prv_poll)(dev_info_t * pDev);
typedef boolean_t (*prv_send_wqes)(dev_info_t * pDev,
void * wqes[],
int wqeCnt);
typedef boolean_t (*prv_map_mailboxq)(dev_info_t * pDev,
u32_t cid,
void ** ppMap,
ddi_acc_handle_t * pAccHandle);
typedef boolean_t (*prv_unmap_mailboxq)(dev_info_t * pDev,
u32_t cid,
void * pMap,
ddi_acc_handle_t accHandle);
typedef struct bnxe_binding
{
u32_t version;
dev_info_t * pCliDev;
cli_ctl cliCtl;
cli_indicate_tx cliIndicateTx;
cli_indicate_rx cliIndicateRx;
cli_indicate_cqes cliIndicateCqes;
u32_t numRxDescs;
u32_t numTxDescs;
dev_info_t * pPrvDev;
prv_ctl prvCtl;
prv_tx prvTx;
prv_poll prvPoll;
prv_send_wqes prvSendWqes;
prv_map_mailboxq prvMapMailboxq;
prv_unmap_mailboxq prvUnmapMailboxq;
} BnxeBinding;
#endif