2013-08-23 13:38:25 -04: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 12:22:33 -04:00
# define QLCNIC_DCB_STATE 0
# define QLCNIC_DCB_AEN_MODE 1
2013-08-23 13:38:25 -04:00
# ifdef CONFIG_QLCNIC_DCB
2013-10-18 12:22:33 -04:00
int qlcnic_register_dcb ( struct qlcnic_adapter * ) ;
2013-08-23 13:38:25 -04:00
# else
2013-10-18 12:22:33 -04:00
static inline int qlcnic_register_dcb ( struct qlcnic_adapter * adapter )
2013-08-23 13:38:25 -04:00
{ return 0 ; }
# endif
2013-10-18 12:22:33 -04:00
struct qlcnic_dcb ;
2013-08-23 13:38:25 -04:00
struct qlcnic_dcb_ops {
2013-10-18 12:22:33 -04: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 13:38:25 -04:00
} ;
struct qlcnic_dcb {
2013-08-23 13:38:26 -04:00
struct qlcnic_dcb_mbx_params * param ;
2013-08-23 13:38:27 -04:00
struct qlcnic_adapter * adapter ;
struct delayed_work aen_work ;
struct workqueue_struct * wq ;
2015-12-27 22:01:29 +01:00
const struct qlcnic_dcb_ops * ops ;
2013-08-23 13:38:26 -04:00
struct qlcnic_dcb_cfg * cfg ;
2013-10-18 12:22:33 -04:00
unsigned long state ;
2013-08-23 13:38:25 -04:00
} ;
2013-10-18 12:22:33 -04: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 09:01:49 -05: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 13:38:25 -04:00
# endif