kopia lustrzana https://github.com/espressif/esp-idf
Merge branch 'bugfix/disable_software_flow_control_with_small_buffers' into 'master'
esp_eth: added option to disable soft flow control when rx buffer is few Closes WIFI-3362 See merge request espressif/esp-idf!12186pull/7261/head
commit
a2005adf32
|
@ -102,6 +102,18 @@ menu "Ethernet"
|
|||
help
|
||||
Number of DMA transmit buffers. Each buffer's size is ETH_DMA_BUFFER_SIZE.
|
||||
Larger number of buffers could increase throughput somehow.
|
||||
|
||||
if ETH_DMA_RX_BUFFER_NUM > 15
|
||||
config ETH_SOFT_FLOW_CONTROL
|
||||
bool "Enable software flow control"
|
||||
default n
|
||||
help
|
||||
Ethernet MAC engine on ESP32 doesn't feature a flow control logic.
|
||||
The MAC driver can perform a software flow control if you enable this option.
|
||||
Note that, if the RX buffer number is small, enabling software flow control will
|
||||
cause obvious performance loss.
|
||||
endif
|
||||
|
||||
endif # ETH_USE_ESP32_EMAC
|
||||
|
||||
menuconfig ETH_USE_SPI_ETHERNET
|
||||
|
|
|
@ -299,12 +299,14 @@ static void emac_esp32_rx_task(void *arg)
|
|||
} else {
|
||||
free(buffer);
|
||||
}
|
||||
#if CONFIG_ETH_SOFT_FLOW_CONTROL
|
||||
// we need to do extra checking of remained frames in case there are no unhandled frames left, but pause frame is still undergoing
|
||||
if ((emac->free_rx_descriptor < emac->flow_control_low_water_mark) && emac->do_flow_ctrl && emac->frames_remain) {
|
||||
emac_hal_send_pause_frame(&emac->hal, true);
|
||||
} else if ((emac->free_rx_descriptor > emac->flow_control_high_water_mark) || !emac->frames_remain) {
|
||||
emac_hal_send_pause_frame(&emac->hal, false);
|
||||
}
|
||||
#endif
|
||||
} while (emac->frames_remain);
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
|
|
|
@ -145,7 +145,7 @@ void app_main(void)
|
|||
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
|
||||
esp_eth_handle_t eth_handle = NULL;
|
||||
ESP_ERROR_CHECK(esp_eth_driver_install(&config, ð_handle));
|
||||
#if CONFIG_ETH_USE_SPI_ETHERNET
|
||||
#if !CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET
|
||||
/* The SPI Ethernet module might doesn't have a burned factory MAC address, we cat to set it manually.
|
||||
02:00:00 is a Locally Administered OUI range so should not be used except when testing on a LAN under your control.
|
||||
*/
|
||||
|
|
|
@ -218,7 +218,7 @@ static void initialize_ethernet(void)
|
|||
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
|
||||
config.stack_input = pkt_eth2wifi;
|
||||
ESP_ERROR_CHECK(esp_eth_driver_install(&config, &s_eth_handle));
|
||||
#if CONFIG_ETH_USE_SPI_ETHERNET
|
||||
#if !CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET
|
||||
/* The SPI Ethernet module might doesn't have a burned factory MAC address, we cat to set it manually.
|
||||
02:00:00 is a Locally Administered OUI range so should not be used except when testing on a LAN under your control.
|
||||
*/
|
||||
|
|
|
@ -253,7 +253,7 @@ void register_ethernet(void)
|
|||
#endif // CONFIG_ETH_USE_SPI_ETHERNET
|
||||
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
|
||||
ESP_ERROR_CHECK(esp_eth_driver_install(&config, ð_handle));
|
||||
#if CONFIG_ETH_USE_SPI_ETHERNET
|
||||
#if !CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET
|
||||
/* The SPI Ethernet module might doesn't have a burned factory MAC address, we cat to set it manually.
|
||||
02:00:00 is a Locally Administered OUI range so should not be used except when testing on a LAN under your control.
|
||||
*/
|
||||
|
|
Ładowanie…
Reference in New Issue