linux/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * QLogic qlcnic NIC Driver
   4 * Copyright (c)  2009-2013 QLogic Corporation
   5 */
   6
   7#ifndef __QLCNIC_DCBX_H
   8#define __QLCNIC_DCBX_H
   9
  10#define QLCNIC_DCB_STATE        0
  11#define QLCNIC_DCB_AEN_MODE     1
  12
  13#ifdef CONFIG_QLCNIC_DCB
  14int qlcnic_register_dcb(struct qlcnic_adapter *);
  15#else
  16static inline int qlcnic_register_dcb(struct qlcnic_adapter *adapter)
  17{ return 0; }
  18#endif
  19
  20struct qlcnic_dcb;
  21
  22struct qlcnic_dcb_ops {
  23        int (*query_hw_capability) (struct qlcnic_dcb *, char *);
  24        int (*get_hw_capability) (struct qlcnic_dcb *);
  25        int (*query_cee_param) (struct qlcnic_dcb *, char *, u8);
  26        void (*init_dcbnl_ops) (struct qlcnic_dcb *);
  27        void (*aen_handler) (struct qlcnic_dcb *, void *);
  28        int (*get_cee_cfg) (struct qlcnic_dcb *);
  29        void (*get_info) (struct qlcnic_dcb *);
  30        int (*attach) (struct qlcnic_dcb *);
  31        void (*free) (struct qlcnic_dcb *);
  32};
  33
  34struct qlcnic_dcb {
  35        struct qlcnic_dcb_mbx_params    *param;
  36        struct qlcnic_adapter           *adapter;
  37        struct delayed_work             aen_work;
  38        struct workqueue_struct         *wq;
  39        const struct qlcnic_dcb_ops     *ops;
  40        struct qlcnic_dcb_cfg           *cfg;
  41        unsigned long                   state;
  42};
  43
  44static inline void qlcnic_clear_dcb_ops(struct qlcnic_dcb *dcb)
  45{
  46        kfree(dcb);
  47}
  48
  49static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb)
  50{
  51        if (dcb && dcb->ops->get_hw_capability)
  52                return dcb->ops->get_hw_capability(dcb);
  53
  54        return 0;
  55}
  56
  57static inline void qlcnic_dcb_free(struct qlcnic_dcb *dcb)
  58{
  59        if (dcb && dcb->ops->free)
  60                dcb->ops->free(dcb);
  61}
  62
  63static inline int qlcnic_dcb_attach(struct qlcnic_dcb *dcb)
  64{
  65        if (dcb && dcb->ops->attach)
  66                return dcb->ops->attach(dcb);
  67
  68        return 0;
  69}
  70
  71static inline int
  72qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf)
  73{
  74        if (dcb && dcb->ops->query_hw_capability)
  75                return dcb->ops->query_hw_capability(dcb, buf);
  76
  77        return 0;
  78}
  79
  80static inline void qlcnic_dcb_get_info(struct qlcnic_dcb *dcb)
  81{
  82        if (dcb && dcb->ops->get_info)
  83                dcb->ops->get_info(dcb);
  84}
  85
  86static inline int
  87qlcnic_dcb_query_cee_param(struct qlcnic_dcb *dcb, char *buf, u8 type)
  88{
  89        if (dcb && dcb->ops->query_cee_param)
  90                return dcb->ops->query_cee_param(dcb, buf, type);
  91
  92        return 0;
  93}
  94
  95static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
  96{
  97        if (dcb && dcb->ops->get_cee_cfg)
  98                return dcb->ops->get_cee_cfg(dcb);
  99
 100        return 0;
 101}
 102
 103static inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb *dcb, void *msg)
 104{
 105        if (dcb && dcb->ops->aen_handler)
 106                dcb->ops->aen_handler(dcb, msg);
 107}
 108
 109static inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb *dcb)
 110{
 111        if (dcb && dcb->ops->init_dcbnl_ops)
 112                dcb->ops->init_dcbnl_ops(dcb);
 113}
 114
 115static inline void qlcnic_dcb_enable(struct qlcnic_dcb *dcb)
 116{
 117        if (dcb && qlcnic_dcb_attach(dcb))
 118                qlcnic_clear_dcb_ops(dcb);
 119}
 120#endif
 121