drivers: ethernet: stm32: Add transmit callbacks
These callbacks are also used by the stm32cube HAL driver
Signed-off-by: Bjarne von Horn <B.von_horn@wzl.rwth-aachen.de>
diff --git a/drivers/ethernet/eth_stm32_hal.c b/drivers/ethernet/eth_stm32_hal.c
index 23214b0..4df48f7 100644
--- a/drivers/ethernet/eth_stm32_hal.c
+++ b/drivers/ethernet/eth_stm32_hal.c
@@ -155,6 +155,27 @@
*pEnd = header;
}
}
+
+/* Called by HAL_ETH_ReleaseTxPacket */
+void HAL_ETH_TxFreeCallback(uint32_t *buff)
+{
+ __ASSERT_NO_MSG(buff != NULL);
+
+ /* buff is the user context in tx_config.pData */
+ struct eth_stm32_tx_context *ctx = (struct eth_stm32_tx_context *)buff;
+ struct eth_stm32_tx_buffer_header *buffer_header =
+ &dma_tx_buffer_header[ctx->first_tx_buffer_index];
+
+ while (buffer_header != NULL) {
+ buffer_header->used = false;
+ if (buffer_header->tx_buff.next != NULL) {
+ buffer_header = CONTAINER_OF(buffer_header->tx_buff.next,
+ struct eth_stm32_tx_buffer_header, tx_buff);
+ } else {
+ buffer_header = NULL;
+ }
+ }
+}
#endif /* CONFIG_ETH_STM32_HAL_API_V2 */
#if defined(CONFIG_SOC_SERIES_STM32H7X) || defined(CONFIG_ETH_STM32_HAL_API_V2)
@@ -166,12 +187,12 @@
uint32_t PHYReg,
uint32_t *RegVal)
{
-#if defined(CONFIG_SOC_SERIES_STM32H7X)
+#if defined(CONFIG_SOC_SERIES_STM32H7X) || defined(CONFIG_ETH_STM32_HAL_API_V2)
return HAL_ETH_ReadPHYRegister(heth, PHYAddr, PHYReg, RegVal);
#else
ARG_UNUSED(PHYAddr);
return HAL_ETH_ReadPHYRegister(heth, PHYReg, RegVal);
-#endif /* CONFIG_SOC_SERIES_STM32H7X */
+#endif /* CONFIG_SOC_SERIES_STM32H7X || CONFIG_ETH_STM32_HAL_API_V2 */
}
static inline void disable_mcast_filter(ETH_HandleTypeDef *heth)
@@ -237,6 +258,17 @@
return true;
}
+#if defined(CONFIG_ETH_STM32_HAL_API_V2)
+void HAL_ETH_TxPtpCallback(uint32_t *buff, ETH_TimeStampTypeDef *timestamp)
+{
+ struct eth_stm32_tx_context *ctx = (struct eth_stm32_tx_context *)buff;
+
+ ctx->pkt->timestamp.second = timestamp->TimeStampHigh;
+ ctx->pkt->timestamp.nanosecond = timestamp->TimeStampLow;
+
+ net_if_add_tx_timestamp(ctx->pkt);
+}
+#endif /* CONFIG_ETH_STM32_HAL_API_V2 */
#endif /* CONFIG_PTP_CLOCK_STM32_HAL */
static int eth_tx(const struct device *dev, struct net_pkt *pkt)
@@ -755,7 +787,7 @@
HAL_ETH_IRQHandler(heth);
}
-#ifdef CONFIG_SOC_SERIES_STM32H7X
+#if defined(CONFIG_SOC_SERIES_STM32H7X) || defined(CONFIG_ETH_STM32_HAL_API_V2)
void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth_handle)
{
__ASSERT_NO_MSG(heth_handle != NULL);
@@ -768,6 +800,9 @@
k_sem_give(&dev_data->tx_int_sem);
}
+#endif /* CONFIG_SOC_SERIES_STM32H7X || CONFIG_ETH_STM32_HAL_API_V2 */
+
+#ifdef CONFIG_SOC_SERIES_STM32H7X
/* DMA and MAC errors callback only appear in H7 series */
void HAL_ETH_DMAErrorCallback(ETH_HandleTypeDef *heth_handle)
{