Hi Sergio,
I've found this drop packet thing in my driver, however it doesn't seem to break there.
I've had a look at the driver code but I can't find anything...
I am a bit surprised that the ethernet interrupt just raises a flag :
static void eth_notify (ARM_ETH_MAC_EVENT event) {
/* Send notification on RX event */
if (event == ARM_ETH_MAC_EVENT_RX_FRAME) {
rx_event = true;
}
}
It seems to imply that calling ethernetif_poll in an IDLE thread will only process on packet even if multiple interrupts have been raised :
void ethernetif_poll (struct netif *netif) {
struct ethernetif *eth = netif->state;
if (!eth->phy_ok || eth->link == ARM_ETH_LINK_DOWN) {
return;
}
if (rx_event) {
rx_event = false;
/* process received ethernet packet */
ethernetif_input (netif);
}
}
I think that an atomic counter and a while loop instead of a flag and a "if" would be more appropriate. Am I wrong ?
Could that have anything to do with my problem ?
Thanks for your help,
Julien.