/*
 * Copyright (c) 2017 Erwin Rol <erwin@erwinrol.com>
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef _ETH_STM32_HAL_PRIV_H_
#define _ETH_STM32_HAL_PRIV_H_

#include <kernel.h>
#include <zephyr/types.h>

#define ETH_STM32_HAL_MTU 1500
#define ETH_STM32_HAL_FRAME_SIZE_MAX (ETH_STM32_HAL_MTU + 18)

/* Definition of the Ethernet driver buffers size and count */
#define ETH_RX_BUF_SIZE	ETH_MAX_PACKET_SIZE /* buffer size for receive */
#define ETH_TX_BUF_SIZE	ETH_MAX_PACKET_SIZE /* buffer size for transmit */

/* Device constant configuration parameters */
struct eth_stm32_hal_dev_cfg {
	void (*config_func)(void);
	struct stm32_pclken pclken;
	struct stm32_pclken pclken_rx;
	struct stm32_pclken pclken_tx;
	struct stm32_pclken pclken_ptp;
};

/* Device run time data */
struct eth_stm32_hal_dev_data {
	struct net_if *iface;
	u8_t mac_addr[6];
	ETH_HandleTypeDef heth;
	/* clock device */
	struct device *clock;
	struct k_mutex tx_mutex;
	struct k_sem rx_int_sem;
	K_THREAD_STACK_MEMBER(rx_thread_stack,
		CONFIG_ETH_STM32_HAL_RX_THREAD_STACK_SIZE);
	struct k_thread rx_thread;
};

#define DEV_CFG(dev) \
	((struct eth_stm32_hal_dev_cfg *)(dev)->config->config_info)
#define DEV_DATA(dev) \
	((struct eth_stm32_hal_dev_data *)(dev)->driver_data)

#endif /* _ETH_STM32_HAL_PRIV_H_ */

