xref: /dpdk/examples/vm_power_manager/channel_monitor.h (revision 68a03efeed657e6e05f281479b33b51102797e15)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #ifndef CHANNEL_MONITOR_H_
6 #define CHANNEL_MONITOR_H_
7 
8 #include <rte_power.h>
9 
10 #include "channel_manager.h"
11 
12 struct core_share {
13 	unsigned int pcpu;
14 	/*
15 	 * 1 CORE SHARE
16 	 * 0 NOT SHARED
17 	 */
18 	int status;
19 };
20 
21 struct policy {
22 	struct rte_power_channel_packet pkt;
23 	uint32_t pfid[RTE_POWER_MAX_VFS];
24 	uint32_t port[RTE_POWER_MAX_VFS];
25 	unsigned int enabled;
26 	struct core_share core_share[RTE_POWER_MAX_VCPU_PER_VM];
27 };
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 /**
34  * Setup the Channel Monitor resources required to initialize epoll.
35  * Must be called first before calling other functions.
36  *
37  * @return
38  *  - 0 on success.
39  *  - Negative on error.
40  */
41 int channel_monitor_init(void);
42 
43 /**
44  * Run the channel monitor, loops forever on on epoll_wait.
45  *
46  *
47  * @return
48  *  None
49  */
50 void run_channel_monitor(void);
51 
52 /**
53  * Exit the Channel Monitor, exiting the epoll_wait loop and events processing.
54  *
55  * @return
56  *  - 0 on success.
57  *  - Negative on error.
58  */
59 void channel_monitor_exit(void);
60 
61 /**
62  * Add an open channel to monitor via epoll. A pointer to struct channel_info
63  * will be registered with epoll for event processing.
64  * It is thread-safe.
65  *
66  * @param chan_info
67  *  Pointer to struct channel_info pointer.
68  *
69  * @return
70  *  - 0 on success.
71  *  - Negative on error.
72  */
73 int add_channel_to_monitor(struct channel_info **chan_info);
74 
75 /**
76  * Remove a previously added channel from epoll control.
77  *
78  * @param chan_info
79  *  Pointer to struct channel_info.
80  *
81  * @return
82  *  - 0 on success.
83  *  - Negative on error.
84  */
85 int remove_channel_from_monitor(struct channel_info *chan_info);
86 
87 #ifdef __cplusplus
88 }
89 #endif
90 
91 
92 #endif /* CHANNEL_MONITOR_H_ */
93