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