mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 10:47:19 +02:00
Merge branch 'contrib/github_pr_16016' into 'master'
Enable Timestamping for Non-PTP Ethernet frames (GitHub PR) Closes IDFGH-15359 See merge request espressif/esp-idf!39581
This commit is contained in:
@ -197,7 +197,8 @@ typedef enum {
|
|||||||
ETH_MAC_ESP_CMD_ADJ_PTP_FREQ, /*!< Adjust current PTP time frequency increment by scale factor */
|
ETH_MAC_ESP_CMD_ADJ_PTP_FREQ, /*!< Adjust current PTP time frequency increment by scale factor */
|
||||||
ETH_MAC_ESP_CMD_ADJ_PTP_TIME, /*!< Adjust base PTP time frequency increment by PPS */
|
ETH_MAC_ESP_CMD_ADJ_PTP_TIME, /*!< Adjust base PTP time frequency increment by PPS */
|
||||||
ETH_MAC_ESP_CMD_S_TARGET_TIME, /*!< Set Target Time at which interrupt is invoked when PTP time exceeds this value*/
|
ETH_MAC_ESP_CMD_S_TARGET_TIME, /*!< Set Target Time at which interrupt is invoked when PTP time exceeds this value*/
|
||||||
ETH_MAC_ESP_CMD_S_TARGET_CB /*!< Set pointer to a callback function invoked when PTP time exceeds Target Time */
|
ETH_MAC_ESP_CMD_S_TARGET_CB, /*!< Set pointer to a callback function invoked when PTP time exceeds Target Time */
|
||||||
|
ETH_MAC_ESP_CMD_ENABLE_TS4ALL /*!< Enable timestamp for all received frames */
|
||||||
} eth_mac_esp_io_cmd_t;
|
} eth_mac_esp_io_cmd_t;
|
||||||
|
|
||||||
#ifdef SOC_EMAC_IEEE1588V2_SUPPORTED
|
#ifdef SOC_EMAC_IEEE1588V2_SUPPORTED
|
||||||
|
@ -364,6 +364,12 @@ esp_err_t emac_esp_custom_ioctl(esp_eth_mac_t *mac, int cmd, void *data)
|
|||||||
"failed to set PTP target time");
|
"failed to set PTP target time");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ETH_MAC_ESP_CMD_ENABLE_TS4ALL: {
|
||||||
|
ESP_RETURN_ON_FALSE(data, ESP_ERR_INVALID_ARG, TAG, "PTP enable TS for all invalid argument, cant' be NULL");
|
||||||
|
bool enable = *(bool *)data;
|
||||||
|
ESP_RETURN_ON_ERROR(emac_hal_ptp_enable_ts4all(&emac->hal, enable), TAG, "failed to enable timestamping for all frames");
|
||||||
|
break;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
case ETH_MAC_ESP_CMD_PTP_ENABLE:
|
case ETH_MAC_ESP_CMD_PTP_ENABLE:
|
||||||
case ETH_MAC_ESP_CMD_S_PTP_TIME:
|
case ETH_MAC_ESP_CMD_S_PTP_TIME:
|
||||||
@ -372,7 +378,8 @@ esp_err_t emac_esp_custom_ioctl(esp_eth_mac_t *mac, int cmd, void *data)
|
|||||||
case ETH_MAC_ESP_CMD_ADJ_PTP_FREQ:
|
case ETH_MAC_ESP_CMD_ADJ_PTP_FREQ:
|
||||||
case ETH_MAC_ESP_CMD_S_TARGET_CB:
|
case ETH_MAC_ESP_CMD_S_TARGET_CB:
|
||||||
case ETH_MAC_ESP_CMD_S_TARGET_TIME:
|
case ETH_MAC_ESP_CMD_S_TARGET_TIME:
|
||||||
return ESP_ERR_NOT_SUPPORTED;
|
case ETH_MAC_ESP_CMD_ENABLE_TS4ALL:
|
||||||
|
return ESP_ERR_NOT_SUPPORTED;
|
||||||
#endif
|
#endif
|
||||||
case ETH_MAC_ESP_CMD_SET_TDES0_CFG_BITS:
|
case ETH_MAC_ESP_CMD_SET_TDES0_CFG_BITS:
|
||||||
ESP_RETURN_ON_FALSE(data != NULL, ESP_ERR_INVALID_ARG, TAG, "cannot set DMA tx desc flag to null");
|
ESP_RETURN_ON_FALSE(data != NULL, ESP_ERR_INVALID_ARG, TAG, "cannot set DMA tx desc flag to null");
|
||||||
|
@ -517,6 +517,12 @@ esp_err_t emac_hal_ptp_set_target_time(emac_hal_context_t *hal, uint32_t seconds
|
|||||||
emac_ll_ts_target_int_trig_enable(hal->ptp_regs);
|
emac_ll_ts_target_int_trig_enable(hal->ptp_regs);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
esp_err_t emac_hal_ptp_enable_ts4all(emac_hal_context_t *hal, bool enable)
|
||||||
|
{
|
||||||
|
emac_ll_ts_all_enable(hal->ptp_regs, enable);
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
#endif // SOC_EMAC_IEEE1588V2_SUPPORTED
|
#endif // SOC_EMAC_IEEE1588V2_SUPPORTED
|
||||||
|
|
||||||
|
|
||||||
|
@ -415,6 +415,16 @@ esp_err_t emac_hal_ptp_get_sys_time(emac_hal_context_t *hal, uint32_t *seconds,
|
|||||||
*/
|
*/
|
||||||
esp_err_t emac_hal_ptp_set_target_time(emac_hal_context_t *hal, uint32_t seconds, uint32_t nano_seconds);
|
esp_err_t emac_hal_ptp_set_target_time(emac_hal_context_t *hal, uint32_t seconds, uint32_t nano_seconds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable rx/tx timestamps for all Ethernet frames
|
||||||
|
*
|
||||||
|
* @param hal EMAC HAL context infostructure
|
||||||
|
* @param enable timestamping for non-PTP Ethernet frames
|
||||||
|
* @return
|
||||||
|
* - ESP_OK on success
|
||||||
|
*/
|
||||||
|
esp_err_t emac_hal_ptp_enable_ts4all(emac_hal_context_t *hal, bool enable);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get timestamp from receive descriptor
|
* @brief Get timestamp from receive descriptor
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user