2013-08-23 17:38:25 +00:00
|
|
|
/*
|
|
|
|
* QLogic qlcnic NIC Driver
|
|
|
|
* Copyright (c) 2009-2013 QLogic Corporation
|
|
|
|
*
|
|
|
|
* See LICENSE.qlcnic for copyright and licensing details.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __QLCNIC_DCBX_H
|
|
|
|
#define __QLCNIC_DCBX_H
|
|
|
|
|
2013-10-18 16:22:33 +00:00
|
|
|
#define QLCNIC_DCB_STATE 0
|
|
|
|
#define QLCNIC_DCB_AEN_MODE 1
|
2013-08-23 17:38:25 +00:00
|
|
|
|
|
|
|
#ifdef CONFIG_QLCNIC_DCB
|
2013-10-18 16:22:33 +00:00
|
|
|
int qlcnic_register_dcb(struct qlcnic_adapter *);
|
2013-08-23 17:38:25 +00:00
|
|
|
#else
|
2013-10-18 16:22:33 +00:00
|
|
|
static inline int qlcnic_register_dcb(struct qlcnic_adapter *adapter)
|
2013-08-23 17:38:25 +00:00
|
|
|
{ return 0; }
|
|
|
|
#endif
|
|
|
|
|
2013-10-18 16:22:33 +00:00
|
|
|
struct qlcnic_dcb;
|
|
|
|
|
2013-08-23 17:38:25 +00:00
|
|
|
struct qlcnic_dcb_ops {
|
2013-10-18 16:22:33 +00:00
|
|
|
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 *);
|
2013-08-23 17:38:25 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct qlcnic_dcb {
|
2013-08-23 17:38:26 +00:00
|
|
|
struct qlcnic_dcb_mbx_params *param;
|
2013-08-23 17:38:27 +00:00
|
|
|
struct qlcnic_adapter *adapter;
|
|
|
|
struct delayed_work aen_work;
|
|
|
|
struct workqueue_struct *wq;
|
2013-08-23 17:38:26 +00:00
|
|
|
struct qlcnic_dcb_ops *ops;
|
|
|
|
struct qlcnic_dcb_cfg *cfg;
|
2013-10-18 16:22:33 +00:00
|
|
|
unsigned long state;
|
2013-08-23 17:38:25 +00:00
|
|
|
};
|
2013-10-18 16:22:33 +00:00
|
|
|
|
|
|
|
static inline void qlcnic_clear_dcb_ops(struct qlcnic_dcb *dcb)
|
|
|
|
{
|
|
|
|
kfree(dcb);
|
|
|
|
dcb = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
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 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
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 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
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 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
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 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
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 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
2013-12-17 14:01:49 +00:00
|
|
|
|
|
|
|
static inline void qlcnic_dcb_enable(struct qlcnic_dcb *dcb)
|
|
|
|
{
|
|
|
|
if (dcb && qlcnic_dcb_attach(dcb))
|
|
|
|
qlcnic_clear_dcb_ops(dcb);
|
|
|
|
}
|
2013-08-23 17:38:25 +00:00
|
|
|
#endif
|