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