/* mbed Microcontroller Library
 *******************************************************************************
 * Copyright (c) 2014, Realtek Semiconductor Corp.
 * All rights reserved.
 *
 * This module is a confidential and proprietary property of RealTek and
 * possession or use of this module requires written permission of RealTek.
 *******************************************************************************
 */

#include "ethernet_api.h"
#include "ethernet_ex_api.h"
#include "hal_mii.h"

#if DEVICE_ETHERNET

#if CONFIG_MII_EN

extern HAL_ETHER_ADAPTER HalEtherAdp;



void ethernet_irq_hook(ethernet_callback callback)
{
	HalEtherAdp.CallBack = callback;
}


void ethernet_set_descnum(uint8_t txdescCnt, uint8_t rxdescCnt)
{
	HalEtherAdp.tx_desc_num = txdescCnt;
	HalEtherAdp.rx_desc_num = rxdescCnt;
}

void ethernet_trx_pre_setting(uint8_t *TxDescAddr, uint8_t *RxDescAddr, uint8_t *pTxPktBuf, uint8_t *pRxPktBuf)
{
	HalEtherAdp.TxDescAddr = TxDescAddr;
	HalEtherAdp.RxDescAddr = RxDescAddr;
	HalEtherAdp.pTxPktBuf = pTxPktBuf;
	HalEtherAdp.pRxPktBuf = pRxPktBuf;
}


int ethernet_init(void)
{
	return HalMiiInit();
}


void ethernet_free(void)
{
	HalMiiDeInit();
}


int ethernet_write(const char *data, int size)
{
	return HalMiiWriteData(data, size);
}


int ethernet_send(void)
{
	return HalMiiSendPacket();
}


int ethernet_receive(void)
{
	return HalMiiReceivePacket();
}


int ethernet_read(char *data, int size)
{
	return HalMiiReadData((u8*)data, size);
}


void ethernet_address(char *mac)
{
	HalMiiGetMacAddress((u8*)mac);
}


int ethernet_link(void)
{
	int ret;


	ret = HalMiiGetLinkStatus();

	return ret;
}


void ethernet_set_link(int speed, int duplex)
{
	HalMiiForceLink(speed, duplex);
}

#endif  // #if CONFIG_MII_EN
#endif  // #if DEVICE_ETHERNET