xref: /freebsd/sys/dev/qlnx/qlnxe/mcp_private.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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