diff --git a/drivers/net/rckemac.c b/drivers/net/rckemac.c index b2b07f4e..cd3409e9 100644 --- a/drivers/net/rckemac.c +++ b/drivers/net/rckemac.c @@ -258,6 +258,34 @@ again: return ERR_OK; } +static void rckemacif_input(struct netif* netif, struct pbuf* p) +{ + struct eth_hdr *ethhdr; + + /* points to packet payload, which starts with an Ethernet header */ + ethhdr = p->payload; + + switch (htons(ethhdr->type)) { + /* IP or ARP packet? */ + case ETHTYPE_ARP: + case ETHTYPE_IP: +#if PPPOE_SUPPORT + /* PPPoE packet? */ + case ETHTYPE_PPPOEDISC: + case ETHTYPE_PPPOE: +#endif /* PPPOE_SUPPORT */ + /* full packet send to tcpip_thread to process */ + if (mynetif->input(p, mynetif) != ERR_OK) { + LWIP_DEBUGF(NETIF_DEBUG, ("rtl8139if_input: IP input error\n")); + pbuf_free(p); + } + break; + default: + pbuf_free(p); + break; + } +} + static void rckemacif_rx_handler(struct netif* netif, unsigned int write_offset) { rckemacif_t* rckemacif = netif->state; @@ -372,7 +400,7 @@ out: #if ETH_PAD_SIZE pbuf_header(p, ETH_PAD_SIZE); /* reclaim the padding word */ #endif - mailbox_ptr_post(&rckemacif->mbox, (void*)p); + rckemacif_input(netif, p); LINK_STATS_INC(link.recv); } else { LWIP_DEBUGF(NETIF_DEBUG, ("rckemacif_rx_inthandler: not enough memory!\n")); @@ -422,48 +450,6 @@ nexttry: *((volatile unsigned*) (FPGA_BASE + IRQ_RESET + rckemacif->core * 2 * 4)) = (1 << rckemacif->num_emac); } -err_t rckemacif_wait(struct netif* netif, uint32_t poll) -{ - rckemacif_t* rckemacif = netif->state; - struct eth_hdr *ethhdr; - struct pbuf *p = NULL; - err_t err = ERR_OK; - - if (poll) { - if (mailbox_ptr_tryfetch(&(rckemacif->mbox), (void**) &p)) - return err; - } else { - mailbox_ptr_fetch(&(rckemacif->mbox), (void**) &p); - } - - /* points to packet payload, which starts with an Ethernet header */ - ethhdr = p->payload; - - //LWIP_DEBUGF(NETIF_DEBUG, ("Got packet of type 0x%x!\n", htons(ethhdr->type))); - - switch (htons(ethhdr->type)) { - /* IP or ARP packet? */ - case ETHTYPE_ARP: - case ETHTYPE_IP: -#if PPPOE_SUPPORT - /* PPPoE packet? */ - case ETHTYPE_PPPOEDISC: - case ETHTYPE_PPPOE: -#endif /* PPPOE_SUPPORT */ - /* full packet send to tcpip_thread to process */ - if ((err = mynetif->input(p, mynetif)) != ERR_OK) { - LWIP_DEBUGF(NETIF_DEBUG, ("rckemacif_poll: IP input error\n")); - pbuf_free(p); - } - break; - default: - pbuf_free(p); - break; - } - - return err; -} - err_t rckemacif_init(struct netif* netif) { rckemacif_t* rckemacif; @@ -516,8 +502,6 @@ err_t rckemacif_init(struct netif* netif) memset(rckemacif->tx_buffer, 0x00, 0x20); memset(rckemacif->tx_buffer + 0x20, 0xDA, BUFFER_SIZE - 0x20); rckemacif->tx_buffer_max = CLINE_PACKETS(BUFFER_SIZE) - 1; - - mailbox_ptr_init(&rckemacif->mbox); netif->state = rckemacif; /* Depending on core location read own private data diff --git a/drivers/net/rckemac.h b/drivers/net/rckemac.h index 2c53523f..2796f14d 100644 --- a/drivers/net/rckemac.h +++ b/drivers/net/rckemac.h @@ -21,7 +21,6 @@ #define __HAVE_RCKEMAC_H__ #include -#include #if defined(CONFIG_LWIP) && defined(CONFIG_ROCKCREEK) @@ -40,17 +39,8 @@ typedef struct rckemacif { void* irq_address; uint32_t core; uint32_t num_emac; - mailbox_ptr_t mbox; } rckemacif_t; -/* - * Wait for incoming messages. - * - * poll = 0 : wait blocks until a message is received - * poll != 0: non-blocking wait - */ -err_t rckemacif_wait(struct netif* netif, uint32_t poll); - /* * Initialize the eMAC network driver */