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  * Copyright 2014 QLogic Corporation
22*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
23*d14abf15SRobert Mustacchi  * QLogic End User License (the "License").
24*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
25*d14abf15SRobert Mustacchi  *
26*d14abf15SRobert Mustacchi  * You can obtain a copy of the License at
27*d14abf15SRobert Mustacchi  * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
28*d14abf15SRobert Mustacchi  * QLogic_End_User_Software_License.txt
29*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
30*d14abf15SRobert Mustacchi  * and limitations under the License.
31*d14abf15SRobert Mustacchi  *
32*d14abf15SRobert Mustacchi  *
33*d14abf15SRobert Mustacchi  * Module Description:
34*d14abf15SRobert Mustacchi  *
35*d14abf15SRobert Mustacchi  *
36*d14abf15SRobert Mustacchi  * History:
37*d14abf15SRobert Mustacchi  *    10/09/01 Hav Khauv        Inception.
38*d14abf15SRobert Mustacchi  ******************************************************************************/
39*d14abf15SRobert Mustacchi 
40*d14abf15SRobert Mustacchi #ifndef _LM_H
41*d14abf15SRobert Mustacchi #define _LM_H
42*d14abf15SRobert Mustacchi 
43*d14abf15SRobert Mustacchi #include "lm_defs.h"
44*d14abf15SRobert Mustacchi #include "listq.h"
45*d14abf15SRobert Mustacchi #include "iscsi_info.h"
46*d14abf15SRobert Mustacchi 
47*d14abf15SRobert Mustacchi /*******************************************************************************
48*d14abf15SRobert Mustacchi  * Constants.
49*d14abf15SRobert Mustacchi  ******************************************************************************/
50*d14abf15SRobert Mustacchi 
51*d14abf15SRobert Mustacchi #define BAD_DEFAULT_VALUE                   0xffffffff
52*d14abf15SRobert Mustacchi 
53*d14abf15SRobert Mustacchi #define ETHERNET_ADDRESS_SIZE               6
54*d14abf15SRobert Mustacchi #define ETHERNET_PACKET_HEADER_SIZE         14
55*d14abf15SRobert Mustacchi #define ETHERNET_VLAN_TAG_SIZE              4
56*d14abf15SRobert Mustacchi #define ETHERNET_LLC_SNAP_SIZE              8
57*d14abf15SRobert Mustacchi #define ETHERNET_CRC32_SIZE                 4
58*d14abf15SRobert Mustacchi #define ETHERNET_GRE_SIZE                   8
59*d14abf15SRobert Mustacchi 
60*d14abf15SRobert Mustacchi #define MIN_ETHERNET_PACKET_SIZE            60
61*d14abf15SRobert Mustacchi 
62*d14abf15SRobert Mustacchi // VLAN TAG
63*d14abf15SRobert Mustacchi #define ETHERNET_VLAN_ID_MASK                    (0xFFF<<0)
64*d14abf15SRobert Mustacchi #define ETHERNET_VLAN_ID_OFFSET                  (0)
65*d14abf15SRobert Mustacchi #define ETHERNET_CFI_MASK                        (0x1<<12)
66*d14abf15SRobert Mustacchi #define ETHERNET_CFI_OFFSET                      (12)
67*d14abf15SRobert Mustacchi #define ETHERNET_PRIORITY_MASK                   (0x7<<13)
68*d14abf15SRobert Mustacchi #define ETHERNET_PRIORITY_OFFSET                 (13)
69*d14abf15SRobert Mustacchi 
70*d14abf15SRobert Mustacchi #define VLAN_TAGGED_FRAME_ETH_TYPE          0x8100
71*d14abf15SRobert Mustacchi 
72*d14abf15SRobert Mustacchi #define ATOMIC_MOVE_MAC                     1
73*d14abf15SRobert Mustacchi /*******************************************************************************
74*d14abf15SRobert Mustacchi  * Forward definition.
75*d14abf15SRobert Mustacchi  ******************************************************************************/
76*d14abf15SRobert Mustacchi 
77*d14abf15SRobert Mustacchi /* Main device structure. */
78*d14abf15SRobert Mustacchi /* typedef struct _lm_device_t lm_device_t; */
79*d14abf15SRobert Mustacchi struct _lm_device_t;
80*d14abf15SRobert Mustacchi 
81*d14abf15SRobert Mustacchi /* Packet descriptor for sending/receiving packets. */
82*d14abf15SRobert Mustacchi /* typedef struct _lm_packet_t lm_packet_t; */
83*d14abf15SRobert Mustacchi struct _lm_packet_t;
84*d14abf15SRobert Mustacchi 
85*d14abf15SRobert Mustacchi 
86*d14abf15SRobert Mustacchi /* Current link information */
87*d14abf15SRobert Mustacchi struct _lm_reported_link_params_t;
88*d14abf15SRobert Mustacchi 
89*d14abf15SRobert Mustacchi /* typedef struct _lm_dcbx_ie_local_classif_vars_t lm_dcbx_ie_local_classif_vars_t; */
90*d14abf15SRobert Mustacchi struct _lm_dcbx_ie_local_classif_vars_t;
91*d14abf15SRobert Mustacchi /* structure for represnting an array of slow-path cqes */
92*d14abf15SRobert Mustacchi struct _sp_cqes_info;
93*d14abf15SRobert Mustacchi 
94*d14abf15SRobert Mustacchi /* LLDP structure for GET_LLDP_PARAMS */
95*d14abf15SRobert Mustacchi struct _b10_lldp_params_get_t;
96*d14abf15SRobert Mustacchi 
97*d14abf15SRobert Mustacchi /* DCBX structure for GET_DCBX_PARAMS */
98*d14abf15SRobert Mustacchi struct _b10_dcbx_params_get_t;
99*d14abf15SRobert Mustacchi 
100*d14abf15SRobert Mustacchi /* structure for B10_IOC_GET_TRANSCEIVER_DATA */
101*d14abf15SRobert Mustacchi struct _b10_transceiver_data_t;
102*d14abf15SRobert Mustacchi 
103*d14abf15SRobert Mustacchi /*******************************************************************************
104*d14abf15SRobert Mustacchi  * Network wake-up frame.
105*d14abf15SRobert Mustacchi  ******************************************************************************/
106*d14abf15SRobert Mustacchi 
107*d14abf15SRobert Mustacchi #ifndef LM_NWUF_PATTERN_SIZE
108*d14abf15SRobert Mustacchi #define LM_NWUF_PATTERN_SIZE                    128
109*d14abf15SRobert Mustacchi #endif
110*d14abf15SRobert Mustacchi #define LM_NWUF_PATTERN_MASK_SIZE               (LM_NWUF_PATTERN_SIZE/8) // (8 = sizeof(byte)) ==> 16
111*d14abf15SRobert Mustacchi #define MAX_IGU_ATTN_ACK_TO                     100
112*d14abf15SRobert Mustacchi /* Wake-up frame pattern. */
113*d14abf15SRobert Mustacchi typedef struct _lm_nwuf_pattern_t
114*d14abf15SRobert Mustacchi {
115*d14abf15SRobert Mustacchi     u32_t size;         /* Mask size */
116*d14abf15SRobert Mustacchi     u32_t pattern_size; /* Pattern size */
117*d14abf15SRobert Mustacchi     u8_t  mask    [LM_NWUF_PATTERN_MASK_SIZE]; // 16 bytes  --> (128 bits - each bit represents pattern byte)
118*d14abf15SRobert Mustacchi     u8_t  pattern [LM_NWUF_PATTERN_SIZE];      // 128 bytes --> (1024 bits)
119*d14abf15SRobert Mustacchi     u32_t crc32 ;                              // crc32 on (pattern & mask)
120*d14abf15SRobert Mustacchi } lm_nwuf_t;
121*d14abf15SRobert Mustacchi 
122*d14abf15SRobert Mustacchi 
123*d14abf15SRobert Mustacchi #ifndef LM_MAX_NWUF_CNT
124*d14abf15SRobert Mustacchi #define LM_MAX_NWUF_CNT                         8
125*d14abf15SRobert Mustacchi #endif
126*d14abf15SRobert Mustacchi 
127*d14abf15SRobert Mustacchi typedef struct _lm_nwuf_list_t
128*d14abf15SRobert Mustacchi {
129*d14abf15SRobert Mustacchi     lm_nwuf_t nwuf_arr[LM_MAX_NWUF_CNT];
130*d14abf15SRobert Mustacchi     u32_t cnt;
131*d14abf15SRobert Mustacchi } lm_nwuf_list_t;
132*d14abf15SRobert Mustacchi 
133*d14abf15SRobert Mustacchi 
134*d14abf15SRobert Mustacchi 
135*d14abf15SRobert Mustacchi 
136*d14abf15SRobert Mustacchi typedef u32_t lm_interrupt_status_t;
137*d14abf15SRobert Mustacchi 
138*d14abf15SRobert Mustacchi 
139*d14abf15SRobert Mustacchi 
140*d14abf15SRobert Mustacchi /*******************************************************************************
141*d14abf15SRobert Mustacchi  * Function prototypes.
142*d14abf15SRobert Mustacchi  ******************************************************************************/
143*d14abf15SRobert Mustacchi 
144*d14abf15SRobert Mustacchi /* Description:
145*d14abf15SRobert Mustacchi  *    1.  Retrieves the adapter information, such as IRQ, BAR, chip
146*d14abf15SRobert Mustacchi  *        IDs, MAC address, etc.
147*d14abf15SRobert Mustacchi  *    2.  Maps the BAR to system address space so hardware registers are
148*d14abf15SRobert Mustacchi  *        accessible.
149*d14abf15SRobert Mustacchi  *    3.  Initializes the default parameters in 'pdev'.
150*d14abf15SRobert Mustacchi  *    4.  Reads user configurations.
151*d14abf15SRobert Mustacchi  *    5.  Resets the transceiver.
152*d14abf15SRobert Mustacchi  * This routine calls the following mm routines:
153*d14abf15SRobert Mustacchi  *    mm_map_io_base, mm_get_user_config. */
154*d14abf15SRobert Mustacchi lm_status_t
155*d14abf15SRobert Mustacchi lm_get_dev_info(
156*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
157*d14abf15SRobert Mustacchi 
158*d14abf15SRobert Mustacchi /**
159*d14abf15SRobert Mustacchi  * @Description
160*d14abf15SRobert Mustacchi  *     This function is responsible for reading all the data
161*d14abf15SRobert Mustacchi  *     that the driver needs before loading from the shmem.
162*d14abf15SRobert Mustacchi  *
163*d14abf15SRobert Mustacchi  * @param pdev
164*d14abf15SRobert Mustacchi  *
165*d14abf15SRobert Mustacchi  * @return lm_status_t
166*d14abf15SRobert Mustacchi  */
167*d14abf15SRobert Mustacchi lm_status_t
168*d14abf15SRobert Mustacchi lm_get_shmem_info(
169*d14abf15SRobert Mustacchi         struct _lm_device_t *pdev);
170*d14abf15SRobert Mustacchi 
171*d14abf15SRobert Mustacchi /* Description:
172*d14abf15SRobert Mustacchi *    This routine is called during driver initialization.  It is responsible
173*d14abf15SRobert Mustacchi *    for allocating memory resources needed by the driver for common init.
174*d14abf15SRobert Mustacchi *    This routine calls the following mm routines:
175*d14abf15SRobert Mustacchi *    mm_alloc_mem, mm_alloc_phys_mem, and mm_init_packet_desc. */
176*d14abf15SRobert Mustacchi lm_status_t
177*d14abf15SRobert Mustacchi lm_alloc_resc(
178*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
179*d14abf15SRobert Mustacchi 
180*d14abf15SRobert Mustacchi /* Description:
181*d14abf15SRobert Mustacchi *    This routine is called during driver initialization.  It is responsible
182*d14abf15SRobert Mustacchi *    for initilazing  memory resources needed by the driver for common init.
183*d14abf15SRobert Mustacchi *    This routine calls the following mm routines:
184*d14abf15SRobert Mustacchi *    mm_alloc_mem, mm_alloc_phys_mem, and mm_init_packet_desc. */
185*d14abf15SRobert Mustacchi lm_status_t
186*d14abf15SRobert Mustacchi lm_setup_resc(
187*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
188*d14abf15SRobert Mustacchi 
189*d14abf15SRobert Mustacchi 
190*d14abf15SRobert Mustacchi lm_status_t lm_service_eq_intr(struct _lm_device_t * pdev);
191*d14abf15SRobert Mustacchi 
192*d14abf15SRobert Mustacchi typedef enum _lm_abort_op_t
193*d14abf15SRobert Mustacchi {
194*d14abf15SRobert Mustacchi     ABORT_OP_RX_CHAIN          = 1,
195*d14abf15SRobert Mustacchi     ABORT_OP_TPA_CHAIN          = 2,
196*d14abf15SRobert Mustacchi     ABORT_OP_INDICATE_TX_CHAIN  = 3,
197*d14abf15SRobert Mustacchi     ABORT_OP_INDICATE_RX_CHAIN  = 4,
198*d14abf15SRobert Mustacchi     ABORT_OP_INDICATE_TPA_CHAIN = 5,
199*d14abf15SRobert Mustacchi     ABORT_OP_MAX                = 6,
200*d14abf15SRobert Mustacchi } lm_abort_op_t ;
201*d14abf15SRobert Mustacchi 
202*d14abf15SRobert Mustacchi /* Each log type has its own parameters    |-------------------------------------------------------------------------------------------------------| */
203*d14abf15SRobert Mustacchi typedef enum lm_log_id {                /* | MSGLOG name (msglog.mc)          | (req params)   | elink cb name                    | elink cb params| */
204*d14abf15SRobert Mustacchi                                         /* | ---------------------------------|----------------|----------------------------------|----------------| */
205*d14abf15SRobert Mustacchi     LM_LOG_ID_UNQUAL_IO_MODULE    = 0,  /* | MSGLOG_SFP_PLUS_UNQUAL_IO_MODULE | port, name, pn | ELINK_LOG_ID_UNQUAL_IO_MODULE    | port, name, pn | */
206*d14abf15SRobert Mustacchi     LM_LOG_ID_OVER_CURRENT        = 1,  /* | MSGLOG_SFP_PLUS_OVER_CURRENT     | port           | ELINK_LOG_ID_OVER_CURRENT        | port           | */
207*d14abf15SRobert Mustacchi     LM_LOG_ID_PHY_UNINITIALIZED   = 2,  /* | MSGLOG_PHY_UNINITIALIZED         | port           | ELINK_LOG_ID_PHY_UNINITIALIZED   | port           | */
208*d14abf15SRobert Mustacchi     LM_LOG_ID_NO_10G_SUPPORT      = 3,  /* | MSGLOG_NO_10G_SUPPORT            | port           | N/A                              | N/A            | */
209*d14abf15SRobert Mustacchi     LM_LOG_ID_FAN_FAILURE         = 4,  /* | MSGLOG_DELL_FAN_FAILURE          | none           | N/A                              | N/A            | */
210*d14abf15SRobert Mustacchi     LM_LOG_ID_MDIO_ACCESS_TIMEOUT = 5,  /* | MSGLOG_MDIO_ACCESS_TIMEOUT       | port           | ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT | (none)         | */
211*d14abf15SRobert Mustacchi     LM_LOG_ID_NON_10G_MODULE      = 6,  /* | MSGLOG_SFP_NON_10G_MODULE        | port           | ELINK_LOG_ID_NON_10G_MODULE      | port           | */
212*d14abf15SRobert Mustacchi                                         /* |-------------------------------------------------------------------------------------------------------| */
213*d14abf15SRobert Mustacchi     LM_LOG_ID_MAX                 = 7   /* | Invalid */
214*d14abf15SRobert Mustacchi } lm_log_id_t;
215*d14abf15SRobert Mustacchi 
216*d14abf15SRobert Mustacchi /* Description:
217*d14abf15SRobert Mustacchi  *    This routine is responsible for stopping the hardware from running,
218*d14abf15SRobert Mustacchi  *    cleaning up various request queues, aborting transmit requests, and
219*d14abf15SRobert Mustacchi  *    reclaiming all the receive buffers.
220*d14abf15SRobert Mustacchi  * This routine calls the following mm routines:
221*d14abf15SRobert Mustacchi  *    mm_indicate_tx, mm_free_rx_buf. */
222*d14abf15SRobert Mustacchi void lm_abort( IN OUT   struct _lm_device_t*  pdev,
223*d14abf15SRobert Mustacchi                IN const         lm_abort_op_t abort_op,
224*d14abf15SRobert Mustacchi                IN const         u32_t         idx);
225*d14abf15SRobert Mustacchi 
226*d14abf15SRobert Mustacchi 
227*d14abf15SRobert Mustacchi /* Description:
228*d14abf15SRobert Mustacchi  *    The main function of this routine is to reset and initialize the
229*d14abf15SRobert Mustacchi  *    hardware.  Upon exit, interrupt generation is not enable; however,
230*d14abf15SRobert Mustacchi  *    the hardware is ready to accept transmit requests and receive receive
231*d14abf15SRobert Mustacchi  *    packets.  'lm_abort' must be called prior to calling 'lm_reset'.
232*d14abf15SRobert Mustacchi  *    This routine is a wrapper for lm_reset_setup and lm_reset_run. */
233*d14abf15SRobert Mustacchi lm_status_t
234*d14abf15SRobert Mustacchi lm_reset(
235*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
236*d14abf15SRobert Mustacchi 
237*d14abf15SRobert Mustacchi /* Description:
238*d14abf15SRobert Mustacchi  *    The main function of this routine is to initialize the
239*d14abf15SRobert Mustacchi  *    hardware. it configues all hw blocks in several phases acording to mcp response:
240*d14abf15SRobert Mustacchi  *    1. common blocks
241*d14abf15SRobert Mustacchi  *    2. per function blocks
242*d14abf15SRobert Mustacchi  */
243*d14abf15SRobert Mustacchi lm_status_t
244*d14abf15SRobert Mustacchi lm_chip_init(
245*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
246*d14abf15SRobert Mustacchi 
247*d14abf15SRobert Mustacchi lm_resource_idx_t cid_to_resource(
248*d14abf15SRobert Mustacchi         struct _lm_device_t *pdev, u32_t cid);
249*d14abf15SRobert Mustacchi 
250*d14abf15SRobert Mustacchi void init_nig_func(struct _lm_device_t *pdev);
251*d14abf15SRobert Mustacchi 
252*d14abf15SRobert Mustacchi void init_nig_common_llh(struct _lm_device_t *pdev);
253*d14abf15SRobert Mustacchi 
254*d14abf15SRobert Mustacchi /* Description:
255*d14abf15SRobert Mustacchi  *    Verify that the MCP validity bit already up
256*d14abf15SRobert Mustacchi  */
257*d14abf15SRobert Mustacchi lm_status_t lm_verify_validity_map(
258*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
259*d14abf15SRobert Mustacchi 
260*d14abf15SRobert Mustacchi /* Description:
261*d14abf15SRobert Mustacchi  *    Calls lm_function_start. add here other stuff to follow if any.
262*d14abf15SRobert Mustacchi  */
263*d14abf15SRobert Mustacchi lm_status_t
264*d14abf15SRobert Mustacchi lm_chip_start(struct _lm_device_t *pdev);
265*d14abf15SRobert Mustacchi 
266*d14abf15SRobert Mustacchi /* Description:
267*d14abf15SRobert Mustacchi *    This routine close port or assert reset for all needed blocks
268*d14abf15SRobert Mustacchi */
269*d14abf15SRobert Mustacchi void lm_chip_reset(struct _lm_device_t *pdev, lm_reason_t reason) ;
270*d14abf15SRobert Mustacchi 
271*d14abf15SRobert Mustacchi /** Description:
272*d14abf15SRobert Mustacchi  *    Resets all "needed" blacks plus NIG.
273*d14abf15SRobert Mustacchi  *    It's a pure reset: no locks are taken.
274*d14abf15SRobert Mustacchi  */
275*d14abf15SRobert Mustacchi void lm_chip_reset_with_nig(struct _lm_device_t *pdev);
276*d14abf15SRobert Mustacchi 
277*d14abf15SRobert Mustacchi /* This function reset a path (e2) or a chip (e1/e1.5)
278*d14abf15SRobert Mustacchi  * includeing or excluding the nig (b_with_nig)
279*d14abf15SRobert Mustacchi  */
280*d14abf15SRobert Mustacchi void lm_reset_path(struct _lm_device_t *pdev, const  u8_t b_with_nig );
281*d14abf15SRobert Mustacchi 
282*d14abf15SRobert Mustacchi /** Description:
283*d14abf15SRobert Mustacchi  *    Resets MCP. Waits until MCP wakes up.
284*d14abf15SRobert Mustacchi  *
285*d14abf15SRobert Mustacchi  *    This function sleeps!!!
286*d14abf15SRobert Mustacchi  *
287*d14abf15SRobert Mustacchi  *  Returns:
288*d14abf15SRobert Mustacchi  *    LM_STATUS_SUCCESS if MCP reset and woke up successfully,
289*d14abf15SRobert Mustacchi  *    LM_STATUS_FAILURE otherwise.
290*d14abf15SRobert Mustacchi  */
291*d14abf15SRobert Mustacchi lm_status_t lm_reset_mcp(struct _lm_device_t *pdev);
292*d14abf15SRobert Mustacchi 
293*d14abf15SRobert Mustacchi /**
294*d14abf15SRobert Mustacchi  *
295*d14abf15SRobert Mustacchi  * @param pdev Device instance
296*d14abf15SRobert Mustacchi  *
297*d14abf15SRobert Mustacchi  * @return TRUE if MCP was detected.
298*d14abf15SRobert Mustacchi  */
299*d14abf15SRobert Mustacchi u8_t lm_is_mcp_detected(
300*d14abf15SRobert Mustacchi     IN struct _lm_device_t *pdev
301*d14abf15SRobert Mustacchi     );
302*d14abf15SRobert Mustacchi 
303*d14abf15SRobert Mustacchi 
304*d14abf15SRobert Mustacchi /* Description:
305*d14abf15SRobert Mustacchi *    Configures nwuf packets.
306*d14abf15SRobert Mustacchi *    Must be called before chip reset since it uses DMAE block
307*d14abf15SRobert Mustacchi *    (for wide bus)
308*d14abf15SRobert Mustacchi */
309*d14abf15SRobert Mustacchi void lm_set_d3_nwuf( struct _lm_device_t*        pdev,
310*d14abf15SRobert Mustacchi                      const  lm_wake_up_mode_t    wake_up_mode );
311*d14abf15SRobert Mustacchi 
312*d14abf15SRobert Mustacchi /* Description:
313*d14abf15SRobert Mustacchi *    Configures magic packets.
314*d14abf15SRobert Mustacchi */
315*d14abf15SRobert Mustacchi void lm_set_d3_mpkt( struct _lm_device_t*     pdev,
316*d14abf15SRobert Mustacchi                      const  lm_wake_up_mode_t wake_up_mode );
317*d14abf15SRobert Mustacchi 
318*d14abf15SRobert Mustacchi /* Description:
319*d14abf15SRobert Mustacchi *    Sets the FLR flag
320*d14abf15SRobert Mustacchi */
321*d14abf15SRobert Mustacchi void lm_fl_reset_set_inprogress(struct _lm_device_t *pdev);
322*d14abf15SRobert Mustacchi 
323*d14abf15SRobert Mustacchi /* Description:
324*d14abf15SRobert Mustacchi *    Clears the FLR flag
325*d14abf15SRobert Mustacchi */
326*d14abf15SRobert Mustacchi void lm_fl_reset_clear_inprogress(struct _lm_device_t *pdev);
327*d14abf15SRobert Mustacchi 
328*d14abf15SRobert Mustacchi /* Description:
329*d14abf15SRobert Mustacchi *    Returns true when the FLR flag is set
330*d14abf15SRobert Mustacchi */
331*d14abf15SRobert Mustacchi u8_t lm_fl_reset_is_inprogress(struct _lm_device_t *pdev);
332*d14abf15SRobert Mustacchi 
333*d14abf15SRobert Mustacchi /* Description:
334*d14abf15SRobert Mustacchi *    Sets the global shutdown-in-progress flag
335*d14abf15SRobert Mustacchi */
336*d14abf15SRobert Mustacchi void lm_reset_set_inprogress(struct _lm_device_t *pdev);
337*d14abf15SRobert Mustacchi 
338*d14abf15SRobert Mustacchi /* Description:
339*d14abf15SRobert Mustacchi *    Clears the global shutdown-in-progress flag
340*d14abf15SRobert Mustacchi */
341*d14abf15SRobert Mustacchi void lm_reset_clear_inprogress(struct _lm_device_t *pdev);
342*d14abf15SRobert Mustacchi 
343*d14abf15SRobert Mustacchi /* Description:
344*d14abf15SRobert Mustacchi *    Returns true when the global shutdown-in-progress flag is set
345*d14abf15SRobert Mustacchi */
346*d14abf15SRobert Mustacchi u8_t lm_pm_reset_is_inprogress(struct _lm_device_t *pdev);
347*d14abf15SRobert Mustacchi 
348*d14abf15SRobert Mustacchi /* Description:
349*d14abf15SRobert Mustacchi *    Returns true when the global shutdown-in-progress flag is set
350*d14abf15SRobert Mustacchi *    OR FLR_PF (both PF and VF) flag is set
351*d14abf15SRobert Mustacchi *    OR FLR_VF (VF only) flag is set
352*d14abf15SRobert Mustacchi */
353*d14abf15SRobert Mustacchi u8_t lm_reset_is_inprogress(struct _lm_device_t *pdev);
354*d14abf15SRobert Mustacchi 
355*d14abf15SRobert Mustacchi /* Description
356*d14abf15SRobert Mustacchi  *    marks the function to be enabled after reseting nig: used for WOL
357*d14abf15SRobert Mustacchi  */
358*d14abf15SRobert Mustacchi void lm_set_func_en(struct _lm_device_t *pdev, const u8_t b_enable);
359*d14abf15SRobert Mustacchi 
360*d14abf15SRobert Mustacchi /* Description
361*d14abf15SRobert Mustacchi  *    returns the value of function enabled.
362*d14abf15SRobert Mustacchi  */
363*d14abf15SRobert Mustacchi u8_t lm_get_func_en(struct _lm_device_t *pdev, const u8_t pfunc_abs);
364*d14abf15SRobert Mustacchi 
365*d14abf15SRobert Mustacchi /* Description:
366*d14abf15SRobert Mustacchi *    Masks the HW attention as part of the shutdown flow
367*d14abf15SRobert Mustacchi */
368*d14abf15SRobert Mustacchi void lm_reset_mask_attn(struct _lm_device_t *pdev);
369*d14abf15SRobert Mustacchi 
370*d14abf15SRobert Mustacchi 
371*d14abf15SRobert Mustacchi void lm_setup_read_mgmt_stats_ptr( struct    _lm_device_t* pdev,
372*d14abf15SRobert Mustacchi                                    IN  const u32_t         func_mailbox_num,
373*d14abf15SRobert Mustacchi                                    OUT       u32_t*        fw_port_stats_ptr,
374*d14abf15SRobert Mustacchi                                    OUT       u32_t*        fw_func_stats_ptr );
375*d14abf15SRobert Mustacchi 
376*d14abf15SRobert Mustacchi 
377*d14abf15SRobert Mustacchi /* Description:
378*d14abf15SRobert Mustacchi  *         Acquiring the HW lock for a specific resource.
379*d14abf15SRobert Mustacchi  *         The assumption is that only 1 bit is set in the resource parameter
380*d14abf15SRobert Mustacchi  *         There is a HW attention in case the same function attempts to
381*d14abf15SRobert Mustacchi  *         acquire the same lock more than once
382*d14abf15SRobert Mustacchi  *
383*d14abf15SRobert Mustacchi  * Params:
384*d14abf15SRobert Mustacchi  *         resource: the HW LOCK Register name
385*d14abf15SRobert Mustacchi  *         b_block: Try to get lock until succesful, or backout immediately on failure.
386*d14abf15SRobert Mustacchi  * Return:
387*d14abf15SRobert Mustacchi  *          Success - got the lock
388*d14abf15SRobert Mustacchi  *          Fail - Invalid parameter or could not obtain the lock for over 1 sec in block mode
389*d14abf15SRobert Mustacchi  *          or couldn't obtain lock one-shot in non block mode
390*d14abf15SRobert Mustacchi  */
391*d14abf15SRobert Mustacchi lm_status_t lm_hw_lock(struct _lm_device_t*      pdev,
392*d14abf15SRobert Mustacchi                        const  u32_t              resource,
393*d14abf15SRobert Mustacchi                        const  u8_t               b_block);
394*d14abf15SRobert Mustacchi /* Description:
395*d14abf15SRobert Mustacchi  *         Releasing the HW lock for a specific resource.
396*d14abf15SRobert Mustacchi  *         There is a HW attention in case the a function attempts to release
397*d14abf15SRobert Mustacchi  *         a lock that it did not acquire
398*d14abf15SRobert Mustacchi  * Return:
399*d14abf15SRobert Mustacchi  *          Success - if the parameter is valid, the assumption is that it
400*d14abf15SRobert Mustacchi  *                    will succeed
401*d14abf15SRobert Mustacchi  *          Fail - Invalid parameter
402*d14abf15SRobert Mustacchi  */
403*d14abf15SRobert Mustacchi lm_status_t lm_hw_unlock(struct _lm_device_t*      pdev,
404*d14abf15SRobert Mustacchi                          const u32_t               resource);
405*d14abf15SRobert Mustacchi 
406*d14abf15SRobert Mustacchi lm_status_t lm_hw_unlock_ex(struct _lm_device_t*      pdev,
407*d14abf15SRobert Mustacchi                             const  u32_t              resource,
408*d14abf15SRobert Mustacchi                             const  u8_t               b_verify_locked );
409*d14abf15SRobert Mustacchi 
410*d14abf15SRobert Mustacchi 
411*d14abf15SRobert Mustacchi lm_status_t
412*d14abf15SRobert Mustacchi lm_ncsi_fcoe_cap_to_scratchpad( struct _lm_device_t *pdev);
413*d14abf15SRobert Mustacchi 
414*d14abf15SRobert Mustacchi /**
415*d14abf15SRobert Mustacchi  * @Desription
416*d14abf15SRobert Mustacchi  *      This function is used to recover from a state where the
417*d14abf15SRobert Mustacchi  *      locks stayed in "taken" state during a reboot. We want
418*d14abf15SRobert Mustacchi  *      to clear all the locks before proceeding.
419*d14abf15SRobert Mustacchi  *
420*d14abf15SRobert Mustacchi  * @param pdev
421*d14abf15SRobert Mustacchi  */
422*d14abf15SRobert Mustacchi void lm_hw_clear_all_locks(struct _lm_device_t *pdev);
423*d14abf15SRobert Mustacchi 
424*d14abf15SRobert Mustacchi /* Description:
425*d14abf15SRobert Mustacchi  *    This routine post the indicate buffer or receive buffers in the
426*d14abf15SRobert Mustacchi  *    free buffer pool.  If 'packet' is null, all buffers in the free poll
427*d14abf15SRobert Mustacchi  *    will be posted; otherwise, only the 'packet' will be posted. */
428*d14abf15SRobert Mustacchi u32_t
429*d14abf15SRobert Mustacchi lm_post_buffers(
430*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
431*d14abf15SRobert Mustacchi     u32_t chain_idx,
432*d14abf15SRobert Mustacchi     struct _lm_packet_t *packet,/* optional. */
433*d14abf15SRobert Mustacchi     u8_t const  is_tpa);
434*d14abf15SRobert Mustacchi 
435*d14abf15SRobert Mustacchi /* Description:
436*d14abf15SRobert Mustacchi  *    This routine sends the given packet.  Resources required to send this
437*d14abf15SRobert Mustacchi  *    must have already been reserved.  The upper moduel is resposible for
438*d14abf15SRobert Mustacchi  *    any necessary queueing. */
439*d14abf15SRobert Mustacchi lm_status_t
440*d14abf15SRobert Mustacchi lm_send_packet(
441*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
442*d14abf15SRobert Mustacchi     u32_t chain_idx,
443*d14abf15SRobert Mustacchi     struct _lm_packet_t *packet,
444*d14abf15SRobert Mustacchi     lm_frag_list_t *frags);
445*d14abf15SRobert Mustacchi 
446*d14abf15SRobert Mustacchi /**
447*d14abf15SRobert Mustacchi  * @description
448*d14abf15SRobert Mustacchi  * Check if VLAN exist and if the VLAN exists get priority.
449*d14abf15SRobert Mustacchi  * @param pdev
450*d14abf15SRobert Mustacchi  * @param packet
451*d14abf15SRobert Mustacchi  *
452*d14abf15SRobert Mustacchi  * @return u32_t
453*d14abf15SRobert Mustacchi  */
454*d14abf15SRobert Mustacchi u8_t
455*d14abf15SRobert Mustacchi lm_get_pri_from_send_packet_param(
456*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
457*d14abf15SRobert Mustacchi     struct _lm_packet_t *packet);
458*d14abf15SRobert Mustacchi /* Description:
459*d14abf15SRobert Mustacchi  *    This routine sends the given cmd.  Resources required to send this
460*d14abf15SRobert Mustacchi  *    must have already been reserved.  The upper moduel is resposible for
461*d14abf15SRobert Mustacchi  *    any necessary queueing. */
462*d14abf15SRobert Mustacchi lm_status_t
463*d14abf15SRobert Mustacchi lm_send_sq_cmd(
464*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
465*d14abf15SRobert Mustacchi     u32_t cid,
466*d14abf15SRobert Mustacchi     u8_t cmd_id);
467*d14abf15SRobert Mustacchi 
468*d14abf15SRobert Mustacchi /* Description:
469*d14abf15SRobert Mustacchi * This routine completes the cmd. it should safely increment the number
470*d14abf15SRobert Mustacchi * of pending comands and send the next commnad if any
471*d14abf15SRobert Mustacchi */
472*d14abf15SRobert Mustacchi lm_status_t
473*d14abf15SRobert Mustacchi lm_complete_sq_cmd(
474*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
475*d14abf15SRobert Mustacchi     u32_t cid,
476*d14abf15SRobert Mustacchi     u8_t cmd_id);
477*d14abf15SRobert Mustacchi 
478*d14abf15SRobert Mustacchi 
479*d14abf15SRobert Mustacchi /* Description:
480*d14abf15SRobert Mustacchi * This routine sends ring pending commands. it should be safely increment the number
481*d14abf15SRobert Mustacchi * of pending comands and send the next commnad if any
482*d14abf15SRobert Mustacchi */
483*d14abf15SRobert Mustacchi lm_status_t
484*d14abf15SRobert Mustacchi lm_enlist_sq_cmd(
485*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev
486*d14abf15SRobert Mustacchi );
487*d14abf15SRobert Mustacchi 
488*d14abf15SRobert Mustacchi /* Description:
489*d14abf15SRobert Mustacchi  *    This routine is called to get all pending interrupts. */
490*d14abf15SRobert Mustacchi lm_interrupt_status_t
491*d14abf15SRobert Mustacchi lm_get_interrupt_status(
492*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
493*d14abf15SRobert Mustacchi 
494*d14abf15SRobert Mustacchi /* Description:
495*d14abf15SRobert Mustacchi  *    Replacement function for lm_get_interrupt_status for dedicated IGU tests */
496*d14abf15SRobert Mustacchi u64_t
497*d14abf15SRobert Mustacchi lm_igutest_get_isr64(struct _lm_device_t *pdev);
498*d14abf15SRobert Mustacchi u64_t
499*d14abf15SRobert Mustacchi lm_igutest_get_isr32(struct _lm_device_t *pdev);
500*d14abf15SRobert Mustacchi 
501*d14abf15SRobert Mustacchi /* Description:
502*d14abf15SRobert Mustacchi  *    This routine is called to get all pending interrupts. */
503*d14abf15SRobert Mustacchi lm_interrupt_status_t
504*d14abf15SRobert Mustacchi lm_get_interrupt_status_wo_mask(
505*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
506*d14abf15SRobert Mustacchi 
507*d14abf15SRobert Mustacchi /* Description:
508*d14abf15SRobert Mustacchi  *    This routine is called to get all pending interrupts for ediag dummy interrupt. */
509*d14abf15SRobert Mustacchi lm_interrupt_status_t
510*d14abf15SRobert Mustacchi lm_get_interrupt_status_and_mask(
511*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
512*d14abf15SRobert Mustacchi 
513*d14abf15SRobert Mustacchi 
514*d14abf15SRobert Mustacchi u32_t
515*d14abf15SRobert Mustacchi lm_get_packets_rcvd(
516*d14abf15SRobert Mustacchi     struct _lm_device_t  *pdev,
517*d14abf15SRobert Mustacchi     u32_t const          chain_idx,
518*d14abf15SRobert Mustacchi     s_list_t             *rcvd_list,
519*d14abf15SRobert Mustacchi     struct _sp_cqes_info *sp_cqes);
520*d14abf15SRobert Mustacchi 
521*d14abf15SRobert Mustacchi lm_status_t
522*d14abf15SRobert Mustacchi lm_complete_ramrods(
523*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
524*d14abf15SRobert Mustacchi     struct _sp_cqes_info *sp_cqes);
525*d14abf15SRobert Mustacchi 
526*d14abf15SRobert Mustacchi u32_t
527*d14abf15SRobert Mustacchi lm_get_packets_sent(
528*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
529*d14abf15SRobert Mustacchi     u32_t chain_idx,
530*d14abf15SRobert Mustacchi     s_list_t *sent_list);
531*d14abf15SRobert Mustacchi 
532*d14abf15SRobert Mustacchi 
533*d14abf15SRobert Mustacchi /* Description:
534*d14abf15SRobert Mustacchi  *    This routine is called to mask out interrupt from the hardware. */
535*d14abf15SRobert Mustacchi void lm_disable_int(struct _lm_device_t *pdev);
536*d14abf15SRobert Mustacchi 
537*d14abf15SRobert Mustacchi /* Description:
538*d14abf15SRobert Mustacchi  *    This routine is called to enable interrupt generation. */
539*d14abf15SRobert Mustacchi void lm_enable_int(struct _lm_device_t *pdev);
540*d14abf15SRobert Mustacchi 
541*d14abf15SRobert Mustacchi /**
542*d14abf15SRobert Mustacchi  * @Description: This routine is called to set the receive
543*d14abf15SRobert Mustacchi  * filter. drop unicast/multicast/broadcast for a fast-path
544*d14abf15SRobert Mustacchi  * chain-idx
545*d14abf15SRobert Mustacchi  *
546*d14abf15SRobert Mustacchi  * @param pdev
547*d14abf15SRobert Mustacchi  * @param chain_idx - which chain to set the filtering on
548*d14abf15SRobert Mustacchi  * @param rx_mask - the rx mask information
549*d14abf15SRobert Mustacchi  * @param cookie - will be returned when indicating to "mm" that
550*d14abf15SRobert Mustacchi  *               the operation completed.
551*d14abf15SRobert Mustacchi  *
552*d14abf15SRobert Mustacchi  * @return lm_status_t - SUCCESS (if completed synchrounously)
553*d14abf15SRobert Mustacchi  *                       PENDING (if completion will arrive
554*d14abf15SRobert Mustacchi  *                       asynchrounously)
555*d14abf15SRobert Mustacchi  *                       FAILURE o/w
556*d14abf15SRobert Mustacchi  */
557*d14abf15SRobert Mustacchi lm_status_t lm_set_rx_mask(struct _lm_device_t *pdev, u8_t chain_idx, lm_rx_mask_t rx_mask, void * cookie);
558*d14abf15SRobert Mustacchi 
559*d14abf15SRobert Mustacchi /**
560*d14abf15SRobert Mustacchi  * @Description: This function waits for the rx mask to complete
561*d14abf15SRobert Mustacchi  *
562*d14abf15SRobert Mustacchi  * @param pdev
563*d14abf15SRobert Mustacchi  * @param chain_idx- which chain to wait on
564*d14abf15SRobert Mustacchi  *
565*d14abf15SRobert Mustacchi  * @return lm_status_t
566*d14abf15SRobert Mustacchi  */
567*d14abf15SRobert Mustacchi lm_status_t lm_wait_set_rx_mask_done(struct _lm_device_t *pdev, u8_t chain_idx);
568*d14abf15SRobert Mustacchi 
569*d14abf15SRobert Mustacchi 
570*d14abf15SRobert Mustacchi /*************************  MULTICAST  *****************************************/
571*d14abf15SRobert Mustacchi 
572*d14abf15SRobert Mustacchi 
573*d14abf15SRobert Mustacchi /**
574*d14abf15SRobert Mustacchi  * @Description
575*d14abf15SRobert Mustacchi  *      Function configures a list of multicast addresses. Or
576*d14abf15SRobert Mustacchi  *      resets the list previously configured
577*d14abf15SRobert Mustacchi  *
578*d14abf15SRobert Mustacchi  * @param pdev
579*d14abf15SRobert Mustacchi  * @param mc_addrs    - array of multicast addresses. NULL if unset is required
580*d14abf15SRobert Mustacchi  * @param buf_len     - length of the buffer - 0 if unset is required
581*d14abf15SRobert Mustacchi  * @param cookie      - will be returned on completion
582*d14abf15SRobert Mustacchi  * @param lm_cli_idx  - which lm client to send request on
583*d14abf15SRobert Mustacchi  *
584*d14abf15SRobert Mustacchi  * @return lm_status_t - SUCCESS on syncrounous completion
585*d14abf15SRobert Mustacchi  *                       PENDING on asyncounous completion
586*d14abf15SRobert Mustacchi  *                       FAILURE o/w
587*d14abf15SRobert Mustacchi  */
588*d14abf15SRobert Mustacchi lm_status_t lm_set_mc(struct _lm_device_t *pdev, u8_t* mc_addrs, u32_t buf_len, void * cookie, lm_cli_idx_t lm_cli_idx);
589*d14abf15SRobert Mustacchi 
590*d14abf15SRobert Mustacchi lm_status_t lm_set_mc_list(struct _lm_device_t *pdev,
591*d14abf15SRobert Mustacchi                            d_list_t * mc_addrs, /* may be NULL (for unset) */
592*d14abf15SRobert Mustacchi                            void * cookie,
593*d14abf15SRobert Mustacchi                            lm_cli_idx_t lm_cli_idx);
594*d14abf15SRobert Mustacchi 
595*d14abf15SRobert Mustacchi /**
596*d14abf15SRobert Mustacchi  * Description
597*d14abf15SRobert Mustacchi  *      This routine is called to wait for the multicast set
598*d14abf15SRobert Mustacchi  *      completion. It must be called in passive level since it
599*d14abf15SRobert Mustacchi  *      may sleep
600*d14abf15SRobert Mustacchi  * @param pdev
601*d14abf15SRobert Mustacchi  * @param lm_cli_idx the cli-idx that the multicast was sent on.
602*d14abf15SRobert Mustacchi  *
603*d14abf15SRobert Mustacchi  * @return lm_status SUCCESS on done, TIMEOUT o/w
604*d14abf15SRobert Mustacchi  */
605*d14abf15SRobert Mustacchi lm_status_t lm_wait_set_mc_done(struct _lm_device_t *pdev, lm_cli_idx_t lm_cli_idx);
606*d14abf15SRobert Mustacchi 
607*d14abf15SRobert Mustacchi 
608*d14abf15SRobert Mustacchi lm_status_t lm_eth_wait_state_change(struct _lm_device_t *pdev, u32_t new_state, u32_t cid);
609*d14abf15SRobert Mustacchi 
610*d14abf15SRobert Mustacchi 
611*d14abf15SRobert Mustacchi /**
612*d14abf15SRobert Mustacchi  * Set/Unset a mac-address or mac-vlan pair on a given chain.
613*d14abf15SRobert Mustacchi  *
614*d14abf15SRobert Mustacchi  * @param pdev
615*d14abf15SRobert Mustacchi  * @param mac_addr  - array of size ETHERNET_ADDRESS_SIZE
616*d14abf15SRobert Mustacchi  *                    containing a valid mac addresses
617*d14abf15SRobert Mustacchi  * @param vlan_tag  - vlan tag to be set with mac address
618*d14abf15SRobert Mustacchi  * @param chain_idx - which chain to set the mac on. Chain_idx
619*d14abf15SRobert Mustacchi  *                    will be transformed to a l2 client-id
620*d14abf15SRobert Mustacchi  * @param cookie    - will be returned to MM layer on completion
621*d14abf15SRobert Mustacchi  * @param set       - set or remove mac address
622*d14abf15SRobert Mustacchi  * @param is_encap_inner_mac_filter - set if we filter according
623*d14abf15SRobert Mustacchi  *                                  to inner mac (VMQ offload of
624*d14abf15SRobert Mustacchi  *                                  encapsulated packets)
625*d14abf15SRobert Mustacchi  *
626*d14abf15SRobert Mustacchi  * @return lm_status_t SUCCESS on syncrounous success, PENDING
627*d14abf15SRobert Mustacchi  *         if completion will be called later, FAILURE o/w
628*d14abf15SRobert Mustacchi  */
629*d14abf15SRobert Mustacchi lm_status_t lm_set_mac_addr(struct _lm_device_t *pdev, u8_t *mac_addr, u16_t vlan_tag, u8_t chain_idx,  void * cookie, const u8_t b_set, u8_t is_encap_inner_mac_filter);
630*d14abf15SRobert Mustacchi 
631*d14abf15SRobert Mustacchi /**
632*d14abf15SRobert Mustacchi  * Set/Unset a vlan on a given chain.
633*d14abf15SRobert Mustacchi  *      Setting/unsetting a vlan is a bit more complex than
634*d14abf15SRobert Mustacchi  *      setting a mac address and is therefore implemented in a
635*d14abf15SRobert Mustacchi  *      separate function. It require deleting a previous vlan
636*d14abf15SRobert Mustacchi  *      tag if one was set, and changing rx-filtering rules. The
637*d14abf15SRobert Mustacchi  *      change in rx-filtering rules has to do with "any-vlan".
638*d14abf15SRobert Mustacchi  *      If no vlan is set we want "any-vlan" otherwise we want
639*d14abf15SRobert Mustacchi  *      to remove the any-vlan, this requires another ramrod.
640*d14abf15SRobert Mustacchi  *      The way this is implemented is as follows:
641*d14abf15SRobert Mustacchi  *          1. prepare vlan add/remove commands without
642*d14abf15SRobert Mustacchi  *          executing them (sp-verbs feature don't send EXEC)
643*d14abf15SRobert Mustacchi  *          2. If need to set rx-mask, turn on a flag that will
644*d14abf15SRobert Mustacchi  *          be checked on completion of rx-mask, in
645*d14abf15SRobert Mustacchi  *          lm_eq_handle_rx_filter.., we look at this flag and
646*d14abf15SRobert Mustacchi  *          if it's on execute the vlan pending command
647*d14abf15SRobert Mustacchi  *          (sp-verbs CONT feature).
648*d14abf15SRobert Mustacchi  *
649*d14abf15SRobert Mustacchi  * @param pdev
650*d14abf15SRobert Mustacchi  * @param vlan_tag  - vlan tag to be set
651*d14abf15SRobert Mustacchi  * @param chain_idx - which chain to set the vlan on. Chain_idx
652*d14abf15SRobert Mustacchi  *                    will be transformed to a l2 client-id
653*d14abf15SRobert Mustacchi  * @param cookie    - will be returned to MM layer on completion
654*d14abf15SRobert Mustacchi  * @param set       - set or remove vlan
655*d14abf15SRobert Mustacchi  *
656*d14abf15SRobert Mustacchi  * @return lm_status_t SUCCESS on syncrounous success, PENDING
657*d14abf15SRobert Mustacchi  *         if completion will be called later, FAILURE o/w
658*d14abf15SRobert Mustacchi  */
659*d14abf15SRobert Mustacchi lm_status_t lm_set_vlan_only(struct _lm_device_t *pdev, u16_t vlan_tag, u8_t chain_idx,  void * cookie, const u8_t b_set);
660*d14abf15SRobert Mustacchi 
661*d14abf15SRobert Mustacchi /**
662*d14abf15SRobert Mustacchi  *  Move a filter from one chain idx to another atomically
663*d14abf15SRobert Mustacchi  *
664*d14abf15SRobert Mustacchi  * @param pdev
665*d14abf15SRobert Mustacchi  *
666*d14abf15SRobert Mustacchi  * @param mac_addr       - array of size ETHERNET_ADDRESS_SIZE
667*d14abf15SRobert Mustacchi  *                         containing a valid mac addresses
668*d14abf15SRobert Mustacchi  * @param vlan_tag       - vlan tag to be set with mac address
669*d14abf15SRobert Mustacchi  * @param src_chain_idx  - which chain to remove the mac from
670*d14abf15SRobert Mustacchi  * @param dest_chain_idx - which chain to set the mac on
671*d14abf15SRobert Mustacchi  * @param cookie         - will be returned to MM layer on completion
672*d14abf15SRobert Mustacchi  *
673*d14abf15SRobert Mustacchi  * @return lm_status_t
674*d14abf15SRobert Mustacchi  */
675*d14abf15SRobert Mustacchi lm_status_t lm_move_mac_addr(struct _lm_device_t *pdev, u8_t *mac_addr, u16_t vlan_tag,
676*d14abf15SRobert Mustacchi 			     u8_t src_chain_idx,  u8_t dest_chain_idx, void * cookie, u8_t is_encap_inner_mac_filter);
677*d14abf15SRobert Mustacchi 
678*d14abf15SRobert Mustacchi /**
679*d14abf15SRobert Mustacchi  * @Description
680*d14abf15SRobert Mustacchi  *      Waits for the last set-mac called to complete
681*d14abf15SRobert Mustacchi  * @param pdev
682*d14abf15SRobert Mustacchi  * @param chain_idx - the same chain-idx that the set-mac was
683*d14abf15SRobert Mustacchi  *                  called on
684*d14abf15SRobert Mustacchi  *
685*d14abf15SRobert Mustacchi  * @return lm_status_t SUCCESS or TIMEOUT
686*d14abf15SRobert Mustacchi  */
687*d14abf15SRobert Mustacchi lm_status_t lm_wait_set_mac_done(struct _lm_device_t *pdev, u8_t chain_idx);
688*d14abf15SRobert Mustacchi 
689*d14abf15SRobert Mustacchi 
690*d14abf15SRobert Mustacchi /**
691*d14abf15SRobert Mustacchi  * @Description
692*d14abf15SRobert Mustacchi  *      Waits for the last set-vlan called to complete
693*d14abf15SRobert Mustacchi  * @param pdev
694*d14abf15SRobert Mustacchi  * @param chain_idx - the same chain-idx that the set-vlan was
695*d14abf15SRobert Mustacchi  *                  called on
696*d14abf15SRobert Mustacchi  *
697*d14abf15SRobert Mustacchi  * @return lm_status_t SUCCESS or TIMEOUT
698*d14abf15SRobert Mustacchi  */
699*d14abf15SRobert Mustacchi lm_status_t lm_wait_set_vlan_done(struct _lm_device_t *pdev, u8_t chain_idx);
700*d14abf15SRobert Mustacchi 
701*d14abf15SRobert Mustacchi /* Description:
702*d14abf15SRobert Mustacchi  *    Clears all the mac address that are set on a certain cid...
703*d14abf15SRobert Mustacchi  */
704*d14abf15SRobert Mustacchi lm_status_t lm_clear_all_mac_addr(struct _lm_device_t *pdev, const u8_t chain_idx);
705*d14abf15SRobert Mustacchi 
706*d14abf15SRobert Mustacchi /**
707*d14abf15SRobert Mustacchi  * Description
708*d14abf15SRobert Mustacchi  *      Restores all the mac address that are set on a certain
709*d14abf15SRobert Mustacchi  *      cid (after sleep / hibernate...)
710*d14abf15SRobert Mustacchi  * @param pdev
711*d14abf15SRobert Mustacchi  * @param chain_idx - which chain_idx to clear macs on...
712*d14abf15SRobert Mustacchi  *
713*d14abf15SRobert Mustacchi  * @assumptions: Called in PASSIVE_LEVEL!! function sleeps...
714*d14abf15SRobert Mustacchi  * @return lm_status_t
715*d14abf15SRobert Mustacchi  */
716*d14abf15SRobert Mustacchi lm_status_t lm_restore_all_mac_addr(struct _lm_device_t *pdev, u8_t chain_idx);
717*d14abf15SRobert Mustacchi 
718*d14abf15SRobert Mustacchi /**insert_nig_entry
719*d14abf15SRobert Mustacchi  * Reference an entry for a given MAC address. If this is the
720*d14abf15SRobert Mustacchi  * first reference, add it to the NIG, otherwise increase its
721*d14abf15SRobert Mustacchi  * refcount.
722*d14abf15SRobert Mustacchi  *
723*d14abf15SRobert Mustacchi  * @param pdev
724*d14abf15SRobert Mustacchi  * @param addr the MAC address
725*d14abf15SRobert Mustacchi  *
726*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success,
727*d14abf15SRobert Mustacchi  *         LM_STATUS_RESOURCE if no more NIG entries are
728*d14abf15SRobert Mustacchi  *         available, other failure codes on other errors.
729*d14abf15SRobert Mustacchi  */
730*d14abf15SRobert Mustacchi lm_status_t lm_insert_nig_entry(    struct _lm_device_t *pdev,
731*d14abf15SRobert Mustacchi                                     u8_t        *addr);
732*d14abf15SRobert Mustacchi 
733*d14abf15SRobert Mustacchi 
734*d14abf15SRobert Mustacchi /**remove_nig_entry
735*d14abf15SRobert Mustacchi  * Dereference the entry for a given MAC address. If this was
736*d14abf15SRobert Mustacchi  * the last reference the MAC address is removed from the NIG.
737*d14abf15SRobert Mustacchi  *
738*d14abf15SRobert Mustacchi  * @param pdev
739*d14abf15SRobert Mustacchi  * @param addr the MAC address
740*d14abf15SRobert Mustacchi  *
741*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success,
742*d14abf15SRobert Mustacchi  *         LM_STATUS_FAILURE if the given MAC is not in the NIG,
743*d14abf15SRobert Mustacchi  *         other failure codes on other errors.
744*d14abf15SRobert Mustacchi  */
745*d14abf15SRobert Mustacchi lm_status_t lm_remove_nig_entry(    struct _lm_device_t *pdev,
746*d14abf15SRobert Mustacchi                                     u8_t        *addr);
747*d14abf15SRobert Mustacchi 
748*d14abf15SRobert Mustacchi lm_status_t lm_set_mac_in_nig(struct _lm_device_t * pdev, u8_t * mac_addr, lm_cli_idx_t lm_cli_idx, u8_t offset);
749*d14abf15SRobert Mustacchi 
750*d14abf15SRobert Mustacchi 
751*d14abf15SRobert Mustacchi /*************************  RSS  *****************************************/
752*d14abf15SRobert Mustacchi /**
753*d14abf15SRobert Mustacchi  * @Description
754*d14abf15SRobert Mustacchi  *      Enable RSS for Eth with given indirection table also updates the rss key
755*d14abf15SRobert Mustacchi 
756*d14abf15SRobert Mustacchi  * @param pdev
757*d14abf15SRobert Mustacchi  * @param chain_indirection_table - array of size @table_size containing chain numbers
758*d14abf15SRobert Mustacchi  * @param table_size - size of @indirection_table
759*d14abf15SRobert Mustacchi  * @param hash_key - new hash_key to be configured. 0 means no key
760*d14abf15SRobert Mustacchi  * @param key_size
761*d14abf15SRobert Mustacchi  * @param hash_type
762*d14abf15SRobert Mustacchi  * @param sync_with_toe - This field indicates that the completion to the mm layer
763*d14abf15SRobert Mustacchi  *                        should take into account the fact that toe rss update will
764*d14abf15SRobert Mustacchi  *                        be sent as well. A counter will be increased in lm for this purpose
765*d14abf15SRobert Mustacchi  * @param cookie        - will be returned on completion
766*d14abf15SRobert Mustacchi  *
767*d14abf15SRobert Mustacchi  * @return lm_status_t - SUCCESS on syncrounous completion
768*d14abf15SRobert Mustacchi  *                       PENDING on asyncounous completion
769*d14abf15SRobert Mustacchi  *                       FAILURE o/w
770*d14abf15SRobert Mustacchi  */
771*d14abf15SRobert Mustacchi lm_status_t lm_enable_rss(struct _lm_device_t *pdev, u8_t *chain_indirection_table,
772*d14abf15SRobert Mustacchi                           u32_t table_size, u8_t *hash_key, u32_t key_size, lm_rss_hash_t hash_type,
773*d14abf15SRobert Mustacchi                           u8 sync_with_toe, void * cookie);
774*d14abf15SRobert Mustacchi 
775*d14abf15SRobert Mustacchi /**
776*d14abf15SRobert Mustacchi  * @Description
777*d14abf15SRobert Mustacchi  *      This routine disables rss functionality by sending a
778*d14abf15SRobert Mustacchi  *      ramrod to FW.
779*d14abf15SRobert Mustacchi  *
780*d14abf15SRobert Mustacchi  * @param pdev
781*d14abf15SRobert Mustacchi  * @param cookie - will be returned on completion
782*d14abf15SRobert Mustacchi  * @param sync_with_toe - true means this call is synced with
783*d14abf15SRobert Mustacchi  *                      toe, and completion will be called only
784*d14abf15SRobert Mustacchi  *                      when both toe + eth complete. Eth needs
785*d14abf15SRobert Mustacchi  *                      to know this (reason in code)
786*d14abf15SRobert Mustacchi  *
787*d14abf15SRobert Mustacchi  * @return lm_status_t - SUCCESS on syncrounous completion
788*d14abf15SRobert Mustacchi  *                       PENDING on asyncounous completion
789*d14abf15SRobert Mustacchi  *                       FAILURE o/w
790*d14abf15SRobert Mustacchi  */
791*d14abf15SRobert Mustacchi lm_status_t lm_disable_rss(struct _lm_device_t *pdev, u8_t sync_with_toe, void * cookie);
792*d14abf15SRobert Mustacchi 
793*d14abf15SRobert Mustacchi /**
794*d14abf15SRobert Mustacchi  * @Description
795*d14abf15SRobert Mustacchi  *      Wait for the rss disable/enable configuration to
796*d14abf15SRobert Mustacchi  *      complete
797*d14abf15SRobert Mustacchi  *
798*d14abf15SRobert Mustacchi  * @param pdev
799*d14abf15SRobert Mustacchi  *
800*d14abf15SRobert Mustacchi  * @return lm_status_t lm_status_t SUCCESS or TIMEOUT
801*d14abf15SRobert Mustacchi  */
802*d14abf15SRobert Mustacchi lm_status_t lm_wait_config_rss_done(struct _lm_device_t *pdev);
803*d14abf15SRobert Mustacchi 
804*d14abf15SRobert Mustacchi /**
805*d14abf15SRobert Mustacchi  * @description
806*d14abf15SRobert Mustacchi  * Configure cmng the firmware to the right CMNG values if this
807*d14abf15SRobert Mustacchi  * device is the PMF ,after link speed/ETS changes.
808*d14abf15SRobert Mustacchi  *
809*d14abf15SRobert Mustacchi  * @note This function must be called under PHY_LOCK
810*d14abf15SRobert Mustacchi  * @param pdev
811*d14abf15SRobert Mustacchi  */
812*d14abf15SRobert Mustacchi void lm_cmng_update(struct _lm_device_t *pdev);
813*d14abf15SRobert Mustacchi /*************************  NIV  *****************************************/
814*d14abf15SRobert Mustacchi 
815*d14abf15SRobert Mustacchi /**lm_niv_set_loopback_mode
816*d14abf15SRobert Mustacchi  * Configure the FW to loopback mode - Tx packets will have the VN tag
817*d14abf15SRobert Mustacchi  * of Rx packets so that they will not be dropped by the Rx path.
818*d14abf15SRobert Mustacchi  * Note that once this function enables VN-Tag loopback mode the traffic that
819*d14abf15SRobert Mustacchi  * leaves the NIG is not valid VN-Tag traffic - don't use it unless MAC/PHY/external
820*d14abf15SRobert Mustacchi  * loopback is configured.
821*d14abf15SRobert Mustacchi  *
822*d14abf15SRobert Mustacchi  * @param pdev
823*d14abf15SRobert Mustacchi  * @param b_enable TRUE if loopback mode should be enabled, false otherwise.
824*d14abf15SRobert Mustacchi  */
825*d14abf15SRobert Mustacchi lm_status_t lm_niv_set_loopback_mode(struct _lm_device_t *pdev, IN const u8_t b_enable);
826*d14abf15SRobert Mustacchi 
827*d14abf15SRobert Mustacchi 
828*d14abf15SRobert Mustacchi /**lm_niv_event
829*d14abf15SRobert Mustacchi  * handle a NIV-related MCP general attention by scheduling the
830*d14abf15SRobert Mustacchi  * appropriate work item.
831*d14abf15SRobert Mustacchi  *
832*d14abf15SRobert Mustacchi  * @param pdev the device to use
833*d14abf15SRobert Mustacchi  * @param niv_event the DRIVER_STATUS flags that the MCP sent.
834*d14abf15SRobert Mustacchi  *                  It's assumed that only NIV-related flags are
835*d14abf15SRobert Mustacchi  *                  set.
836*d14abf15SRobert Mustacchi  *
837*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other
838*d14abf15SRobert Mustacchi  *         failure code on failure.
839*d14abf15SRobert Mustacchi  */
840*d14abf15SRobert Mustacchi lm_status_t lm_niv_event(struct _lm_device_t *pdev, const u32_t niv_event);
841*d14abf15SRobert Mustacchi 
842*d14abf15SRobert Mustacchi /**lm_niv_post_command
843*d14abf15SRobert Mustacchi  * Post a NIV ramrod and wait for its completion.
844*d14abf15SRobert Mustacchi  *
845*d14abf15SRobert Mustacchi  *
846*d14abf15SRobert Mustacchi  * @param pdev the device
847*d14abf15SRobert Mustacchi  * @param command the ramrod cmd_id (NONE_CONNECTION_TYPE is
848*d14abf15SRobert Mustacchi  *                assumed)
849*d14abf15SRobert Mustacchi  * @param data the ramrod data
850*d14abf15SRobert Mustacchi  * @param initial_state the type of the NIV command (one of the
851*d14abf15SRobert Mustacchi  *                      NIV_RAMROD_???_POSTED values)
852*d14abf15SRobert Mustacchi  *
853*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other
854*d14abf15SRobert Mustacchi  *         failure code on failure.
855*d14abf15SRobert Mustacchi  */
856*d14abf15SRobert Mustacchi lm_status_t lm_niv_post_command(struct _lm_device_t *pdev,
857*d14abf15SRobert Mustacchi                                 IN const u8_t       command,
858*d14abf15SRobert Mustacchi                                 IN const u64_t      data,
859*d14abf15SRobert Mustacchi                                 IN const u32_t      initial_state);
860*d14abf15SRobert Mustacchi 
861*d14abf15SRobert Mustacchi /**lm_niv_vif_update
862*d14abf15SRobert Mustacchi  * Send a VIF function update ramrod and wait for its completion.
863*d14abf15SRobert Mustacchi  *
864*d14abf15SRobert Mustacchi  *
865*d14abf15SRobert Mustacchi  * @param pdev the device
866*d14abf15SRobert Mustacchi  * @param vif_id the new VIF ID for this function
867*d14abf15SRobert Mustacchi  * @param default_vlan the new default VLAN for this function
868*d14abf15SRobert Mustacchi  * @param allowed_priorities the new allowed priorities for this function
869*d14abf15SRobert Mustacchi  *
870*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other failure code on failure.
871*d14abf15SRobert Mustacchi  */
872*d14abf15SRobert Mustacchi lm_status_t lm_niv_vif_update(struct _lm_device_t *pdev,
873*d14abf15SRobert Mustacchi                               IN const u16_t vif_id,
874*d14abf15SRobert Mustacchi                               IN const u16_t default_vlan,
875*d14abf15SRobert Mustacchi                               IN const u8_t allowed_priorities);
876*d14abf15SRobert Mustacchi 
877*d14abf15SRobert Mustacchi /**lm_niv_vif_list_update
878*d14abf15SRobert Mustacchi  * Send a VIF lists ramrod and wait for its completion.
879*d14abf15SRobert Mustacchi  *
880*d14abf15SRobert Mustacchi  *
881*d14abf15SRobert Mustacchi  * @param pdev the device
882*d14abf15SRobert Mustacchi  * @param command the operation to perform. @see
883*d14abf15SRobert Mustacchi  *                vif_list_rule_kind
884*d14abf15SRobert Mustacchi  * @param list_index the list to set/get (used in LIST_GET and
885*d14abf15SRobert Mustacchi  *                   LIST_SET commands)
886*d14abf15SRobert Mustacchi  * @param func_bit_map the new bitmap for the list (used in
887*d14abf15SRobert Mustacchi  *                     LIST_SET)
888*d14abf15SRobert Mustacchi  * @param func_to_clear the function to remove from all lists
889*d14abf15SRobert Mustacchi  *                      (used in CLEAR_FUNC)
890*d14abf15SRobert Mustacchi  *
891*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other
892*d14abf15SRobert Mustacchi  *         failure code on failure.
893*d14abf15SRobert Mustacchi  */
894*d14abf15SRobert Mustacchi lm_status_t lm_niv_vif_list_update(struct _lm_device_t* pdev,
895*d14abf15SRobert Mustacchi                                    IN const enum vif_list_rule_kind opcode,
896*d14abf15SRobert Mustacchi                                    IN const u16_t list_index,
897*d14abf15SRobert Mustacchi                                    IN const u8_t func_bit_map,
898*d14abf15SRobert Mustacchi                                    IN const u8_t func_to_clear);
899*d14abf15SRobert Mustacchi 
900*d14abf15SRobert Mustacchi 
901*d14abf15SRobert Mustacchi /**lm_get_shmem_mf_cfg_info_niv
902*d14abf15SRobert Mustacchi  * Refresh NIV-related MF HW info from SHMEM.
903*d14abf15SRobert Mustacchi  *
904*d14abf15SRobert Mustacchi  * @param pdev the device to use
905*d14abf15SRobert Mustacchi  *
906*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other
907*d14abf15SRobert Mustacchi  *         failure code on failure.
908*d14abf15SRobert Mustacchi  */
909*d14abf15SRobert Mustacchi lm_status_t lm_get_shmem_mf_cfg_info_niv(struct _lm_device_t *pdev);
910*d14abf15SRobert Mustacchi 
911*d14abf15SRobert Mustacchi /**
912*d14abf15SRobert Mustacchi  * @brief Update mf configuration from SHMEM
913*d14abf15SRobert Mustacchi  *
914*d14abf15SRobert Mustacchi  * @param pdev the device to use
915*d14abf15SRobert Mustacchi  *
916*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other
917*d14abf15SRobert Mustacchi  *         failure code on failure.
918*d14abf15SRobert Mustacchi  */
919*d14abf15SRobert Mustacchi 
920*d14abf15SRobert Mustacchi lm_status_t lm_get_shmem_mf_cfg_info(struct _lm_device_t *pdev);
921*d14abf15SRobert Mustacchi 
922*d14abf15SRobert Mustacchi 
923*d14abf15SRobert Mustacchi #define LM_SET_CAM_NO_VLAN_FILTER  0xFFFF
924*d14abf15SRobert Mustacchi 
925*d14abf15SRobert Mustacchi #define PHY_HW_LOCK(pdev)   lm_hw_lock(pdev, HW_LOCK_RESOURCE_MDIO, TRUE);
926*d14abf15SRobert Mustacchi 
927*d14abf15SRobert Mustacchi #define PHY_HW_UNLOCK(pdev) lm_hw_unlock(pdev, HW_LOCK_RESOURCE_MDIO);
928*d14abf15SRobert Mustacchi 
929*d14abf15SRobert Mustacchi /* Description:
930*d14abf15SRobert Mustacchi  *    This routine is called to retrieve statistics.  */
931*d14abf15SRobert Mustacchi 
932*d14abf15SRobert Mustacchi struct _lm_vf_info_t;
933*d14abf15SRobert Mustacchi lm_status_t
934*d14abf15SRobert Mustacchi lm_get_stats(
935*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
936*d14abf15SRobert Mustacchi     lm_stats_t stats_type,
937*d14abf15SRobert Mustacchi     u64_t *stats_cnt
938*d14abf15SRobert Mustacchi #ifdef VF_INVOLVED
939*d14abf15SRobert Mustacchi     ,struct _lm_vf_info_t * vf_info
940*d14abf15SRobert Mustacchi #endif
941*d14abf15SRobert Mustacchi     );
942*d14abf15SRobert Mustacchi 
943*d14abf15SRobert Mustacchi 
944*d14abf15SRobert Mustacchi void lm_stats_reset( struct _lm_device_t* pdev) ;
945*d14abf15SRobert Mustacchi 
946*d14abf15SRobert Mustacchi /* Description:
947*d14abf15SRobert Mustacchi  *    This routine is called to add a wake-up pattern to the main list that
948*d14abf15SRobert Mustacchi  *    contains all the wake-up frame. */
949*d14abf15SRobert Mustacchi lm_status_t
950*d14abf15SRobert Mustacchi lm_add_nwuf(
951*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
952*d14abf15SRobert Mustacchi     u32_t byte_mask_size,
953*d14abf15SRobert Mustacchi     u8_t *byte_mask,
954*d14abf15SRobert Mustacchi     u8_t *byte_pattern);
955*d14abf15SRobert Mustacchi 
956*d14abf15SRobert Mustacchi /* Description:
957*d14abf15SRobert Mustacchi  *    This routine is called to remove the wake-up pattern from the main list
958*d14abf15SRobert Mustacchi  *    that contains all the wake-up frame. */
959*d14abf15SRobert Mustacchi lm_status_t
960*d14abf15SRobert Mustacchi lm_del_nwuf(
961*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
962*d14abf15SRobert Mustacchi     u32_t byte_mask_size,
963*d14abf15SRobert Mustacchi     u8_t *byte_mask,
964*d14abf15SRobert Mustacchi     u8_t *byte_pattern);
965*d14abf15SRobert Mustacchi 
966*d14abf15SRobert Mustacchi /* Description:
967*d14abf15SRobert Mustacchi  *    Delete all the NWUF entries. */
968*d14abf15SRobert Mustacchi void
969*d14abf15SRobert Mustacchi lm_clear_nwuf(
970*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
971*d14abf15SRobert Mustacchi 
972*d14abf15SRobert Mustacchi 
973*d14abf15SRobert Mustacchi /**lm_save_hw_state_for_d3
974*d14abf15SRobert Mustacchi  * Save whatever HW state is needed before the device goes to
975*d14abf15SRobert Mustacchi  * D3, so that it can be restored when returning to D0 by
976*d14abf15SRobert Mustacchi  * lm_pcie_state_restore_for_d0
977*d14abf15SRobert Mustacchi  *
978*d14abf15SRobert Mustacchi  *
979*d14abf15SRobert Mustacchi  * @param pdev the device to use.
980*d14abf15SRobert Mustacchi  */
981*d14abf15SRobert Mustacchi void lm_pcie_state_save_for_d3(struct _lm_device_t *pdev);
982*d14abf15SRobert Mustacchi 
983*d14abf15SRobert Mustacchi /**lm_save_hw_state_for_d3
984*d14abf15SRobert Mustacchi  * Restore whatever HW state was saved by
985*d14abf15SRobert Mustacchi  * lm_pcie_state_save_for_d3 before the device's power state was
986*d14abf15SRobert Mustacchi  * changed to D3.
987*d14abf15SRobert Mustacchi  *
988*d14abf15SRobert Mustacchi  * @param pdev the device to use.
989*d14abf15SRobert Mustacchi  */
990*d14abf15SRobert Mustacchi void lm_pcie_state_restore_for_d0(struct _lm_device_t *pdev);
991*d14abf15SRobert Mustacchi 
992*d14abf15SRobert Mustacchi /* Description:
993*d14abf15SRobert Mustacchi  *    This routine is called to set up the device power state. */
994*d14abf15SRobert Mustacchi void
995*d14abf15SRobert Mustacchi lm_set_power_state(
996*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
997*d14abf15SRobert Mustacchi     lm_power_state_t power_state,
998*d14abf15SRobert Mustacchi     lm_wake_up_mode_t wake_up_mode,     /* Valid when power_state is D3. */
999*d14abf15SRobert Mustacchi     u8_t set_pci_pm);
1000*d14abf15SRobert Mustacchi 
1001*d14abf15SRobert Mustacchi lm_status_t lm_check_phy_link_params(struct _lm_device_t *pdev, lm_medium_t req_medium);
1002*d14abf15SRobert Mustacchi 
1003*d14abf15SRobert Mustacchi /* Description:
1004*d14abf15SRobert Mustacchi  *    This routine is called to initialize the PHY based one 'media_type'
1005*d14abf15SRobert Mustacchi  *    setting.  'wait_for_link_timeout' specifies how long to poll for
1006*d14abf15SRobert Mustacchi  *    link before returning. */
1007*d14abf15SRobert Mustacchi lm_status_t
1008*d14abf15SRobert Mustacchi lm_init_phy(
1009*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
1010*d14abf15SRobert Mustacchi     lm_medium_t req_medium,
1011*d14abf15SRobert Mustacchi     lm_flow_control_t flow_control,
1012*d14abf15SRobert Mustacchi     u32_t selective_autoneg,
1013*d14abf15SRobert Mustacchi     u32_t wire_speed,
1014*d14abf15SRobert Mustacchi     u32_t wait_for_link_timeout);
1015*d14abf15SRobert Mustacchi 
1016*d14abf15SRobert Mustacchi lm_status_t
1017*d14abf15SRobert Mustacchi lm_link_update(struct _lm_device_t *pdev);
1018*d14abf15SRobert Mustacchi 
1019*d14abf15SRobert Mustacchi u32_t lm_get_speed_real_from_elink_line_speed( IN const struct elink_vars* link_vars );
1020*d14abf15SRobert Mustacchi u32_t lm_get_speed_medium_from_elink_line_speed( IN const struct elink_vars* link_vars );
1021*d14abf15SRobert Mustacchi 
1022*d14abf15SRobert Mustacchi lm_medium_t lm_loopback_req_medium_convert( IN struct _lm_device_t *pdev, IN const lm_medium_t req_medium );
1023*d14abf15SRobert Mustacchi 
1024*d14abf15SRobert Mustacchi /**lm_get_port_max_speed
1025*d14abf15SRobert Mustacchi  *
1026*d14abf15SRobert Mustacchi  * @param pdev the device to check
1027*d14abf15SRobert Mustacchi  *
1028*d14abf15SRobert Mustacchi  * @return u32_t the maximum speed (in Mbps) the physical port
1029*d14abf15SRobert Mustacchi  *         that pdev is on is capable of. This may be different
1030*d14abf15SRobert Mustacchi  *         than the current medium's speed.
1031*d14abf15SRobert Mustacchi  */
1032*d14abf15SRobert Mustacchi u32_t lm_get_port_max_speed(IN struct _lm_device_t *pdev);
1033*d14abf15SRobert Mustacchi 
1034*d14abf15SRobert Mustacchi /**
1035*d14abf15SRobert Mustacchi  * @Description
1036*d14abf15SRobert Mustacchi  *     This function is called periodically, every time the link
1037*d14abf15SRobert Mustacchi  *     timer expires, it's main purpose is to call elink under
1038*d14abf15SRobert Mustacchi  *     appropriate locks to perform any periodic tasks
1039*d14abf15SRobert Mustacchi  * @param pdev
1040*d14abf15SRobert Mustacchi  *
1041*d14abf15SRobert Mustacchi  * @return lm_status_t
1042*d14abf15SRobert Mustacchi  */
1043*d14abf15SRobert Mustacchi lm_status_t
1044*d14abf15SRobert Mustacchi lm_link_on_timer(struct _lm_device_t *pdev);
1045*d14abf15SRobert Mustacchi 
1046*d14abf15SRobert Mustacchi /* Description:
1047*d14abf15SRobert Mustacchi  *    This routine is called to report link to the OS and sync
1048*d14abf15SRobert Mustacchi  *    Statistic gathering.
1049*d14abf15SRobert Mustacchi  */
1050*d14abf15SRobert Mustacchi void
1051*d14abf15SRobert Mustacchi lm_link_report(struct _lm_device_t *pdev);
1052*d14abf15SRobert Mustacchi 
1053*d14abf15SRobert Mustacchi /* Description:
1054*d14abf15SRobert Mustacchi  *    Fills struct from type _lm_reported_link_params_t with
1055*d14abf15SRobert Mustacchi  *    current link information
1056*d14abf15SRobert Mustacchi  */
1057*d14abf15SRobert Mustacchi void lm_link_fill_reported_data( IN struct _lm_device_t *pdev,
1058*d14abf15SRobert Mustacchi                                 OUT struct _lm_reported_link_params_t *lm_reported_link_params );
1059*d14abf15SRobert Mustacchi 
1060*d14abf15SRobert Mustacchi /* Description:
1061*d14abf15SRobert Mustacchi  *    This routine is called to get the external phy fw version
1062*d14abf15SRobert Mustacchi  *    will return zero in case no external phy or failure type
1063*d14abf15SRobert Mustacchi  */
1064*d14abf15SRobert Mustacchi lm_status_t
1065*d14abf15SRobert Mustacchi lm_get_external_phy_fw_version(
1066*d14abf15SRobert Mustacchi           struct _lm_device_t *pdev,
1067*d14abf15SRobert Mustacchi           u8_t *               version,
1068*d14abf15SRobert Mustacchi           u8_t                 len );
1069*d14abf15SRobert Mustacchi 
1070*d14abf15SRobert Mustacchi /* Description:
1071*d14abf15SRobert Mustacchi  *    This routine is called to update ext phy fw
1072*d14abf15SRobert Mustacchi  */
1073*d14abf15SRobert Mustacchi lm_status_t
1074*d14abf15SRobert Mustacchi lm_update_external_phy_fw(
1075*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
1076*d14abf15SRobert Mustacchi     u32_t offset,
1077*d14abf15SRobert Mustacchi     u8_t * data,
1078*d14abf15SRobert Mustacchi     u32_t size);
1079*d14abf15SRobert Mustacchi 
1080*d14abf15SRobert Mustacchi /* Description:
1081*d14abf15SRobert Mustacchi  *    This routine is called before update ext phy fw file
1082*d14abf15SRobert Mustacchi  */
1083*d14abf15SRobert Mustacchi lm_status_t
1084*d14abf15SRobert Mustacchi lm_update_external_phy_fw_prepare( struct _lm_device_t *pdev );
1085*d14abf15SRobert Mustacchi 
1086*d14abf15SRobert Mustacchi /* Description:
1087*d14abf15SRobert Mustacchi  *    This routine is called after update ext phy fw file
1088*d14abf15SRobert Mustacchi  */
1089*d14abf15SRobert Mustacchi lm_status_t
1090*d14abf15SRobert Mustacchi lm_update_external_phy_fw_reinit( struct _lm_device_t *pdev );
1091*d14abf15SRobert Mustacchi 
1092*d14abf15SRobert Mustacchi /* Description:
1093*d14abf15SRobert Mustacchi  *    This routine is called after update ext phy fw file
1094*d14abf15SRobert Mustacchi  */
1095*d14abf15SRobert Mustacchi lm_status_t
1096*d14abf15SRobert Mustacchi lm_update_external_phy_fw_done( struct _lm_device_t *pdev );
1097*d14abf15SRobert Mustacchi 
1098*d14abf15SRobert Mustacchi /* Description:
1099*d14abf15SRobert Mustacchi  *    This routine check if there is a fan failure in board
1100*d14abf15SRobert Mustacchi  *    in case there is - event log will be sent
1101*d14abf15SRobert Mustacchi  */
1102*d14abf15SRobert Mustacchi void lm_check_fan_failure(struct _lm_device_t *pdev);
1103*d14abf15SRobert Mustacchi 
1104*d14abf15SRobert Mustacchi /* Description:
1105*d14abf15SRobert Mustacchi  *    Checks if all the HW is in idle state
1106*d14abf15SRobert Mustacchi  * Returned Value
1107*d14abf15SRobert Mustacchi  *    Number of errors (not idle items) */
1108*d14abf15SRobert Mustacchi /* Description:
1109*d14abf15SRobert Mustacchi  *    Sends keepalive to mcp
1110*d14abf15SRobert Mustacchi  */
1111*d14abf15SRobert Mustacchi lm_status_t lm_send_driver_pulse( struct _lm_device_t *pdev );
1112*d14abf15SRobert Mustacchi 
1113*d14abf15SRobert Mustacchi /* Description:
1114*d14abf15SRobert Mustacchi  *    Set driver pulse to MCP to always alive
1115*d14abf15SRobert Mustacchi  */
1116*d14abf15SRobert Mustacchi void lm_driver_pulse_always_alive(struct _lm_device_t *pdev);
1117*d14abf15SRobert Mustacchi 
1118*d14abf15SRobert Mustacchi /* Description:
1119*d14abf15SRobert Mustacchi  *    stop any dma transactions to/from chip and verify no pending requests
1120*d14abf15SRobert Mustacchi  */
1121*d14abf15SRobert Mustacchi void lm_disable_pci_dma(struct _lm_device_t *pdev, u8_t b_wait_for_done);
1122*d14abf15SRobert Mustacchi 
1123*d14abf15SRobert Mustacchi /* Description:
1124*d14abf15SRobert Mustacchi  *    enable  dma transactions to/from chip
1125*d14abf15SRobert Mustacchi  */
1126*d14abf15SRobert Mustacchi void lm_enable_pci_dma(struct _lm_device_t *pdev);
1127*d14abf15SRobert Mustacchi 
1128*d14abf15SRobert Mustacchi /* Description:
1129*d14abf15SRobert Mustacchi  *    Disables all the attention
1130*d14abf15SRobert Mustacchi  */
1131*d14abf15SRobert Mustacchi void disable_blocks_attention(struct _lm_device_t *pdev);
1132*d14abf15SRobert Mustacchi 
1133*d14abf15SRobert Mustacchi 
1134*d14abf15SRobert Mustacchi // This code section is for WinDbg Extension (b10kd)
1135*d14abf15SRobert Mustacchi #if !defined(_B10KD_EXT)
1136*d14abf15SRobert Mustacchi u32_t       lm_idle_chk( struct _lm_device_t *pdev);
1137*d14abf15SRobert Mustacchi lm_status_t lm_get_storms_assert( struct _lm_device_t *pdev );
1138*d14abf15SRobert Mustacchi #endif // (_B10KD_EXT)
1139*d14abf15SRobert Mustacchi 
1140*d14abf15SRobert Mustacchi void lm_collect_idle_storms_dorrbell_asserts( struct _lm_device_t *pdev,
1141*d14abf15SRobert Mustacchi                                               const  u8_t          b_idle_chk,
1142*d14abf15SRobert Mustacchi                                               const  u8_t          b_storms_asserts,
1143*d14abf15SRobert Mustacchi                                               const  u8_t          b_dorrbell_info );
1144*d14abf15SRobert Mustacchi 
1145*d14abf15SRobert Mustacchi /* Description:
1146*d14abf15SRobert Mustacchi  *    cmng interface
1147*d14abf15SRobert Mustacchi  */
1148*d14abf15SRobert Mustacchi void lm_cmng_calc_params( struct _lm_device_t *pdev );
1149*d14abf15SRobert Mustacchi void lm_cmng_get_shmem_info( struct _lm_device_t *pdev );
1150*d14abf15SRobert Mustacchi 
1151*d14abf15SRobert Mustacchi lm_status_t
1152*d14abf15SRobert Mustacchi lm_get_doorbell_info(
1153*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev);
1154*d14abf15SRobert Mustacchi 
1155*d14abf15SRobert Mustacchi lm_status_t
1156*d14abf15SRobert Mustacchi lm_gpio_read(struct _lm_device_t *pdev, u32_t pin_num, u32_t* value_ptr, u8_t port);
1157*d14abf15SRobert Mustacchi 
1158*d14abf15SRobert Mustacchi lm_status_t
1159*d14abf15SRobert Mustacchi lm_gpio_write(struct _lm_device_t *pdev, u32_t pin_num, u32_t value, u8_t port);
1160*d14abf15SRobert Mustacchi 
1161*d14abf15SRobert Mustacchi lm_status_t
1162*d14abf15SRobert Mustacchi lm_gpio_mult_write(struct _lm_device_t *pdev, u8_t pins, u32_t value);
1163*d14abf15SRobert Mustacchi 
1164*d14abf15SRobert Mustacchi lm_status_t
1165*d14abf15SRobert Mustacchi lm_gpio_int_write(struct _lm_device_t *pdev, u32_t pin_num, u32_t value, u8_t port);
1166*d14abf15SRobert Mustacchi 
1167*d14abf15SRobert Mustacchi lm_status_t
1168*d14abf15SRobert Mustacchi lm_spio_read(struct _lm_device_t *pdev, u32_t pin_num, u32_t* value_ptr);
1169*d14abf15SRobert Mustacchi 
1170*d14abf15SRobert Mustacchi lm_status_t
1171*d14abf15SRobert Mustacchi lm_spio_write(struct _lm_device_t *pdev, u32_t pin_num, u32_t value);
1172*d14abf15SRobert Mustacchi 
1173*d14abf15SRobert Mustacchi lm_status_t
1174*d14abf15SRobert Mustacchi lm_set_led_mode(struct _lm_device_t *pdev, u32_t port_idx, u32_t mode_idx);
1175*d14abf15SRobert Mustacchi 
1176*d14abf15SRobert Mustacchi lm_status_t
1177*d14abf15SRobert Mustacchi lm_get_led_mode(struct _lm_device_t *pdev, u32_t port_idx, u32_t* mode_idx_ptr);
1178*d14abf15SRobert Mustacchi 
1179*d14abf15SRobert Mustacchi lm_status_t
1180*d14abf15SRobert Mustacchi lm_override_led_value(struct _lm_device_t *pdev, u32_t port_idx, u32_t led_idx, u32_t value);
1181*d14abf15SRobert Mustacchi 
1182*d14abf15SRobert Mustacchi lm_status_t
1183*d14abf15SRobert Mustacchi lm_blink_traffic_led(struct _lm_device_t *pdev, u32_t port_idx, u32_t rate);
1184*d14abf15SRobert Mustacchi 
1185*d14abf15SRobert Mustacchi lm_status_t
1186*d14abf15SRobert Mustacchi lm_get_led_status(struct _lm_device_t *pdev, u32_t port_idx, u32_t led_idx, u32_t* value_ptr);
1187*d14abf15SRobert Mustacchi 
1188*d14abf15SRobert Mustacchi void
1189*d14abf15SRobert Mustacchi lm_set_led(struct _lm_device_t *pdev, lm_medium_t speed);
1190*d14abf15SRobert Mustacchi 
1191*d14abf15SRobert Mustacchi void
1192*d14abf15SRobert Mustacchi lm_reset_led(struct _lm_device_t *pdev);
1193*d14abf15SRobert Mustacchi 
1194*d14abf15SRobert Mustacchi void
1195*d14abf15SRobert Mustacchi lm_return_packet_bytes( struct _lm_device_t *pdev,
1196*d14abf15SRobert Mustacchi                         u32_t const         qidx,
1197*d14abf15SRobert Mustacchi                         u32_t const         returned_bytes);
1198*d14abf15SRobert Mustacchi 
1199*d14abf15SRobert Mustacchi void
1200*d14abf15SRobert Mustacchi lm_reg_rd_blk(
1201*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
1202*d14abf15SRobert Mustacchi     u32_t reg_offset,
1203*d14abf15SRobert Mustacchi     u32_t *buf_ptr,
1204*d14abf15SRobert Mustacchi     u32_t u32t_cnt);
1205*d14abf15SRobert Mustacchi 
1206*d14abf15SRobert Mustacchi void
1207*d14abf15SRobert Mustacchi lm_reg_rd_blk_ind(
1208*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
1209*d14abf15SRobert Mustacchi     u32_t reg_offset,
1210*d14abf15SRobert Mustacchi     u32_t *buf_ptr,
1211*d14abf15SRobert Mustacchi     u32_t u32t_cnt,
1212*d14abf15SRobert Mustacchi     u8_t acquire_lock_flag);
1213*d14abf15SRobert Mustacchi 
1214*d14abf15SRobert Mustacchi void
1215*d14abf15SRobert Mustacchi lm_reg_wr_blk(
1216*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
1217*d14abf15SRobert Mustacchi     u32_t reg_offset,
1218*d14abf15SRobert Mustacchi     u32_t *data_ptr,
1219*d14abf15SRobert Mustacchi     u32_t u32t_cnt);
1220*d14abf15SRobert Mustacchi 
1221*d14abf15SRobert Mustacchi void
1222*d14abf15SRobert Mustacchi lm_reg_wr_blk_ind(
1223*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
1224*d14abf15SRobert Mustacchi     u32_t reg_offset,
1225*d14abf15SRobert Mustacchi     u32_t *data_ptr,
1226*d14abf15SRobert Mustacchi     u32_t u32t_cnt);
1227*d14abf15SRobert Mustacchi 
1228*d14abf15SRobert Mustacchi lm_status_t
1229*d14abf15SRobert Mustacchi lm_get_ibft_physical_addr_for_efi(
1230*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
1231*d14abf15SRobert Mustacchi     u32_t *phy_hi,
1232*d14abf15SRobert Mustacchi     u32_t *phy_lo);
1233*d14abf15SRobert Mustacchi 
1234*d14abf15SRobert Mustacchi lm_status_t lm_get_iscsi_boot_info_block( struct _lm_device_t *pdev, struct _iscsi_info_block_hdr_t* iscsi_info_block_hdr_ptr );
1235*d14abf15SRobert Mustacchi 
1236*d14abf15SRobert Mustacchi typedef enum {
1237*d14abf15SRobert Mustacchi     lm_mcp_mb_header,
1238*d14abf15SRobert Mustacchi     lm_mcp_mb_param,
1239*d14abf15SRobert Mustacchi     lm_mcp_mb_pulse
1240*d14abf15SRobert Mustacchi } lm_mcp_mb_type;
1241*d14abf15SRobert Mustacchi 
1242*d14abf15SRobert Mustacchi #define MCP_CMD_DEFAULT_TIMEOUT 0x0
1243*d14abf15SRobert Mustacchi 
1244*d14abf15SRobert Mustacchi // lm_mcp_cmd functions
1245*d14abf15SRobert Mustacchi lm_status_t lm_mcp_cmd_init( struct _lm_device_t *pdev) ;
1246*d14abf15SRobert Mustacchi lm_status_t lm_mcp_cmd_send( struct _lm_device_t *pdev, lm_mcp_mb_type mcp_mb_type, u32_t drv_msg, u32_t param) ;
1247*d14abf15SRobert Mustacchi lm_status_t lm_mcp_cmd_response( struct _lm_device_t *pdev,
1248*d14abf15SRobert Mustacchi                                  lm_mcp_mb_type       mcp_mb_type,
1249*d14abf15SRobert Mustacchi                                  u32_t                drv_msg,
1250*d14abf15SRobert Mustacchi                                  u32_t                timeout,
1251*d14abf15SRobert Mustacchi                                  OUT u32_t*           p_fw_resp );
1252*d14abf15SRobert Mustacchi 
1253*d14abf15SRobert Mustacchi /**Perform a send/receive transaction with the MCP. This
1254*d14abf15SRobert Mustacchi  * function is guarenteed to be atomic against all other calls
1255*d14abf15SRobert Mustacchi  * to lm_mcp_cmd_send_recieve.
1256*d14abf15SRobert Mustacchi  *
1257*d14abf15SRobert Mustacchi  * @param pdev the LM device
1258*d14abf15SRobert Mustacchi  * @param mcp_mb_type
1259*d14abf15SRobert Mustacchi  * @param drv_msg the opcode to send to the MCP
1260*d14abf15SRobert Mustacchi  * @param param the parameter to send
1261*d14abf15SRobert Mustacchi  * @param timeout
1262*d14abf15SRobert Mustacchi  * @param p_fw_resp the response from the MCP
1263*d14abf15SRobert Mustacchi  *
1264*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other
1265*d14abf15SRobert Mustacchi  *         value on failure.
1266*d14abf15SRobert Mustacchi  */
1267*d14abf15SRobert Mustacchi lm_status_t lm_mcp_cmd_send_recieve( struct _lm_device_t* pdev,
1268*d14abf15SRobert Mustacchi                                      lm_mcp_mb_type       mcp_mb_type,
1269*d14abf15SRobert Mustacchi                                      u32_t                drv_msg,
1270*d14abf15SRobert Mustacchi                                      u32_t                param,
1271*d14abf15SRobert Mustacchi                                      u32_t                timeout,
1272*d14abf15SRobert Mustacchi                                      OUT u32_t*           p_fw_resp);
1273*d14abf15SRobert Mustacchi 
1274*d14abf15SRobert Mustacchi /**Perform a send/receive transaction with the MCP, with no
1275*d14abf15SRobert Mustacchi  * atomicity guarentee. Only call this function when you know no
1276*d14abf15SRobert Mustacchi  * other context may initiate an MCP transaction (e.g from the
1277*d14abf15SRobert Mustacchi  * load/unload flow).
1278*d14abf15SRobert Mustacchi  *
1279*d14abf15SRobert Mustacchi  * @param pdev the LM device
1280*d14abf15SRobert Mustacchi  * @param mcp_mb_type
1281*d14abf15SRobert Mustacchi  * @param drv_msg the opcode to send to the MCP
1282*d14abf15SRobert Mustacchi  * @param param the parameter to send
1283*d14abf15SRobert Mustacchi  * @param timeout
1284*d14abf15SRobert Mustacchi  * @param p_fw_resp the response from the MCP
1285*d14abf15SRobert Mustacchi  *
1286*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other
1287*d14abf15SRobert Mustacchi  *         value on failure.
1288*d14abf15SRobert Mustacchi  */
1289*d14abf15SRobert Mustacchi lm_status_t lm_mcp_cmd_send_recieve_non_atomic( struct _lm_device_t *pdev,
1290*d14abf15SRobert Mustacchi                                              lm_mcp_mb_type       mcp_mb_type,
1291*d14abf15SRobert Mustacchi                                              u32_t                drv_msg,
1292*d14abf15SRobert Mustacchi                                              u32_t                param,
1293*d14abf15SRobert Mustacchi                                              u32_t                timeout,
1294*d14abf15SRobert Mustacchi                                              OUT u32_t*           p_fw_resp );
1295*d14abf15SRobert Mustacchi 
1296*d14abf15SRobert Mustacchi u32_t lm_mcp_check( struct _lm_device_t *pdev);
1297*d14abf15SRobert Mustacchi 
1298*d14abf15SRobert Mustacchi /**lm_mcp_set_mf_bw
1299*d14abf15SRobert Mustacchi  * Set the bandwidth parameters of this function through the MCP
1300*d14abf15SRobert Mustacchi  * opcode DRV_MSG_CODE_SET_MF_BW.
1301*d14abf15SRobert Mustacchi  *
1302*d14abf15SRobert Mustacchi  *
1303*d14abf15SRobert Mustacchi  * @param pdev the LM device
1304*d14abf15SRobert Mustacchi  * @param min_bw the minimum bandwidth for this function
1305*d14abf15SRobert Mustacchi  * @param max_bw the maximum bandwidth for this function
1306*d14abf15SRobert Mustacchi  *
1307*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success,
1308*d14abf15SRobert Mustacchi  *         LM_STATUS_INVALID_PARAMETER if the bootcode version
1309*d14abf15SRobert Mustacchi  *         is not new enough or the device is not in
1310*d14abf15SRobert Mustacchi  *         multifunction mode.
1311*d14abf15SRobert Mustacchi  */
1312*d14abf15SRobert Mustacchi lm_status_t lm_mcp_set_mf_bw(struct _lm_device_t *pdev, IN u8_t min_bw, IN u8_t max_bw);
1313*d14abf15SRobert Mustacchi 
1314*d14abf15SRobert Mustacchi /**lm_mcp_indicate_client_bind
1315*d14abf15SRobert Mustacchi  * Update the SHMEM as needed when a client binds.
1316*d14abf15SRobert Mustacchi  *
1317*d14abf15SRobert Mustacchi  * @param pdev the LM device
1318*d14abf15SRobert Mustacchi  * @param cli_id the client that was bound.
1319*d14abf15SRobert Mustacchi  */
1320*d14abf15SRobert Mustacchi void lm_mcp_indicate_client_bind(struct _lm_device_t *pdev, lm_cli_idx_t cli_id);
1321*d14abf15SRobert Mustacchi 
1322*d14abf15SRobert Mustacchi /**lm_mcp_indicate_client_unbind
1323*d14abf15SRobert Mustacchi  * Update the SHMEM as needed when a client unbinds.
1324*d14abf15SRobert Mustacchi  *
1325*d14abf15SRobert Mustacchi  *
1326*d14abf15SRobert Mustacchi  * @param pdev the LM device
1327*d14abf15SRobert Mustacchi  * @param cli_id the client that was unbound.
1328*d14abf15SRobert Mustacchi  */
1329*d14abf15SRobert Mustacchi void lm_mcp_indicate_client_unbind(struct _lm_device_t *pdev, lm_cli_idx_t cli_id);
1330*d14abf15SRobert Mustacchi 
1331*d14abf15SRobert Mustacchi // lm_lodaer interface
1332*d14abf15SRobert Mustacchi 
1333*d14abf15SRobert Mustacchi typedef enum {
1334*d14abf15SRobert Mustacchi     LM_LOADER_OPCODE_LOAD           = 0x10,
1335*d14abf15SRobert Mustacchi     LM_LOADER_OPCODE_UNLOAD_WOL_EN  = 0x11,
1336*d14abf15SRobert Mustacchi     LM_LOADER_OPCODE_UNLOAD_WOL_DIS = 0x12,
1337*d14abf15SRobert Mustacchi     LM_LOADER_OPCODE_UNLOAD_WOL_MCP = 0x13
1338*d14abf15SRobert Mustacchi } lm_loader_opcode;
1339*d14abf15SRobert Mustacchi 
1340*d14abf15SRobert Mustacchi #define LM_LOADER_OPCODE_UNLOAD_SUSPEND	0x80
1341*d14abf15SRobert Mustacchi #define LM_LOADER_OPCODE_MASK		0x7F
1342*d14abf15SRobert Mustacchi 
1343*d14abf15SRobert Mustacchi typedef enum {
1344*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_LOAD_COMMON      = 0x100,
1345*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_LOAD_PORT        = 0x101,
1346*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_LOAD_FUNCTION    = 0x102,
1347*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_LOAD_DONE        = 0x103,
1348*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_UNLOAD_COMMON    = 0x104,
1349*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_UNLOAD_PORT      = 0x105,
1350*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_UNLOAD_FUNCTION  = 0x106,
1351*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_UNLOAD_DONE      = 0x107,
1352*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_LOAD_COMMON_CHIP = 0x108,
1353*d14abf15SRobert Mustacchi     LM_LOADER_RESPONSE_INVALID         = -1
1354*d14abf15SRobert Mustacchi } lm_loader_response;
1355*d14abf15SRobert Mustacchi 
1356*d14abf15SRobert Mustacchi // lm_loader functions
1357*d14abf15SRobert Mustacchi lm_loader_response lm_loader_lock( struct _lm_device_t *pdev, lm_loader_opcode opcode ) ;
1358*d14abf15SRobert Mustacchi lm_loader_response lm_loader_unlock( struct _lm_device_t *pdev, lm_loader_opcode opcode, OPTIONAL const u32_t* IN p_param );
1359*d14abf15SRobert Mustacchi void lm_loader_reset ( struct _lm_device_t *pdev );
1360*d14abf15SRobert Mustacchi 
1361*d14abf15SRobert Mustacchi /* Get limit function[s]*/
1362*d14abf15SRobert Mustacchi u32_t lm_get_max_supported_toe_cons(struct _lm_device_t *pdev);
1363*d14abf15SRobert Mustacchi u8_t lm_get_toe_rss_possibility(struct _lm_device_t *pdev);
1364*d14abf15SRobert Mustacchi 
1365*d14abf15SRobert Mustacchi /**
1366*d14abf15SRobert Mustacchi  * Returns TRUE is device is not ASIC. May be called even when
1367*d14abf15SRobert Mustacchi  * device is not in D0 power state.
1368*d14abf15SRobert Mustacchi  *
1369*d14abf15SRobert Mustacchi  * @param pdev Device handle
1370*d14abf15SRobert Mustacchi  *
1371*d14abf15SRobert Mustacchi  * @return 0 if device is ASIC.
1372*d14abf15SRobert Mustacchi  */
1373*d14abf15SRobert Mustacchi int lm_chip_is_slow(struct _lm_device_t *pdev);
1374*d14abf15SRobert Mustacchi 
1375*d14abf15SRobert Mustacchi /*
1376*d14abf15SRobert Mustacchi  * returns the first MSI-X message for the given function
1377*d14abf15SRobert Mustacchi  */
1378*d14abf15SRobert Mustacchi u8_t lm_get_base_msix_msg(struct _lm_device_t *pdev);
1379*d14abf15SRobert Mustacchi 
1380*d14abf15SRobert Mustacchi /*
1381*d14abf15SRobert Mustacchi  * returns the first MSI-X message for the given function
1382*d14abf15SRobert Mustacchi  */
1383*d14abf15SRobert Mustacchi u8_t lm_get_base_msix_msg(struct _lm_device_t *pdev);
1384*d14abf15SRobert Mustacchi 
1385*d14abf15SRobert Mustacchi 
1386*d14abf15SRobert Mustacchi /*
1387*d14abf15SRobert Mustacchi  * returns the number of msix messages for the given function
1388*d14abf15SRobert Mustacchi  */
1389*d14abf15SRobert Mustacchi u8_t lm_get_num_fp_msix_messages(struct _lm_device_t *pdev);
1390*d14abf15SRobert Mustacchi 
1391*d14abf15SRobert Mustacchi /**
1392*d14abf15SRobert Mustacchi  * Set/Get IGU test mode
1393*d14abf15SRobert Mustacchi  */
1394*d14abf15SRobert Mustacchi void lm_set_igu_tmode(struct _lm_device_t *pdev, u8_t tmode);
1395*d14abf15SRobert Mustacchi u8_t lm_get_igu_tmode(struct _lm_device_t *pdev);
1396*d14abf15SRobert Mustacchi 
1397*d14abf15SRobert Mustacchi /**
1398*d14abf15SRobert Mustacchi  * Set/Get interrupt mode.
1399*d14abf15SRobert Mustacchi  */
1400*d14abf15SRobert Mustacchi void lm_set_interrupt_mode(struct _lm_device_t *pdev, u32_t mode);
1401*d14abf15SRobert Mustacchi u32_t lm_get_interrupt_mode(struct _lm_device_t *pdev);
1402*d14abf15SRobert Mustacchi 
1403*d14abf15SRobert Mustacchi 
1404*d14abf15SRobert Mustacchi /*
1405*d14abf15SRobert Mustacchi  * Check if, pdev has sp-vector i.e. pf / vf...
1406*d14abf15SRobert Mustacchi  */
1407*d14abf15SRobert Mustacchi u8_t lm_has_sp_msix_vector(struct _lm_device_t *pdev);
1408*d14abf15SRobert Mustacchi 
1409*d14abf15SRobert Mustacchi 
1410*d14abf15SRobert Mustacchi u8_t lm_is_function_after_flr(struct _lm_device_t * pdev);
1411*d14abf15SRobert Mustacchi lm_status_t lm_cleanup_after_flr(struct _lm_device_t * pdev);
1412*d14abf15SRobert Mustacchi 
1413*d14abf15SRobert Mustacchi lm_status_t
1414*d14abf15SRobert Mustacchi lm_set_cam_params(struct _lm_device_t * pdev,
1415*d14abf15SRobert Mustacchi                   u32_t mac_requestors_mask,
1416*d14abf15SRobert Mustacchi                   u32_t base_offset_in_cam_table,
1417*d14abf15SRobert Mustacchi                   u32_t cam_size,
1418*d14abf15SRobert Mustacchi                   u32_t mma_size,
1419*d14abf15SRobert Mustacchi                   u32_t mc_size);
1420*d14abf15SRobert Mustacchi 
1421*d14abf15SRobert Mustacchi void
1422*d14abf15SRobert Mustacchi lm_dcbx_pmf_migration(
1423*d14abf15SRobert Mustacchi     IN struct _lm_device_t *pdev);
1424*d14abf15SRobert Mustacchi /*******************************************************************************
1425*d14abf15SRobert Mustacchi  * Description:
1426*d14abf15SRobert Mustacchi  *
1427*d14abf15SRobert Mustacchi  *
1428*d14abf15SRobert Mustacchi  * Return:
1429*d14abf15SRobert Mustacchi ******************************************************************************/
1430*d14abf15SRobert Mustacchi lm_status_t
1431*d14abf15SRobert Mustacchi lm_dcbx_free_resc(
1432*d14abf15SRobert Mustacchi     IN struct _lm_device_t *pdev
1433*d14abf15SRobert Mustacchi     );
1434*d14abf15SRobert Mustacchi 
1435*d14abf15SRobert Mustacchi /**
1436*d14abf15SRobert Mustacchi  * @description
1437*d14abf15SRobert Mustacchi  *  Called to clean dcbx info after D3
1438*d14abf15SRobert Mustacchi  * @param pdev
1439*d14abf15SRobert Mustacchi  *
1440*d14abf15SRobert Mustacchi  * @return lm_status_t
1441*d14abf15SRobert Mustacchi  */
1442*d14abf15SRobert Mustacchi lm_status_t
1443*d14abf15SRobert Mustacchi lm_dcbx_init_info(
1444*d14abf15SRobert Mustacchi     IN struct _lm_device_t *pdev
1445*d14abf15SRobert Mustacchi     );
1446*d14abf15SRobert Mustacchi /*******************************************************************************
1447*d14abf15SRobert Mustacchi  * Description:
1448*d14abf15SRobert Mustacchi  *
1449*d14abf15SRobert Mustacchi  * Return:
1450*d14abf15SRobert Mustacchi ******************************************************************************/
1451*d14abf15SRobert Mustacchi void
1452*d14abf15SRobert Mustacchi lm_dcbx_init(IN struct _lm_device_t *pdev,
1453*d14abf15SRobert Mustacchi              IN const u8_t          b_only_setup);
1454*d14abf15SRobert Mustacchi 
1455*d14abf15SRobert Mustacchi void
1456*d14abf15SRobert Mustacchi lm_dcbx_init_default_params(struct _lm_device_t *pdev);
1457*d14abf15SRobert Mustacchi /*******************************************************************************
1458*d14abf15SRobert Mustacchi  * Description:
1459*d14abf15SRobert Mustacchi  *
1460*d14abf15SRobert Mustacchi  * Return:
1461*d14abf15SRobert Mustacchi ******************************************************************************/
1462*d14abf15SRobert Mustacchi lm_status_t
1463*d14abf15SRobert Mustacchi lm_dcbx_lldp_read_params(struct _lm_device_t            * pdev,
1464*d14abf15SRobert Mustacchi                          struct _b10_lldp_params_get_t  * lldp_params);
1465*d14abf15SRobert Mustacchi 
1466*d14abf15SRobert Mustacchi /*******************************************************************************
1467*d14abf15SRobert Mustacchi  * Description:
1468*d14abf15SRobert Mustacchi  *
1469*d14abf15SRobert Mustacchi  * Return:
1470*d14abf15SRobert Mustacchi ******************************************************************************/
1471*d14abf15SRobert Mustacchi lm_status_t
1472*d14abf15SRobert Mustacchi lm_dcbx_read_params(struct _lm_device_t            * pdev,
1473*d14abf15SRobert Mustacchi                     struct _b10_dcbx_params_get_t  * dcbx_params);
1474*d14abf15SRobert Mustacchi 
1475*d14abf15SRobert Mustacchi u8_t lm_dcbx_cos_max_num(
1476*d14abf15SRobert Mustacchi     INOUT   const struct _lm_device_t * pdev);
1477*d14abf15SRobert Mustacchi 
1478*d14abf15SRobert Mustacchi lm_status_t
1479*d14abf15SRobert Mustacchi lm_dcbx_ie_check_if_param_change(
1480*d14abf15SRobert Mustacchi     INOUT   struct _lm_device_t     *pdev,
1481*d14abf15SRobert Mustacchi     IN      lldp_local_mib_t        *p_local_mib,
1482*d14abf15SRobert Mustacchi     IN      lldp_local_mib_ext_t    *p_local_mib_ext,
1483*d14abf15SRobert Mustacchi     IN      u8_t                    is_local_ets_change);
1484*d14abf15SRobert Mustacchi 
1485*d14abf15SRobert Mustacchi /**
1486*d14abf15SRobert Mustacchi  * @description
1487*d14abf15SRobert Mustacchi  * Enable indicate event to upper layer
1488*d14abf15SRobert Mustacchi  * @param pdev
1489*d14abf15SRobert Mustacchi  */
1490*d14abf15SRobert Mustacchi void lm_dcbx_ie_update_state(
1491*d14abf15SRobert Mustacchi     INOUT       struct _lm_device_t *pdev,
1492*d14abf15SRobert Mustacchi     IN const    u8_t                is_en);
1493*d14abf15SRobert Mustacchi 
1494*d14abf15SRobert Mustacchi 
1495*d14abf15SRobert Mustacchi lm_status_t
1496*d14abf15SRobert Mustacchi lm_dcbx_ie_params_updated_validate(
1497*d14abf15SRobert Mustacchi     INOUT       struct _lm_device_t                     *pdev,
1498*d14abf15SRobert Mustacchi     OUT         dcb_indicate_event_params_t             *dcb_params,
1499*d14abf15SRobert Mustacchi     OUT         dcb_indicate_event_params_t             *dcb_params_copy,
1500*d14abf15SRobert Mustacchi     IN const    u8_t                                    lm_cli_idx);
1501*d14abf15SRobert Mustacchi 
1502*d14abf15SRobert Mustacchi lm_status_t
1503*d14abf15SRobert Mustacchi lm_dcbx_ie_runtime_params_updated(
1504*d14abf15SRobert Mustacchi     INOUT       struct _lm_device_t                     *pdev,
1505*d14abf15SRobert Mustacchi     INOUT       dcb_indicate_event_params_t             *dcb_params,
1506*d14abf15SRobert Mustacchi     IN const    u8_t                                    lm_cli_idx);
1507*d14abf15SRobert Mustacchi 
1508*d14abf15SRobert Mustacchi lm_status_t
1509*d14abf15SRobert Mustacchi lm_dcbx_ie_initialize(
1510*d14abf15SRobert Mustacchi     INOUT       struct _lm_device_t         *pdev,
1511*d14abf15SRobert Mustacchi     IN const    u8_t                        lm_cli_idx);
1512*d14abf15SRobert Mustacchi 
1513*d14abf15SRobert Mustacchi void
1514*d14abf15SRobert Mustacchi lm_dcbx_ie_deinitialize(
1515*d14abf15SRobert Mustacchi     INOUT       struct _lm_device_t         *pdev,
1516*d14abf15SRobert Mustacchi     IN const    u8_t                        lm_cli_idx);
1517*d14abf15SRobert Mustacchi 
1518*d14abf15SRobert Mustacchi /**
1519*d14abf15SRobert Mustacchi  * @description
1520*d14abf15SRobert Mustacchi  * Return chain type.
1521*d14abf15SRobert Mustacchi  * @param pdev
1522*d14abf15SRobert Mustacchi  * @param chain
1523*d14abf15SRobert Mustacchi  *
1524*d14abf15SRobert Mustacchi  * @return lm_chain_type_t
1525*d14abf15SRobert Mustacchi  */
1526*d14abf15SRobert Mustacchi lm_chain_type_t
1527*d14abf15SRobert Mustacchi lm_mp_get_chain_type(IN struct _lm_device_t   *pdev,
1528*d14abf15SRobert Mustacchi                      IN const u32_t           chain);
1529*d14abf15SRobert Mustacchi /**
1530*d14abf15SRobert Mustacchi  * @description
1531*d14abf15SRobert Mustacchi  * Get regular chain from chain.
1532*d14abf15SRobert Mustacchi  * If chain isn't a COS chain(e.g. ISCSI L2) than return
1533*d14abf15SRobert Mustacchi  * original value.
1534*d14abf15SRobert Mustacchi  * @param pdev
1535*d14abf15SRobert Mustacchi  * @param chain
1536*d14abf15SRobert Mustacchi  *
1537*d14abf15SRobert Mustacchi  * @return u32_t
1538*d14abf15SRobert Mustacchi  */
1539*d14abf15SRobert Mustacchi u32_t
1540*d14abf15SRobert Mustacchi lm_mp_get_reg_chain_from_chain(IN struct _lm_device_t   *pdev,
1541*d14abf15SRobert Mustacchi                                IN u32_t                 chain);
1542*d14abf15SRobert Mustacchi 
1543*d14abf15SRobert Mustacchi 
1544*d14abf15SRobert Mustacchi /**
1545*d14abf15SRobert Mustacchi  * @description
1546*d14abf15SRobert Mustacchi  * Get COS chain from regular chain.
1547*d14abf15SRobert Mustacchi  * @param pdev
1548*d14abf15SRobert Mustacchi  * @param chain
1549*d14abf15SRobert Mustacchi  * @param cos
1550*d14abf15SRobert Mustacchi  *
1551*d14abf15SRobert Mustacchi  * @return u32_t
1552*d14abf15SRobert Mustacchi  */
1553*d14abf15SRobert Mustacchi u8_t
1554*d14abf15SRobert Mustacchi lm_mp_get_cos_chain_from_reg_chain(
1555*d14abf15SRobert Mustacchi     IN struct _lm_device_t  *pdev,
1556*d14abf15SRobert Mustacchi     INOUT u8_t              chain,
1557*d14abf15SRobert Mustacchi     INOUT const u8_t        cos);
1558*d14abf15SRobert Mustacchi 
1559*d14abf15SRobert Mustacchi lm_status_t
1560*d14abf15SRobert Mustacchi lm_get_transceiver_data(struct _lm_device_t*     pdev,
1561*d14abf15SRobert Mustacchi                         struct _b10_transceiver_data_t*  b10_transceiver_data );
1562*d14abf15SRobert Mustacchi 
1563*d14abf15SRobert Mustacchi lm_status_t
1564*d14abf15SRobert Mustacchi lm_set_led_wrapper(struct _lm_device_t*     pdev,
1565*d14abf15SRobert Mustacchi                    const   u8_t             led_mode );
1566*d14abf15SRobert Mustacchi 
1567*d14abf15SRobert Mustacchi /*******************************************************************************
1568*d14abf15SRobert Mustacchi  * Description:
1569*d14abf15SRobert Mustacchi  *              Runtime changes can take more than 1 second and can't be handled
1570*d14abf15SRobert Mustacchi  *              from DPC.
1571*d14abf15SRobert Mustacchi  *              When the PMF detects a DCBX update it will schedule a WI that
1572*d14abf15SRobert Mustacchi  *              will handle the job.
1573*d14abf15SRobert Mustacchi  *              Also the function lm_dcbx_stop_HW_TX/lm_dcbx_resume_HW_TX must be
1574*d14abf15SRobert Mustacchi  *              called in mutual exclusion.
1575*d14abf15SRobert Mustacchi  *              lm_mcp_cmd_send_recieve must be called from default DPC, so when the
1576*d14abf15SRobert Mustacchi  *              WI will finish the processing an interrupt that will be called from
1577*d14abf15SRobert Mustacchi  *              The WI will cause us to enter this function again and send the Ack.
1578*d14abf15SRobert Mustacchi  *
1579*d14abf15SRobert Mustacchi  * Return:
1580*d14abf15SRobert Mustacchi ******************************************************************************/
1581*d14abf15SRobert Mustacchi void
1582*d14abf15SRobert Mustacchi lm_dcbx_event(struct _lm_device_t            * pdev,
1583*d14abf15SRobert Mustacchi               u32_t         drv_status);
1584*d14abf15SRobert Mustacchi 
1585*d14abf15SRobert Mustacchi /**
1586*d14abf15SRobert Mustacchi  * Function takes care of resetting everything related to the
1587*d14abf15SRobert Mustacchi  * function stage
1588*d14abf15SRobert Mustacchi  *
1589*d14abf15SRobert Mustacchi  * @param pdev
1590*d14abf15SRobert Mustacchi  * @param cleanup - this indicates whether we are in the last
1591*d14abf15SRobert Mustacchi  *                "Reset" function to be called, if so we need
1592*d14abf15SRobert Mustacchi  *                to do some cleanups here, otherwise they'll be
1593*d14abf15SRobert Mustacchi  *                done in later stages
1594*d14abf15SRobert Mustacchi  *
1595*d14abf15SRobert Mustacchi  * @return lm_status_t
1596*d14abf15SRobert Mustacchi  */
1597*d14abf15SRobert Mustacchi lm_status_t lm_reset_function_part(struct _lm_device_t *pdev, u8_t cleanup);
1598*d14abf15SRobert Mustacchi 
1599*d14abf15SRobert Mustacchi lm_status_t lm_reset_port_part(struct _lm_device_t *pdev);
1600*d14abf15SRobert Mustacchi 
1601*d14abf15SRobert Mustacchi lm_status_t lm_set_hc_flag(struct _lm_device_t *pdev, u8_t sb_id, u8_t idx, u8_t is_enable);
1602*d14abf15SRobert Mustacchi 
1603*d14abf15SRobert Mustacchi lm_status_t lm_set_interrupt_moderation(struct _lm_device_t *pdev, u8_t is_enable);
1604*d14abf15SRobert Mustacchi unsigned long power2_lower_align(unsigned long n);
1605*d14abf15SRobert Mustacchi 
1606*d14abf15SRobert Mustacchi lm_status_t lm_tpa_send_ramrods(IN struct  _lm_device_t    *pdev,
1607*d14abf15SRobert Mustacchi                                 IN const u8_t              chain_idx_base);
1608*d14abf15SRobert Mustacchi 
1609*d14abf15SRobert Mustacchi u8_t lm_tpa_ramrod_update_ipvx(IN struct  _lm_device_t   *pdev,
1610*d14abf15SRobert Mustacchi                           IN const u8_t          chain_idx,
1611*d14abf15SRobert Mustacchi                           IN const u8_t          vbd_tpa_ipvx_bit);
1612*d14abf15SRobert Mustacchi 
1613*d14abf15SRobert Mustacchi /**
1614*d14abf15SRobert Mustacchi  * @description
1615*d14abf15SRobert Mustacchi  * Send all the ramrods and wait for there return.
1616*d14abf15SRobert Mustacchi  * @param pdev
1617*d14abf15SRobert Mustacchi  * @param chain_idx_base
1618*d14abf15SRobert Mustacchi  *
1619*d14abf15SRobert Mustacchi  * @return lm_status_t
1620*d14abf15SRobert Mustacchi  * status success is returned if all the ramrods where received.
1621*d14abf15SRobert Mustacchi  * Status failure is returned if not all the ramrods were
1622*d14abf15SRobert Mustacchi  * received.
1623*d14abf15SRobert Mustacchi  */
1624*d14abf15SRobert Mustacchi lm_status_t
1625*d14abf15SRobert Mustacchi lm_tpa_send_ramrods_wait( IN struct _lm_device_t *pdev,
1626*d14abf15SRobert Mustacchi                          IN const u8_t   chain_idx_base);
1627*d14abf15SRobert Mustacchi 
1628*d14abf15SRobert Mustacchi lm_status_t lm_setup_tpa_chain( IN struct _lm_device_t *pdev,
1629*d14abf15SRobert Mustacchi                                 IN u32_t const          cid);
1630*d14abf15SRobert Mustacchi 
1631*d14abf15SRobert Mustacchi /**
1632*d14abf15SRobert Mustacchi  * @description
1633*d14abf15SRobert Mustacchi  * Clear TPA parameters. TPA can be disabled between NDIS bind
1634*d14abf15SRobert Mustacchi  * unbind but the RX cahin will stay used.
1635*d14abf15SRobert Mustacchi  * @param pdev
1636*d14abf15SRobert Mustacchi  * @param cid
1637*d14abf15SRobert Mustacchi  */
1638*d14abf15SRobert Mustacchi lm_status_t
1639*d14abf15SRobert Mustacchi lm_tpa_chain_reset(IN struct _lm_device_t *pdev,
1640*d14abf15SRobert Mustacchi                    IN u32_t const          cid);
1641*d14abf15SRobert Mustacchi 
1642*d14abf15SRobert Mustacchi 
1643*d14abf15SRobert Mustacchi /**
1644*d14abf15SRobert Mustacchi  * @description
1645*d14abf15SRobert Mustacchi  * Fill and send function_update_data ramrod.
1646*d14abf15SRobert Mustacchi  * @param pdev
1647*d14abf15SRobert Mustacchi  */
1648*d14abf15SRobert Mustacchi lm_status_t
1649*d14abf15SRobert Mustacchi lm_encap_send_ramrod(IN struct _lm_device_t *pdev, u8_t new_encap_offload_state, void* cookie);
1650*d14abf15SRobert Mustacchi 
1651*d14abf15SRobert Mustacchi /**
1652*d14abf15SRobert Mustacchi  * @Description
1653*d14abf15SRobert Mustacchi  *      Function is the callback function for completing eq
1654*d14abf15SRobert Mustacchi  *      completions when no chip access exists. Part of
1655*d14abf15SRobert Mustacchi  *      "complete-pending-sq" flow
1656*d14abf15SRobert Mustacchi  * @param pdev
1657*d14abf15SRobert Mustacchi  * @param pending
1658*d14abf15SRobert Mustacchi  */
1659*d14abf15SRobert Mustacchi void lm_eq_comp_cb(struct _lm_device_t *pdev, struct sq_pending_command * pending);
1660*d14abf15SRobert Mustacchi 
1661*d14abf15SRobert Mustacchi /**
1662*d14abf15SRobert Mustacchi  * @Description
1663*d14abf15SRobert Mustacchi  *      Function is the callback function for completing eth
1664*d14abf15SRobert Mustacchi  *      completions when no chip access exists. Part of
1665*d14abf15SRobert Mustacchi  *      "complete-pending-sq" flow
1666*d14abf15SRobert Mustacchi  * @param pdev
1667*d14abf15SRobert Mustacchi  * @param pending
1668*d14abf15SRobert Mustacchi  */
1669*d14abf15SRobert Mustacchi void lm_eth_comp_cb(struct _lm_device_t *pdev, struct sq_pending_command * pending);
1670*d14abf15SRobert Mustacchi 
1671*d14abf15SRobert Mustacchi /********************************* ERROR Recovery Related *****************************/
1672*d14abf15SRobert Mustacchi /**
1673*d14abf15SRobert Mustacchi  * @Description
1674*d14abf15SRobert Mustacchi  *      This function should be called to acquire the leader lock. the leader
1675*d14abf15SRobert Mustacchi  *      lock should not be released until recovery process id done.
1676*d14abf15SRobert Mustacchi  *      The leader lock is not waited for, its a non-blockinf function
1677*d14abf15SRobert Mustacchi  *
1678*d14abf15SRobert Mustacchi  * @param pdev
1679*d14abf15SRobert Mustacchi  *
1680*d14abf15SRobert Mustacchi  * @return lm_status_t SUCCESS or FAILURE
1681*d14abf15SRobert Mustacchi  */
1682*d14abf15SRobert Mustacchi lm_status_t lm_er_acquire_leader_lock(struct _lm_device_t * pdev);
1683*d14abf15SRobert Mustacchi 
1684*d14abf15SRobert Mustacchi /**
1685*d14abf15SRobert Mustacchi  * @Description
1686*d14abf15SRobert Mustacchi  *      release the lock acquired in the previous function
1687*d14abf15SRobert Mustacchi  * @param pdev
1688*d14abf15SRobert Mustacchi  *
1689*d14abf15SRobert Mustacchi  * @return lm_status_t SUCCESS, INVALID_PARAM: if invalid input
1690*d14abf15SRobert Mustacchi  *         is provided, LM_STATUS_OBJECT_NOT_FOUND if the lock
1691*d14abf15SRobert Mustacchi  *         isn't taken.
1692*d14abf15SRobert Mustacchi  */
1693*d14abf15SRobert Mustacchi lm_status_t lm_er_release_leader_lock(struct _lm_device_t * pdev);
1694*d14abf15SRobert Mustacchi 
1695*d14abf15SRobert Mustacchi /**
1696*d14abf15SRobert Mustacchi  * @Description
1697*d14abf15SRobert Mustacchi  *     Perform the error recovery leader process kill flow.
1698*d14abf15SRobert Mustacchi  *
1699*d14abf15SRobert Mustacchi  * @param pdev
1700*d14abf15SRobert Mustacchi  *
1701*d14abf15SRobert Mustacchi  * @return lm_status_t SUCCESS or FAILURE
1702*d14abf15SRobert Mustacchi  */
1703*d14abf15SRobert Mustacchi lm_status_t lm_er_leader_reset(struct _lm_device_t *pdev);
1704*d14abf15SRobert Mustacchi 
1705*d14abf15SRobert Mustacchi /**
1706*d14abf15SRobert Mustacchi  * @Description
1707*d14abf15SRobert Mustacchi  *      This function disables close the gate functionality
1708*d14abf15SRobert Mustacchi  *      should be called from the last driver that unloads
1709*d14abf15SRobert Mustacchi  *      (unless recovery is in progress)
1710*d14abf15SRobert Mustacchi  *
1711*d14abf15SRobert Mustacchi  * @param pdev
1712*d14abf15SRobert Mustacchi  */
1713*d14abf15SRobert Mustacchi void lm_er_disable_close_the_gate(struct _lm_device_t *pdev);
1714*d14abf15SRobert Mustacchi 
1715*d14abf15SRobert Mustacchi /**
1716*d14abf15SRobert Mustacchi  * @Description
1717*d14abf15SRobert Mustacchi  *      This function notifies the second engine that a
1718*d14abf15SRobert Mustacchi  *      attention occured and error recovery will initiate on
1719*d14abf15SRobert Mustacchi  *      second engine as well
1720*d14abf15SRobert Mustacchi  * @param pdev
1721*d14abf15SRobert Mustacchi  *
1722*d14abf15SRobert Mustacchi  * @return lm_status_t
1723*d14abf15SRobert Mustacchi  */
1724*d14abf15SRobert Mustacchi lm_status_t lm_er_notify_other_path(struct _lm_device_t *pdev);
1725*d14abf15SRobert Mustacchi 
1726*d14abf15SRobert Mustacchi /**
1727*d14abf15SRobert Mustacchi  * @Description
1728*d14abf15SRobert Mustacchi  *      This function attaches attentions to NIG / PXP
1729*d14abf15SRobert Mustacchi  *      close-the-g8, any attention that is added here should
1730*d14abf15SRobert Mustacchi  *      also be added to the lm_recoverable_error function.
1731*d14abf15SRobert Mustacchi  * @param pdev
1732*d14abf15SRobert Mustacchi  */
1733*d14abf15SRobert Mustacchi void lm_er_config_close_the_g8(struct _lm_device_t *pdev);
1734*d14abf15SRobert Mustacchi 
1735*d14abf15SRobert Mustacchi u32_t   lm_er_get_func_bit(struct _lm_device_t *pdev);
1736*d14abf15SRobert Mustacchi u32_t   lm_er_get_number_of_functions(u32_t er_register);
1737*d14abf15SRobert Mustacchi u8_t    lm_er_get_first_func_of_opp_path(struct _lm_device_t *pdev);
1738*d14abf15SRobert Mustacchi u32_t   lm_er_inc_load_cnt(struct _lm_device_t *pdev, u8_t sync_it);
1739*d14abf15SRobert Mustacchi u32_t   lm_er_dec_load_cnt(struct _lm_device_t *pdev, u8_t sync_it);
1740*d14abf15SRobert Mustacchi u32_t   lm_er_get_load_cnt(struct _lm_device_t *pdev, u8_t sync_it);
1741*d14abf15SRobert Mustacchi void    lm_er_clear_load_cnt(struct _lm_device_t *pdev, u8_t sync_it);
1742*d14abf15SRobert Mustacchi void    lm_er_set_recover_done(struct _lm_device_t *pdev, u8_t sync_it);
1743*d14abf15SRobert Mustacchi void    lm_er_set_recover_in_progress(struct _lm_device_t *pdev, u8_t sync_it);
1744*d14abf15SRobert Mustacchi u8_t    lm_er_recovery_in_progress(struct _lm_device_t *pdev, u8_t sync_it);
1745*d14abf15SRobert Mustacchi 
1746*d14abf15SRobert Mustacchi #define LM_ERROR_RECOVERY_COUNTER_HW_REGISTER   MISC_REG_GENERIC_POR_1
1747*d14abf15SRobert Mustacchi #define LM_ERROR_RECOVERY_IN_PROGRESS_FLAG      0x80000000
1748*d14abf15SRobert Mustacchi 
1749*d14abf15SRobert Mustacchi /**
1750*d14abf15SRobert Mustacchi  * Calculate CRC32_BE.
1751*d14abf15SRobert Mustacchi  *
1752*d14abf15SRobert Mustacchi  * @param crc32_packet
1753*d14abf15SRobert Mustacchi  * @param crc32_length
1754*d14abf15SRobert Mustacchi  * @param crc32_seed
1755*d14abf15SRobert Mustacchi  * @param complement
1756*d14abf15SRobert Mustacchi  *
1757*d14abf15SRobert Mustacchi  * @return u32_t
1758*d14abf15SRobert Mustacchi  */
1759*d14abf15SRobert Mustacchi u32_t calc_crc32(u8_t *crc32_packet, u32_t crc32_length, u32_t crc32_seed, u8_t complement);
1760*d14abf15SRobert Mustacchi u32_t convert_to_bcd( const u8_t IN ver_arr[4] );
1761*d14abf15SRobert Mustacchi /**
1762*d14abf15SRobert Mustacchi  * General function that waits for a certain state to change,
1763*d14abf15SRobert Mustacchi  * not protocol specific. It takes into account vbd-commander
1764*d14abf15SRobert Mustacchi  * and reset-is-in-progress
1765*d14abf15SRobert Mustacchi  *
1766*d14abf15SRobert Mustacchi  * @param pdev
1767*d14abf15SRobert Mustacchi  * @param curr_state -> what to poll on
1768*d14abf15SRobert Mustacchi  * @param new_state -> what we're waiting for
1769*d14abf15SRobert Mustacchi  *
1770*d14abf15SRobert Mustacchi  * @return lm_status_t TIMEOUT if state didn't change, SUCCESS
1771*d14abf15SRobert Mustacchi  *         otherwise
1772*d14abf15SRobert Mustacchi  */
1773*d14abf15SRobert Mustacchi lm_status_t lm_wait_state_change(struct _lm_device_t *pdev, volatile u32_t * curr_state, u32_t new_state);
1774*d14abf15SRobert Mustacchi 
1775*d14abf15SRobert Mustacchi /**lm_func_update_post_command Post a func_update ramrod and
1776*d14abf15SRobert Mustacchi  * wait for its completion.
1777*d14abf15SRobert Mustacchi  *
1778*d14abf15SRobert Mustacchi  * @param pdev the device
1779*d14abf15SRobert Mustacchi  * @param command the ramrod cmd_id (NONE_CONNECTION_TYPE is
1780*d14abf15SRobert Mustacchi  *                assumed)
1781*d14abf15SRobert Mustacchi  * @param data the ramrod data
1782*d14abf15SRobert Mustacchi  *
1783*d14abf15SRobert Mustacchi  * @return lm_status_t LM_STATUS_SUCCESS on success, some other
1784*d14abf15SRobert Mustacchi  *         failure code on failure.
1785*d14abf15SRobert Mustacchi  */
1786*d14abf15SRobert Mustacchi lm_status_t
1787*d14abf15SRobert Mustacchi lm_l2mp_func_update_command( IN struct _lm_device_t                 *pdev,
1788*d14abf15SRobert Mustacchi                              IN const struct function_update_data   *func_data);
1789*d14abf15SRobert Mustacchi lm_status_t
1790*d14abf15SRobert Mustacchi lm_dcbx_set_params_and_read_mib(
1791*d14abf15SRobert Mustacchi     IN struct _lm_device_t  *pdev,
1792*d14abf15SRobert Mustacchi     IN  const   u8_t        is_local_ets_change,
1793*d14abf15SRobert Mustacchi     IN  const   u8_t        b_can_update_ie);
1794*d14abf15SRobert Mustacchi 
1795*d14abf15SRobert Mustacchi lm_status_t
1796*d14abf15SRobert Mustacchi lm_dcbx_disable_dcb_at_fw_and_hw(
1797*d14abf15SRobert Mustacchi     IN struct _lm_device_t  *pdev,
1798*d14abf15SRobert Mustacchi     IN  const   u8_t        b_can_update_ie);
1799*d14abf15SRobert Mustacchi 
1800*d14abf15SRobert Mustacchi u8_t
1801*d14abf15SRobert Mustacchi lm_dcbx_is_dcb_config(IN struct _lm_device_t  *pdev);
1802*d14abf15SRobert Mustacchi 
1803*d14abf15SRobert Mustacchi u8_t
1804*d14abf15SRobert Mustacchi lm_ncsi_prev_drv_ver_is_win8_inbox( struct _lm_device_t *pdev);
1805*d14abf15SRobert Mustacchi 
1806*d14abf15SRobert Mustacchi u8_t lm_check_mac_addr_exist(struct _lm_device_t *pdev, u8_t chain_idx, u8_t *mac_addr, u16_t vlan_tag, u8_t is_encap_inner_mac_filter);
1807*d14abf15SRobert Mustacchi 
1808*d14abf15SRobert Mustacchi lm_status_t lm_update_default_vlan(IN struct _lm_device_t    *pdev, IN u8_t client_idx,
1809*d14abf15SRobert Mustacchi                               IN const u16_t            silent_vlan_value,
1810*d14abf15SRobert Mustacchi                               IN const u16_t            silent_vlan_mask,
1811*d14abf15SRobert Mustacchi                               IN const u8_t             silent_vlan_removal_flg,
1812*d14abf15SRobert Mustacchi                               IN const u8_t             silent_vlan_change_flg,
1813*d14abf15SRobert Mustacchi                               IN const u16_t            default_vlan,
1814*d14abf15SRobert Mustacchi                               IN const u8_t             default_vlan_enable_flg,
1815*d14abf15SRobert Mustacchi                               IN const u8_t             default_vlan_change_flg);
1816*d14abf15SRobert Mustacchi 
1817*d14abf15SRobert Mustacchi u8_t lm_is_mac_locally_administrated(IN struct _lm_device_t    *pdev, IN u8_t * mac);
1818*d14abf15SRobert Mustacchi #endif /* _LM_H */
1819