156b2bdd1SGireesh Nagabhushana /*
256b2bdd1SGireesh Nagabhushana  * This file and its contents are supplied under the terms of the
356b2bdd1SGireesh Nagabhushana  * Common Development and Distribution License ("CDDL"), version 1.0.
456b2bdd1SGireesh Nagabhushana  * You may only use this file in accordance with the terms of version
556b2bdd1SGireesh Nagabhushana  * 1.0 of the CDDL.
656b2bdd1SGireesh Nagabhushana  *
756b2bdd1SGireesh Nagabhushana  * A full copy of the text of the CDDL should have accompanied this
856b2bdd1SGireesh Nagabhushana  * source. A copy of the CDDL is also available via the Internet at
956b2bdd1SGireesh Nagabhushana  * http://www.illumos.org/license/CDDL.
1056b2bdd1SGireesh Nagabhushana  */
1156b2bdd1SGireesh Nagabhushana 
1256b2bdd1SGireesh Nagabhushana /*
133dde7c95SVishal Kulkarni  * This file is part of the Chelsio T4/T5/T6 Ethernet driver.
1456b2bdd1SGireesh Nagabhushana  *
157e6ad469SVishal Kulkarni  * Copyright (C) 2005-2019 Chelsio Communications.  All rights reserved.
1656b2bdd1SGireesh Nagabhushana  *
1756b2bdd1SGireesh Nagabhushana  * This program is distributed in the hope that it will be useful, but WITHOUT
1856b2bdd1SGireesh Nagabhushana  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1956b2bdd1SGireesh Nagabhushana  * FITNESS FOR A PARTICULAR PURPOSE.  See the LICENSE file included in this
2056b2bdd1SGireesh Nagabhushana  * release for licensing terms and conditions.
2156b2bdd1SGireesh Nagabhushana  */
2256b2bdd1SGireesh Nagabhushana 
23d77e6e0fSPaul Winder /*
24d77e6e0fSPaul Winder  * Copyright 2020 RackTop Systems, Inc.
25618f2068SAndy Fiddaman  * Copyright 2023 Oxide Computer Company
26d77e6e0fSPaul Winder  */
27d77e6e0fSPaul Winder 
283dde7c95SVishal Kulkarni #ifndef __CHELSIO_COMMON_H
293dde7c95SVishal Kulkarni #define __CHELSIO_COMMON_H
3056b2bdd1SGireesh Nagabhushana 
3156b2bdd1SGireesh Nagabhushana #include "t4_hw.h"
32de483253SVishal Kulkarni #include "t4_chip_type.h"
3356b2bdd1SGireesh Nagabhushana 
343dde7c95SVishal Kulkarni #define GLBL_INTR_MASK (F_CIM | F_MPS | F_PL | F_PCIE | F_MC0 | F_EDC0 | \
3556b2bdd1SGireesh Nagabhushana 		F_EDC1 | F_LE | F_TP | F_MA | F_PM_TX | F_PM_RX | F_ULP_RX | \
367e6ad469SVishal Kulkarni 		F_CPL_SWITCH | F_SGE | F_ULP_TX | F_SF)
3756b2bdd1SGireesh Nagabhushana 
383dde7c95SVishal Kulkarni #ifdef __cplusplus
393dde7c95SVishal Kulkarni extern "C" {
403dde7c95SVishal Kulkarni #endif
413dde7c95SVishal Kulkarni 
423dde7c95SVishal Kulkarni #ifndef __linux__
433dde7c95SVishal Kulkarni #define __force
443dde7c95SVishal Kulkarni #define usleep_range(_min, _max) msleep(_max / 1000)
453dde7c95SVishal Kulkarni #endif
463dde7c95SVishal Kulkarni 
473dde7c95SVishal Kulkarni /*
483dde7c95SVishal Kulkarni  * Firmware minimum version macros are used by t4_check_fw_version() to check
493dde7c95SVishal Kulkarni  * if the FW is supported by the driver.
503dde7c95SVishal Kulkarni  * Initially these macros were in t4fw_interface.h, but was removed, as the
513dde7c95SVishal Kulkarni  * file is automatically replaced during a new FW commit. So untill these
523dde7c95SVishal Kulkarni  * macros moves to one of the firmware header files, it has to be here.
533dde7c95SVishal Kulkarni  */
543dde7c95SVishal Kulkarni #define T4FW_MIN_VERSION_MAJOR 0x01
553dde7c95SVishal Kulkarni #define T4FW_MIN_VERSION_MINOR 0x04
563dde7c95SVishal Kulkarni #define T4FW_MIN_VERSION_MICRO 0x00
573dde7c95SVishal Kulkarni 
583dde7c95SVishal Kulkarni #define T5FW_MIN_VERSION_MAJOR 0x00
593dde7c95SVishal Kulkarni #define T5FW_MIN_VERSION_MINOR 0x00
603dde7c95SVishal Kulkarni #define T5FW_MIN_VERSION_MICRO 0x00
613dde7c95SVishal Kulkarni 
623dde7c95SVishal Kulkarni #define T6FW_MIN_VERSION_MAJOR 0x00
633dde7c95SVishal Kulkarni #define T6FW_MIN_VERSION_MINOR 0x00
643dde7c95SVishal Kulkarni #define T6FW_MIN_VERSION_MICRO 0x00
653dde7c95SVishal Kulkarni 
6656b2bdd1SGireesh Nagabhushana enum {
6756b2bdd1SGireesh Nagabhushana 	MAX_NPORTS     = 4,     /* max # of ports */
6856b2bdd1SGireesh Nagabhushana 	SERNUM_LEN     = 24,    /* Serial # length */
6956b2bdd1SGireesh Nagabhushana 	EC_LEN         = 16,    /* E/C length */
7056b2bdd1SGireesh Nagabhushana 	ID_LEN         = 16,    /* ID length */
7156b2bdd1SGireesh Nagabhushana 	PN_LEN         = 16,    /* Part Number length */
7256b2bdd1SGireesh Nagabhushana 	MACADDR_LEN    = 12,    /* MAC Address length */
7356b2bdd1SGireesh Nagabhushana };
7456b2bdd1SGireesh Nagabhushana 
753dde7c95SVishal Kulkarni enum {
763dde7c95SVishal Kulkarni 	T4_REGMAP_SIZE = (160 * 1024),
773dde7c95SVishal Kulkarni 	T5_REGMAP_SIZE = (332 * 1024),
783dde7c95SVishal Kulkarni };
793dde7c95SVishal Kulkarni 
807e6ad469SVishal Kulkarni enum { MEM_EDC0, MEM_EDC1, MEM_MC, MEM_MC0 = MEM_MC, MEM_MC1, MEM_HMA };
8156b2bdd1SGireesh Nagabhushana 
8256b2bdd1SGireesh Nagabhushana enum {
8356b2bdd1SGireesh Nagabhushana 	MEMWIN0_APERTURE = 2048,
8456b2bdd1SGireesh Nagabhushana 	MEMWIN0_BASE     = 0x1b800,
853dde7c95SVishal Kulkarni 
8656b2bdd1SGireesh Nagabhushana 	MEMWIN1_APERTURE = 32768,
8756b2bdd1SGireesh Nagabhushana 	MEMWIN1_BASE     = 0x28000,
88de483253SVishal Kulkarni 
893dde7c95SVishal Kulkarni 	MEMWIN2_APERTURE = 65536,
903dde7c95SVishal Kulkarni 	MEMWIN2_BASE     = 0x30000,
91de483253SVishal Kulkarni 
92de483253SVishal Kulkarni 	MEMWIN2_APERTURE_T5 = 128 * 1024,
93de483253SVishal Kulkarni 	MEMWIN2_BASE_T5     = 0x60000,
9456b2bdd1SGireesh Nagabhushana };
9556b2bdd1SGireesh Nagabhushana 
9656b2bdd1SGireesh Nagabhushana enum dev_master { MASTER_CANT, MASTER_MAY, MASTER_MUST };
9756b2bdd1SGireesh Nagabhushana 
9856b2bdd1SGireesh Nagabhushana enum dev_state { DEV_STATE_UNINIT, DEV_STATE_INIT, DEV_STATE_ERR };
9956b2bdd1SGireesh Nagabhushana 
10056b2bdd1SGireesh Nagabhushana enum {
10156b2bdd1SGireesh Nagabhushana 	PAUSE_RX      = 1 << 0,
10256b2bdd1SGireesh Nagabhushana 	PAUSE_TX      = 1 << 1,
10356b2bdd1SGireesh Nagabhushana 	PAUSE_AUTONEG = 1 << 2
10456b2bdd1SGireesh Nagabhushana };
1057e6ad469SVishal Kulkarni typedef unsigned char cc_pause_t;
10656b2bdd1SGireesh Nagabhushana 
1073dde7c95SVishal Kulkarni enum {
108d77e6e0fSPaul Winder 	FEC_RS		= 1 << 0,	/* Reed-Solomon */
109d77e6e0fSPaul Winder 	FEC_BASER_RS	= 1 << 1,	/* Base-R, aka Firecode */
110d77e6e0fSPaul Winder 	FEC_NONE	= 1 << 2,	/* no FEC */
1116feac2e3SRahul Lakkireddy 	FEC_FORCE	= 1 << 3,       /* Force specified FEC */
112d77e6e0fSPaul Winder 
113d77e6e0fSPaul Winder 	/*
114d77e6e0fSPaul Winder 	 * Pseudo FECs that translate to real FECs.  The firmware knows nothing
115d77e6e0fSPaul Winder 	 * about these and they start at M_FW_PORT_CAP32_FEC + 1.  AUTO should
116d77e6e0fSPaul Winder 	 * be set all by itself.
117d77e6e0fSPaul Winder 	 */
118d77e6e0fSPaul Winder 	FEC_AUTO	= 1 << 5,
1193dde7c95SVishal Kulkarni };
1207e6ad469SVishal Kulkarni typedef unsigned char cc_fec_t;
1213dde7c95SVishal Kulkarni 
1223dde7c95SVishal Kulkarni enum {
1233dde7c95SVishal Kulkarni 	ULP_T10DIF_ISCSI = 1 << 0,
1243dde7c95SVishal Kulkarni 	ULP_T10DIF_FCOE = 1 << 1
1253dde7c95SVishal Kulkarni };
1263dde7c95SVishal Kulkarni 
1273dde7c95SVishal Kulkarni enum {
1283dde7c95SVishal Kulkarni 	ULP_CRYPTO_LOOKASIDE  = 1 << 0,
1293dde7c95SVishal Kulkarni 	ULP_CRYPTO_INLINE_TLS = 1 << 1
130de483253SVishal Kulkarni };
131de483253SVishal Kulkarni 
13256b2bdd1SGireesh Nagabhushana struct port_stats {
13356b2bdd1SGireesh Nagabhushana 	u64 tx_octets;            /* total # of octets in good frames */
13456b2bdd1SGireesh Nagabhushana 	u64 tx_frames;            /* all good frames */
13556b2bdd1SGireesh Nagabhushana 	u64 tx_bcast_frames;      /* all broadcast frames */
13656b2bdd1SGireesh Nagabhushana 	u64 tx_mcast_frames;      /* all multicast frames */
13756b2bdd1SGireesh Nagabhushana 	u64 tx_ucast_frames;      /* all unicast frames */
13856b2bdd1SGireesh Nagabhushana 	u64 tx_error_frames;      /* all error frames */
13956b2bdd1SGireesh Nagabhushana 
14056b2bdd1SGireesh Nagabhushana 	u64 tx_frames_64;         /* # of Tx frames in a particular range */
14156b2bdd1SGireesh Nagabhushana 	u64 tx_frames_65_127;
14256b2bdd1SGireesh Nagabhushana 	u64 tx_frames_128_255;
14356b2bdd1SGireesh Nagabhushana 	u64 tx_frames_256_511;
14456b2bdd1SGireesh Nagabhushana 	u64 tx_frames_512_1023;
14556b2bdd1SGireesh Nagabhushana 	u64 tx_frames_1024_1518;
14656b2bdd1SGireesh Nagabhushana 	u64 tx_frames_1519_max;
14756b2bdd1SGireesh Nagabhushana 
14856b2bdd1SGireesh Nagabhushana 	u64 tx_drop;              /* # of dropped Tx frames */
14956b2bdd1SGireesh Nagabhushana 	u64 tx_pause;             /* # of transmitted pause frames */
15056b2bdd1SGireesh Nagabhushana 	u64 tx_ppp0;              /* # of transmitted PPP prio 0 frames */
15156b2bdd1SGireesh Nagabhushana 	u64 tx_ppp1;              /* # of transmitted PPP prio 1 frames */
15256b2bdd1SGireesh Nagabhushana 	u64 tx_ppp2;              /* # of transmitted PPP prio 2 frames */
15356b2bdd1SGireesh Nagabhushana 	u64 tx_ppp3;              /* # of transmitted PPP prio 3 frames */
15456b2bdd1SGireesh Nagabhushana 	u64 tx_ppp4;              /* # of transmitted PPP prio 4 frames */
15556b2bdd1SGireesh Nagabhushana 	u64 tx_ppp5;              /* # of transmitted PPP prio 5 frames */
15656b2bdd1SGireesh Nagabhushana 	u64 tx_ppp6;              /* # of transmitted PPP prio 6 frames */
15756b2bdd1SGireesh Nagabhushana 	u64 tx_ppp7;              /* # of transmitted PPP prio 7 frames */
15856b2bdd1SGireesh Nagabhushana 
15956b2bdd1SGireesh Nagabhushana 	u64 rx_octets;            /* total # of octets in good frames */
16056b2bdd1SGireesh Nagabhushana 	u64 rx_frames;            /* all good frames */
16156b2bdd1SGireesh Nagabhushana 	u64 rx_bcast_frames;      /* all broadcast frames */
16256b2bdd1SGireesh Nagabhushana 	u64 rx_mcast_frames;      /* all multicast frames */
16356b2bdd1SGireesh Nagabhushana 	u64 rx_ucast_frames;      /* all unicast frames */
16456b2bdd1SGireesh Nagabhushana 	u64 rx_too_long;          /* # of frames exceeding MTU */
16556b2bdd1SGireesh Nagabhushana 	u64 rx_jabber;            /* # of jabber frames */
16656b2bdd1SGireesh Nagabhushana 	u64 rx_fcs_err;           /* # of received frames with bad FCS */
16756b2bdd1SGireesh Nagabhushana 	u64 rx_len_err;           /* # of received frames with length error */
16856b2bdd1SGireesh Nagabhushana 	u64 rx_symbol_err;        /* symbol errors */
16956b2bdd1SGireesh Nagabhushana 	u64 rx_runt;              /* # of short frames */
17056b2bdd1SGireesh Nagabhushana 
17156b2bdd1SGireesh Nagabhushana 	u64 rx_frames_64;         /* # of Rx frames in a particular range */
17256b2bdd1SGireesh Nagabhushana 	u64 rx_frames_65_127;
17356b2bdd1SGireesh Nagabhushana 	u64 rx_frames_128_255;
17456b2bdd1SGireesh Nagabhushana 	u64 rx_frames_256_511;
17556b2bdd1SGireesh Nagabhushana 	u64 rx_frames_512_1023;
17656b2bdd1SGireesh Nagabhushana 	u64 rx_frames_1024_1518;
17756b2bdd1SGireesh Nagabhushana 	u64 rx_frames_1519_max;
17856b2bdd1SGireesh Nagabhushana 
17956b2bdd1SGireesh Nagabhushana 	u64 rx_pause;             /* # of received pause frames */
18056b2bdd1SGireesh Nagabhushana 	u64 rx_ppp0;              /* # of received PPP prio 0 frames */
18156b2bdd1SGireesh Nagabhushana 	u64 rx_ppp1;              /* # of received PPP prio 1 frames */
18256b2bdd1SGireesh Nagabhushana 	u64 rx_ppp2;              /* # of received PPP prio 2 frames */
18356b2bdd1SGireesh Nagabhushana 	u64 rx_ppp3;              /* # of received PPP prio 3 frames */
18456b2bdd1SGireesh Nagabhushana 	u64 rx_ppp4;              /* # of received PPP prio 4 frames */
18556b2bdd1SGireesh Nagabhushana 	u64 rx_ppp5;              /* # of received PPP prio 5 frames */
18656b2bdd1SGireesh Nagabhushana 	u64 rx_ppp6;              /* # of received PPP prio 6 frames */
18756b2bdd1SGireesh Nagabhushana 	u64 rx_ppp7;              /* # of received PPP prio 7 frames */
18856b2bdd1SGireesh Nagabhushana 
18956b2bdd1SGireesh Nagabhushana 	u64 rx_ovflow0;           /* drops due to buffer-group 0 overflows */
19056b2bdd1SGireesh Nagabhushana 	u64 rx_ovflow1;           /* drops due to buffer-group 1 overflows */
19156b2bdd1SGireesh Nagabhushana 	u64 rx_ovflow2;           /* drops due to buffer-group 2 overflows */
19256b2bdd1SGireesh Nagabhushana 	u64 rx_ovflow3;           /* drops due to buffer-group 3 overflows */
19356b2bdd1SGireesh Nagabhushana 	u64 rx_trunc0;            /* buffer-group 0 truncated packets */
19456b2bdd1SGireesh Nagabhushana 	u64 rx_trunc1;            /* buffer-group 1 truncated packets */
19556b2bdd1SGireesh Nagabhushana 	u64 rx_trunc2;            /* buffer-group 2 truncated packets */
19656b2bdd1SGireesh Nagabhushana 	u64 rx_trunc3;            /* buffer-group 3 truncated packets */
19756b2bdd1SGireesh Nagabhushana };
19856b2bdd1SGireesh Nagabhushana 
19956b2bdd1SGireesh Nagabhushana struct lb_port_stats {
20056b2bdd1SGireesh Nagabhushana 	u64 octets;
20156b2bdd1SGireesh Nagabhushana 	u64 frames;
20256b2bdd1SGireesh Nagabhushana 	u64 bcast_frames;
20356b2bdd1SGireesh Nagabhushana 	u64 mcast_frames;
20456b2bdd1SGireesh Nagabhushana 	u64 ucast_frames;
20556b2bdd1SGireesh Nagabhushana 	u64 error_frames;
20656b2bdd1SGireesh Nagabhushana 
20756b2bdd1SGireesh Nagabhushana 	u64 frames_64;
20856b2bdd1SGireesh Nagabhushana 	u64 frames_65_127;
20956b2bdd1SGireesh Nagabhushana 	u64 frames_128_255;
21056b2bdd1SGireesh Nagabhushana 	u64 frames_256_511;
21156b2bdd1SGireesh Nagabhushana 	u64 frames_512_1023;
21256b2bdd1SGireesh Nagabhushana 	u64 frames_1024_1518;
21356b2bdd1SGireesh Nagabhushana 	u64 frames_1519_max;
21456b2bdd1SGireesh Nagabhushana 
21556b2bdd1SGireesh Nagabhushana 	u64 drop;
21656b2bdd1SGireesh Nagabhushana 
21756b2bdd1SGireesh Nagabhushana 	u64 ovflow0;
21856b2bdd1SGireesh Nagabhushana 	u64 ovflow1;
21956b2bdd1SGireesh Nagabhushana 	u64 ovflow2;
22056b2bdd1SGireesh Nagabhushana 	u64 ovflow3;
22156b2bdd1SGireesh Nagabhushana 	u64 trunc0;
22256b2bdd1SGireesh Nagabhushana 	u64 trunc1;
22356b2bdd1SGireesh Nagabhushana 	u64 trunc2;
22456b2bdd1SGireesh Nagabhushana 	u64 trunc3;
22556b2bdd1SGireesh Nagabhushana };
22656b2bdd1SGireesh Nagabhushana 
22756b2bdd1SGireesh Nagabhushana struct tp_tcp_stats {
2283dde7c95SVishal Kulkarni 	u32 tcp_out_rsts;
2293dde7c95SVishal Kulkarni 	u64 tcp_in_segs;
2303dde7c95SVishal Kulkarni 	u64 tcp_out_segs;
2313dde7c95SVishal Kulkarni 	u64 tcp_retrans_segs;
23256b2bdd1SGireesh Nagabhushana };
23356b2bdd1SGireesh Nagabhushana 
23456b2bdd1SGireesh Nagabhushana struct tp_usm_stats {
23556b2bdd1SGireesh Nagabhushana 	u32 frames;
23656b2bdd1SGireesh Nagabhushana 	u32 drops;
23756b2bdd1SGireesh Nagabhushana 	u64 octets;
23856b2bdd1SGireesh Nagabhushana };
23956b2bdd1SGireesh Nagabhushana 
24056b2bdd1SGireesh Nagabhushana struct tp_fcoe_stats {
2413dde7c95SVishal Kulkarni 	u32 frames_ddp;
2423dde7c95SVishal Kulkarni 	u32 frames_drop;
2433dde7c95SVishal Kulkarni 	u64 octets_ddp;
24456b2bdd1SGireesh Nagabhushana };
24556b2bdd1SGireesh Nagabhushana 
24656b2bdd1SGireesh Nagabhushana struct tp_err_stats {
2473dde7c95SVishal Kulkarni 	u32 mac_in_errs[4];
2483dde7c95SVishal Kulkarni 	u32 hdr_in_errs[4];
2493dde7c95SVishal Kulkarni 	u32 tcp_in_errs[4];
2503dde7c95SVishal Kulkarni 	u32 tnl_cong_drops[4];
2513dde7c95SVishal Kulkarni 	u32 ofld_chan_drops[4];
2523dde7c95SVishal Kulkarni 	u32 tnl_tx_drops[4];
2533dde7c95SVishal Kulkarni 	u32 ofld_vlan_drops[4];
2543dde7c95SVishal Kulkarni 	u32 tcp6_in_errs[4];
2553dde7c95SVishal Kulkarni 	u32 ofld_no_neigh;
2563dde7c95SVishal Kulkarni 	u32 ofld_cong_defer;
25756b2bdd1SGireesh Nagabhushana };
25856b2bdd1SGireesh Nagabhushana 
25956b2bdd1SGireesh Nagabhushana struct tp_proxy_stats {
26056b2bdd1SGireesh Nagabhushana 	u32 proxy[4];
26156b2bdd1SGireesh Nagabhushana };
26256b2bdd1SGireesh Nagabhushana 
26356b2bdd1SGireesh Nagabhushana struct tp_cpl_stats {
26456b2bdd1SGireesh Nagabhushana 	u32 req[4];
26556b2bdd1SGireesh Nagabhushana 	u32 rsp[4];
26656b2bdd1SGireesh Nagabhushana };
26756b2bdd1SGireesh Nagabhushana 
26856b2bdd1SGireesh Nagabhushana struct tp_rdma_stats {
26956b2bdd1SGireesh Nagabhushana 	u32 rqe_dfr_pkt;
2703dde7c95SVishal Kulkarni 	u32 rqe_dfr_mod;
2713dde7c95SVishal Kulkarni };
2723dde7c95SVishal Kulkarni 
2733dde7c95SVishal Kulkarni struct sge_params {
2743dde7c95SVishal Kulkarni 	u32 hps;			/* host page size for our PF/VF */
2753dde7c95SVishal Kulkarni 	u32 eq_qpp;			/* egress queues/page for our PF/VF */
2763dde7c95SVishal Kulkarni 	u32 iq_qpp;			/* egress queues/page for our PF/VF */
27756b2bdd1SGireesh Nagabhushana };
27856b2bdd1SGireesh Nagabhushana 
27956b2bdd1SGireesh Nagabhushana struct tp_params {
28056b2bdd1SGireesh Nagabhushana 	unsigned int tre;            /* log2 of core clocks per TP tick */
28156b2bdd1SGireesh Nagabhushana 	unsigned int dack_re;        /* DACK timer resolution */
28256b2bdd1SGireesh Nagabhushana 	unsigned int la_mask;        /* what events are recorded by TP LA */
28356b2bdd1SGireesh Nagabhushana 	unsigned short tx_modq[NCHAN];  /* channel to modulation queue map */
2843dde7c95SVishal Kulkarni 
2853dde7c95SVishal Kulkarni 	u32 vlan_pri_map;		/* cached TP_VLAN_PRI_MAP */
2867e6ad469SVishal Kulkarni 	u32 filter_mask;
2873dde7c95SVishal Kulkarni 	u32 ingress_config;		/* cached TP_INGRESS_CONFIG */
2883dde7c95SVishal Kulkarni 	/* cached TP_OUT_CONFIG compressed error vector
2893dde7c95SVishal Kulkarni 	 * and passing outer header info for encapsulated packets.
2903dde7c95SVishal Kulkarni 	 */
2913dde7c95SVishal Kulkarni 	int rx_pkt_encap;
2923dde7c95SVishal Kulkarni 
2933dde7c95SVishal Kulkarni 	/*
2943dde7c95SVishal Kulkarni 	 * TP_VLAN_PRI_MAP Compressed Filter Tuple field offsets.  This is a
2953dde7c95SVishal Kulkarni 	 * subset of the set of fields which may be present in the Compressed
2963dde7c95SVishal Kulkarni 	 * Filter Tuple portion of filters and TCP TCB connections.  The
2973dde7c95SVishal Kulkarni 	 * fields which are present are controlled by the TP_VLAN_PRI_MAP.
2983dde7c95SVishal Kulkarni 	 * Since a variable number of fields may or may not be present, their
2993dde7c95SVishal Kulkarni 	 * shifted field positions within the Compressed Filter Tuple may
3003dde7c95SVishal Kulkarni 	 * vary, or not even be present if the field isn't selected in
3013dde7c95SVishal Kulkarni 	 * TP_VLAN_PRI_MAP.  Since some of these fields are needed in various
3023dde7c95SVishal Kulkarni 	 * places we store their offsets here, or a -1 if the field isn't
3033dde7c95SVishal Kulkarni 	 * present.
3043dde7c95SVishal Kulkarni 	 */
3053dde7c95SVishal Kulkarni 	int fcoe_shift;
3063dde7c95SVishal Kulkarni 	int port_shift;
3073dde7c95SVishal Kulkarni 	int vnic_shift;
3083dde7c95SVishal Kulkarni 	int vlan_shift;
3093dde7c95SVishal Kulkarni 	int tos_shift;
3103dde7c95SVishal Kulkarni 	int protocol_shift;
3113dde7c95SVishal Kulkarni 	int ethertype_shift;
3123dde7c95SVishal Kulkarni 	int macmatch_shift;
3133dde7c95SVishal Kulkarni 	int matchtype_shift;
3143dde7c95SVishal Kulkarni 	int frag_shift;
31556b2bdd1SGireesh Nagabhushana };
31656b2bdd1SGireesh Nagabhushana 
31756b2bdd1SGireesh Nagabhushana struct vpd_params {
31856b2bdd1SGireesh Nagabhushana 	unsigned int cclk;
31956b2bdd1SGireesh Nagabhushana 	u8 ec[EC_LEN + 1];
32056b2bdd1SGireesh Nagabhushana 	u8 sn[SERNUM_LEN + 1];
32156b2bdd1SGireesh Nagabhushana 	u8 id[ID_LEN + 1];
32256b2bdd1SGireesh Nagabhushana 	u8 pn[PN_LEN + 1];
32356b2bdd1SGireesh Nagabhushana 	u8 na[MACADDR_LEN + 1];
32456b2bdd1SGireesh Nagabhushana };
32556b2bdd1SGireesh Nagabhushana 
3267e6ad469SVishal Kulkarni /*
3277e6ad469SVishal Kulkarni  * Maximum resources provisioned for a PCI PF.
3287e6ad469SVishal Kulkarni  */
3297e6ad469SVishal Kulkarni struct pf_resources {
3307e6ad469SVishal Kulkarni 	unsigned int nvi;		/* N virtual interfaces */
3317e6ad469SVishal Kulkarni 	unsigned int neq;		/* N egress Qs */
3327e6ad469SVishal Kulkarni 	unsigned int nethctrl;		/* N egress ETH or CTRL Qs */
3337e6ad469SVishal Kulkarni 	unsigned int niqflint;		/* N ingress Qs/w free list(s) & intr */
3347e6ad469SVishal Kulkarni 	unsigned int tc;		/* PCI-E traffic class */
3357e6ad469SVishal Kulkarni 	unsigned int pmask;		/* port access rights mask */
3367e6ad469SVishal Kulkarni 	unsigned int nexactf;		/* N exact MPS filters */
3377e6ad469SVishal Kulkarni 	unsigned int r_caps;		/* read capabilities */
3387e6ad469SVishal Kulkarni 	unsigned int wx_caps;		/* write/execute capabilities */
3397e6ad469SVishal Kulkarni };
3407e6ad469SVishal Kulkarni 
34156b2bdd1SGireesh Nagabhushana struct pci_params {
3423dde7c95SVishal Kulkarni 	uint16_t        vendor_id;
3433dde7c95SVishal Kulkarni 	uint16_t        device_id;
3443dde7c95SVishal Kulkarni 	uint32_t        vpd_cap_addr;
3453dde7c95SVishal Kulkarni 	uint16_t        speed;
3463dde7c95SVishal Kulkarni 	uint8_t         width;
34756b2bdd1SGireesh Nagabhushana };
34856b2bdd1SGireesh Nagabhushana 
34956b2bdd1SGireesh Nagabhushana /*
35056b2bdd1SGireesh Nagabhushana  * Firmware device log.
35156b2bdd1SGireesh Nagabhushana  */
35256b2bdd1SGireesh Nagabhushana struct devlog_params {
35356b2bdd1SGireesh Nagabhushana 	u32 memtype;			/* which memory (EDC0, EDC1, MC) */
35456b2bdd1SGireesh Nagabhushana 	u32 start;			/* start of log in firmware memory */
35556b2bdd1SGireesh Nagabhushana 	u32 size;			/* size of log */
35656b2bdd1SGireesh Nagabhushana };
35756b2bdd1SGireesh Nagabhushana 
3583dde7c95SVishal Kulkarni /* Stores chip specific parameters */
3593dde7c95SVishal Kulkarni struct arch_specific_params {
3603dde7c95SVishal Kulkarni 	u8 nchan;
3613dde7c95SVishal Kulkarni 	u8 pm_stats_cnt;
3623dde7c95SVishal Kulkarni 	u8 cng_ch_bits_log;		/* congestion channel map bits width */
3633dde7c95SVishal Kulkarni 	u16 mps_rplc_size;
3643dde7c95SVishal Kulkarni 	u16 vfcount;
3653dde7c95SVishal Kulkarni 	u32 sge_fl_db;
3663dde7c95SVishal Kulkarni 	u16 mps_tcam_size;
3673dde7c95SVishal Kulkarni };
3683dde7c95SVishal Kulkarni 
36956b2bdd1SGireesh Nagabhushana struct adapter_params {
3703dde7c95SVishal Kulkarni 	struct sge_params sge;
37156b2bdd1SGireesh Nagabhushana 	struct tp_params  tp;
37256b2bdd1SGireesh Nagabhushana 	struct vpd_params vpd;
3737e6ad469SVishal Kulkarni 	struct pf_resources pfres;
37456b2bdd1SGireesh Nagabhushana 	struct pci_params pci;
37556b2bdd1SGireesh Nagabhushana 	struct devlog_params devlog;
3763dde7c95SVishal Kulkarni 	enum pcie_memwin drv_memwin;
37756b2bdd1SGireesh Nagabhushana 
37856b2bdd1SGireesh Nagabhushana 	unsigned int sf_size;             /* serial flash size in bytes */
37956b2bdd1SGireesh Nagabhushana 	unsigned int sf_nsec;             /* # of flash sectors */
38056b2bdd1SGireesh Nagabhushana 
3813dde7c95SVishal Kulkarni 	unsigned int fw_vers;		/* firmware version */
3823dde7c95SVishal Kulkarni 	unsigned int bs_vers;		/* bootstrap version */
3833dde7c95SVishal Kulkarni 	unsigned int tp_vers;		/* TP microcode version */
3843dde7c95SVishal Kulkarni 	unsigned int er_vers;		/* expansion ROM version */
3853dde7c95SVishal Kulkarni 	unsigned int scfg_vers;		/* Serial Configuration version */
3863dde7c95SVishal Kulkarni 	unsigned int vpd_vers;		/* VPD version */
38756b2bdd1SGireesh Nagabhushana 
38856b2bdd1SGireesh Nagabhushana 	unsigned short mtus[NMTUS];
38956b2bdd1SGireesh Nagabhushana 	unsigned short a_wnd[NCCTRL_WIN];
39056b2bdd1SGireesh Nagabhushana 	unsigned short b_wnd[NCCTRL_WIN];
39156b2bdd1SGireesh Nagabhushana 
39256b2bdd1SGireesh Nagabhushana 	unsigned int mc_size;             /* MC memory size */
39356b2bdd1SGireesh Nagabhushana 	unsigned int nfilters;            /* size of filter region */
39456b2bdd1SGireesh Nagabhushana 
39556b2bdd1SGireesh Nagabhushana 	unsigned int cim_la_size;
39656b2bdd1SGireesh Nagabhushana 
3973dde7c95SVishal Kulkarni 	unsigned char nports;             /* # of ethernet ports */
3983dde7c95SVishal Kulkarni 	unsigned char portvec;
3993dde7c95SVishal Kulkarni 	unsigned char offload;
40056b2bdd1SGireesh Nagabhushana 
40156b2bdd1SGireesh Nagabhushana 	unsigned char bypass;
4023dde7c95SVishal Kulkarni 	unsigned char hash_filter;
40356b2bdd1SGireesh Nagabhushana 
404de483253SVishal Kulkarni 	enum chip_type chip;              /* chip code */
4053dde7c95SVishal Kulkarni 	struct arch_specific_params arch; /* chip specific params */
406de483253SVishal Kulkarni 
40756b2bdd1SGireesh Nagabhushana 	unsigned int ofldq_wr_cred;
408de483253SVishal Kulkarni 
409de483253SVishal Kulkarni 	unsigned int nsched_cls;          /* number of traffic classes */
410de483253SVishal Kulkarni 
411de483253SVishal Kulkarni 	unsigned int max_ordird_qp;	  /* Max read depth per RDMA QP */
412de483253SVishal Kulkarni 	unsigned int max_ird_adapter;	  /* Max read depth per adapter */
413de483253SVishal Kulkarni 	bool ulptx_memwrite_dsgl;          /* use of T5 DSGL allowed */
4143dde7c95SVishal Kulkarni 	unsigned char ulp_t10dif;	  /* t10dif support for ulp */
4153dde7c95SVishal Kulkarni 	unsigned char ulp_crypto;	/* Crypto support */
4163dde7c95SVishal Kulkarni 	bool fr_nsmr_tpte_wr_support;     /* FW support for FR_NSMR_TPTE_WR */
4173dde7c95SVishal Kulkarni 	bool filter2_wr_support;	/* FW support for FILTER2_WR */
4187e6ad469SVishal Kulkarni 	bool viid_smt_extn_support;	/* FW returns vin and smt index? */
4197e6ad469SVishal Kulkarni 	u8 fw_caps_support;		/* 32-bit Port Capabilities */
4207e6ad469SVishal Kulkarni 
4217e6ad469SVishal Kulkarni 	/*
4227e6ad469SVishal Kulkarni 	 * MPS Buffer Group Map[per Port].  Bit i is set if buffer group i is
4237e6ad469SVishal Kulkarni 	 * used by the Port
4247e6ad469SVishal Kulkarni 	 */
4257e6ad469SVishal Kulkarni 	u8 mps_bg_map[MAX_NPORTS];	/* MPS Buffer Group Map */
4267e6ad469SVishal Kulkarni 	bool write_w_imm_support;	/* FW supports WRITE_WITH_IMMEDIATE */
4277e6ad469SVishal Kulkarni 	bool write_cmpl_support;	/* FW supports WRITE_CMPL */
4287e6ad469SVishal Kulkarni 	/* FW supports adding source mac address to TCAM */
4297e6ad469SVishal Kulkarni 	bool smac_add_support;
43056b2bdd1SGireesh Nagabhushana };
43156b2bdd1SGireesh Nagabhushana 
4323dde7c95SVishal Kulkarni /*
4333dde7c95SVishal Kulkarni  * State needed to monitor the forward progress of SGE Ingress DMA activities
4343dde7c95SVishal Kulkarni  * and possible hangs.
4353dde7c95SVishal Kulkarni  */
4363dde7c95SVishal Kulkarni struct sge_idma_monitor_state {
4373dde7c95SVishal Kulkarni 	unsigned int idma_1s_thresh;	/* 1s threshold in Core Clock ticks */
4383dde7c95SVishal Kulkarni 	unsigned int idma_stalled[2];	/* synthesized stalled timers in HZ */
4393dde7c95SVishal Kulkarni 	unsigned int idma_state[2];	/* IDMA Hang detect state */
4403dde7c95SVishal Kulkarni 	unsigned int idma_qid[2];	/* IDMA Hung Ingress Queue ID */
4413dde7c95SVishal Kulkarni 	unsigned int idma_warn[2];	/* time to warning in HZ */
4423dde7c95SVishal Kulkarni };
4433dde7c95SVishal Kulkarni 
4443dde7c95SVishal Kulkarni /*
4453dde7c95SVishal Kulkarni  * Firmware Mailbox Command/Reply log.  All values are in Host-Endian format.
4463dde7c95SVishal Kulkarni  * The access and execute times are signed in order to accommodate negative
4473dde7c95SVishal Kulkarni  * error returns.
4483dde7c95SVishal Kulkarni  */
4493dde7c95SVishal Kulkarni struct mbox_cmd {
4503dde7c95SVishal Kulkarni 	u64 cmd[MBOX_LEN/8];		/* a Firmware Mailbox Command/Reply */
4513dde7c95SVishal Kulkarni 	u64 timestamp;			/* OS-dependent timestamp */
4523dde7c95SVishal Kulkarni 	u32 seqno;			/* sequence number */
4533dde7c95SVishal Kulkarni 	s16 access;			/* time (ms) to access mailbox */
4543dde7c95SVishal Kulkarni 	s16 execute;			/* time (ms) to execute */
4553dde7c95SVishal Kulkarni };
4563dde7c95SVishal Kulkarni 
4573dde7c95SVishal Kulkarni struct mbox_cmd_log {
4583dde7c95SVishal Kulkarni 	unsigned int size;		/* number of entries in the log */
4593dde7c95SVishal Kulkarni 	unsigned int cursor;		/* next position in the log to write */
4603dde7c95SVishal Kulkarni 	u32 seqno;			/* next sequence number */
4613dde7c95SVishal Kulkarni 	/* variable length mailbox command log starts here */
4623dde7c95SVishal Kulkarni };
4633dde7c95SVishal Kulkarni 
4647e6ad469SVishal Kulkarni struct mbox_cmd *mbox_cmd_log_entry(struct mbox_cmd_log *log,
4657e6ad469SVishal Kulkarni 				  unsigned int entry_idx);
4663dde7c95SVishal Kulkarni 
4673dde7c95SVishal Kulkarni #include <t4fw_interface.h>
4683dde7c95SVishal Kulkarni 
4693dde7c95SVishal Kulkarni #define FW_INTFVER(chip, intf) (FW_HDR_INTFVER_##intf)
4703dde7c95SVishal Kulkarni 
4713dde7c95SVishal Kulkarni struct fw_info {
4723dde7c95SVishal Kulkarni 	u8 chip;
4733dde7c95SVishal Kulkarni 	char *fs_name;
4743dde7c95SVishal Kulkarni 	char *fw_mod_name;
4753dde7c95SVishal Kulkarni 	struct fw_hdr fw_hdr;	/* XXX: waste of space, need a sparse struct */
47656b2bdd1SGireesh Nagabhushana };
47756b2bdd1SGireesh Nagabhushana 
47856b2bdd1SGireesh Nagabhushana struct trace_params {
47956b2bdd1SGireesh Nagabhushana 	u32 data[TRACE_LEN / 4];
48056b2bdd1SGireesh Nagabhushana 	u32 mask[TRACE_LEN / 4];
48156b2bdd1SGireesh Nagabhushana 	unsigned short snap_len;
48256b2bdd1SGireesh Nagabhushana 	unsigned short min_len;
48356b2bdd1SGireesh Nagabhushana 	unsigned char skip_ofst;
48456b2bdd1SGireesh Nagabhushana 	unsigned char skip_len;
48556b2bdd1SGireesh Nagabhushana 	unsigned char invert;
48656b2bdd1SGireesh Nagabhushana 	unsigned char port;
48756b2bdd1SGireesh Nagabhushana };
48856b2bdd1SGireesh Nagabhushana 
4897e6ad469SVishal Kulkarni /*
4907e6ad469SVishal Kulkarni  * Firmware Port Capabilities types.
4917e6ad469SVishal Kulkarni  */
4927e6ad469SVishal Kulkarni typedef u16 fw_port_cap16_t;    /* 16-bit Port Capabilities integral value */
4937e6ad469SVishal Kulkarni typedef u32 fw_port_cap32_t;    /* 32-bit Port Capabilities integral value */
4947e6ad469SVishal Kulkarni 
4957e6ad469SVishal Kulkarni enum fw_caps {
4967e6ad469SVishal Kulkarni 	FW_CAPS_UNKNOWN	= 0,	/* 0'ed out initial state */
4977e6ad469SVishal Kulkarni 	FW_CAPS16	= 1,	/* old Firmware: 16-bit Port Capabilities */
4987e6ad469SVishal Kulkarni 	FW_CAPS32	= 2,	/* new Firmware: 32-bit Port Capabilities */
4997e6ad469SVishal Kulkarni };
5007e6ad469SVishal Kulkarni 
50156b2bdd1SGireesh Nagabhushana struct link_config {
5027e6ad469SVishal Kulkarni 	fw_port_cap32_t pcaps;		/* link capabilities */
5037e6ad469SVishal Kulkarni 	fw_port_cap32_t	acaps;		/* advertised capabilities */
5047e6ad469SVishal Kulkarni 	fw_port_cap32_t	lpacaps;	/* peer advertised capabilities */
5057e6ad469SVishal Kulkarni 
5066feac2e3SRahul Lakkireddy 	fw_port_cap32_t link_caps;      /* current link capabilities */
5076feac2e3SRahul Lakkireddy 	fw_port_cap32_t admin_caps;     /* admin configured link capabilities */
5087e6ad469SVishal Kulkarni 
50956b2bdd1SGireesh Nagabhushana 	unsigned char	link_ok;	/* link up? */
5103dde7c95SVishal Kulkarni 	unsigned char	link_down_rc;	/* link down reason */
5117e6ad469SVishal Kulkarni 
5127e6ad469SVishal Kulkarni 	/*
5137e6ad469SVishal Kulkarni 	 * State variables between Common Code and OS-dependent "contract"
5147e6ad469SVishal Kulkarni 	 * routines.  These are used to communicate information and desired
5157e6ad469SVishal Kulkarni 	 * actions out-of-band.
5167e6ad469SVishal Kulkarni 	 */
5177e6ad469SVishal Kulkarni 	bool		new_module;	/* ->OS Transceiver Module inserted */
5187e6ad469SVishal Kulkarni 	bool		redo_l1cfg;	/* ->CC redo current "sticky" L1 CFG */
5193dde7c95SVishal Kulkarni };
5203dde7c95SVishal Kulkarni 
5213dde7c95SVishal Kulkarni /*
5223dde7c95SVishal Kulkarni  * Partial EEPROM Vital Product Data structure.  Includes only the ID and
5233dde7c95SVishal Kulkarni  * VPD-R sections.
5243dde7c95SVishal Kulkarni  */
5253dde7c95SVishal Kulkarni struct t4_vpd_hdr {
5263dde7c95SVishal Kulkarni 	u8  id_tag;
5273dde7c95SVishal Kulkarni 	u8  id_len[2];
5283dde7c95SVishal Kulkarni 	u8  id_data[ID_LEN];
5293dde7c95SVishal Kulkarni 	u8  vpdr_tag;
5303dde7c95SVishal Kulkarni 	u8  vpdr_len[2];
53156b2bdd1SGireesh Nagabhushana };
53256b2bdd1SGireesh Nagabhushana 
5337e6ad469SVishal Kulkarni #if _KERNEL
53456b2bdd1SGireesh Nagabhushana #include "adapter.h"
53556b2bdd1SGireesh Nagabhushana 
53656b2bdd1SGireesh Nagabhushana #ifndef PCI_VENDOR_ID_CHELSIO
53756b2bdd1SGireesh Nagabhushana # define PCI_VENDOR_ID_CHELSIO 0x1425
53856b2bdd1SGireesh Nagabhushana #endif
53956b2bdd1SGireesh Nagabhushana 
54056b2bdd1SGireesh Nagabhushana #define for_each_port(adapter, iter) \
54156b2bdd1SGireesh Nagabhushana 	for (iter = 0; iter < (adapter)->params.nports; ++iter)
54256b2bdd1SGireesh Nagabhushana 
5437e6ad469SVishal Kulkarni int is_offload(const struct adapter *adap);
5447e6ad469SVishal Kulkarni unsigned int core_ticks_per_usec(const struct adapter *adap);
5457e6ad469SVishal Kulkarni unsigned int us_to_core_ticks(const struct adapter *adap,
5467e6ad469SVishal Kulkarni 					    unsigned int us);
5477e6ad469SVishal Kulkarni unsigned int dack_ticks_to_usec(const struct adapter *adap,
5487e6ad469SVishal Kulkarni 					      unsigned int ticks);
5493dde7c95SVishal Kulkarni void t4_set_reg_field(struct adapter *adap, unsigned int addr, u32 mask, u32 val);
5503dde7c95SVishal Kulkarni 
5513dde7c95SVishal Kulkarni void t4_record_mbox_marker(struct adapter *adapter,
5523dde7c95SVishal Kulkarni 			   const void *marker, unsigned int size);
5533dde7c95SVishal Kulkarni int t4_wr_mbox_meat_timeout(struct adapter *adap, int mbox, const void *cmd,
5543dde7c95SVishal Kulkarni 			    int size, void *rpl, bool sleep_ok, int timeout);
55556b2bdd1SGireesh Nagabhushana int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
55656b2bdd1SGireesh Nagabhushana 		    void *rpl, bool sleep_ok);
55756b2bdd1SGireesh Nagabhushana 
5587e6ad469SVishal Kulkarni int t4_wr_mbox_timeout(struct adapter *adap, int mbox,
5593dde7c95SVishal Kulkarni 				     const void *cmd, int size, void *rpl,
5607e6ad469SVishal Kulkarni 				     int timeout);
5617e6ad469SVishal Kulkarni int t4_wr_mbox(struct adapter *adap, int mbox, const void *cmd,
5627e6ad469SVishal Kulkarni 			     int size, void *rpl);
5637e6ad469SVishal Kulkarni int t4_wr_mbox_ns(struct adapter *adap, int mbox, const void *cmd,
5647e6ad469SVishal Kulkarni 				int size, void *rpl);
56556b2bdd1SGireesh Nagabhushana void t4_read_indirect(struct adapter *adap, unsigned int addr_reg,
56656b2bdd1SGireesh Nagabhushana 		      unsigned int data_reg, u32 *vals, unsigned int nregs,
56756b2bdd1SGireesh Nagabhushana 		      unsigned int start_idx);
56856b2bdd1SGireesh Nagabhushana void t4_write_indirect(struct adapter *adap, unsigned int addr_reg,
56956b2bdd1SGireesh Nagabhushana 		       unsigned int data_reg, const u32 *vals,
57056b2bdd1SGireesh Nagabhushana 		       unsigned int nregs, unsigned int start_idx);
57156b2bdd1SGireesh Nagabhushana 
5723dde7c95SVishal Kulkarni void t4_hw_pci_read_cfg4(adapter_t *adapter, int reg, u32 *val);
5733dde7c95SVishal Kulkarni 
57456b2bdd1SGireesh Nagabhushana struct fw_filter_wr;
57556b2bdd1SGireesh Nagabhushana 
57656b2bdd1SGireesh Nagabhushana void t4_intr_enable(struct adapter *adapter);
57756b2bdd1SGireesh Nagabhushana void t4_intr_disable(struct adapter *adapter);
57856b2bdd1SGireesh Nagabhushana int t4_slow_intr_handler(struct adapter *adapter);
57956b2bdd1SGireesh Nagabhushana 
58056b2bdd1SGireesh Nagabhushana int t4_hash_mac_addr(const u8 *addr);
5817e6ad469SVishal Kulkarni 
5826feac2e3SRahul Lakkireddy unsigned int t4_link_fwcap_to_speed(fw_port_cap32_t caps);
583*ece8d794SRobert Mustacchi fw_port_cap32_t t4_link_fwcap_to_fwspeed(fw_port_cap32_t acaps);
5846feac2e3SRahul Lakkireddy int t4_link_set_autoneg(struct port_info *pi, u8 autoneg,
5856feac2e3SRahul Lakkireddy 			fw_port_cap32_t *new_caps);
5866feac2e3SRahul Lakkireddy int t4_link_set_pause(struct port_info *pi, cc_pause_t pause,
5876feac2e3SRahul Lakkireddy 		      fw_port_cap32_t *new_caps);
5886feac2e3SRahul Lakkireddy int t4_link_set_fec(struct port_info *pi, cc_fec_t fec,
5896feac2e3SRahul Lakkireddy 		    fw_port_cap32_t *new_caps);
5906feac2e3SRahul Lakkireddy int t4_link_set_speed(struct port_info *pi, fw_port_cap32_t speed, u8 en,
5916feac2e3SRahul Lakkireddy 		      fw_port_cap32_t *new_caps);
5927e6ad469SVishal Kulkarni int t4_link_l1cfg_core(struct adapter *adapter, unsigned int mbox,
5937e6ad469SVishal Kulkarni 		       unsigned int port, struct link_config *lc,
5946feac2e3SRahul Lakkireddy 		       fw_port_cap32_t rcap, bool sleep_ok, int timeout);
t4_link_l1cfg(struct adapter * adapter,unsigned int mbox,unsigned int port,struct link_config * lc,fw_port_cap32_t rcap)5957e6ad469SVishal Kulkarni static inline int t4_link_l1cfg(struct adapter *adapter, unsigned int mbox,
5966feac2e3SRahul Lakkireddy 				unsigned int port, struct link_config *lc,
5976feac2e3SRahul Lakkireddy 				fw_port_cap32_t rcap)
5987e6ad469SVishal Kulkarni {
5996feac2e3SRahul Lakkireddy 	return t4_link_l1cfg_core(adapter, mbox, port, lc, rcap,
6007e6ad469SVishal Kulkarni 				  true, FW_CMD_MAX_TIMEOUT);
6017e6ad469SVishal Kulkarni }
t4_link_l1cfg_ns(struct adapter * adapter,unsigned int mbox,unsigned int port,struct link_config * lc,fw_port_cap32_t rcap)6027e6ad469SVishal Kulkarni static inline int t4_link_l1cfg_ns(struct adapter *adapter, unsigned int mbox,
6036feac2e3SRahul Lakkireddy 				   unsigned int port, struct link_config *lc,
6046feac2e3SRahul Lakkireddy 				   fw_port_cap32_t rcap)
6057e6ad469SVishal Kulkarni {
6066feac2e3SRahul Lakkireddy 	return t4_link_l1cfg_core(adapter, mbox, port, lc, rcap,
6077e6ad469SVishal Kulkarni 				  false, FW_CMD_MAX_TIMEOUT);
6087e6ad469SVishal Kulkarni }
6097e6ad469SVishal Kulkarni 
61056b2bdd1SGireesh Nagabhushana int t4_restart_aneg(struct adapter *adap, unsigned int mbox, unsigned int port);
61156b2bdd1SGireesh Nagabhushana int t4_seeprom_read(struct adapter *adapter, u32 addr, u32 *data);
61256b2bdd1SGireesh Nagabhushana int t4_seeprom_write(struct adapter *adapter, u32 addr, u32 data);
61356b2bdd1SGireesh Nagabhushana int t4_eeprom_ptov(unsigned int phys_addr, unsigned int fn, unsigned int sz);
61456b2bdd1SGireesh Nagabhushana int t4_seeprom_wp(struct adapter *adapter, int enable);
6153dde7c95SVishal Kulkarni int t4_get_raw_vpd_params(struct adapter *adapter, struct vpd_params *p);
6163dde7c95SVishal Kulkarni int t4_get_vpd_params(struct adapter *adapter, struct vpd_params *p);
6177e6ad469SVishal Kulkarni int t4_get_pfres(struct adapter *adapter);
6183dde7c95SVishal Kulkarni int t4_read_flash(struct adapter *adapter, unsigned int addr, unsigned int nwords,
6193dde7c95SVishal Kulkarni 		  u32 *data, int byte_oriented);
6203dde7c95SVishal Kulkarni int t4_write_flash(struct adapter *adapter, unsigned int addr,
6213dde7c95SVishal Kulkarni 		   unsigned int n, const u8 *data, int byte_oriented);
6223dde7c95SVishal Kulkarni int t4_load_fw(struct adapter *adapter, const u8 *fw_data, unsigned int size,
6233dde7c95SVishal Kulkarni 	       unsigned int bootstrap);
6243dde7c95SVishal Kulkarni int t4_load_phy_fw(struct adapter *adap,
6253dde7c95SVishal Kulkarni 		   int win, t4_os_lock_t *lock,
6263dde7c95SVishal Kulkarni 		   int (*phy_fw_version)(const u8 *, size_t),
6273dde7c95SVishal Kulkarni 		   const u8 *phy_fw_data, size_t phy_fw_size);
6283dde7c95SVishal Kulkarni int t4_phy_fw_ver(struct adapter *adap, int *phy_fw_ver);
6293dde7c95SVishal Kulkarni int t4_fwcache(struct adapter *adap, enum fw_params_param_dev_fwcache op);
6303dde7c95SVishal Kulkarni int t5_fw_init_extern_mem(struct adapter *adap);
6313dde7c95SVishal Kulkarni #ifdef CHELSIO_T4_DIAGS
6323dde7c95SVishal Kulkarni int t4_erase_sf(struct adapter *adapter);
6333dde7c95SVishal Kulkarni #endif
6343dde7c95SVishal Kulkarni int t4_load_bootcfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size);
6357e6ad469SVishal Kulkarni int t4_read_bootcfg(struct adapter *adap, u8 *cfg_data, unsigned int size);
6363dde7c95SVishal Kulkarni int t4_load_boot(struct adapter *adap, u8 *boot_data,
6373dde7c95SVishal Kulkarni                  unsigned int boot_addr, unsigned int size);
6383dde7c95SVishal Kulkarni int t4_flash_erase_sectors(struct adapter *adapter, int start, int end);
639de483253SVishal Kulkarni int t4_flash_cfg_addr(struct adapter *adapter);
6403dde7c95SVishal Kulkarni int t4_check_fw_version(struct adapter *adap);
64156b2bdd1SGireesh Nagabhushana int t4_load_cfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size);
64256b2bdd1SGireesh Nagabhushana int t4_get_fw_version(struct adapter *adapter, u32 *vers);
6433dde7c95SVishal Kulkarni int t4_get_bs_version(struct adapter *adapter, u32 *vers);
64456b2bdd1SGireesh Nagabhushana int t4_get_tp_version(struct adapter *adapter, u32 *vers);
6453dde7c95SVishal Kulkarni int t4_get_exprom_version(struct adapter *adapter, u32 *vers);
6463dde7c95SVishal Kulkarni int t4_get_scfg_version(struct adapter *adapter, u32 *vers);
6473dde7c95SVishal Kulkarni int t4_get_vpd_version(struct adapter *adapter, u32 *vers);
6483dde7c95SVishal Kulkarni int t4_get_version_info(struct adapter *adapter);
6493dde7c95SVishal Kulkarni void t4_dump_version_info(struct adapter *adapter);
6503dde7c95SVishal Kulkarni int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info,
6513dde7c95SVishal Kulkarni 	       const u8 *fw_data, unsigned int fw_size,
6523dde7c95SVishal Kulkarni 	       struct fw_hdr *card_fw, const int t4_fw_install,
6533dde7c95SVishal Kulkarni 	       enum dev_state state, int *reset);
6543dde7c95SVishal Kulkarni int t4_wait_dev_ready(struct adapter *adapter);
6553dde7c95SVishal Kulkarni enum chip_type t4_get_chip_type(struct adapter *adap, int ver);
6563dde7c95SVishal Kulkarni int t4_prep_adapter(struct adapter *adapter, bool reset);
6573dde7c95SVishal Kulkarni int t4_prep_pf(struct adapter *adapter);
6583dde7c95SVishal Kulkarni int t4_prep_master_pf(struct adapter *adapter);
6593dde7c95SVishal Kulkarni int t4_shutdown_adapter(struct adapter *adapter);
6603dde7c95SVishal Kulkarni 
6613dde7c95SVishal Kulkarni enum t4_bar2_qtype { T4_BAR2_QTYPE_EGRESS, T4_BAR2_QTYPE_INGRESS };
6623dde7c95SVishal Kulkarni int t4_bar2_sge_qregs(struct adapter *adapter,
6633dde7c95SVishal Kulkarni 		      unsigned int qid,
6643dde7c95SVishal Kulkarni 		      enum t4_bar2_qtype qtype,
6653dde7c95SVishal Kulkarni 		      int user,
6663dde7c95SVishal Kulkarni 		      u64 *pbar2_qoffset,
6673dde7c95SVishal Kulkarni 		      unsigned int *pbar2_qid);
6683dde7c95SVishal Kulkarni 
6693dde7c95SVishal Kulkarni int t4_init_devlog_params(struct adapter *adapter, int fw_attach);
6703dde7c95SVishal Kulkarni int t4_init_sge_params(struct adapter *adapter);
6713dde7c95SVishal Kulkarni int t4_init_tp_params(struct adapter *adap, bool sleep_ok);
6723dde7c95SVishal Kulkarni int t4_filter_field_shift(const struct adapter *adap, int filter_sel);
6733dde7c95SVishal Kulkarni int t4_create_filter_info(const struct adapter *adapter,
6743dde7c95SVishal Kulkarni 			  u64 *filter_value, u64 *filter_mask,
6753dde7c95SVishal Kulkarni 			  int fcoe, int port, int vnic_id,
6763dde7c95SVishal Kulkarni 			  int vlan, int vlan_pcp, int vlan_dei,
6773dde7c95SVishal Kulkarni 			  int tos, int protocol, int ethertype,
6783dde7c95SVishal Kulkarni 			  int macmatch, int mpshittype, int fragmentation);
6793dde7c95SVishal Kulkarni int t4_init_rss_mode(struct adapter *adap, int mbox);
6807e6ad469SVishal Kulkarni int t4_init_portinfo_viid(struct port_info *pi, int mbox,
6817e6ad469SVishal Kulkarni 		     int port, int pf, int vf, u8 mac[], bool alloc_vi);
6823dde7c95SVishal Kulkarni int t4_init_portinfo(struct port_info *pi, int mbox,
6833dde7c95SVishal Kulkarni 		     int port, int pf, int vf, u8 mac[]);
6843dde7c95SVishal Kulkarni int t4_port_init(struct adapter *adap, int mbox, int pf, int vf);
6857e6ad469SVishal Kulkarni int t4_mirror_init(struct adapter *adap, int mbox, int pf, int vf,
6867e6ad469SVishal Kulkarni 		   bool enable_mirror);
68756b2bdd1SGireesh Nagabhushana void t4_fatal_err(struct adapter *adapter);
6883dde7c95SVishal Kulkarni void t4_db_full(struct adapter *adapter);
6893dde7c95SVishal Kulkarni void t4_db_dropped(struct adapter *adapter);
69056b2bdd1SGireesh Nagabhushana int t4_set_trace_filter(struct adapter *adapter, const struct trace_params *tp,
69156b2bdd1SGireesh Nagabhushana 			int filter_index, int enable);
69256b2bdd1SGireesh Nagabhushana void t4_get_trace_filter(struct adapter *adapter, struct trace_params *tp,
69356b2bdd1SGireesh Nagabhushana 			 int filter_index, int *enabled);
6947e6ad469SVishal Kulkarni unsigned int t4_chip_rss_size(struct adapter *adapter);
69556b2bdd1SGireesh Nagabhushana int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid,
69656b2bdd1SGireesh Nagabhushana 			int start, int n, const u16 *rspq, unsigned int nrspq);
69756b2bdd1SGireesh Nagabhushana int t4_config_glbl_rss(struct adapter *adapter, int mbox, unsigned int mode,
69856b2bdd1SGireesh Nagabhushana 		       unsigned int flags);
69956b2bdd1SGireesh Nagabhushana int t4_config_vi_rss(struct adapter *adapter, int mbox, unsigned int viid,
7003dde7c95SVishal Kulkarni 		     unsigned int flags, unsigned int defq, unsigned int skeyidx,
7013dde7c95SVishal Kulkarni 		     unsigned int skey);
70256b2bdd1SGireesh Nagabhushana int t4_read_rss(struct adapter *adapter, u16 *entries);
7033dde7c95SVishal Kulkarni void t4_read_rss_key(struct adapter *adapter, u32 *key, bool sleep_ok);
7043dde7c95SVishal Kulkarni void t4_write_rss_key(struct adapter *adap, const u32 *key, int idx,
7053dde7c95SVishal Kulkarni 		      bool sleep_ok);
70656b2bdd1SGireesh Nagabhushana void t4_read_rss_pf_config(struct adapter *adapter, unsigned int index,
7073dde7c95SVishal Kulkarni 			   u32 *valp, bool sleep_ok);
70856b2bdd1SGireesh Nagabhushana void t4_write_rss_pf_config(struct adapter *adapter, unsigned int index,
7093dde7c95SVishal Kulkarni 			    u32 val, bool sleep_ok);
71056b2bdd1SGireesh Nagabhushana void t4_read_rss_vf_config(struct adapter *adapter, unsigned int index,
7113dde7c95SVishal Kulkarni 			   u32 *vfl, u32 *vfh, bool sleep_ok);
7123dde7c95SVishal Kulkarni u32 t4_read_rss_pf_map(struct adapter *adapter, bool sleep_ok);
7133dde7c95SVishal Kulkarni u32 t4_read_rss_pf_mask(struct adapter *adapter, bool sleep_ok);
7143dde7c95SVishal Kulkarni unsigned int t4_get_mps_bg_map(struct adapter *adapter, int pidx);
7153dde7c95SVishal Kulkarni unsigned int t4_get_tp_e2c_map(struct adapter *adapter, int pidx);
7163dde7c95SVishal Kulkarni unsigned int t4_get_tp_ch_map(struct adapter *adapter, int pidx);
71756b2bdd1SGireesh Nagabhushana int t4_mps_set_active_ports(struct adapter *adap, unsigned int port_mask);
7183dde7c95SVishal Kulkarni int t4_read_tcb(struct adapter *adap, int win, int tid, u32 tcb[TCB_SIZE/4]);
71956b2bdd1SGireesh Nagabhushana void t4_pmtx_get_stats(struct adapter *adap, u32 cnt[], u64 cycles[]);
72056b2bdd1SGireesh Nagabhushana void t4_pmrx_get_stats(struct adapter *adap, u32 cnt[], u64 cycles[]);
72156b2bdd1SGireesh Nagabhushana void t4_read_cimq_cfg(struct adapter *adap, u16 *base, u16 *size, u16 *thres);
7223dde7c95SVishal Kulkarni int t4_read_cim_ibq(struct adapter *adap, unsigned int qid, u32 *data, size_t n);
7233dde7c95SVishal Kulkarni int t4_read_cim_obq(struct adapter *adap, unsigned int qid, u32 *data, size_t n);
72456b2bdd1SGireesh Nagabhushana int t4_cim_read(struct adapter *adap, unsigned int addr, unsigned int n,
72556b2bdd1SGireesh Nagabhushana 		unsigned int *valp);
72656b2bdd1SGireesh Nagabhushana int t4_cim_write(struct adapter *adap, unsigned int addr, unsigned int n,
72756b2bdd1SGireesh Nagabhushana 		 const unsigned int *valp);
72856b2bdd1SGireesh Nagabhushana int t4_cim_read_la(struct adapter *adap, u32 *la_buf, unsigned int *wrptr);
72956b2bdd1SGireesh Nagabhushana void t4_cim_read_pif_la(struct adapter *adap, u32 *pif_req, u32 *pif_rsp,
73056b2bdd1SGireesh Nagabhushana 		unsigned int *pif_req_wrptr, unsigned int *pif_rsp_wrptr);
73156b2bdd1SGireesh Nagabhushana void t4_cim_read_ma_la(struct adapter *adap, u32 *ma_req, u32 *ma_rsp);
7323dde7c95SVishal Kulkarni int t4_get_flash_params(struct adapter *adapter);
73356b2bdd1SGireesh Nagabhushana 
7343dde7c95SVishal Kulkarni u32 t4_read_pcie_cfg4(struct adapter *adap, int reg, int drv_fw_attach);
7353dde7c95SVishal Kulkarni int t4_get_util_window(struct adapter *adap, int drv_fw_attach);
7363dde7c95SVishal Kulkarni void t4_setup_memwin(struct adapter *adap, u32 memwin_base, u32 window);
7373dde7c95SVishal Kulkarni void t4_idma_monitor_init(struct adapter *adapter,
7383dde7c95SVishal Kulkarni 			  struct sge_idma_monitor_state *idma);
7393dde7c95SVishal Kulkarni void t4_idma_monitor(struct adapter *adapter,
7403dde7c95SVishal Kulkarni 		     struct sge_idma_monitor_state *idma,
7413dde7c95SVishal Kulkarni 		     int hz, int ticks);
7423dde7c95SVishal Kulkarni int t4_set_vf_mac_acl(struct adapter *adapter, unsigned int vf,
7433dde7c95SVishal Kulkarni 		      unsigned int naddr, u8 *addr);
7443dde7c95SVishal Kulkarni 
7453dde7c95SVishal Kulkarni #define T4_MEMORY_WRITE	0
7463dde7c95SVishal Kulkarni #define T4_MEMORY_READ	1
7473dde7c95SVishal Kulkarni int t4_memory_rw_addr(struct adapter *adap, int win,
7483dde7c95SVishal Kulkarni 		      u32 addr, u32 len,
7493dde7c95SVishal Kulkarni 		      void *hbuf, int dir);
7503dde7c95SVishal Kulkarni int t4_memory_rw_mtype(struct adapter *adap, int win,
7513dde7c95SVishal Kulkarni 		       int mtype, u32 maddr, u32 len,
7523dde7c95SVishal Kulkarni 		       void *hbuf, int dir);
7533dde7c95SVishal Kulkarni 
7547e6ad469SVishal Kulkarni int t4_memory_rw(struct adapter *adap, int win,
7553dde7c95SVishal Kulkarni 			       int mtype, u32 maddr, u32 len,
7567e6ad469SVishal Kulkarni 			       void *hbuf, int dir);
7577e6ad469SVishal Kulkarni int hash_mac_addr(const u8 *addr);
7583dde7c95SVishal Kulkarni 
7597e6ad469SVishal Kulkarni bool t4_is_inserted_mod_type(unsigned int fw_mod_type);
7603dde7c95SVishal Kulkarni extern unsigned int t4_get_regs_len(struct adapter *adapter);
7613dde7c95SVishal Kulkarni extern void t4_get_regs(struct adapter *adap, void *buf, size_t buf_size);
7623dde7c95SVishal Kulkarni 
7633dde7c95SVishal Kulkarni const char *t4_get_port_type_description(enum fw_port_type port_type);
76456b2bdd1SGireesh Nagabhushana void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p);
765de483253SVishal Kulkarni void t4_get_port_stats_offset(struct adapter *adap, int idx,
766de483253SVishal Kulkarni 		struct port_stats *stats,
767de483253SVishal Kulkarni 		struct port_stats *offset);
76856b2bdd1SGireesh Nagabhushana void t4_get_lb_stats(struct adapter *adap, int idx, struct lb_port_stats *p);
76956b2bdd1SGireesh Nagabhushana void t4_clr_port_stats(struct adapter *adap, int idx);
77056b2bdd1SGireesh Nagabhushana 
77156b2bdd1SGireesh Nagabhushana void t4_read_mtu_tbl(struct adapter *adap, u16 *mtus, u8 *mtu_log);
77256b2bdd1SGireesh Nagabhushana void t4_read_cong_tbl(struct adapter *adap, u16 incr[NMTUS][NCCTRL_WIN]);
77356b2bdd1SGireesh Nagabhushana void t4_read_pace_tbl(struct adapter *adap, unsigned int pace_vals[NTX_SCHED]);
7743dde7c95SVishal Kulkarni void t4_get_tx_sched(struct adapter *adap, unsigned int sched, unsigned int *kbps,
7753dde7c95SVishal Kulkarni 		     unsigned int *ipg, bool sleep_ok);
77656b2bdd1SGireesh Nagabhushana void t4_tp_wr_bits_indirect(struct adapter *adap, unsigned int addr,
77756b2bdd1SGireesh Nagabhushana 			    unsigned int mask, unsigned int val);
77856b2bdd1SGireesh Nagabhushana void t4_tp_read_la(struct adapter *adap, u64 *la_buf, unsigned int *wrptr);
7793dde7c95SVishal Kulkarni void t4_tp_get_err_stats(struct adapter *adap, struct tp_err_stats *st,
7803dde7c95SVishal Kulkarni 			 bool sleep_ok);
7813dde7c95SVishal Kulkarni void t4_tp_get_cpl_stats(struct adapter *adap, struct tp_cpl_stats *st,
7823dde7c95SVishal Kulkarni 			 bool sleep_ok);
7833dde7c95SVishal Kulkarni void t4_tp_get_rdma_stats(struct adapter *adap, struct tp_rdma_stats *st,
7843dde7c95SVishal Kulkarni 			  bool sleep_ok);
7853dde7c95SVishal Kulkarni void t4_get_usm_stats(struct adapter *adap, struct tp_usm_stats *st,
7863dde7c95SVishal Kulkarni 		      bool sleep_ok);
78756b2bdd1SGireesh Nagabhushana void t4_tp_get_tcp_stats(struct adapter *adap, struct tp_tcp_stats *v4,
7883dde7c95SVishal Kulkarni 			 struct tp_tcp_stats *v6, bool sleep_ok);
78956b2bdd1SGireesh Nagabhushana void t4_get_fcoe_stats(struct adapter *adap, unsigned int idx,
7903dde7c95SVishal Kulkarni 		       struct tp_fcoe_stats *st, bool sleep_ok);
79156b2bdd1SGireesh Nagabhushana void t4_load_mtus(struct adapter *adap, const unsigned short *mtus,
79256b2bdd1SGireesh Nagabhushana 		  const unsigned short *alpha, const unsigned short *beta);
79356b2bdd1SGireesh Nagabhushana 
79456b2bdd1SGireesh Nagabhushana void t4_ulprx_read_la(struct adapter *adap, u32 *la_buf);
79556b2bdd1SGireesh Nagabhushana 
79656b2bdd1SGireesh Nagabhushana void t4_get_chan_txrate(struct adapter *adap, u64 *nic_rate, u64 *ofld_rate);
7973dde7c95SVishal Kulkarni int t4_set_filter_mode(struct adapter *adap, unsigned int mode_map,
7983dde7c95SVishal Kulkarni 		       bool sleep_ok);
7993dde7c95SVishal Kulkarni void t4_mk_filtdelwr(unsigned int ftid, struct fw_filter_wr *wr,
8003dde7c95SVishal Kulkarni 		     int rqtype, int qid);
80156b2bdd1SGireesh Nagabhushana 
80256b2bdd1SGireesh Nagabhushana int t4_fw_hello(struct adapter *adap, unsigned int mbox, unsigned int evt_mbox,
80356b2bdd1SGireesh Nagabhushana 		enum dev_master master, enum dev_state *state);
80456b2bdd1SGireesh Nagabhushana int t4_fw_bye(struct adapter *adap, unsigned int mbox);
80556b2bdd1SGireesh Nagabhushana int t4_fw_reset(struct adapter *adap, unsigned int mbox, int reset);
806de483253SVishal Kulkarni int t4_fw_upgrade(struct adapter *adap, unsigned int mbox,
807de483253SVishal Kulkarni 		  const u8 *fw_data, unsigned int size, int force);
8083dde7c95SVishal Kulkarni int t4_fl_pkt_align(struct adapter *adap, bool is_packed);
8093dde7c95SVishal Kulkarni int t4_fixup_host_params_compat(struct adapter *adap, unsigned int page_size,
8103dde7c95SVishal Kulkarni 				unsigned int cache_line_size,
8113dde7c95SVishal Kulkarni 				enum chip_type chip_compat);
8123dde7c95SVishal Kulkarni int t4_fixup_host_params(struct adapter *adap, unsigned int page_size,
8133dde7c95SVishal Kulkarni 			 unsigned int cache_line_size);
814de483253SVishal Kulkarni int t4_fw_initialize(struct adapter *adap, unsigned int mbox);
81556b2bdd1SGireesh Nagabhushana int t4_query_params(struct adapter *adap, unsigned int mbox, unsigned int pf,
8163dde7c95SVishal Kulkarni 		    unsigned int vf, unsigned int nparams, const u32 *params,
8173dde7c95SVishal Kulkarni 		    u32 *val);
8183dde7c95SVishal Kulkarni int t4_query_params_ns(struct adapter *adap, unsigned int mbox, unsigned int pf,
8193dde7c95SVishal Kulkarni 		       unsigned int vf, unsigned int nparams, const u32 *params,
8203dde7c95SVishal Kulkarni 		       u32 *val);
8213dde7c95SVishal Kulkarni int t4_query_params_rw(struct adapter *adap, unsigned int mbox, unsigned int pf,
8223dde7c95SVishal Kulkarni 		       unsigned int vf, unsigned int nparams, const u32 *params,
8233dde7c95SVishal Kulkarni 		       u32 *val, int rw, bool sleep_ok);
8243dde7c95SVishal Kulkarni int t4_set_params_timeout(struct adapter *adap, unsigned int mbox,
8253dde7c95SVishal Kulkarni 			  unsigned int pf, unsigned int vf,
8263dde7c95SVishal Kulkarni 			  unsigned int nparams, const u32 *params,
8273dde7c95SVishal Kulkarni 			  const u32 *val, int timeout);
82856b2bdd1SGireesh Nagabhushana int t4_set_params(struct adapter *adap, unsigned int mbox, unsigned int pf,
82956b2bdd1SGireesh Nagabhushana 		  unsigned int vf, unsigned int nparams, const u32 *params,
83056b2bdd1SGireesh Nagabhushana 		  const u32 *val);
83156b2bdd1SGireesh Nagabhushana int t4_cfg_pfvf(struct adapter *adap, unsigned int mbox, unsigned int pf,
83256b2bdd1SGireesh Nagabhushana 		unsigned int vf, unsigned int txq, unsigned int txq_eth_ctrl,
8333dde7c95SVishal Kulkarni 		unsigned int rxqi, unsigned int rxq, unsigned int tc,
8343dde7c95SVishal Kulkarni 		unsigned int vi, unsigned int cmask, unsigned int pmask,
8353dde7c95SVishal Kulkarni 		unsigned int exactf, unsigned int rcaps, unsigned int wxcaps);
836de483253SVishal Kulkarni int t4_alloc_vi_func(struct adapter *adap, unsigned int mbox,
837de483253SVishal Kulkarni 		     unsigned int port, unsigned int pf, unsigned int vf,
838de483253SVishal Kulkarni 		     unsigned int nmac, u8 *mac, unsigned int *rss_size,
8397e6ad469SVishal Kulkarni 		     u8 *vivld, u8 *vin,
840de483253SVishal Kulkarni 		     unsigned int portfunc, unsigned int idstype);
84156b2bdd1SGireesh Nagabhushana int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port,
84256b2bdd1SGireesh Nagabhushana 		unsigned int pf, unsigned int vf, unsigned int nmac, u8 *mac,
8437e6ad469SVishal Kulkarni 		unsigned int *rss_size, u8 *vivld, u8 *vin);
84456b2bdd1SGireesh Nagabhushana int t4_free_vi(struct adapter *adap, unsigned int mbox,
8453dde7c95SVishal Kulkarni 	       unsigned int pf, unsigned int vf,
8463dde7c95SVishal Kulkarni 	       unsigned int viid);
84756b2bdd1SGireesh Nagabhushana int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid,
84856b2bdd1SGireesh Nagabhushana 		  int mtu, int promisc, int all_multi, int bcast, int vlanex,
84956b2bdd1SGireesh Nagabhushana 		  bool sleep_ok);
8503dde7c95SVishal Kulkarni int t4_alloc_mac_filt(struct adapter *adap, unsigned int mbox, unsigned int viid,
8513dde7c95SVishal Kulkarni 		      bool free, unsigned int naddr, const u8 **addr, u16 *idx,
8523dde7c95SVishal Kulkarni 		      u64 *hash, bool sleep_ok);
8533dde7c95SVishal Kulkarni int t4_free_mac_filt(struct adapter *adap, unsigned int mbox,
8543dde7c95SVishal Kulkarni 		      unsigned int viid, unsigned int naddr,
8553dde7c95SVishal Kulkarni 		      const u8 **addr, bool sleep_ok);
8567e6ad469SVishal Kulkarni int t4_free_encap_mac_filt(struct adapter *adap, unsigned int viid,
8577e6ad469SVishal Kulkarni 			   int idx, bool sleep_ok);
8587e6ad469SVishal Kulkarni int t4_free_raw_mac_filt(struct adapter *adap, unsigned int viid,
8597e6ad469SVishal Kulkarni 			 const u8 *addr, const u8 *mask, unsigned int idx,
8607e6ad469SVishal Kulkarni 			 u8 lookup_type, u8 port_id, bool sleep_ok);
8613dde7c95SVishal Kulkarni int t4_alloc_raw_mac_filt(struct adapter *adap, unsigned int viid,
8623dde7c95SVishal Kulkarni 			  const u8 *addr, const u8 *mask, unsigned int idx,
8637e6ad469SVishal Kulkarni 			  u8 lookup_type, u8 port_id, bool sleep_ok);
8647e6ad469SVishal Kulkarni int t4_alloc_encap_mac_filt(struct adapter *adap, unsigned int viid,
8657e6ad469SVishal Kulkarni 			    const u8 *addr, const u8 *mask, unsigned int vni,
8667e6ad469SVishal Kulkarni 			    unsigned int vni_mask, u8 dip_hit, u8 lookup_type,
8677e6ad469SVishal Kulkarni 			    bool sleep_ok);
86856b2bdd1SGireesh Nagabhushana int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
8697e6ad469SVishal Kulkarni 		  int idx, const u8 *addr, bool persist, u8 *smt_idx);
8707e6ad469SVishal Kulkarni int t4_del_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
8717e6ad469SVishal Kulkarni 	       const u8 *addr, bool smac);
8727e6ad469SVishal Kulkarni int t4_add_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
8737e6ad469SVishal Kulkarni 	       int idx, const u8 *addr, bool persist, u8 *smt_idx, bool smac);
87456b2bdd1SGireesh Nagabhushana int t4_set_addr_hash(struct adapter *adap, unsigned int mbox, unsigned int viid,
87556b2bdd1SGireesh Nagabhushana 		     bool ucast, u64 vec, bool sleep_ok);
8763dde7c95SVishal Kulkarni int t4_enable_vi_params(struct adapter *adap, unsigned int mbox,
8773dde7c95SVishal Kulkarni 			unsigned int viid, bool rx_en, bool tx_en, bool dcb_en);
8787e6ad469SVishal Kulkarni int t4_enable_pi_params(struct adapter *adap, unsigned int mbox,
8797e6ad469SVishal Kulkarni 			struct port_info *pi,
8807e6ad469SVishal Kulkarni 			bool rx_en, bool tx_en, bool dcb_en);
88156b2bdd1SGireesh Nagabhushana int t4_enable_vi(struct adapter *adap, unsigned int mbox, unsigned int viid,
88256b2bdd1SGireesh Nagabhushana 		 bool rx_en, bool tx_en);
88356b2bdd1SGireesh Nagabhushana int t4_identify_port(struct adapter *adap, unsigned int mbox, unsigned int viid,
88456b2bdd1SGireesh Nagabhushana 		     unsigned int nblinks);
88556b2bdd1SGireesh Nagabhushana int t4_mdio_rd(struct adapter *adap, unsigned int mbox, unsigned int phy_addr,
88656b2bdd1SGireesh Nagabhushana 	       unsigned int mmd, unsigned int reg, unsigned int *valp);
88756b2bdd1SGireesh Nagabhushana int t4_mdio_wr(struct adapter *adap, unsigned int mbox, unsigned int phy_addr,
88856b2bdd1SGireesh Nagabhushana 	       unsigned int mmd, unsigned int reg, unsigned int val);
8897e6ad469SVishal Kulkarni int t4_i2c_io(struct adapter *adap, unsigned int mbox,
8907e6ad469SVishal Kulkarni 	      int port, unsigned int devid,
8917e6ad469SVishal Kulkarni 	      unsigned int offset, unsigned int len,
8927e6ad469SVishal Kulkarni 	      u8 *buf, bool write);
8933dde7c95SVishal Kulkarni int t4_i2c_rd(struct adapter *adap, unsigned int mbox,
8943dde7c95SVishal Kulkarni 	      int port, unsigned int devid,
8953dde7c95SVishal Kulkarni 	      unsigned int offset, unsigned int len,
8963dde7c95SVishal Kulkarni 	      u8 *buf);
8973dde7c95SVishal Kulkarni int t4_i2c_wr(struct adapter *adap, unsigned int mbox,
8983dde7c95SVishal Kulkarni 	      int port, unsigned int devid,
8993dde7c95SVishal Kulkarni 	      unsigned int offset, unsigned int len,
9003dde7c95SVishal Kulkarni 	      u8 *buf);
9013dde7c95SVishal Kulkarni int t4_iq_stop(struct adapter *adap, unsigned int mbox, unsigned int pf,
9023dde7c95SVishal Kulkarni 	       unsigned int vf, unsigned int iqtype, unsigned int iqid,
9033dde7c95SVishal Kulkarni 	       unsigned int fl0id, unsigned int fl1id);
90456b2bdd1SGireesh Nagabhushana int t4_iq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
90556b2bdd1SGireesh Nagabhushana 	       unsigned int vf, unsigned int iqtype, unsigned int iqid,
90656b2bdd1SGireesh Nagabhushana 	       unsigned int fl0id, unsigned int fl1id);
90756b2bdd1SGireesh Nagabhushana int t4_eth_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
90856b2bdd1SGireesh Nagabhushana 		   unsigned int vf, unsigned int eqid);
90956b2bdd1SGireesh Nagabhushana int t4_ctrl_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
91056b2bdd1SGireesh Nagabhushana 		    unsigned int vf, unsigned int eqid);
91156b2bdd1SGireesh Nagabhushana int t4_ofld_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
91256b2bdd1SGireesh Nagabhushana 		    unsigned int vf, unsigned int eqid);
91356b2bdd1SGireesh Nagabhushana int t4_sge_ctxt_rd(struct adapter *adap, unsigned int mbox, unsigned int cid,
91456b2bdd1SGireesh Nagabhushana 		   enum ctxt_type ctype, u32 *data);
9153dde7c95SVishal Kulkarni int t4_sge_ctxt_rd_bd(struct adapter *adap, unsigned int cid, enum ctxt_type ctype,
9163dde7c95SVishal Kulkarni 		      u32 *data);
9177e6ad469SVishal Kulkarni int t4_sge_ctxt_flush(struct adapter *adap, unsigned int mbox, int ctxt_type);
9187e6ad469SVishal Kulkarni int t4_read_sge_dbqtimers(struct adapter *adap, unsigned int ndbqtimers,
9197e6ad469SVishal Kulkarni 			  u16 *dbqtimers);
9203dde7c95SVishal Kulkarni const char *t4_link_down_rc_str(unsigned char link_down_rc);
9213dde7c95SVishal Kulkarni void t4_handle_get_port_info(struct port_info *pi, const __be64 *rpl);
9223dde7c95SVishal Kulkarni int t4_update_port_info(struct port_info *pi);
9237e6ad469SVishal Kulkarni int t4_get_link_params(struct port_info *pi, unsigned int *link_okp,
9247e6ad469SVishal Kulkarni 		       unsigned int *speedp, unsigned int *mtup);
92556b2bdd1SGireesh Nagabhushana int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl);
9263dde7c95SVishal Kulkarni int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox, u32 addr, u32 val);
92756b2bdd1SGireesh Nagabhushana 
9283dde7c95SVishal Kulkarni int t4_sched_config(struct adapter *adapter, int type, int minmaxen);
9297e6ad469SVishal Kulkarni int t4_sched_params(struct adapter *adapter,
9307e6ad469SVishal Kulkarni 		    int channel, int cls,
9317e6ad469SVishal Kulkarni 		    int level, int mode, int type,
9327e6ad469SVishal Kulkarni 		    int rateunit, int ratemode,
9337e6ad469SVishal Kulkarni 		    int minrate, int maxrate, int weight,
9347e6ad469SVishal Kulkarni 		    int pktsize, int burstsize);
9357e6ad469SVishal Kulkarni int t4_read_sched_params(struct adapter *adapter,
9367e6ad469SVishal Kulkarni 			 int channel, int cls,
9377e6ad469SVishal Kulkarni 			 int *level, int *mode, int *type,
9387e6ad469SVishal Kulkarni 			 int *rateunit, int *ratemode,
9397e6ad469SVishal Kulkarni 			 int *minrate, int *maxrate, int *weight,
9407e6ad469SVishal Kulkarni 			 int *pktsize, int *burstsize);
9413dde7c95SVishal Kulkarni int t4_config_watchdog(struct adapter *adapter, unsigned int mbox,
9423dde7c95SVishal Kulkarni 		       unsigned int pf, unsigned int vf,
9433dde7c95SVishal Kulkarni 		       unsigned int timeout, unsigned int action);
9443dde7c95SVishal Kulkarni int t4_get_devlog_level(struct adapter *adapter, unsigned int *level);
9453dde7c95SVishal Kulkarni int t4_set_devlog_level(struct adapter *adapter, unsigned int level);
9463dde7c95SVishal Kulkarni 
9473dde7c95SVishal Kulkarni void t4_sge_decode_idma_state(struct adapter *adapter, int state);
9483dde7c95SVishal Kulkarni 
9493dde7c95SVishal Kulkarni void t4_tp_pio_read(struct adapter *adap, u32 *buff, u32 nregs,
9503dde7c95SVishal Kulkarni 		    u32 start_index, bool sleep_ok);
9513dde7c95SVishal Kulkarni void t4_tp_pio_write(struct adapter *adap, u32 *buff, u32 nregs,
9523dde7c95SVishal Kulkarni 		     u32 start_index, bool sleep_ok);
9533dde7c95SVishal Kulkarni void t4_tp_tm_pio_read(struct adapter *adap, u32 *buff, u32 nregs,
9543dde7c95SVishal Kulkarni 		       u32 start_index, bool sleep_ok);
9553dde7c95SVishal Kulkarni void t4_tp_mib_read(struct adapter *adap, u32 *buff, u32 nregs,
9563dde7c95SVishal Kulkarni 		    u32 start_index, bool sleep_ok);
9577e6ad469SVishal Kulkarni int t4_configure_ringbb(struct adapter *adap);
9587e6ad469SVishal Kulkarni int t4_configure_add_smac(struct adapter *adap);
9597e6ad469SVishal Kulkarni int t4_set_vlan_acl(struct adapter *adap, unsigned int mbox, unsigned int vf,
9607e6ad469SVishal Kulkarni 		    u16 vlan);
9617e6ad469SVishal Kulkarni #endif
9623dde7c95SVishal Kulkarni #ifdef __cplusplus
9633dde7c95SVishal Kulkarni }
9643dde7c95SVishal Kulkarni #endif
9653dde7c95SVishal Kulkarni #endif /* __CHELSIO_COMMON_H */
966