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