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 int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb) 45{ 46 if (dcb && dcb->ops->get_hw_capability) 47 return dcb->ops->get_hw_capability(dcb); 48 49 return -EOPNOTSUPP; 50} 51 52static inline void qlcnic_dcb_free(struct qlcnic_dcb *dcb) 53{ 54 if (dcb && dcb->ops->free) 55 dcb->ops->free(dcb); 56} 57 58static inline int qlcnic_dcb_attach(struct qlcnic_dcb *dcb) 59{ 60 if (dcb && dcb->ops->attach) 61 return dcb->ops->attach(dcb); 62 63 return -EOPNOTSUPP; 64} 65 66static inline int 67qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf) 68{ 69 if (dcb && dcb->ops->query_hw_capability) 70 return dcb->ops->query_hw_capability(dcb, buf); 71 72 return -EOPNOTSUPP; 73} 74 75static inline void qlcnic_dcb_get_info(struct qlcnic_dcb *dcb) 76{ 77 if (dcb && dcb->ops->get_info) 78 dcb->ops->get_info(dcb); 79} 80 81static inline int 82qlcnic_dcb_query_cee_param(struct qlcnic_dcb *dcb, char *buf, u8 type) 83{ 84 if (dcb && dcb->ops->query_cee_param) 85 return dcb->ops->query_cee_param(dcb, buf, type); 86 87 return -EOPNOTSUPP; 88} 89 90static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb) 91{ 92 if (dcb && dcb->ops->get_cee_cfg) 93 return dcb->ops->get_cee_cfg(dcb); 94 95 return -EOPNOTSUPP; 96} 97 98static inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb *dcb, void *msg) 99{ 100 if (dcb && dcb->ops->aen_handler) 101 dcb->ops->aen_handler(dcb, msg); 102} 103 104static inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb *dcb) 105{ 106 if (dcb && dcb->ops->init_dcbnl_ops) 107 dcb->ops->init_dcbnl_ops(dcb); 108} 109 110static inline int qlcnic_dcb_enable(struct qlcnic_dcb *dcb) 111{ 112 return dcb ? qlcnic_dcb_attach(dcb) : 0; 113} 114#endif 115