#include "xdsl_ctrl_api.h"
#if defined(CONFIG_XDSL_CTRL_BY_PHY)
#include "phy/xdsl_ctrl_phy.h"
#endif

#if defined(CONFIG_XDSL_CTRL_BY_NFBI)
#include "nfbi/xdsl_ctrl_nfbi.h"
#endif


#if defined(CONFIG_XDSL_CTRL_ON_SOC)
int xdsl_ctrl_set(ctrl_pkt_t *ctrlp, unsigned char sleep)
{
	int ret = 0;

	#if defined(CONFIG_XDSL_CTRL_BY_PHY)
	ret = xdsl_ctrl_phy_set(ctrlp, sleep);
	#endif

	#if defined(CONFIG_XDSL_CTRL_BY_NFBI)
	ret = xdsl_ctrl_nfbi_set(ctrlp, sleep);
	#endif
	
	return ret;
}


int xdsl_ctrl_get(ctrl_pkt_t *ctrlp, unsigned char sleep)
{
	int ret = 0;

	#if defined(CONFIG_XDSL_CTRL_BY_PHY)
	ret = xdsl_ctrl_phy_get(ctrlp, sleep);
	#endif

	#if defined(CONFIG_XDSL_CTRL_BY_NFBI)
	ret = xdsl_ctrl_nfbi_get(ctrlp, sleep);
	#endif
	return ret;
}
#endif

ctrl_pkt_t *get_ctrl_pkt(void *data)
{
	#if defined(CONFIG_XDSL_CTRL_BY_PHY)
	return get_ctrl_pkt_by_phy(data);
	#endif

	#if defined(CONFIG_XDSL_CTRL_BY_NFBI)
	return get_ctrl_pkt_by_nfbi(data);
	#endif

}

int free_ctrl_pkt(void *data)
{
	int ret = 0;

	#if defined(CONFIG_XDSL_CTRL_BY_PHY)
	ret = xdsl_ctrl_phy_free(data);
	#endif

	return ret;
}


int xdsl_ctrl_setup(void) 
{
	int ret = 0;
	#if defined(CONFIG_XDSL_CTRL_BY_PHY)
	ret = xdsl_ctrl_phy_setup();
	#endif

	#if defined(CONFIG_XDSL_CTRL_BY_NFBI)
	ret = xdsl_ctrl_nfbi_setup();
	#endif

	return ret;
}


#if defined(CONFIG_XDSL_CTRL_ON_DSL)
int xdsl_ctrl_return_data(ctrl_pkt_t *ctrlp)
{
	int ret = 0;

	#if defined(CONFIG_XDSL_CTRL_BY_PHY)
	ret = xdsl_ctrl_phy_set(ctrlp, 0);
	#endif

	#if defined(CONFIG_XDSL_CTRL_BY_NFBI)
	ret = return_data_by_nfbi(ctrlp);
	#endif
	
	return ret;
}
#endif


void xdsl_ctrl_ret(char type)
{
	#if defined(CONFIG_XDSL_CTRL_BY_NFBI)
	xdsl_ctrl_nfbi_ret(type);
	#endif
}

#if defined(CONFIG_PTM_BONDING_MASTER)
int bonding_master_return_data(ctrl_pkt_t *ctrlp, unsigned char sleep)
{
	int ret=0;
	ret = xdsl_ctrl_nfbi_return_slave(ctrlp, sleep);
	return ret;
}
#endif

#if defined(CONFIG_PTM_BONDING_SLAVE)
int bonding_slave_set_master(ctrl_pkt_t *ctrlp, unsigned char sleep)
{
	int ret=0;
	ret = nfbi_set_master_extern(ctrlp, sleep);
	return ret;
}

int bonding_slave_get_master(ctrl_pkt_t *ctrlp, unsigned char sleep)
{
	int ret=0;
	ret = nfbi_get_master_extern(ctrlp, sleep);
	return ret;
}
#endif