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