1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*2d9fd380Sjfb8856606  * Copyright(C) 2020 Marvell International Ltd.
3*2d9fd380Sjfb8856606  */
4*2d9fd380Sjfb8856606 #ifndef __INCLUDE_ETHDEV_RX_PRIV_H__
5*2d9fd380Sjfb8856606 #define __INCLUDE_ETHDEV_RX_PRIV_H__
6*2d9fd380Sjfb8856606 
7*2d9fd380Sjfb8856606 #ifdef __cplusplus
8*2d9fd380Sjfb8856606 extern "C" {
9*2d9fd380Sjfb8856606 #endif
10*2d9fd380Sjfb8856606 
11*2d9fd380Sjfb8856606 #include <rte_common.h>
12*2d9fd380Sjfb8856606 
13*2d9fd380Sjfb8856606 struct ethdev_rx_node_elem;
14*2d9fd380Sjfb8856606 struct ethdev_rx_node_ctx;
15*2d9fd380Sjfb8856606 typedef struct ethdev_rx_node_elem ethdev_rx_node_elem_t;
16*2d9fd380Sjfb8856606 typedef struct ethdev_rx_node_ctx ethdev_rx_node_ctx_t;
17*2d9fd380Sjfb8856606 
18*2d9fd380Sjfb8856606 /**
19*2d9fd380Sjfb8856606  * @internal
20*2d9fd380Sjfb8856606  *
21*2d9fd380Sjfb8856606  * Ethernet device Rx node context structure.
22*2d9fd380Sjfb8856606  */
23*2d9fd380Sjfb8856606 struct ethdev_rx_node_ctx {
24*2d9fd380Sjfb8856606 	uint16_t port_id;  /**< Port identifier of the Rx node. */
25*2d9fd380Sjfb8856606 	uint16_t queue_id; /**< Queue identifier of the Rx node. */
26*2d9fd380Sjfb8856606 	uint16_t cls_next;
27*2d9fd380Sjfb8856606 };
28*2d9fd380Sjfb8856606 
29*2d9fd380Sjfb8856606 /**
30*2d9fd380Sjfb8856606  * @internal
31*2d9fd380Sjfb8856606  *
32*2d9fd380Sjfb8856606  * Ethernet device Rx node list element structure.
33*2d9fd380Sjfb8856606  */
34*2d9fd380Sjfb8856606 struct ethdev_rx_node_elem {
35*2d9fd380Sjfb8856606 	struct ethdev_rx_node_elem *next;
36*2d9fd380Sjfb8856606 	/**< Pointer to the next Rx node element. */
37*2d9fd380Sjfb8856606 	struct ethdev_rx_node_ctx ctx;
38*2d9fd380Sjfb8856606 	/**< Rx node context. */
39*2d9fd380Sjfb8856606 	rte_node_t nid;
40*2d9fd380Sjfb8856606 	/**< Node identifier of the Rx node. */
41*2d9fd380Sjfb8856606 };
42*2d9fd380Sjfb8856606 
43*2d9fd380Sjfb8856606 enum ethdev_rx_next_nodes {
44*2d9fd380Sjfb8856606 	ETHDEV_RX_NEXT_IP4_LOOKUP,
45*2d9fd380Sjfb8856606 	ETHDEV_RX_NEXT_PKT_CLS,
46*2d9fd380Sjfb8856606 	ETHDEV_RX_NEXT_MAX,
47*2d9fd380Sjfb8856606 };
48*2d9fd380Sjfb8856606 
49*2d9fd380Sjfb8856606 /**
50*2d9fd380Sjfb8856606  * @internal
51*2d9fd380Sjfb8856606  *
52*2d9fd380Sjfb8856606  * Ethernet Rx node main structure.
53*2d9fd380Sjfb8856606  */
54*2d9fd380Sjfb8856606 struct ethdev_rx_node_main {
55*2d9fd380Sjfb8856606 	ethdev_rx_node_elem_t *head;
56*2d9fd380Sjfb8856606 	/**< Pointer to the head Rx node element. */
57*2d9fd380Sjfb8856606 };
58*2d9fd380Sjfb8856606 
59*2d9fd380Sjfb8856606 /**
60*2d9fd380Sjfb8856606  * @internal
61*2d9fd380Sjfb8856606  *
62*2d9fd380Sjfb8856606  * Get the Ethernet Rx node data.
63*2d9fd380Sjfb8856606  *
64*2d9fd380Sjfb8856606  * @return
65*2d9fd380Sjfb8856606  *   Pointer to Ethernet Rx node data.
66*2d9fd380Sjfb8856606  */
67*2d9fd380Sjfb8856606 struct ethdev_rx_node_main *ethdev_rx_get_node_data_get(void);
68*2d9fd380Sjfb8856606 
69*2d9fd380Sjfb8856606 /**
70*2d9fd380Sjfb8856606  * @internal
71*2d9fd380Sjfb8856606  *
72*2d9fd380Sjfb8856606  * Get the Ethernet Rx node.
73*2d9fd380Sjfb8856606  *
74*2d9fd380Sjfb8856606  * @retrun
75*2d9fd380Sjfb8856606  *   Pointer to the Ethernet Rx node.
76*2d9fd380Sjfb8856606  */
77*2d9fd380Sjfb8856606 struct rte_node_register *ethdev_rx_node_get(void);
78*2d9fd380Sjfb8856606 
79*2d9fd380Sjfb8856606 #ifdef __cplusplus
80*2d9fd380Sjfb8856606 }
81*2d9fd380Sjfb8856606 #endif
82*2d9fd380Sjfb8856606 
83*2d9fd380Sjfb8856606 #endif /* __INCLUDE_ETHDEV_RX_PRIV_H__ */
84