2 * QLogic qlcnic NIC Driver
3 * Copyright (c) 2009-2013 QLogic Corporation
5 * See LICENSE.qlcnic for copyright and licensing details.
8 #ifndef __QLCNIC_DCBX_H
9 #define __QLCNIC_DCBX_H
11 #define QLCNIC_DCB_STATE 0
12 #define QLCNIC_DCB_AEN_MODE 1
14 #ifdef CONFIG_QLCNIC_DCB
15 int qlcnic_register_dcb(struct qlcnic_adapter
*);
17 static inline int qlcnic_register_dcb(struct qlcnic_adapter
*adapter
)
23 struct 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
*);
36 struct qlcnic_dcb_mbx_params
*param
;
37 struct qlcnic_adapter
*adapter
;
38 struct delayed_work aen_work
;
39 struct workqueue_struct
*wq
;
40 const struct qlcnic_dcb_ops
*ops
;
41 struct qlcnic_dcb_cfg
*cfg
;
45 static inline void qlcnic_clear_dcb_ops(struct qlcnic_dcb
*dcb
)
50 static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb
*dcb
)
52 if (dcb
&& dcb
->ops
->get_hw_capability
)
53 return dcb
->ops
->get_hw_capability(dcb
);
58 static inline void qlcnic_dcb_free(struct qlcnic_dcb
*dcb
)
60 if (dcb
&& dcb
->ops
->free
)
64 static inline int qlcnic_dcb_attach(struct qlcnic_dcb
*dcb
)
66 if (dcb
&& dcb
->ops
->attach
)
67 return dcb
->ops
->attach(dcb
);
73 qlcnic_dcb_query_hw_capability(struct qlcnic_dcb
*dcb
, char *buf
)
75 if (dcb
&& dcb
->ops
->query_hw_capability
)
76 return dcb
->ops
->query_hw_capability(dcb
, buf
);
81 static inline void qlcnic_dcb_get_info(struct qlcnic_dcb
*dcb
)
83 if (dcb
&& dcb
->ops
->get_info
)
84 dcb
->ops
->get_info(dcb
);
88 qlcnic_dcb_query_cee_param(struct qlcnic_dcb
*dcb
, char *buf
, u8 type
)
90 if (dcb
&& dcb
->ops
->query_cee_param
)
91 return dcb
->ops
->query_cee_param(dcb
, buf
, type
);
96 static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb
*dcb
)
98 if (dcb
&& dcb
->ops
->get_cee_cfg
)
99 return dcb
->ops
->get_cee_cfg(dcb
);
104 static inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb
*dcb
, void *msg
)
106 if (dcb
&& dcb
->ops
->aen_handler
)
107 dcb
->ops
->aen_handler(dcb
, msg
);
110 static inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb
*dcb
)
112 if (dcb
&& dcb
->ops
->init_dcbnl_ops
)
113 dcb
->ops
->init_dcbnl_ops(dcb
);
116 static inline void qlcnic_dcb_enable(struct qlcnic_dcb
*dcb
)
118 if (dcb
&& qlcnic_dcb_attach(dcb
))
119 qlcnic_clear_dcb_ops(dcb
);