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