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