131 lines
2.9 KiB
C
131 lines
2.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <signal.h>
|
|
#include <time.h>
|
|
#include <sys/time.h>
|
|
#include <sys/types.h>
|
|
#include "libsys.h"
|
|
|
|
void EMAC_TX_commit(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_TX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_TX_SIZE;
|
|
|
|
*pEmac_ctrl |= EMAC_TX_CTRL_PKT_COMMIT;
|
|
|
|
}
|
|
|
|
void EMAC_TX_alloc(uint32_t size)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_TX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_TX_SIZE;
|
|
|
|
while(*pEmac_ctrl & EMAC_TX_STAT_PKT_ALLOC_BSY);
|
|
|
|
*pEmac_size = size;
|
|
*pEmac_ctrl |= EMAC_TX_CTRL_PKT_ALLOC;
|
|
|
|
while(*pEmac_ctrl & EMAC_TX_STAT_PKT_ALLOC_BSY);
|
|
|
|
}
|
|
|
|
uint32_t EMAC_TX_is_avail(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_TX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_TX_SIZE;
|
|
|
|
while(*pEmac_ctrl & EMAC_TX_STAT_PKT_ALLOC_BSY);
|
|
|
|
return (*pEmac_ctrl & EMAC_TX_STAT_PKT_ARMED) == EMAC_TX_STAT_PKT_ARMED;
|
|
|
|
}
|
|
|
|
uint32_t EMAC_TX_is_idle(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_TX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_TX_SIZE;
|
|
|
|
return (*pEmac_ctrl & EMAC_TX_STAT_PKT_DONE) == EMAC_TX_STAT_PKT_DONE;
|
|
|
|
}
|
|
|
|
void EMAC_TX_reset(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_TX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_TX_SIZE;
|
|
|
|
*pEmac_ctrl = EMAC_TX_CTRL_RESET | EMAC_TX_CTRL_FCS_APPEND;
|
|
|
|
while(*pEmac_ctrl & EMAC_TX_CTRL_RESET);
|
|
|
|
}
|
|
|
|
uint32_t EMAC_RX_is_avail(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_RX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_RX_SIZE;
|
|
|
|
return (*pEmac_ctrl & EMAC_RX_STAT_PKT_AVAIL) == EMAC_RX_STAT_PKT_AVAIL;
|
|
|
|
}
|
|
|
|
void EMAC_RX_request(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_RX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_RX_SIZE;
|
|
|
|
*pEmac_ctrl = (*pEmac_ctrl & ~EMAC_RX_CTRL_PKT_FREE) | EMAC_RX_CTRL_PKT_REQ;
|
|
|
|
}
|
|
|
|
uint32_t EMAC_RX_is_valid(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_RX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_RX_SIZE;
|
|
|
|
return (*pEmac_ctrl & EMAC_RX_STAT_PKT_VALID) == EMAC_RX_STAT_PKT_VALID;
|
|
|
|
}
|
|
|
|
void EMAC_RX_free(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_RX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_RX_SIZE;
|
|
|
|
*pEmac_ctrl = (*pEmac_ctrl & ~EMAC_RX_CTRL_PKT_REQ) | EMAC_RX_CTRL_PKT_FREE;
|
|
|
|
}
|
|
|
|
void EMAC_RX_reset(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_RX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_RX_SIZE;
|
|
|
|
*pEmac_ctrl = EMAC_RX_CTRL_RESET | EMAC_RX_CTRL_FCS_CHECK;
|
|
|
|
while(*pEmac_ctrl & EMAC_RX_CTRL_RESET);
|
|
|
|
}
|
|
|
|
uint32_t EMAC_RX_get_size(void)
|
|
{
|
|
|
|
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_RX_CTRL;
|
|
volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_RX_SIZE;
|
|
|
|
return *pEmac_size;
|
|
|
|
}
|
|
|