1 /*
2  * Copyright 2023 NXP
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_DRIVERS_ETH_NXP_ENET_H__
8 #define ZEPHYR_INCLUDE_DRIVERS_ETH_NXP_ENET_H__
9 
10 /*
11  * This header is for NXP ENET driver development
12  * and has definitions for internal implementations
13  * not to be used by application
14  */
15 
16 #include <zephyr/device.h>
17 #include <zephyr/kernel.h>
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /*
24  * Reasons for callback to a driver:
25  *
26  * Module reset: The ENET module was reset, perhaps because of power management
27  * actions, and subdriver should reinitialize part of the module.
28  * Interrupt: An interrupt of a type relevant to the subdriver occurred.
29  * Interrupt enable: The driver's relevant interrupt was enabled in NVIC
30  */
31 enum nxp_enet_callback_reason {
32 	NXP_ENET_MODULE_RESET,
33 	NXP_ENET_INTERRUPT,
34 	NXP_ENET_INTERRUPT_ENABLED,
35 };
36 
37 enum nxp_enet_driver {
38 	NXP_ENET_MAC,
39 	NXP_ENET_MDIO,
40 	NXP_ENET_PTP_CLOCK,
41 };
42 
43 extern void nxp_enet_mdio_callback(const struct device *mdio_dev,
44 		enum nxp_enet_callback_reason event,
45 		void *data);
46 
47 #ifdef CONFIG_PTP_CLOCK_NXP_ENET
48 extern void nxp_enet_ptp_clock_callback(const struct device *dev,
49 		enum nxp_enet_callback_reason event,
50 		void *data);
51 #else
52 #define nxp_enet_ptp_clock_callback(...)
53 #endif
54 
55 /*
56  * Internal implementation, inter-driver communication function
57  *
58  * dev: target device to call back
59  * dev_type: which driver to call back
60  * event: reason/cause of callback
61  * data: opaque data, will be interpreted based on reason and target driver
62  */
63 extern void nxp_enet_driver_cb(const struct device *dev,
64 				enum nxp_enet_driver dev_type,
65 				enum nxp_enet_callback_reason event,
66 				void *data);
67 
68 #ifdef __cplusplus
69 }
70 #endif
71 
72 
73 #endif /* ZEPHYR_INCLUDE_DRIVERS_ETH_NXP_ENET_H__ */
74