root/drivers/net/ethernet/qlogic/qed/qed_dcbx.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* QLogic qed NIC Driver
   2  * Copyright (c) 2015-2017  QLogic Corporation
   3  *
   4  * This software is available to you under a choice of one of two
   5  * licenses.  You may choose to be licensed under the terms of the GNU
   6  * General Public License (GPL) Version 2, available from the file
   7  * COPYING in the main directory of this source tree, or the
   8  * OpenIB.org BSD license below:
   9  *
  10  *     Redistribution and use in source and binary forms, with or
  11  *     without modification, are permitted provided that the following
  12  *     conditions are met:
  13  *
  14  *      - Redistributions of source code must retain the above
  15  *        copyright notice, this list of conditions and the following
  16  *        disclaimer.
  17  *
  18  *      - Redistributions in binary form must reproduce the above
  19  *        copyright notice, this list of conditions and the following
  20  *        disclaimer in the documentation and /or other materials
  21  *        provided with the distribution.
  22  *
  23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30  * SOFTWARE.
  31  */
  32 
  33 #ifndef _QED_DCBX_H
  34 #define _QED_DCBX_H
  35 #include <linux/types.h>
  36 #include <linux/slab.h>
  37 #include "qed.h"
  38 #include "qed_hsi.h"
  39 #include "qed_hw.h"
  40 #include "qed_mcp.h"
  41 #include "qed_reg_addr.h"
  42 
  43 #define DCBX_CONFIG_MAX_APP_PROTOCOL    4
  44 
  45 enum qed_mib_read_type {
  46         QED_DCBX_OPERATIONAL_MIB,
  47         QED_DCBX_REMOTE_MIB,
  48         QED_DCBX_LOCAL_MIB,
  49         QED_DCBX_REMOTE_LLDP_MIB,
  50         QED_DCBX_LOCAL_LLDP_MIB
  51 };
  52 
  53 struct qed_dcbx_app_data {
  54         bool enable;            /* DCB enabled */
  55         u8 update;              /* Update indication */
  56         u8 priority;            /* Priority */
  57         u8 tc;                  /* Traffic Class */
  58         bool dont_add_vlan0;    /* Do not insert a vlan tag with id 0 */
  59 };
  60 
  61 #define QED_DCBX_VERSION_DISABLED       0
  62 #define QED_DCBX_VERSION_IEEE           1
  63 #define QED_DCBX_VERSION_CEE            2
  64 
  65 struct qed_dcbx_set {
  66 #define QED_DCBX_OVERRIDE_STATE         BIT(0)
  67 #define QED_DCBX_OVERRIDE_PFC_CFG       BIT(1)
  68 #define QED_DCBX_OVERRIDE_ETS_CFG       BIT(2)
  69 #define QED_DCBX_OVERRIDE_APP_CFG       BIT(3)
  70 #define QED_DCBX_OVERRIDE_DSCP_CFG      BIT(4)
  71         u32 override_flags;
  72         bool enabled;
  73         struct qed_dcbx_admin_params config;
  74         u32 ver_num;
  75 };
  76 
  77 struct qed_dcbx_results {
  78         bool dcbx_enabled;
  79         u8 pf_id;
  80         struct qed_dcbx_app_data arr[DCBX_MAX_PROTOCOL_TYPE];
  81 };
  82 
  83 struct qed_dcbx_app_metadata {
  84         enum dcbx_protocol_type id;
  85         char *name;
  86         enum qed_pci_personality personality;
  87 };
  88 
  89 struct qed_dcbx_info {
  90         struct lldp_status_params_s lldp_remote[LLDP_MAX_LLDP_AGENTS];
  91         struct lldp_config_params_s lldp_local[LLDP_MAX_LLDP_AGENTS];
  92         struct dcbx_local_params local_admin;
  93         struct qed_dcbx_results results;
  94         struct dcbx_mib operational;
  95         struct dcbx_mib remote;
  96         struct qed_dcbx_set set;
  97         struct qed_dcbx_get get;
  98         u8 dcbx_cap;
  99 };
 100 
 101 struct qed_dcbx_mib_meta_data {
 102         struct lldp_config_params_s *lldp_local;
 103         struct lldp_status_params_s *lldp_remote;
 104         struct dcbx_local_params *local_admin;
 105         struct dcbx_mib *mib;
 106         size_t size;
 107         u32 addr;
 108 };
 109 
 110 #ifdef CONFIG_DCB
 111 int qed_dcbx_get_config_params(struct qed_hwfn *, struct qed_dcbx_set *);
 112 
 113 int qed_dcbx_config_params(struct qed_hwfn *,
 114                            struct qed_ptt *, struct qed_dcbx_set *, bool);
 115 #endif
 116 
 117 /* QED local interface routines */
 118 int
 119 qed_dcbx_mib_update_event(struct qed_hwfn *,
 120                           struct qed_ptt *, enum qed_mib_read_type);
 121 
 122 int qed_dcbx_info_alloc(struct qed_hwfn *p_hwfn);
 123 void qed_dcbx_info_free(struct qed_hwfn *p_hwfn);
 124 void qed_dcbx_set_pf_update_params(struct qed_dcbx_results *p_src,
 125                                    struct pf_update_ramrod_data *p_dest);
 126 
 127 #define QED_DCBX_DEFAULT_TC     0
 128 
 129 u8 qed_dcbx_get_priority_tc(struct qed_hwfn *p_hwfn, u8 pri);
 130 #endif

/* [<][>][^][v][top][bottom][index][help] */