void ENET_Receive_IRQHandler(void) { enet_dev_if_t *enetIfPtr = (enet_dev_if_t *)&enetDevIf[BOARD_DEBUG_ENET_INSTANCE]; if (enet_hal_get_interrupt_status(((enet_dev_if_t *)enetIfPtr)->deviceNumber, kEnetRxFrameInterrupt)) enet_mac_rx_isr(enetIfHandle); if (enet_hal_get_interrupt_status(((enet_dev_if_t *)enetIfPtr)->deviceNumber, kEnetTxFrameInterrupt)) enet_mac_tx_isr(enetIfHandle); if (emac_timer_fired) { // TODO: this will have to be replaced with a proper "PHY task" that can detect changes in link status. if (k64f_phy_state.connected == STATE_UNKNOWN) { k64f_phy_state.connected = 1; netif_set_link_up(k64f_enetdata.netif); } emac_timer_fired = 0; sys_check_timeouts(); } }
/*FUNCTION**************************************************************** * * Function Name: enet_mii_read * Return Value: The execution status. * Description: Read function. * This interface read data over the (R)MII bus from the specified PHY register, * This function is called by all PHY interfaces. *END*********************************************************************/ uint32_t enet_mii_read(uint32_t instance, uint32_t phyAddr, uint32_t phyReg, uint32_t *dataPtr) { uint32_t counter; /* Check the input parameters*/ if (!dataPtr) { return kStatus_ENET_InvalidInput; } /* Check if the mii is enabled*/ if (!enet_hal_is_mii_enabled(instance)) { return kStatus_ENET_Miiuninitialized; } /* Clear the MII interrupt event*/ enet_hal_clear_interrupt(instance, kEnetMiiInterrupt); /* Read command operation*/ enet_hal_set_mii_command(instance, phyAddr, phyReg, kEnetReadValidFrame, 0); /* Poll for MII complete*/ for (counter = 0; counter < kEnetMaxTimeout; counter++) { if (enet_hal_get_interrupt_status(instance, kEnetMiiInterrupt)) { break; } wait_ms(1); } /* Check for timeout*/ if (counter == kEnetMaxTimeout) { return kStatus_ENET_TimeOut; } /* Get data from mii register*/ *dataPtr = enet_hal_get_mii_data(instance); /* Clear MII interrupt event*/ enet_hal_clear_interrupt(instance, kEnetMiiInterrupt); return kStatus_ENET_Success; }
/*FUNCTION**************************************************************** * * Function Name: enet_mii_write * Return Value: The execution status. * Description: Write function. * This interface write data over the (R)MII bus to the specified PHY register. * This function is called by all PHY interfaces. *END*********************************************************************/ uint32_t enet_mii_write(uint32_t instance, uint32_t phyAddr, uint32_t phyReg, uint32_t data) { uint32_t counter; /* Check if the mii is enabled*/ if (!enet_hal_is_mii_enabled(instance)) { return kStatus_ENET_Miiuninitialized; } /* Clear the MII interrupt event*/ enet_hal_clear_interrupt(instance, kEnetMiiInterrupt); /* Read command operation*/ enet_hal_set_mii_command(instance, phyAddr, phyReg, kEnetWriteValidFrame, data); /* Poll for MII complete*/ for (counter = 0; counter < kEnetMaxTimeout; counter++) { if (enet_hal_get_interrupt_status(instance, kEnetMiiInterrupt)) { break; } wait_ms(1); } /* Check for timeout*/ if (counter == kEnetMaxTimeout) { return kStatus_ENET_TimeOut; } /* Clear MII intrrupt event*/ enet_hal_clear_interrupt(instance, kEnetMiiInterrupt); return kStatus_ENET_Success; }