139651abdSSudarsana Reddy Kalluru /* QLogic qed NIC Driver
2e8f1cb50SMintz, Yuval  * Copyright (c) 2015-2017  QLogic Corporation
339651abdSSudarsana Reddy Kalluru  *
4e8f1cb50SMintz, Yuval  * This software is available to you under a choice of one of two
5e8f1cb50SMintz, Yuval  * licenses.  You may choose to be licensed under the terms of the GNU
6e8f1cb50SMintz, Yuval  * General Public License (GPL) Version 2, available from the file
7e8f1cb50SMintz, Yuval  * COPYING in the main directory of this source tree, or the
8e8f1cb50SMintz, Yuval  * OpenIB.org BSD license below:
9e8f1cb50SMintz, Yuval  *
10e8f1cb50SMintz, Yuval  *     Redistribution and use in source and binary forms, with or
11e8f1cb50SMintz, Yuval  *     without modification, are permitted provided that the following
12e8f1cb50SMintz, Yuval  *     conditions are met:
13e8f1cb50SMintz, Yuval  *
14e8f1cb50SMintz, Yuval  *      - Redistributions of source code must retain the above
15e8f1cb50SMintz, Yuval  *        copyright notice, this list of conditions and the following
16e8f1cb50SMintz, Yuval  *        disclaimer.
17e8f1cb50SMintz, Yuval  *
18e8f1cb50SMintz, Yuval  *      - Redistributions in binary form must reproduce the above
19e8f1cb50SMintz, Yuval  *        copyright notice, this list of conditions and the following
20e8f1cb50SMintz, Yuval  *        disclaimer in the documentation and /or other materials
21e8f1cb50SMintz, Yuval  *        provided with the distribution.
22e8f1cb50SMintz, Yuval  *
23e8f1cb50SMintz, Yuval  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24e8f1cb50SMintz, Yuval  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25e8f1cb50SMintz, Yuval  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26e8f1cb50SMintz, Yuval  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27e8f1cb50SMintz, Yuval  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28e8f1cb50SMintz, Yuval  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29e8f1cb50SMintz, Yuval  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30e8f1cb50SMintz, Yuval  * SOFTWARE.
3139651abdSSudarsana Reddy Kalluru  */
3239651abdSSudarsana Reddy Kalluru 
3339651abdSSudarsana Reddy Kalluru #ifndef _QED_DCBX_H
3439651abdSSudarsana Reddy Kalluru #define _QED_DCBX_H
3539651abdSSudarsana Reddy Kalluru #include <linux/types.h>
3639651abdSSudarsana Reddy Kalluru #include <linux/slab.h>
3739651abdSSudarsana Reddy Kalluru #include "qed.h"
3839651abdSSudarsana Reddy Kalluru #include "qed_hsi.h"
3939651abdSSudarsana Reddy Kalluru #include "qed_hw.h"
4039651abdSSudarsana Reddy Kalluru #include "qed_mcp.h"
4139651abdSSudarsana Reddy Kalluru #include "qed_reg_addr.h"
4239651abdSSudarsana Reddy Kalluru 
4339651abdSSudarsana Reddy Kalluru #define DCBX_CONFIG_MAX_APP_PROTOCOL    4
4439651abdSSudarsana Reddy Kalluru 
4539651abdSSudarsana Reddy Kalluru enum qed_mib_read_type {
4639651abdSSudarsana Reddy Kalluru 	QED_DCBX_OPERATIONAL_MIB,
4739651abdSSudarsana Reddy Kalluru 	QED_DCBX_REMOTE_MIB,
4839651abdSSudarsana Reddy Kalluru 	QED_DCBX_LOCAL_MIB,
4939651abdSSudarsana Reddy Kalluru 	QED_DCBX_REMOTE_LLDP_MIB,
5039651abdSSudarsana Reddy Kalluru 	QED_DCBX_LOCAL_LLDP_MIB
5139651abdSSudarsana Reddy Kalluru };
5239651abdSSudarsana Reddy Kalluru 
5339651abdSSudarsana Reddy Kalluru struct qed_dcbx_app_data {
5439651abdSSudarsana Reddy Kalluru 	bool enable;		/* DCB enabled */
55dfc268f6SSudarsana Reddy Kalluru 	u8 update;		/* Update indication */
5639651abdSSudarsana Reddy Kalluru 	u8 priority;		/* Priority */
5739651abdSSudarsana Reddy Kalluru 	u8 tc;			/* Traffic Class */
5839651abdSSudarsana Reddy Kalluru };
5939651abdSSudarsana Reddy Kalluru 
606ad8c632SSudarsana Reddy Kalluru #define QED_DCBX_VERSION_DISABLED       0
616ad8c632SSudarsana Reddy Kalluru #define QED_DCBX_VERSION_IEEE           1
626ad8c632SSudarsana Reddy Kalluru #define QED_DCBX_VERSION_CEE            2
636ad8c632SSudarsana Reddy Kalluru 
646ad8c632SSudarsana Reddy Kalluru struct qed_dcbx_set {
656ad8c632SSudarsana Reddy Kalluru #define QED_DCBX_OVERRIDE_STATE	        BIT(0)
666ad8c632SSudarsana Reddy Kalluru #define QED_DCBX_OVERRIDE_PFC_CFG       BIT(1)
676ad8c632SSudarsana Reddy Kalluru #define QED_DCBX_OVERRIDE_ETS_CFG       BIT(2)
686ad8c632SSudarsana Reddy Kalluru #define QED_DCBX_OVERRIDE_APP_CFG       BIT(3)
696ad8c632SSudarsana Reddy Kalluru #define QED_DCBX_OVERRIDE_DSCP_CFG      BIT(4)
706ad8c632SSudarsana Reddy Kalluru 	u32 override_flags;
716ad8c632SSudarsana Reddy Kalluru 	bool enabled;
726ad8c632SSudarsana Reddy Kalluru 	struct qed_dcbx_admin_params config;
736ad8c632SSudarsana Reddy Kalluru 	u32 ver_num;
746ad8c632SSudarsana Reddy Kalluru };
756ad8c632SSudarsana Reddy Kalluru 
7639651abdSSudarsana Reddy Kalluru struct qed_dcbx_results {
7739651abdSSudarsana Reddy Kalluru 	bool dcbx_enabled;
7839651abdSSudarsana Reddy Kalluru 	u8 pf_id;
7939651abdSSudarsana Reddy Kalluru 	struct qed_dcbx_app_data arr[DCBX_MAX_PROTOCOL_TYPE];
8039651abdSSudarsana Reddy Kalluru };
8139651abdSSudarsana Reddy Kalluru 
8239651abdSSudarsana Reddy Kalluru struct qed_dcbx_app_metadata {
8339651abdSSudarsana Reddy Kalluru 	enum dcbx_protocol_type id;
8439651abdSSudarsana Reddy Kalluru 	char *name;
8539651abdSSudarsana Reddy Kalluru 	enum qed_pci_personality personality;
8639651abdSSudarsana Reddy Kalluru };
8739651abdSSudarsana Reddy Kalluru 
8839651abdSSudarsana Reddy Kalluru struct qed_dcbx_info {
8939651abdSSudarsana Reddy Kalluru 	struct lldp_status_params_s lldp_remote[LLDP_MAX_LLDP_AGENTS];
9039651abdSSudarsana Reddy Kalluru 	struct lldp_config_params_s lldp_local[LLDP_MAX_LLDP_AGENTS];
9139651abdSSudarsana Reddy Kalluru 	struct dcbx_local_params local_admin;
9239651abdSSudarsana Reddy Kalluru 	struct qed_dcbx_results results;
9339651abdSSudarsana Reddy Kalluru 	struct dcbx_mib operational;
9439651abdSSudarsana Reddy Kalluru 	struct dcbx_mib remote;
956ad8c632SSudarsana Reddy Kalluru 	struct qed_dcbx_set set;
961e128c81SArun Easi 	struct qed_dcbx_get get;
9739651abdSSudarsana Reddy Kalluru 	u8 dcbx_cap;
9839651abdSSudarsana Reddy Kalluru };
9939651abdSSudarsana Reddy Kalluru 
10039651abdSSudarsana Reddy Kalluru struct qed_dcbx_mib_meta_data {
10139651abdSSudarsana Reddy Kalluru 	struct lldp_config_params_s *lldp_local;
10239651abdSSudarsana Reddy Kalluru 	struct lldp_status_params_s *lldp_remote;
10339651abdSSudarsana Reddy Kalluru 	struct dcbx_local_params *local_admin;
10439651abdSSudarsana Reddy Kalluru 	struct dcbx_mib *mib;
10539651abdSSudarsana Reddy Kalluru 	size_t size;
10639651abdSSudarsana Reddy Kalluru 	u32 addr;
10739651abdSSudarsana Reddy Kalluru };
10839651abdSSudarsana Reddy Kalluru 
1096ad8c632SSudarsana Reddy Kalluru #ifdef CONFIG_DCB
1106ad8c632SSudarsana Reddy Kalluru int qed_dcbx_get_config_params(struct qed_hwfn *, struct qed_dcbx_set *);
1116ad8c632SSudarsana Reddy Kalluru 
1126ad8c632SSudarsana Reddy Kalluru int qed_dcbx_config_params(struct qed_hwfn *,
1136ad8c632SSudarsana Reddy Kalluru 			   struct qed_ptt *, struct qed_dcbx_set *, bool);
1146ad8c632SSudarsana Reddy Kalluru #endif
1156ad8c632SSudarsana Reddy Kalluru 
11639651abdSSudarsana Reddy Kalluru /* QED local interface routines */
11739651abdSSudarsana Reddy Kalluru int
11839651abdSSudarsana Reddy Kalluru qed_dcbx_mib_update_event(struct qed_hwfn *,
11939651abdSSudarsana Reddy Kalluru 			  struct qed_ptt *, enum qed_mib_read_type);
12039651abdSSudarsana Reddy Kalluru 
12139651abdSSudarsana Reddy Kalluru int qed_dcbx_info_alloc(struct qed_hwfn *p_hwfn);
122270837b3Ssudarsana.kalluru@cavium.com void qed_dcbx_info_free(struct qed_hwfn *p_hwfn);
12339651abdSSudarsana Reddy Kalluru void qed_dcbx_set_pf_update_params(struct qed_dcbx_results *p_src,
12439651abdSSudarsana Reddy Kalluru 				   struct pf_update_ramrod_data *p_dest);
12539651abdSSudarsana Reddy Kalluru 
12639651abdSSudarsana Reddy Kalluru #endif
127