/** * * \section COPYRIGHT * * Copyright 2013-2021 Software Radio Systems Limited * * By using this file, you agree to the terms and conditions set * forth in the LICENSE file which can be found at the top level of * the distribution. * */ #ifndef SRSRAN_SCHED_NR_CELL_H #define SRSRAN_SCHED_NR_CELL_H #include "sched_nr_cfg.h" #include "sched_nr_rb_grid.h" #include "srsran/adt/pool/cached_alloc.h" namespace srsenb { namespace sched_nr_impl { using dl_sched_rar_info_t = sched_nr_interface::dl_sched_rar_info_t; struct pending_rar_t { uint16_t ra_rnti = 0; slot_point prach_slot; srsran::bounded_vector msg3_grant; }; /// RAR/Msg3 scheduler class ra_sched { public: explicit ra_sched(const bwp_params& bwp_cfg_); int dl_rach_info(const dl_sched_rar_info_t& rar_info); void run_slot(bwp_slot_allocator& slot_grid, slot_ue_map_t& slot_ues); size_t empty() const { return pending_rars.empty(); } private: alloc_result allocate_pending_rar(bwp_slot_allocator& slot_grid, const pending_rar_t& rar, slot_ue_map_t& slot_ues, uint32_t& nof_grants_alloc); const bwp_params* bwp_cfg = nullptr; srslog::basic_logger& logger; srsran::deque pending_rars; }; class bwp_ctxt { public: explicit bwp_ctxt(const bwp_params& bwp_cfg); const bwp_params* cfg; // channel-specific schedulers ra_sched ra; // Stores pending allocations and PRB bitmaps bwp_res_grid grid; }; class serv_cell_manager { public: using feedback_callback_t = srsran::move_callback; explicit serv_cell_manager(const sched_cell_params& cell_cfg_); srsran::bounded_vector bwps; const sched_cell_params& cfg; private: srslog::basic_logger& logger; }; } // namespace sched_nr_impl } // namespace srsenb #endif // SRSRAN_SCHED_NR_CELL_H