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