/** @file wlan_mac_schedule.h * @brief Scheduler * * This set of functions allows upper-level MAC implementations * to schedule the execution of a provided callback for some point * in the future. * * @copyright Copyright 2014-2019, Mango Communications. All rights reserved. * Distributed under the Mango Communications Reference Design License * See LICENSE.txt included in the design archive or * at http://mangocomm.com/802.11/license * * This file is part of the Mango 802.11 Reference Design (https://mangocomm.com/802.11) */ /***************************** Include Files *********************************/ #include "wlan_mac_high_sw_config.h" #include "xil_types.h" /*************************** Constant Definitions ****************************/ #ifndef WLAN_MAC_SCHEDULE_H_ #define WLAN_MAC_SCHEDULE_H_ //----------------------------------------------- // Scheduler defines // #define SCHEDULE_ID_FINE 0 #define SCHEDULE_ID_COARSE 1 // Special value for num_calls parameter of wlan_sched #define SCHEDULE_REPEAT_FOREVER 0xFFFFFFFF // Reserved Schedule ID range #define SCHEDULE_ID_RESERVED_MIN 0xFFFFFF00 #define SCHEDULE_ID_RESERVED_MAX 0xFFFFFFFF // Defined Reserved Schedule IDs #define SCHEDULE_FAILURE 0xFFFFFFFF //----------------------------------------------- // Macros /*********************** Global Structure Definitions ************************/ struct dl_entry; // Schedule structure for scheduled events typedef struct wlan_sched{ u32 id; u8 enabled; u32 interval_us; u32 num_calls; u64 target_us; function_ptr_t callback; } wlan_sched_event_t; typedef struct wlan_schedule_t{ dl_list event_list; /// List of events in this schedule u32 exec_interval; /// Number of timer interrupts between executions of this scedule u32 polls_to_next_exec; /// Counter of polls between executions } wlan_schedule_t; /*************************** Function Prototypes *****************************/ int wlan_mac_schedule_init(); int wlan_mac_schedule_poll(); dl_entry* wlan_mac_schedule_find_event(u32 id, dl_list** sched_list_ret); u32 wlan_mac_schedule_add_event(u8 schedule_sel, u32 interval_us, u32 num_calls, void(*callback)()); int wlan_mac_schedule_remove_event(u32 event_id); int wlan_mac_schedule_disable_event(u32 event_id); int wlan_mac_schedule_enable_event(u32 event_id); #endif /* WLAN_MAC_SCHEDULE_H_ */