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