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