1*d14abf15SRobert Mustacchi /* 2*d14abf15SRobert Mustacchi * CDDL HEADER START 3*d14abf15SRobert Mustacchi * 4*d14abf15SRobert Mustacchi * The contents of this file are subject to the terms of the 5*d14abf15SRobert Mustacchi * Common Development and Distribution License (the "License"). 6*d14abf15SRobert Mustacchi * You may not use this file except in compliance with the License. 7*d14abf15SRobert Mustacchi * 8*d14abf15SRobert Mustacchi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*d14abf15SRobert Mustacchi * or http://www.opensolaris.org/os/licensing. 10*d14abf15SRobert Mustacchi * See the License for the specific language governing permissions 11*d14abf15SRobert Mustacchi * and limitations under the License. 12*d14abf15SRobert Mustacchi * 13*d14abf15SRobert Mustacchi * When distributing Covered Code, include this CDDL HEADER in each 14*d14abf15SRobert Mustacchi * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*d14abf15SRobert Mustacchi * If applicable, add the following below this CDDL HEADER, with the 16*d14abf15SRobert Mustacchi * fields enclosed by brackets "[]" replaced with your own identifying 17*d14abf15SRobert Mustacchi * information: Portions Copyright [yyyy] [name of copyright owner] 18*d14abf15SRobert Mustacchi * 19*d14abf15SRobert Mustacchi * CDDL HEADER END 20*d14abf15SRobert Mustacchi */ 21*d14abf15SRobert Mustacchi 22*d14abf15SRobert Mustacchi /* 23*d14abf15SRobert Mustacchi * Copyright 2014 QLogic Corporation 24*d14abf15SRobert Mustacchi * The contents of this file are subject to the terms of the 25*d14abf15SRobert Mustacchi * QLogic End User License (the "License"). 26*d14abf15SRobert Mustacchi * You may not use this file except in compliance with the License. 27*d14abf15SRobert Mustacchi * 28*d14abf15SRobert Mustacchi * You can obtain a copy of the License at 29*d14abf15SRobert Mustacchi * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/ 30*d14abf15SRobert Mustacchi * QLogic_End_User_Software_License.txt 31*d14abf15SRobert Mustacchi * See the License for the specific language governing permissions 32*d14abf15SRobert Mustacchi * and limitations under the License. 33*d14abf15SRobert Mustacchi */ 34*d14abf15SRobert Mustacchi 35*d14abf15SRobert Mustacchi #ifndef __BNXE_BINDING_H 36*d14abf15SRobert Mustacchi #define __BNXE_BINDING_H 37*d14abf15SRobert Mustacchi 38*d14abf15SRobert Mustacchi #include "bcmtype.h" 39*d14abf15SRobert Mustacchi #include "mac_drv_info.h" 40*d14abf15SRobert Mustacchi 41*d14abf15SRobert Mustacchi #define BNXE_BINDING_VERSION \ 42*d14abf15SRobert Mustacchi ((MAJVERSION << 16) | (MINVERSION << 8) | (REVVERSION << 0)) 43*d14abf15SRobert Mustacchi 44*d14abf15SRobert Mustacchi /* cb_ioctl commands sent to bnxe */ 45*d14abf15SRobert Mustacchi #define BNXE_BIND_FCOE 0x0ead0001 46*d14abf15SRobert Mustacchi #define BNXE_UNBIND_FCOE 0x0ead0002 47*d14abf15SRobert Mustacchi 48*d14abf15SRobert Mustacchi 49*d14abf15SRobert Mustacchi /* default FCoE max exchanges is 4096 for SF and 2048 for MF */ 50*d14abf15SRobert Mustacchi #define FCOE_MAX_EXCHANGES_SF 4096 51*d14abf15SRobert Mustacchi #define FCOE_MAX_EXCHANGES_MF 2048 52*d14abf15SRobert Mustacchi 53*d14abf15SRobert Mustacchi 54*d14abf15SRobert Mustacchi #ifndef BNXE_FCOE_WWN_SIZE 55*d14abf15SRobert Mustacchi #define BNXE_FCOE_WWN_SIZE 8 56*d14abf15SRobert Mustacchi #endif 57*d14abf15SRobert Mustacchi 58*d14abf15SRobert Mustacchi typedef struct bnxe_wwn_info 59*d14abf15SRobert Mustacchi { 60*d14abf15SRobert Mustacchi uint32_t fcp_pwwn_provided; 61*d14abf15SRobert Mustacchi uint8_t fcp_pwwn[BNXE_FCOE_WWN_SIZE]; 62*d14abf15SRobert Mustacchi uint32_t fcp_nwwn_provided; 63*d14abf15SRobert Mustacchi uint8_t fcp_nwwn[BNXE_FCOE_WWN_SIZE]; 64*d14abf15SRobert Mustacchi } BnxeWwnInfo; 65*d14abf15SRobert Mustacchi 66*d14abf15SRobert Mustacchi 67*d14abf15SRobert Mustacchi #define FCOE_INFO_FLAG_FORCE_LOAD 0x1 68*d14abf15SRobert Mustacchi 69*d14abf15SRobert Mustacchi #define FCOE_INFO_FLAG_MF_MODE_MASK 0x6 /* bits 2-3 */ 70*d14abf15SRobert Mustacchi #define FCOE_INFO_FLAG_MF_MODE_SF 0x0 /* single function */ 71*d14abf15SRobert Mustacchi #define FCOE_INFO_FLAG_MF_MODE_SD 0x2 /* switch dependent (vlan based) */ 72*d14abf15SRobert Mustacchi #define FCOE_INFO_FLAG_MF_MODE_SI 0x4 /* switch independent (mac based) */ 73*d14abf15SRobert Mustacchi #define FCOE_INFO_FLAG_MF_MODE_AFEX 0x6 /* switch dependent (afex based) */ 74*d14abf15SRobert Mustacchi 75*d14abf15SRobert Mustacchi #define FCOE_INFO_IS_MF_MODE_SF(flags) \ 76*d14abf15SRobert Mustacchi (((flags) & FCOE_INFO_FLAG_MF_MODE_MASK) == FCOE_INFO_FLAG_MF_MODE_SF) 77*d14abf15SRobert Mustacchi #define FCOE_INFO_IS_MF_MODE_SD(flags) \ 78*d14abf15SRobert Mustacchi (((flags) & FCOE_INFO_FLAG_MF_MODE_MASK) == FCOE_INFO_FLAG_MF_MODE_SD) 79*d14abf15SRobert Mustacchi #define FCOE_INFO_IS_MF_MODE_SI(flags) \ 80*d14abf15SRobert Mustacchi (((flags) & FCOE_INFO_FLAG_MF_MODE_MASK) == FCOE_INFO_FLAG_MF_MODE_SI) 81*d14abf15SRobert Mustacchi #define FCOE_INFO_IS_MF_MODE_AFEX(flags) \ 82*d14abf15SRobert Mustacchi (((flags) & FCOE_INFO_FLAG_MF_MODE_MASK) == FCOE_INFO_FLAG_MF_MODE_AFEX) 83*d14abf15SRobert Mustacchi 84*d14abf15SRobert Mustacchi typedef struct bnxe_fcoe_info 85*d14abf15SRobert Mustacchi { 86*d14abf15SRobert Mustacchi u32_t flags; 87*d14abf15SRobert Mustacchi u32_t max_fcoe_conn; 88*d14abf15SRobert Mustacchi u32_t max_fcoe_exchanges; 89*d14abf15SRobert Mustacchi BnxeWwnInfo wwn; 90*d14abf15SRobert Mustacchi } BnxeFcoeInfo; 91*d14abf15SRobert Mustacchi 92*d14abf15SRobert Mustacchi 93*d14abf15SRobert Mustacchi typedef struct bnxe_fcoe_caps 94*d14abf15SRobert Mustacchi { 95*d14abf15SRobert Mustacchi struct fcoe_capabilities fcoe_caps; 96*d14abf15SRobert Mustacchi } BnxeFcoeCaps; 97*d14abf15SRobert Mustacchi 98*d14abf15SRobert Mustacchi 99*d14abf15SRobert Mustacchi /* 100*d14abf15SRobert Mustacchi * cli_ctl - misc control interface up to the client 101*d14abf15SRobert Mustacchi * 102*d14abf15SRobert Mustacchi * cmd: CLI_CTL_LINK_UP - link up event, no data passed 103*d14abf15SRobert Mustacchi * CLI_CTL_LINK_DOWN - link down event, no data passed 104*d14abf15SRobert Mustacchi * CLI_CTL_UNLOAD - graceful unload event, no data passed 105*d14abf15SRobert Mustacchi * 106*d14abf15SRobert Mustacchi * pData: pointer to command data or NULL 107*d14abf15SRobert Mustacchi * 108*d14abf15SRobert Mustacchi * dataLen: length of command data or 0 109*d14abf15SRobert Mustacchi */ 110*d14abf15SRobert Mustacchi #define CLI_CTL_LINK_UP 1 111*d14abf15SRobert Mustacchi #define CLI_CTL_LINK_DOWN 2 112*d14abf15SRobert Mustacchi #define CLI_CTL_UNLOAD 3 113*d14abf15SRobert Mustacchi typedef boolean_t (*cli_ctl)(dev_info_t * pDev, 114*d14abf15SRobert Mustacchi int cmd, 115*d14abf15SRobert Mustacchi void * pData, 116*d14abf15SRobert Mustacchi int dataLen); 117*d14abf15SRobert Mustacchi 118*d14abf15SRobert Mustacchi typedef boolean_t (*cli_indicate_tx)(dev_info_t * pDev, 119*d14abf15SRobert Mustacchi mblk_t * pMblk); 120*d14abf15SRobert Mustacchi 121*d14abf15SRobert Mustacchi typedef boolean_t (*cli_indicate_rx)(dev_info_t * pDev, 122*d14abf15SRobert Mustacchi mblk_t * pMblk); 123*d14abf15SRobert Mustacchi 124*d14abf15SRobert Mustacchi typedef boolean_t (*cli_indicate_cqes)(dev_info_t * pDev, 125*d14abf15SRobert Mustacchi void * cqes[], 126*d14abf15SRobert Mustacchi int cqeCnt); 127*d14abf15SRobert Mustacchi 128*d14abf15SRobert Mustacchi 129*d14abf15SRobert Mustacchi /* 130*d14abf15SRobert Mustacchi * prv_ctl - misc control interface down to the provider 131*d14abf15SRobert Mustacchi * 132*d14abf15SRobert Mustacchi * cmd: PRV_CTL_GET_MAC_ADDR - get MAC Address, pass data buffer to hold addr 133*d14abf15SRobert Mustacchi * PRV_CTL_SET_MAC_ADDR - set MAC Address, pass data buffer contains addr 134*d14abf15SRobert Mustacchi * PRV_CTL_QUERY_PARAMS - query related params, pass BnxeXXXInfo struct 135*d14abf15SRobert Mustacchi * PRV_CTL_DISABLE_INTR - disable interrupts, no data passed 136*d14abf15SRobert Mustacchi * PRV_CTL_ENABLE_INTR - enable interrupts, no data passed 137*d14abf15SRobert Mustacchi * PRV_CTL_MBA_BOOT - check if MBA performed network boot 138*d14abf15SRobert Mustacchi * PRV_CTL_LINK_STATE - query the link state, pass boolean buffer 139*d14abf15SRobert Mustacchi * PRV_CTL_BOARD_TYPE - query the board type, pass string buffer 140*d14abf15SRobert Mustacchi * PRV_CTL_BOARD_SERNUM - query the board's serial number, pass string buffer 141*d14abf15SRobert Mustacchi * PRV_CTL_BOOTCODE_VERSION - query the MFW bootcode version, pass string buffer 142*d14abf15SRobert Mustacchi * PRV_CTL_REPORT_FCOE_STATS - report FCoE stats, pass filled in fcoe_stats_info_t 143*d14abf15SRobert Mustacchi * PRV_CTL_SET_CAPS - report FCoE capabilities, pass filled in BnxeFcoeCaps struct 144*d14abf15SRobert Mustacchi * 145*d14abf15SRobert Mustacchi * pData: pointer to command data or NULL 146*d14abf15SRobert Mustacchi * 147*d14abf15SRobert Mustacchi * dataLen: length of command data or 0 148*d14abf15SRobert Mustacchi * 149*d14abf15SRobert Mustacchi * returns: TRUE upon success, FALSE otherwise 150*d14abf15SRobert Mustacchi */ 151*d14abf15SRobert Mustacchi #define PRV_CTL_GET_MAC_ADDR 1 152*d14abf15SRobert Mustacchi #define PRV_CTL_SET_MAC_ADDR 2 153*d14abf15SRobert Mustacchi #define PRV_CTL_QUERY_PARAMS 3 154*d14abf15SRobert Mustacchi #define PRV_CTL_DISABLE_INTR 4 155*d14abf15SRobert Mustacchi #define PRV_CTL_ENABLE_INTR 5 156*d14abf15SRobert Mustacchi #define PRV_CTL_MBA_BOOT 6 157*d14abf15SRobert Mustacchi #define PRV_CTL_LINK_STATE 7 158*d14abf15SRobert Mustacchi #define PRV_CTL_BOARD_TYPE 8 159*d14abf15SRobert Mustacchi #define PRV_CTL_BOARD_SERNUM 9 160*d14abf15SRobert Mustacchi #define PRV_CTL_BOOTCODE_VERSION 10 161*d14abf15SRobert Mustacchi #define PRV_CTL_REPORT_FCOE_STATS 11 162*d14abf15SRobert Mustacchi #define PRV_CTL_SET_CAPS 12 163*d14abf15SRobert Mustacchi typedef boolean_t (*prv_ctl)(dev_info_t * pDev, 164*d14abf15SRobert Mustacchi int cmd, 165*d14abf15SRobert Mustacchi void * pData, 166*d14abf15SRobert Mustacchi int dataLen); 167*d14abf15SRobert Mustacchi 168*d14abf15SRobert Mustacchi #define PRV_TX_VLAN_TAG 1 169*d14abf15SRobert Mustacchi typedef mblk_t * (*prv_tx)(dev_info_t * pDev, 170*d14abf15SRobert Mustacchi mblk_t * pMblk, 171*d14abf15SRobert Mustacchi u32_t flags, 172*d14abf15SRobert Mustacchi u16_t vlan_tag); 173*d14abf15SRobert Mustacchi 174*d14abf15SRobert Mustacchi typedef boolean_t (*prv_poll)(dev_info_t * pDev); 175*d14abf15SRobert Mustacchi 176*d14abf15SRobert Mustacchi typedef boolean_t (*prv_send_wqes)(dev_info_t * pDev, 177*d14abf15SRobert Mustacchi void * wqes[], 178*d14abf15SRobert Mustacchi int wqeCnt); 179*d14abf15SRobert Mustacchi 180*d14abf15SRobert Mustacchi typedef boolean_t (*prv_map_mailboxq)(dev_info_t * pDev, 181*d14abf15SRobert Mustacchi u32_t cid, 182*d14abf15SRobert Mustacchi void ** ppMap, 183*d14abf15SRobert Mustacchi ddi_acc_handle_t * pAccHandle); 184*d14abf15SRobert Mustacchi 185*d14abf15SRobert Mustacchi typedef boolean_t (*prv_unmap_mailboxq)(dev_info_t * pDev, 186*d14abf15SRobert Mustacchi u32_t cid, 187*d14abf15SRobert Mustacchi void * pMap, 188*d14abf15SRobert Mustacchi ddi_acc_handle_t accHandle); 189*d14abf15SRobert Mustacchi 190*d14abf15SRobert Mustacchi 191*d14abf15SRobert Mustacchi typedef struct bnxe_binding 192*d14abf15SRobert Mustacchi { 193*d14abf15SRobert Mustacchi u32_t version; 194*d14abf15SRobert Mustacchi 195*d14abf15SRobert Mustacchi dev_info_t * pCliDev; /* bnxe client */ 196*d14abf15SRobert Mustacchi 197*d14abf15SRobert Mustacchi cli_ctl cliCtl; 198*d14abf15SRobert Mustacchi cli_indicate_tx cliIndicateTx; 199*d14abf15SRobert Mustacchi cli_indicate_rx cliIndicateRx; 200*d14abf15SRobert Mustacchi cli_indicate_cqes cliIndicateCqes; 201*d14abf15SRobert Mustacchi 202*d14abf15SRobert Mustacchi u32_t numRxDescs; 203*d14abf15SRobert Mustacchi u32_t numTxDescs; 204*d14abf15SRobert Mustacchi 205*d14abf15SRobert Mustacchi dev_info_t * pPrvDev; /* bnxe */ 206*d14abf15SRobert Mustacchi 207*d14abf15SRobert Mustacchi prv_ctl prvCtl; 208*d14abf15SRobert Mustacchi prv_tx prvTx; 209*d14abf15SRobert Mustacchi prv_poll prvPoll; 210*d14abf15SRobert Mustacchi prv_send_wqes prvSendWqes; 211*d14abf15SRobert Mustacchi prv_map_mailboxq prvMapMailboxq; 212*d14abf15SRobert Mustacchi prv_unmap_mailboxq prvUnmapMailboxq; 213*d14abf15SRobert Mustacchi } BnxeBinding; 214*d14abf15SRobert Mustacchi 215*d14abf15SRobert Mustacchi #endif /* __BNXE_BINDING_H */ 216*d14abf15SRobert Mustacchi 217