1d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2d30ea906Sjfb8856606  * Copyright(c) 2010-2014 Intel Corporation
3a9643ea8Slogwang  */
4a9643ea8Slogwang 
5a9643ea8Slogwang #ifndef _COMMON_H_
6a9643ea8Slogwang #define _COMMON_H_
7a9643ea8Slogwang 
8a9643ea8Slogwang #define MAX_CLIENTS             16
9a9643ea8Slogwang 
10a9643ea8Slogwang /*
11a9643ea8Slogwang  * Shared port info, including statistics information for display by server.
12a9643ea8Slogwang  * Structure will be put in a memzone.
13a9643ea8Slogwang  * - All port id values share one cache line as this data will be read-only
14a9643ea8Slogwang  * during operation.
15a9643ea8Slogwang  * - All rx statistic values share cache lines, as this data is written only
16a9643ea8Slogwang  * by the server process. (rare reads by stats display)
17a9643ea8Slogwang  * - The tx statistics have values for all ports per cache line, but the stats
18a9643ea8Slogwang  * themselves are written by the clients, so we have a distinct set, on different
19a9643ea8Slogwang  * cache lines for each client to use.
20a9643ea8Slogwang  */
21a9643ea8Slogwang struct rx_stats{
22a9643ea8Slogwang 	uint64_t rx[RTE_MAX_ETHPORTS];
23a9643ea8Slogwang } __rte_cache_aligned;
24a9643ea8Slogwang 
25a9643ea8Slogwang struct tx_stats{
26a9643ea8Slogwang 	uint64_t tx[RTE_MAX_ETHPORTS];
27a9643ea8Slogwang 	uint64_t tx_drop[RTE_MAX_ETHPORTS];
28a9643ea8Slogwang } __rte_cache_aligned;
29a9643ea8Slogwang 
30a9643ea8Slogwang struct port_info {
312bfe3f2eSlogwang 	uint16_t num_ports;
322bfe3f2eSlogwang 	uint16_t id[RTE_MAX_ETHPORTS];
33a9643ea8Slogwang 	volatile struct rx_stats rx_stats;
34a9643ea8Slogwang 	volatile struct tx_stats tx_stats[MAX_CLIENTS];
35a9643ea8Slogwang };
36a9643ea8Slogwang 
37a9643ea8Slogwang /* define common names for structures shared between server and client */
38a9643ea8Slogwang #define MP_CLIENT_RXQ_NAME "MProc_Client_%u_RX"
39a9643ea8Slogwang #define PKTMBUF_POOL_NAME "MProc_pktmbuf_pool"
40a9643ea8Slogwang #define MZ_PORT_INFO "MProc_port_info"
41a9643ea8Slogwang 
42a9643ea8Slogwang /*
43a9643ea8Slogwang  * Given the rx queue name template above, get the queue name
44a9643ea8Slogwang  */
45a9643ea8Slogwang static inline const char *
get_rx_queue_name(uint8_t id)46*0c6bd470Sfengbojiang get_rx_queue_name(uint8_t id)
47a9643ea8Slogwang {
48a9643ea8Slogwang 	/* buffer for return value. Size calculated by %u being replaced
49a9643ea8Slogwang 	 * by maximum 3 digits (plus an extra byte for safety) */
50a9643ea8Slogwang 	static char buffer[sizeof(MP_CLIENT_RXQ_NAME) + 2];
51a9643ea8Slogwang 
524b05018fSfengbojiang 	snprintf(buffer, sizeof(buffer), MP_CLIENT_RXQ_NAME, id);
53a9643ea8Slogwang 	return buffer;
54a9643ea8Slogwang }
55a9643ea8Slogwang 
56a9643ea8Slogwang #define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1
57a9643ea8Slogwang 
58a9643ea8Slogwang #endif
59