Files
mips/src/emac.c
T
jens a655e1c5d9 - use build in data types
git-svn-id: http://moon:8086/svn/mips@35 a8ebac50-d88d-4704-bea3-6648445a41b3
2015-05-28 19:19:01 +00:00

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;
}