xref: /linux/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h (revision ea68a3e9d14e9e0bf017d178fb4bd53b6deb1482)
1004b26b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
214d385b9SSucheta Chakraborty /*
314d385b9SSucheta Chakraborty  * QLogic qlcnic NIC Driver
414d385b9SSucheta Chakraborty  * Copyright (c)  2009-2013 QLogic Corporation
514d385b9SSucheta Chakraborty  */
614d385b9SSucheta Chakraborty 
714d385b9SSucheta Chakraborty #ifndef __QLCNIC_DCBX_H
814d385b9SSucheta Chakraborty #define __QLCNIC_DCBX_H
914d385b9SSucheta Chakraborty 
101de899d3SSucheta Chakraborty #define QLCNIC_DCB_STATE	0
111de899d3SSucheta Chakraborty #define QLCNIC_DCB_AEN_MODE	1
1214d385b9SSucheta Chakraborty 
1314d385b9SSucheta Chakraborty #ifdef CONFIG_QLCNIC_DCB
141de899d3SSucheta Chakraborty int qlcnic_register_dcb(struct qlcnic_adapter *);
1514d385b9SSucheta Chakraborty #else
qlcnic_register_dcb(struct qlcnic_adapter * adapter)161de899d3SSucheta Chakraborty static inline int qlcnic_register_dcb(struct qlcnic_adapter *adapter)
1714d385b9SSucheta Chakraborty { return 0; }
1814d385b9SSucheta Chakraborty #endif
1914d385b9SSucheta Chakraborty 
201de899d3SSucheta Chakraborty struct qlcnic_dcb;
211de899d3SSucheta Chakraborty 
2214d385b9SSucheta Chakraborty struct qlcnic_dcb_ops {
231de899d3SSucheta Chakraborty 	int (*query_hw_capability) (struct qlcnic_dcb *, char *);
241de899d3SSucheta Chakraborty 	int (*get_hw_capability) (struct qlcnic_dcb *);
251de899d3SSucheta Chakraborty 	int (*query_cee_param) (struct qlcnic_dcb *, char *, u8);
261de899d3SSucheta Chakraborty 	void (*init_dcbnl_ops) (struct qlcnic_dcb *);
271de899d3SSucheta Chakraborty 	void (*aen_handler) (struct qlcnic_dcb *, void *);
281de899d3SSucheta Chakraborty 	int (*get_cee_cfg) (struct qlcnic_dcb *);
291de899d3SSucheta Chakraborty 	void (*get_info) (struct qlcnic_dcb *);
301de899d3SSucheta Chakraborty 	int (*attach) (struct qlcnic_dcb *);
311de899d3SSucheta Chakraborty 	void (*free) (struct qlcnic_dcb *);
3214d385b9SSucheta Chakraborty };
3314d385b9SSucheta Chakraborty 
3414d385b9SSucheta Chakraborty struct qlcnic_dcb {
35fb859ed6SSucheta Chakraborty 	struct qlcnic_dcb_mbx_params	*param;
362d8ebcabSSucheta Chakraborty 	struct qlcnic_adapter		*adapter;
372d8ebcabSSucheta Chakraborty 	struct delayed_work		aen_work;
382d8ebcabSSucheta Chakraborty 	struct workqueue_struct		*wq;
39f4568828SJulia Lawall 	const struct qlcnic_dcb_ops	*ops;
4014d385b9SSucheta Chakraborty 	struct qlcnic_dcb_cfg		*cfg;
411de899d3SSucheta Chakraborty 	unsigned long			state;
4214d385b9SSucheta Chakraborty };
431de899d3SSucheta Chakraborty 
qlcnic_dcb_get_hw_capability(struct qlcnic_dcb * dcb)441de899d3SSucheta Chakraborty static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb)
451de899d3SSucheta Chakraborty {
461de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->get_hw_capability)
471de899d3SSucheta Chakraborty 		return dcb->ops->get_hw_capability(dcb);
481de899d3SSucheta Chakraborty 
491521db37STom Rix 	return -EOPNOTSUPP;
501de899d3SSucheta Chakraborty }
511de899d3SSucheta Chakraborty 
qlcnic_dcb_free(struct qlcnic_dcb * dcb)521de899d3SSucheta Chakraborty static inline void qlcnic_dcb_free(struct qlcnic_dcb *dcb)
531de899d3SSucheta Chakraborty {
541de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->free)
551de899d3SSucheta Chakraborty 		dcb->ops->free(dcb);
561de899d3SSucheta Chakraborty }
571de899d3SSucheta Chakraborty 
qlcnic_dcb_attach(struct qlcnic_dcb * dcb)581de899d3SSucheta Chakraborty static inline int qlcnic_dcb_attach(struct qlcnic_dcb *dcb)
591de899d3SSucheta Chakraborty {
601de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->attach)
611de899d3SSucheta Chakraborty 		return dcb->ops->attach(dcb);
621de899d3SSucheta Chakraborty 
631521db37STom Rix 	return -EOPNOTSUPP;
641de899d3SSucheta Chakraborty }
651de899d3SSucheta Chakraborty 
661de899d3SSucheta Chakraborty static inline int
qlcnic_dcb_query_hw_capability(struct qlcnic_dcb * dcb,char * buf)671de899d3SSucheta Chakraborty qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf)
681de899d3SSucheta Chakraborty {
691de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->query_hw_capability)
701de899d3SSucheta Chakraborty 		return dcb->ops->query_hw_capability(dcb, buf);
711de899d3SSucheta Chakraborty 
721521db37STom Rix 	return -EOPNOTSUPP;
731de899d3SSucheta Chakraborty }
741de899d3SSucheta Chakraborty 
qlcnic_dcb_get_info(struct qlcnic_dcb * dcb)751de899d3SSucheta Chakraborty static inline void qlcnic_dcb_get_info(struct qlcnic_dcb *dcb)
761de899d3SSucheta Chakraborty {
771de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->get_info)
781de899d3SSucheta Chakraborty 		dcb->ops->get_info(dcb);
791de899d3SSucheta Chakraborty }
801de899d3SSucheta Chakraborty 
811de899d3SSucheta Chakraborty static inline int
qlcnic_dcb_query_cee_param(struct qlcnic_dcb * dcb,char * buf,u8 type)821de899d3SSucheta Chakraborty qlcnic_dcb_query_cee_param(struct qlcnic_dcb *dcb, char *buf, u8 type)
831de899d3SSucheta Chakraborty {
841de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->query_cee_param)
851de899d3SSucheta Chakraborty 		return dcb->ops->query_cee_param(dcb, buf, type);
861de899d3SSucheta Chakraborty 
871521db37STom Rix 	return -EOPNOTSUPP;
881de899d3SSucheta Chakraborty }
891de899d3SSucheta Chakraborty 
qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb * dcb)901de899d3SSucheta Chakraborty static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
911de899d3SSucheta Chakraborty {
921de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->get_cee_cfg)
931de899d3SSucheta Chakraborty 		return dcb->ops->get_cee_cfg(dcb);
941de899d3SSucheta Chakraborty 
951521db37STom Rix 	return -EOPNOTSUPP;
961de899d3SSucheta Chakraborty }
971de899d3SSucheta Chakraborty 
qlcnic_dcb_aen_handler(struct qlcnic_dcb * dcb,void * msg)981de899d3SSucheta Chakraborty static inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb *dcb, void *msg)
991de899d3SSucheta Chakraborty {
1001de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->aen_handler)
1011de899d3SSucheta Chakraborty 		dcb->ops->aen_handler(dcb, msg);
1021de899d3SSucheta Chakraborty }
1031de899d3SSucheta Chakraborty 
qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb * dcb)1041de899d3SSucheta Chakraborty static inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb *dcb)
1051de899d3SSucheta Chakraborty {
1061de899d3SSucheta Chakraborty 	if (dcb && dcb->ops->init_dcbnl_ops)
1071de899d3SSucheta Chakraborty 		dcb->ops->init_dcbnl_ops(dcb);
1081de899d3SSucheta Chakraborty }
1093c44bba1SSucheta Chakraborty 
qlcnic_dcb_enable(struct qlcnic_dcb * dcb)110*13a7c896SDaniil Tatianin static inline int qlcnic_dcb_enable(struct qlcnic_dcb *dcb)
1113c44bba1SSucheta Chakraborty {
112*13a7c896SDaniil Tatianin 	return dcb ? qlcnic_dcb_attach(dcb) : 0;
1133c44bba1SSucheta Chakraborty }
11414d385b9SSucheta Chakraborty #endif
115