xref: /f-stack/dpdk/drivers/net/ark/rte_pmd_ark.h (revision 2d9fd380)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2020 Atomic Rules LLC
3  */
4 
5 #ifndef RTE_PMD_ARK_H
6 #define RTE_PMD_ARK_H
7 
8 /**
9  * @file
10  * ARK driver-specific API
11  */
12 
13 #include <rte_mbuf.h>
14 #include <rte_mbuf_dyn.h>
15 
16 #ifndef RTE_PMD_ARK_TX_USERDATA_ENABLE
17 #define RTE_PMD_ARK_TX_USERDATA_ENABLE 0
18 #endif
19 
20 #ifndef RTE_PMD_ARK_RX_USERDATA_ENABLE
21 #define RTE_PMD_ARK_RX_USERDATA_ENABLE 0
22 #endif
23 
24 typedef uint32_t rte_pmd_ark_tx_userdata_t;
25 typedef uint64_t rte_pmd_ark_rx_userdata_t;
26 
27 extern int rte_pmd_ark_tx_userdata_dynfield_offset;
28 extern int rte_pmd_ark_rx_userdata_dynfield_offset;
29 
30 /** mbuf dynamic field for custom Tx ARK data */
31 #define RTE_PMD_ARK_TX_USERDATA_DYNFIELD_NAME "rte_net_ark_dynfield_tx_userdata"
32 /** mbuf dynamic field for custom Rx ARK data */
33 #define RTE_PMD_ARK_RX_USERDATA_DYNFIELD_NAME "rte_net_ark_dynfield_rx_userdata"
34 
35 /**
36  * @warning
37  * @b EXPERIMENTAL: this API may change without prior notice
38  *
39  * Read Tx user data from mbuf.
40  *
41  * @param mbuf Structure to read from.
42  * @return user data
43  */
44 __rte_experimental
45 static inline rte_pmd_ark_tx_userdata_t
rte_pmd_ark_mbuf_tx_userdata_get(const struct rte_mbuf * mbuf)46 rte_pmd_ark_mbuf_tx_userdata_get(const struct rte_mbuf *mbuf)
47 {
48 #if RTE_PMD_ARK_TX_USERDATA_ENABLE
49 	return *RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_tx_userdata_dynfield_offset,
50 				  rte_pmd_ark_tx_userdata_t *);
51 #else
52 	RTE_SET_USED(mbuf);
53 	return 0;
54 #endif
55 }
56 
57 /**
58  * @warning
59  * @b EXPERIMENTAL: this API may change without prior notice
60  *
61  * Write Tx user data to mbuf.
62  *
63  * @param mbuf Structure to write into.
64  * @param data User data.
65  */
66 __rte_experimental
67 static inline void
rte_pmd_ark_mbuf_tx_userdata_set(struct rte_mbuf * mbuf,rte_pmd_ark_tx_userdata_t data)68 rte_pmd_ark_mbuf_tx_userdata_set(struct rte_mbuf *mbuf,
69 		rte_pmd_ark_tx_userdata_t data)
70 {
71 #if RTE_PMD_ARK_TX_USERDATA_ENABLE
72 	*RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_tx_userdata_dynfield_offset,
73 			rte_pmd_ark_tx_userdata_t *) = data;
74 #else
75 	RTE_SET_USED(mbuf);
76 	RTE_SET_USED(data);
77 #endif
78 }
79 
80 /**
81  * @warning
82  * @b EXPERIMENTAL: this API may change without prior notice
83  *
84  * Read Rx user data from mbuf.
85  *
86  * @param mbuf Structure to read from.
87  * @return user data
88  */
89 __rte_experimental
90 static inline rte_pmd_ark_rx_userdata_t
rte_pmd_ark_mbuf_rx_userdata_get(const struct rte_mbuf * mbuf)91 rte_pmd_ark_mbuf_rx_userdata_get(const struct rte_mbuf *mbuf)
92 {
93 #if RTE_PMD_ARK_RX_USERDATA_ENABLE
94 	return *RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_rx_userdata_dynfield_offset,
95 			rte_pmd_ark_rx_userdata_t *);
96 #else
97 	RTE_SET_USED(mbuf);
98 	return 0;
99 #endif
100 }
101 
102 /**
103  * @warning
104  * @b EXPERIMENTAL: this API may change without prior notice
105  *
106  * Write Rx user data to mbuf.
107  *
108  * @param mbuf Structure to write into.
109  * @param data User data.
110  */
111 __rte_experimental
112 static inline void
rte_pmd_ark_mbuf_rx_userdata_set(struct rte_mbuf * mbuf,rte_pmd_ark_rx_userdata_t data)113 rte_pmd_ark_mbuf_rx_userdata_set(struct rte_mbuf *mbuf,
114 		rte_pmd_ark_rx_userdata_t data)
115 {
116 #if RTE_PMD_ARK_RX_USERDATA_ENABLE
117 	*RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_rx_userdata_dynfield_offset,
118 			rte_pmd_ark_rx_userdata_t *) = data;
119 #else
120 	RTE_SET_USED(mbuf);
121 	RTE_SET_USED(data);
122 #endif
123 }
124 
125 #endif /* RTE_PMD_ARK_H */
126