111e25f0dSDavid C Somayajulu /* 211e25f0dSDavid C Somayajulu * Copyright (c) 2017-2018 Cavium, Inc. 311e25f0dSDavid C Somayajulu * All rights reserved. 411e25f0dSDavid C Somayajulu * 511e25f0dSDavid C Somayajulu * Redistribution and use in source and binary forms, with or without 611e25f0dSDavid C Somayajulu * modification, are permitted provided that the following conditions 711e25f0dSDavid C Somayajulu * are met: 811e25f0dSDavid C Somayajulu * 911e25f0dSDavid C Somayajulu * 1. Redistributions of source code must retain the above copyright 1011e25f0dSDavid C Somayajulu * notice, this list of conditions and the following disclaimer. 1111e25f0dSDavid C Somayajulu * 2. Redistributions in binary form must reproduce the above copyright 1211e25f0dSDavid C Somayajulu * notice, this list of conditions and the following disclaimer in the 1311e25f0dSDavid C Somayajulu * documentation and/or other materials provided with the distribution. 1411e25f0dSDavid C Somayajulu * 1511e25f0dSDavid C Somayajulu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1611e25f0dSDavid C Somayajulu * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1711e25f0dSDavid C Somayajulu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1811e25f0dSDavid C Somayajulu * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 1911e25f0dSDavid C Somayajulu * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2011e25f0dSDavid C Somayajulu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2111e25f0dSDavid C Somayajulu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2211e25f0dSDavid C Somayajulu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2311e25f0dSDavid C Somayajulu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2411e25f0dSDavid C Somayajulu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2511e25f0dSDavid C Somayajulu * POSSIBILITY OF SUCH DAMAGE. 2611e25f0dSDavid C Somayajulu * 2711e25f0dSDavid C Somayajulu */ 2811e25f0dSDavid C Somayajulu 2911e25f0dSDavid C Somayajulu /**************************************************************************** 3011e25f0dSDavid C Somayajulu * 3111e25f0dSDavid C Somayajulu * Name: mcp_private.h 3211e25f0dSDavid C Somayajulu * 3311e25f0dSDavid C Somayajulu * Description: MCP private data. Located in HSI only to provide debug access 3411e25f0dSDavid C Somayajulu * for diag. 3511e25f0dSDavid C Somayajulu * 3611e25f0dSDavid C Somayajulu ****************************************************************************/ 3711e25f0dSDavid C Somayajulu 3811e25f0dSDavid C Somayajulu #ifndef MCP_PRIVATE_H 3911e25f0dSDavid C Somayajulu #define MCP_PRIVATE_H 4011e25f0dSDavid C Somayajulu 4111e25f0dSDavid C Somayajulu #if (!defined MFW_SIM) && (!defined RECOVERY) 4211e25f0dSDavid C Somayajulu #include "eth.h" 4311e25f0dSDavid C Somayajulu #include "pmm.h" 4411e25f0dSDavid C Somayajulu #include "ah_eth.h" 45*217ec208SDavid C Somayajulu #include "e5_eth.h" 4611e25f0dSDavid C Somayajulu #endif 47*217ec208SDavid C Somayajulu #include "global.h" 4811e25f0dSDavid C Somayajulu #include "mcp_public.h" 4911e25f0dSDavid C Somayajulu 5011e25f0dSDavid C Somayajulu typedef enum active_mf_mode { 5111e25f0dSDavid C Somayajulu MF_MODE_SF = 0, 5211e25f0dSDavid C Somayajulu MF_MODE_MF_ALLOWED, 5311e25f0dSDavid C Somayajulu MF_MODE_MF_SWITCH_INDEPENDENT, 5411e25f0dSDavid C Somayajulu MF_MODE_NIV 5511e25f0dSDavid C Somayajulu } active_mf_mode_t; 5611e25f0dSDavid C Somayajulu 5711e25f0dSDavid C Somayajulu enum ov_current_cfg { 5811e25f0dSDavid C Somayajulu CURR_CFG_NONE = 0, 5911e25f0dSDavid C Somayajulu CURR_CFG_OS, 6011e25f0dSDavid C Somayajulu CURR_CFG_VENDOR_SPEC, 6111e25f0dSDavid C Somayajulu CURR_CFG_OTHER, 6211e25f0dSDavid C Somayajulu CURR_CFG_VC_CLP, 6311e25f0dSDavid C Somayajulu CURR_CFG_CNU, 6411e25f0dSDavid C Somayajulu CURR_CFG_DCI, 6511e25f0dSDavid C Somayajulu CURR_CFG_HII, 6611e25f0dSDavid C Somayajulu }; 6711e25f0dSDavid C Somayajulu 6811e25f0dSDavid C Somayajulu struct dci_info_global { 69*217ec208SDavid C Somayajulu u16 mba_ver; 70*217ec208SDavid C Somayajulu u8 current_cfg; 71*217ec208SDavid C Somayajulu u8 extern_dci_mgmt; 7211e25f0dSDavid C Somayajulu u8 pci_bus_num; 7311e25f0dSDavid C Somayajulu u8 boot_progress; 7411e25f0dSDavid C Somayajulu }; 7511e25f0dSDavid C Somayajulu 7611e25f0dSDavid C Somayajulu /* Resource allocation information of one resource */ 7711e25f0dSDavid C Somayajulu struct resource_info_private { 7811e25f0dSDavid C Somayajulu u16 size; /* number of allocated resources */ 7911e25f0dSDavid C Somayajulu u16 offset; /* Offset of the 1st resource */ 8011e25f0dSDavid C Somayajulu u8 flags; 8111e25f0dSDavid C Somayajulu }; 8211e25f0dSDavid C Somayajulu 8311e25f0dSDavid C Somayajulu /* Cache for resource allocation of one PF */ 8411e25f0dSDavid C Somayajulu struct res_alloc_cache { 8511e25f0dSDavid C Somayajulu u8 pf_num; 8611e25f0dSDavid C Somayajulu struct resource_info_private res[RESOURCE_MAX_NUM]; 8711e25f0dSDavid C Somayajulu }; 8811e25f0dSDavid C Somayajulu 8911e25f0dSDavid C Somayajulu struct pf_sb_t { 9011e25f0dSDavid C Somayajulu u8 sb_for_pf_size; 9111e25f0dSDavid C Somayajulu u8 sb_for_pf_offset; 9211e25f0dSDavid C Somayajulu u8 sb_for_vf_size; 9311e25f0dSDavid C Somayajulu u8 sb_for_vf_offset; 9411e25f0dSDavid C Somayajulu }; 9511e25f0dSDavid C Somayajulu 9611e25f0dSDavid C Somayajulu /**************************************/ 9711e25f0dSDavid C Somayajulu /* */ 9811e25f0dSDavid C Somayajulu /* P R I V A T E G L O B A L */ 9911e25f0dSDavid C Somayajulu /* */ 10011e25f0dSDavid C Somayajulu /**************************************/ 10111e25f0dSDavid C Somayajulu struct private_global { 10211e25f0dSDavid C Somayajulu active_mf_mode_t mf_mode; /* TBD - require initialization */ 10311e25f0dSDavid C Somayajulu u32 exp_rom_nvm_addr; 10411e25f0dSDavid C Somayajulu 10511e25f0dSDavid C Somayajulu /* The pmm_config structure holds all active phy/link configuration */ 106*217ec208SDavid C Somayajulu #if (!defined MFW_SIM) && (!defined RECOVERY) 10711e25f0dSDavid C Somayajulu #ifdef b900 10811e25f0dSDavid C Somayajulu struct pmm_config eth_cfg; 109*217ec208SDavid C Somayajulu #elif b940 11011e25f0dSDavid C Somayajulu struct ah_eth eth_cfg; 111*217ec208SDavid C Somayajulu #elif b510 112*217ec208SDavid C Somayajulu struct e5_eth eth_cfg; 113*217ec208SDavid C Somayajulu #else 11411e25f0dSDavid C Somayajulu #endif 11511e25f0dSDavid C Somayajulu #endif 11611e25f0dSDavid C Somayajulu u32 lldp_counter; 11711e25f0dSDavid C Somayajulu 11811e25f0dSDavid C Somayajulu u32 avs_init_timestamp; 11911e25f0dSDavid C Somayajulu 12011e25f0dSDavid C Somayajulu u32 seconds_since_mcp_reset; 12111e25f0dSDavid C Somayajulu 12211e25f0dSDavid C Somayajulu u32 last_malloc_dir_used_timestamp; 12311e25f0dSDavid C Somayajulu #define MAX_USED_DIR_ALLOWED_TIME (3) /* Seconds */ 12411e25f0dSDavid C Somayajulu 12511e25f0dSDavid C Somayajulu u32 drv_nvm_state; 12611e25f0dSDavid C Somayajulu /* Per PF bitmask */ 127*217ec208SDavid C Somayajulu #define DRV_NVM_STATE_IN_PROGRESS_MASK (0x0001ffff) 12811e25f0dSDavid C Somayajulu #define DRV_NVM_STATE_IN_PROGRESS_OFFSET (0) 129*217ec208SDavid C Somayajulu #define DRV_NVM_STATE_IN_PROGRESS_VAL_MFW (0x00010000) 13011e25f0dSDavid C Somayajulu 13111e25f0dSDavid C Somayajulu u32 storm_fw_ver; 13211e25f0dSDavid C Somayajulu 13311e25f0dSDavid C Somayajulu /* OneView data*/ 13411e25f0dSDavid C Somayajulu struct dci_info_global dci_global; 13511e25f0dSDavid C Somayajulu 13611e25f0dSDavid C Somayajulu /* Resource allocation cached data */ 13711e25f0dSDavid C Somayajulu struct res_alloc_cache res_alloc; 13811e25f0dSDavid C Somayajulu #define G_RES_ALLOC_P (&g_spad.private_data.global.res_alloc) 13911e25f0dSDavid C Somayajulu u32 resource_max_values[RESOURCE_MAX_NUM]; 140*217ec208SDavid C Somayajulu u32 glb_counter_100ms; 141*217ec208SDavid C Somayajulu /*collection of global bits and controls*/ 142*217ec208SDavid C Somayajulu u32 flags_and_ctrl; 143*217ec208SDavid C Somayajulu #define PRV_GLOBAL_FIO_BMB_INITIATED_MASK 0x00000001 144*217ec208SDavid C Somayajulu #define PRV_GLOBAL_FIO_BMB_INITIATED_OFFSET 0 145*217ec208SDavid C Somayajulu #define PRV_GLOBAL_ENABLE_NET_THREAD_LONG_RUN_MASK 0x00000002 146*217ec208SDavid C Somayajulu #define PRV_GLOBAL_ENABLE_NET_THREAD_LONG_RUN_OFFSET 1 147*217ec208SDavid C Somayajulu 148*217ec208SDavid C Somayajulu #ifdef b900 149*217ec208SDavid C Somayajulu u32 es_fir_engines : 8, es_fir_valid_bitmap : 8, es_l2_engines : 8, es_l2_valid_bitmap : 8; 150*217ec208SDavid C Somayajulu #endif 151*217ec208SDavid C Somayajulu u64 ecc_events; 15211e25f0dSDavid C Somayajulu }; 15311e25f0dSDavid C Somayajulu 15411e25f0dSDavid C Somayajulu /**************************************/ 15511e25f0dSDavid C Somayajulu /* */ 15611e25f0dSDavid C Somayajulu /* P R I V A T E P A T H */ 15711e25f0dSDavid C Somayajulu /* */ 15811e25f0dSDavid C Somayajulu /**************************************/ 15911e25f0dSDavid C Somayajulu struct private_path { 16011e25f0dSDavid C Somayajulu u32 recovery_countdown; /* Counting down 2 seconds, using TMR3 */ 16111e25f0dSDavid C Somayajulu #define RECOVERY_MAX_COUNTDOWN_SECONDS 2 16211e25f0dSDavid C Somayajulu 16311e25f0dSDavid C Somayajulu u32 drv_load_vars; /* When the seconds_since_mcp_reset gets here */ 164*217ec208SDavid C Somayajulu #define DRV_LOAD_DEF_TIMEOUT 10 16511e25f0dSDavid C Somayajulu #define DRV_LOAD_TIMEOUT_MASK 0x0000ffff 1669efd0ba7SDavid C Somayajulu #define DRV_LOAD_TIMEOUT_OFFSET 0 16711e25f0dSDavid C Somayajulu #define DRV_LOAD_NEED_FORCE_MASK 0xffff0000 1689efd0ba7SDavid C Somayajulu #define DRV_LOAD_NEED_FORCE_OFFSET 16 16911e25f0dSDavid C Somayajulu struct load_rsp_stc drv_load_params; 170*217ec208SDavid C Somayajulu u64 ecc_events; 17111e25f0dSDavid C Somayajulu }; 17211e25f0dSDavid C Somayajulu 17311e25f0dSDavid C Somayajulu /**************************************/ 17411e25f0dSDavid C Somayajulu /* */ 17511e25f0dSDavid C Somayajulu /* P R I V A T E P O R T */ 17611e25f0dSDavid C Somayajulu /* */ 17711e25f0dSDavid C Somayajulu /**************************************/ 17811e25f0dSDavid C Somayajulu struct drv_port_info_t { 17911e25f0dSDavid C Somayajulu u32_t port_state; 18011e25f0dSDavid C Somayajulu #define DRV_STATE_LINK_LOCK_FLAG 0x00000001 18111e25f0dSDavid C Somayajulu #define DRV_WAIT_DBG_PRN 0x00000002 18211e25f0dSDavid C Somayajulu 18311e25f0dSDavid C Somayajulu /* There are maximum 8 PFs per port */ 18411e25f0dSDavid C Somayajulu #define DRV_STATE_LOADED_MASK 0x0000ff00 1859efd0ba7SDavid C Somayajulu #define DRV_STATE_LOADED_OFFSET 8 18611e25f0dSDavid C Somayajulu 18711e25f0dSDavid C Somayajulu #define DRV_STATE_PF_TRANSITION_MASK 0x00ff0000 1889efd0ba7SDavid C Somayajulu #define DRV_STATE_PF_TRANSITION_OFFSET 16 18911e25f0dSDavid C Somayajulu 19011e25f0dSDavid C Somayajulu #define DRV_STATE_PF_PHY_INIT_MASK 0xff000000 1919efd0ba7SDavid C Somayajulu #define DRV_STATE_PF_PHY_INIT_OFFSET 24 19211e25f0dSDavid C Somayajulu }; 19311e25f0dSDavid C Somayajulu 19411e25f0dSDavid C Somayajulu typedef enum _lldp_subscriber_e { 19511e25f0dSDavid C Somayajulu LLDP_SUBSCRIBER_MANDATORY = 0, 196*217ec208SDavid C Somayajulu LLDP_SUBSCRIBER_SYSTEM, 19711e25f0dSDavid C Somayajulu LLDP_SUBSCRIBER_DCBX_IEEE, 19811e25f0dSDavid C Somayajulu LLDP_SUBSCRIBER_DCBX_CEE, 19911e25f0dSDavid C Somayajulu LLDP_SUBSCRIBER_EEE, 200*217ec208SDavid C Somayajulu LLDP_SUBSCRIBER_CDCP, 20111e25f0dSDavid C Somayajulu LLDP_SUBSCRIBER_DCI, 202*217ec208SDavid C Somayajulu LLDP_SUBSCRIBER_UFP, 203*217ec208SDavid C Somayajulu LLDP_SUBSCRIBER_NCSI, 20411e25f0dSDavid C Somayajulu MAX_SUBSCRIBERS 20511e25f0dSDavid C Somayajulu } lldp_subscriber_e; 20611e25f0dSDavid C Somayajulu 20711e25f0dSDavid C Somayajulu typedef struct { 20811e25f0dSDavid C Somayajulu u16 valid; 20911e25f0dSDavid C Somayajulu u16 type_len; 21011e25f0dSDavid C Somayajulu #define LLDP_LEN_MASK (0x01ff) 2119efd0ba7SDavid C Somayajulu #define LLDP_LEN_OFFSET (0) 21211e25f0dSDavid C Somayajulu #define LLDP_TYPE_MASK (0xfe00) 2139efd0ba7SDavid C Somayajulu #define LLDP_TYPE_OFFSET (9) 21411e25f0dSDavid C Somayajulu u8 *value_p; 21511e25f0dSDavid C Somayajulu } tlv_s; 21611e25f0dSDavid C Somayajulu 21711e25f0dSDavid C Somayajulu typedef u16(*lldp_prepare_tlv_func)(u8 port, lldp_agent_e lldp_agent, u8 *buffer); 21811e25f0dSDavid C Somayajulu 21911e25f0dSDavid C Somayajulu typedef struct { 22011e25f0dSDavid C Somayajulu u16 valid; 22111e25f0dSDavid C Somayajulu lldp_prepare_tlv_func func; 22211e25f0dSDavid C Somayajulu } subscriber_callback_send_s; 22311e25f0dSDavid C Somayajulu 22411e25f0dSDavid C Somayajulu typedef u8(*lldp_process_func)(u8 port, u8 num, u8 **tlvs); 22511e25f0dSDavid C Somayajulu 22611e25f0dSDavid C Somayajulu #define MAX_NUM_SUBTYPES 4 22711e25f0dSDavid C Somayajulu typedef struct { 22811e25f0dSDavid C Somayajulu u8 valid; 22911e25f0dSDavid C Somayajulu u8 oui[3]; 23011e25f0dSDavid C Somayajulu u8 subtype_list[MAX_NUM_SUBTYPES]; 23111e25f0dSDavid C Somayajulu u8 num_subtypes; 23211e25f0dSDavid C Somayajulu lldp_process_func func; 23311e25f0dSDavid C Somayajulu } subscriber_callback_receive_s; 23411e25f0dSDavid C Somayajulu 23511e25f0dSDavid C Somayajulu #define MAX_ETH_HEADER 14 /* TODO: to be extended per requirements */ 2369efd0ba7SDavid C Somayajulu #define MAX_PACKET_SIZE (1516) /* So it can be devided by 4 */ 23711e25f0dSDavid C Somayajulu #define LLDP_CHASSIS_ID_TLV_LEN 7 23811e25f0dSDavid C Somayajulu #define LLDP_PORT_ID_TLV_LEN 7 23911e25f0dSDavid C Somayajulu typedef struct { 24011e25f0dSDavid C Somayajulu u16 len; 24111e25f0dSDavid C Somayajulu u8 header[MAX_ETH_HEADER]; 24211e25f0dSDavid C Somayajulu } lldp_eth_header_s; 24311e25f0dSDavid C Somayajulu 24411e25f0dSDavid C Somayajulu typedef struct { 24511e25f0dSDavid C Somayajulu struct lldp_config_params_s lldp_config_params; 24611e25f0dSDavid C Somayajulu u16 lldp_ttl; 24711e25f0dSDavid C Somayajulu u8 lldp_cur_credit; 24811e25f0dSDavid C Somayajulu subscriber_callback_send_s subscriber_callback_send[MAX_SUBSCRIBERS]; 24911e25f0dSDavid C Somayajulu lldp_eth_header_s lldp_eth_header; 25011e25f0dSDavid C Somayajulu u32 lldp_time_to_send; 25111e25f0dSDavid C Somayajulu u32 lldp_ttl_expired; 25211e25f0dSDavid C Somayajulu u32 lldp_sent; 25311e25f0dSDavid C Somayajulu u8 first_lldp; 25411e25f0dSDavid C Somayajulu subscriber_callback_receive_s subscriber_callback_receive[MAX_SUBSCRIBERS]; 25511e25f0dSDavid C Somayajulu } lldp_params_s; 25611e25f0dSDavid C Somayajulu 25711e25f0dSDavid C Somayajulu #define MAX_TLVS 20 25811e25f0dSDavid C Somayajulu typedef struct { 25911e25f0dSDavid C Somayajulu u8 current_received_tlv_index; 26011e25f0dSDavid C Somayajulu u8 *received_tlvs[MAX_TLVS]; 26111e25f0dSDavid C Somayajulu } lldp_receive_data_s; 26211e25f0dSDavid C Somayajulu 263*217ec208SDavid C Somayajulu #define MAX_REGISTERED_TLVS 12 26411e25f0dSDavid C Somayajulu 26511e25f0dSDavid C Somayajulu typedef struct { 26611e25f0dSDavid C Somayajulu u32 config; /* Uses same defines as local config plus some more below*/ 26711e25f0dSDavid C Somayajulu #define DCBX_MODE_MASK 0x00000010 2689efd0ba7SDavid C Somayajulu #define DCBX_MODE_OFFSET 4 26911e25f0dSDavid C Somayajulu #define DCBX_MODE_DRIVER 0 27011e25f0dSDavid C Somayajulu #define DCBX_MODE_DEFAULT 1 27111e25f0dSDavid C Somayajulu #define DCBX_CHANGED_MASK 0x00000f00 2729efd0ba7SDavid C Somayajulu #define DCBX_CHANGED_OFFSET 8 27311e25f0dSDavid C Somayajulu #define DCBX_CONTROL_CHANGED_MASK 0x00000100 2749efd0ba7SDavid C Somayajulu #define DCBX_CONTROL_CHANGED_OFFSET 8 27511e25f0dSDavid C Somayajulu #define DCBX_PFC_CHANGED_MASK 0x00000200 2769efd0ba7SDavid C Somayajulu #define DCBX_PFC_CHANGED_OFFSET 9 27711e25f0dSDavid C Somayajulu #define DCBX_ETS_CHANGED_MASK 0x00000400 2789efd0ba7SDavid C Somayajulu #define DCBX_ETS_CHANGED_OFFSET 10 27911e25f0dSDavid C Somayajulu #define DCBX_APP_CHANGED_MASK 0x00000800 2809efd0ba7SDavid C Somayajulu #define DCBX_APP_CHANGED_OFFSET 11 28111e25f0dSDavid C Somayajulu 28211e25f0dSDavid C Somayajulu u32 seq_no; 28311e25f0dSDavid C Somayajulu u32 ack_no; 28411e25f0dSDavid C Somayajulu u32 received_seq_no; 28511e25f0dSDavid C Somayajulu u8 tc_map[8]; 28611e25f0dSDavid C Somayajulu u8 num_used_tcs; 28711e25f0dSDavid C Somayajulu } dcbx_state_s; 28811e25f0dSDavid C Somayajulu 28911e25f0dSDavid C Somayajulu #ifdef CONFIG_HP_DCI_SUPPORT 29011e25f0dSDavid C Somayajulu struct dci_info_port { 29111e25f0dSDavid C Somayajulu u32 config; 2929efd0ba7SDavid C Somayajulu #define DCI_PORT_CFG_ENABLE_OFFSET (0) 2939efd0ba7SDavid C Somayajulu #define DCI_PORT_CFG_ENABLE_MASK (1 << DCI_PORT_CFG_ENABLE_OFFSET) 2949efd0ba7SDavid C Somayajulu #define DCI_PORT_CFG_ENABLE_DIAG_OFFSET (1) 2959efd0ba7SDavid C Somayajulu #define DCI_PORT_CFG_ENABLE_DIAG_MASK (1 << DCI_PORT_CFG_ENABLE_DIAG_OFFSET) 2969efd0ba7SDavid C Somayajulu #define DCI_PORT_CFG_DIAG_L_LOOP_OFFSET (2) 2979efd0ba7SDavid C Somayajulu #define DCI_PORT_CFG_DIAG_L_LOOP_MASK (1 << DCI_PORT_CFG_DIAG_L_LOOP_OFFSET) 2989efd0ba7SDavid C Somayajulu #define DCI_PORT_CFG_DIAG_R_LOOP_OFFSET (3) 2999efd0ba7SDavid C Somayajulu #define DCI_PORT_CFG_DIAG_R_LOOP_MASK (1 << DCI_PORT_CFG_DIAG_R_LOOP_OFFSET) 30011e25f0dSDavid C Somayajulu 30111e25f0dSDavid C Somayajulu }; 30211e25f0dSDavid C Somayajulu #endif 30311e25f0dSDavid C Somayajulu 304*217ec208SDavid C Somayajulu struct lldp_cdcp { 305*217ec208SDavid C Somayajulu u32 flags; 306*217ec208SDavid C Somayajulu #define NTPMR_TTL_EXPIRED 0x00000001 307*217ec208SDavid C Somayajulu #define CDCP_TLV_RCVD 0x00000002 308*217ec208SDavid C Somayajulu #define CDCP_TLV_SENT 0x00000004 309*217ec208SDavid C Somayajulu 310*217ec208SDavid C Somayajulu u32 remote_mib; 311*217ec208SDavid C Somayajulu #define CDCP_ROLE_MASK 0x00000001 312*217ec208SDavid C Somayajulu #define CDCP_ROLE_OFFSET 0 313*217ec208SDavid C Somayajulu #define CDCP_ROLE_BRIDGE 0x0 314*217ec208SDavid C Somayajulu #define CDCP_ROLE_STATION 0x1 315*217ec208SDavid C Somayajulu 316*217ec208SDavid C Somayajulu #define CDCP_SCOMP_MASK 0x00000002 317*217ec208SDavid C Somayajulu #define CDCP_SCOMP_OFFSET 1 318*217ec208SDavid C Somayajulu 319*217ec208SDavid C Somayajulu #define CDCP_CHAN_CAP_MASK 0x0000fff0 320*217ec208SDavid C Somayajulu #define CDCP_CHAN_CAP_OFFSET 4 321*217ec208SDavid C Somayajulu 322*217ec208SDavid C Somayajulu u32 num_of_chan; 323*217ec208SDavid C Somayajulu }; 324*217ec208SDavid C Somayajulu 325*217ec208SDavid C Somayajulu /* Accommodates link-tlv size for max-pf scids (27) + end-of-tlv size (2) */ 326*217ec208SDavid C Somayajulu #define UFP_REQ_MAX_PAYLOAD_SIZE (32) 327*217ec208SDavid C Somayajulu 328*217ec208SDavid C Somayajulu /* Accommodates max-NIC props-tlv-size (117:5 +(16*7)), link-tlv (27), 329*217ec208SDavid C Somayajulu * end-tlv (2). 330*217ec208SDavid C Somayajulu */ 331*217ec208SDavid C Somayajulu #define UFP_RSP_MAX_PAYLOAD_SIZE (160) 332*217ec208SDavid C Somayajulu struct ufp_info_port { 333*217ec208SDavid C Somayajulu u8 req_payload[UFP_REQ_MAX_PAYLOAD_SIZE]; 334*217ec208SDavid C Somayajulu u8 rsp_payload[UFP_RSP_MAX_PAYLOAD_SIZE]; 335*217ec208SDavid C Somayajulu u16 req_len; 336*217ec208SDavid C Somayajulu u16 rsp_len; 337*217ec208SDavid C Somayajulu u8 switch_version; 338*217ec208SDavid C Somayajulu u8 switch_status; 339*217ec208SDavid C Somayajulu u8 flags; 340*217ec208SDavid C Somayajulu #define UFP_CAP_ENABLED (1 << 0) 341*217ec208SDavid C Somayajulu #define UFP_REQ_SENT (1 << 1) 342*217ec208SDavid C Somayajulu #define UFP_RSP_SENT (1 << 2) 343*217ec208SDavid C Somayajulu #define UFP_CAP_SENT (1 << 3) 344*217ec208SDavid C Somayajulu u8 pending_flags; 345*217ec208SDavid C Somayajulu #define UFP_REQ_PENDING (1 << 0) 346*217ec208SDavid C Somayajulu #define UFP_RSP_PENDING (1 << 1) 347*217ec208SDavid C Somayajulu }; 348*217ec208SDavid C Somayajulu 349*217ec208SDavid C Somayajulu #define UFP_ENABLED(_port_) \ 350*217ec208SDavid C Somayajulu (g_spad.private_data.port[_port_].ufp_port.flags & UFP_CAP_ENABLED) 351*217ec208SDavid C Somayajulu 352*217ec208SDavid C Somayajulu /* Max 200-byte packet, accommodates UFP_RSP_MAX_PAYLOAD_SIZE */ 353*217ec208SDavid C Somayajulu #define ECP_MAX_PKT_SIZE (200) 354*217ec208SDavid C Somayajulu 355*217ec208SDavid C Somayajulu /* Tx-state machine, Qbg variable names specified in comments on the right */ 356*217ec208SDavid C Somayajulu struct ecp_tx_state { 357*217ec208SDavid C Somayajulu u8 tx_pkt[ECP_MAX_PKT_SIZE]; 358*217ec208SDavid C Somayajulu BOOL ulp_req_rcvd; /* requestReceived */ 359*217ec208SDavid C Somayajulu BOOL ack_rcvd; /* ackReceived */ 360*217ec208SDavid C Somayajulu u16 req_seq_num; /* sequence */ 361*217ec208SDavid C Somayajulu 362*217ec208SDavid C Somayajulu /* State used for timer-based retries */ 363*217ec208SDavid C Somayajulu u16 ack_timer_counter; 364*217ec208SDavid C Somayajulu #define ECP_TIMEOUT_COUNT 1 /* 1 second to detect ACK timeout */ 365*217ec208SDavid C Somayajulu u16 num_retries; /* retries */ 366*217ec208SDavid C Somayajulu #define ECP_MAX_RETRIES 3 367*217ec208SDavid C Somayajulu u32 tx_errors; /* txErrors */ 368*217ec208SDavid C Somayajulu u32 ulp_pkt_len; 369*217ec208SDavid C Somayajulu }; 370*217ec208SDavid C Somayajulu 371*217ec208SDavid C Somayajulu typedef void (*ulp_rx_indication_t)(u8 port, u16 subtype, u32 pkt_len, u8 *pkt); 372*217ec208SDavid C Somayajulu /* Rx state machine, Qbg variable names specified in comments on the right */ 373*217ec208SDavid C Somayajulu struct ecp_rx_state { 374*217ec208SDavid C Somayajulu BOOL ecpdu_rcvd; /* ecpduReceived */ 375*217ec208SDavid C Somayajulu u16 last_req_seq; /* lastSeq */ 376*217ec208SDavid C Somayajulu u8 first_req_rcvd; 377*217ec208SDavid C Somayajulu u8 rsvd; 378*217ec208SDavid C Somayajulu ulp_rx_indication_t rx_cb_func; 379*217ec208SDavid C Somayajulu }; 380*217ec208SDavid C Somayajulu 381*217ec208SDavid C Somayajulu struct ecp_state_s { 382*217ec208SDavid C Somayajulu struct ecp_tx_state tx_state; 383*217ec208SDavid C Somayajulu struct ecp_rx_state rx_state; 384*217ec208SDavid C Somayajulu u16 subtype; 385*217ec208SDavid C Somayajulu }; 386*217ec208SDavid C Somayajulu 38711e25f0dSDavid C Somayajulu struct private_port { 38811e25f0dSDavid C Somayajulu struct drv_port_info_t port_info; 38911e25f0dSDavid C Somayajulu active_mf_mode_t mf_mode; 39011e25f0dSDavid C Somayajulu u32 prev_link_change_count; 39111e25f0dSDavid C Somayajulu /* LLDP structures */ 39211e25f0dSDavid C Somayajulu lldp_params_s lldp_params[LLDP_MAX_LLDP_AGENTS]; 39311e25f0dSDavid C Somayajulu lldp_receive_data_s lldp_receive_data[MAX_SUBSCRIBERS]; 39411e25f0dSDavid C Somayajulu 39511e25f0dSDavid C Somayajulu /* DCBX */ 39611e25f0dSDavid C Somayajulu dcbx_state_s dcbx_state; 39711e25f0dSDavid C Somayajulu 39811e25f0dSDavid C Somayajulu u32 net_buffer[MAX_PACKET_SIZE / 4]; /* Buffer to send any packet to network */ 39911e25f0dSDavid C Somayajulu 40011e25f0dSDavid C Somayajulu /* time stamp of the end of NIG drain time for the TX drain */ 40111e25f0dSDavid C Somayajulu u32 nig_drain_end_ts; 40211e25f0dSDavid C Somayajulu /* time stamp of the end of NIG drain time for the TC pause drain, this timer is used togther for all TC */ 40311e25f0dSDavid C Somayajulu u32 nig_drain_tc_end_ts; 40411e25f0dSDavid C Somayajulu u32 tc_drain_en_bitmap; 40511e25f0dSDavid C Somayajulu tlv_s lldp_core_tlv_desc[LLDP_MAX_LLDP_AGENTS][MAX_REGISTERED_TLVS]; 40611e25f0dSDavid C Somayajulu u8 current_core_tlv_num[LLDP_MAX_LLDP_AGENTS]; 40711e25f0dSDavid C Somayajulu struct mcp_mac lldp_mac; 40811e25f0dSDavid C Somayajulu #ifdef CONFIG_HP_DCI_SUPPORT 40911e25f0dSDavid C Somayajulu struct dci_info_port dci_port; 41011e25f0dSDavid C Somayajulu #endif 411*217ec208SDavid C Somayajulu struct lldp_cdcp cdcp_info; 412*217ec208SDavid C Somayajulu struct ufp_info_port ufp_port; 413*217ec208SDavid C Somayajulu struct ecp_state_s ecp_info; 414*217ec208SDavid C Somayajulu struct lldp_stats_stc lldp_stats[LLDP_MAX_LLDP_AGENTS]; 41511e25f0dSDavid C Somayajulu u32 temperature; 416*217ec208SDavid C Somayajulu u8 prev_ext_lasi_status; 417*217ec208SDavid C Somayajulu u8 rsvd1; 418*217ec208SDavid C Somayajulu u16 rsvd2; 41911e25f0dSDavid C Somayajulu 42011e25f0dSDavid C Somayajulu }; 42111e25f0dSDavid C Somayajulu 42211e25f0dSDavid C Somayajulu /**************************************/ 42311e25f0dSDavid C Somayajulu /* */ 42411e25f0dSDavid C Somayajulu /* P R I V A T E F U N C */ 42511e25f0dSDavid C Somayajulu /* */ 42611e25f0dSDavid C Somayajulu /**************************************/ 42711e25f0dSDavid C Somayajulu struct drv_func_info_t { 42811e25f0dSDavid C Somayajulu u32_t func_state; 42911e25f0dSDavid C Somayajulu #define DRV_STATE_UNKNOWN 0x00000000 43011e25f0dSDavid C Somayajulu #define DRV_STATE_UNLOADED 0x00000001 43111e25f0dSDavid C Somayajulu #define DRV_STATE_D3 0x00000004 43211e25f0dSDavid C Somayajulu 43311e25f0dSDavid C Somayajulu #define DRV_STATE_PRESENT_FLAG 0x00000100 43411e25f0dSDavid C Somayajulu #define DRV_STATE_RUNNING (0x00000002 | DRV_STATE_PRESENT_FLAG) 43511e25f0dSDavid C Somayajulu 43611e25f0dSDavid C Somayajulu #define DRV_STATE_NOT_RESPONDING 0x00000003 /* Will result with non-zero value when compared with DRV_STATE_RUNNING or with DRV_STATE_UNLOADED */ 43711e25f0dSDavid C Somayajulu #define DRV_STATE_BACK_AFTER_TO (DRV_STATE_NOT_RESPONDING | DRV_STATE_PRESENT_FLAG) 43811e25f0dSDavid C Somayajulu 43911e25f0dSDavid C Somayajulu #define DRV_STATE_DIAG (0x00000010 | DRV_STATE_PRESENT_FLAG) 44011e25f0dSDavid C Somayajulu 44111e25f0dSDavid C Somayajulu #define DRV_STATE_TRANSITION_FLAG 0x00001000 44211e25f0dSDavid C Somayajulu #define DRV_STATE_LOADING_TRANSITION (DRV_STATE_TRANSITION_FLAG | DRV_STATE_PRESENT_FLAG) 44311e25f0dSDavid C Somayajulu #define DRV_STATE_UNLOADING_TRANSITION (DRV_STATE_TRANSITION_FLAG | DRV_STATE_PRESENT_FLAG | DRV_STATE_UNLOADED) 44411e25f0dSDavid C Somayajulu 44511e25f0dSDavid C Somayajulu u32_t driver_last_activity; 44611e25f0dSDavid C Somayajulu 44711e25f0dSDavid C Somayajulu u32_t wol_mac_addr[2]; 44811e25f0dSDavid C Somayajulu u32_t drv_feature_support; /* See DRV_MB_PARAM_FEATURE_SUPPORT_FUNC_* */ 44911e25f0dSDavid C Somayajulu 45011e25f0dSDavid C Somayajulu u8_t unload_wol_param; /* See drv_mb_param */ 45111e25f0dSDavid C Somayajulu u8_t eswitch_mode; 452*217ec208SDavid C Somayajulu u8_t ppfid_bmp; 45311e25f0dSDavid C Somayajulu }; 45411e25f0dSDavid C Somayajulu 45511e25f0dSDavid C Somayajulu struct dci_info_func { 45611e25f0dSDavid C Somayajulu u8 config; 4579efd0ba7SDavid C Somayajulu #define DCI_FUNC_CFG_FNIC_ENABLE_OFFSET (0) 4589efd0ba7SDavid C Somayajulu #define DCI_FUNC_CFG_FNIC_ENABLE_MASK (1 << DCI_FUNC_CFG_FNIC_ENABLE_OFFSET) 4599efd0ba7SDavid C Somayajulu #define DCI_FUNC_CFG_OS_MTU_OVERRIDE_OFFSET (1) 4609efd0ba7SDavid C Somayajulu #define DCI_FUNC_CFG_OS_MTU_OVERRIDE_MASK (1 << DCI_FUNC_CFG_OS_MTU_OVERRIDE_OFFSET) 4619efd0ba7SDavid C Somayajulu #define DCI_FUNC_CFG_DIAG_WOL_ENABLE_OFFSET (2) 4629efd0ba7SDavid C Somayajulu #define DCI_FUNC_CFG_DIAG_WOL_ENABLE_MASK (1 << DCI_FUNC_CFG_DIAG_WOL_ENABLE_OFFSET) 46311e25f0dSDavid C Somayajulu 46411e25f0dSDavid C Somayajulu u8 drv_state; 46511e25f0dSDavid C Somayajulu u16 fcoe_cvid; 46611e25f0dSDavid C Somayajulu u8 fcoe_fabric_name[8]; 467*217ec208SDavid C Somayajulu #define CONNECTION_ID_LENGTH 16 468*217ec208SDavid C Somayajulu u8 local_conn_id[CONNECTION_ID_LENGTH]; 46911e25f0dSDavid C Somayajulu }; 47011e25f0dSDavid C Somayajulu 47111e25f0dSDavid C Somayajulu struct private_func { 47211e25f0dSDavid C Somayajulu struct drv_func_info_t func_info; 47311e25f0dSDavid C Somayajulu u32 init_hw_page; 47411e25f0dSDavid C Somayajulu struct pf_sb_t sb; 47511e25f0dSDavid C Somayajulu struct dci_info_func dci_func; 47611e25f0dSDavid C Somayajulu }; 47711e25f0dSDavid C Somayajulu 47811e25f0dSDavid C Somayajulu /**************************************/ 47911e25f0dSDavid C Somayajulu /* */ 48011e25f0dSDavid C Somayajulu /* P R I V A T E D A T A */ 48111e25f0dSDavid C Somayajulu /* */ 48211e25f0dSDavid C Somayajulu /**************************************/ 48311e25f0dSDavid C Somayajulu struct mcp_private_data { 48411e25f0dSDavid C Somayajulu /* Basically no need for section offsets here, since this is private data. 48511e25f0dSDavid C Somayajulu * TBD - should consider adding section offsets if we want diag to parse this correctly !! 48611e25f0dSDavid C Somayajulu */ 48711e25f0dSDavid C Somayajulu struct private_global global; 48811e25f0dSDavid C Somayajulu struct private_path path[MCP_GLOB_PATH_MAX]; 48911e25f0dSDavid C Somayajulu struct private_port port[MCP_GLOB_PORT_MAX]; 49011e25f0dSDavid C Somayajulu struct private_func func[MCP_GLOB_FUNC_MAX]; 49111e25f0dSDavid C Somayajulu 49211e25f0dSDavid C Somayajulu }; 49311e25f0dSDavid C Somayajulu #endif /* MCP_PRIVATE_H */ 494