mirror of https://github.com/PentHertz/srsLTE.git
change the naming from tti --> sf for scheduling operations specific to a subframe
This commit is contained in:
parent
81b46723f6
commit
dc782e514b
|
@ -88,16 +88,16 @@ public:
|
|||
{
|
||||
public:
|
||||
/* Virtual methods for user metric calculation */
|
||||
virtual void set_params(const sched_params_t& sched_params_) = 0;
|
||||
virtual void sched_users(std::map<uint16_t, sched_ue>& ue_db, dl_tti_sched_t* tti_sched, uint32_t cc_idx) = 0;
|
||||
virtual void set_params(const sched_params_t& sched_params_) = 0;
|
||||
virtual void sched_users(std::map<uint16_t, sched_ue>& ue_db, dl_sf_sched_itf* tti_sched, uint32_t cc_idx) = 0;
|
||||
};
|
||||
|
||||
class metric_ul
|
||||
{
|
||||
public:
|
||||
/* Virtual methods for user metric calculation */
|
||||
virtual void set_params(const sched_params_t& sched_params_) = 0;
|
||||
virtual void sched_users(std::map<uint16_t, sched_ue>& ue_db, ul_tti_sched_t* tti_sched, uint32_t cc_idx) = 0;
|
||||
virtual void set_params(const sched_params_t& sched_params_) = 0;
|
||||
virtual void sched_users(std::map<uint16_t, sched_ue>& ue_db, ul_sf_sched_itf* tti_sched, uint32_t cc_idx) = 0;
|
||||
};
|
||||
|
||||
/*************************************************************
|
||||
|
|
|
@ -33,26 +33,23 @@ class sched::carrier_sched
|
|||
{
|
||||
public:
|
||||
explicit carrier_sched(rrc_interface_mac* rrc_, std::map<uint16_t, sched_ue>* ue_db_, uint32_t enb_cc_idx_);
|
||||
void reset();
|
||||
void carrier_cfg(const sched_params_t& sched_params_);
|
||||
void set_metric(sched::metric_dl* dl_metric_, sched::metric_ul* ul_metric_);
|
||||
void set_dl_tti_mask(uint8_t* tti_mask, uint32_t nof_sfs);
|
||||
tti_sched_result_t* generate_tti_result(uint32_t tti_rx);
|
||||
int dl_rach_info(dl_sched_rar_info_t rar_info);
|
||||
void reset();
|
||||
void carrier_cfg(const sched_params_t& sched_params_);
|
||||
void set_metric(sched::metric_dl* dl_metric_, sched::metric_ul* ul_metric_);
|
||||
void set_dl_tti_mask(uint8_t* tti_mask, uint32_t nof_sfs);
|
||||
sf_sched* generate_tti_result(uint32_t tti_rx);
|
||||
int dl_rach_info(dl_sched_rar_info_t rar_info);
|
||||
|
||||
// getters
|
||||
const ra_sched* get_ra_sched() const { return ra_sched_ptr.get(); }
|
||||
const tti_sched_result_t* get_tti_sched_view(uint32_t tti_rx) const
|
||||
{
|
||||
return &tti_scheds[tti_rx % tti_scheds.size()];
|
||||
}
|
||||
const ra_sched* get_ra_sched() const { return ra_sched_ptr.get(); }
|
||||
const sf_sched* get_sf_sched(uint32_t tti_rx) const { return &sf_scheds[tti_rx % sf_scheds.size()]; }
|
||||
|
||||
private:
|
||||
void generate_phich(tti_sched_result_t* tti_sched);
|
||||
void generate_phich(sf_sched* tti_sched);
|
||||
//! Compute DL scheduler result for given TTI
|
||||
void alloc_dl_users(tti_sched_result_t* tti_result);
|
||||
void alloc_dl_users(sf_sched* tti_result);
|
||||
//! Compute UL scheduler result for given TTI
|
||||
int alloc_ul_users(tti_sched_result_t* tti_sched);
|
||||
int alloc_ul_users(sf_sched* tti_sched);
|
||||
|
||||
// args
|
||||
const sched_params_t* sched_params = nullptr;
|
||||
|
@ -68,9 +65,9 @@ private:
|
|||
prbmask_t pucch_mask;
|
||||
|
||||
// TTI result storage and management
|
||||
std::array<tti_sched_result_t, TTIMOD_SZ> tti_scheds;
|
||||
tti_sched_result_t* get_tti_sched(uint32_t tti_rx) { return &tti_scheds[tti_rx % tti_scheds.size()]; }
|
||||
std::vector<uint8_t> tti_dl_mask; ///< Some TTIs may be forbidden for DL sched due to MBMS
|
||||
std::array<sf_sched, TTIMOD_SZ> sf_scheds;
|
||||
sf_sched* get_sf_sched(uint32_t tti_rx) { return &sf_scheds[tti_rx % sf_scheds.size()]; }
|
||||
std::vector<uint8_t> sf_dl_mask; ///< Some TTIs may be forbidden for DL sched due to MBMS
|
||||
|
||||
std::unique_ptr<bc_sched> bc_sched_ptr;
|
||||
std::unique_ptr<ra_sched> ra_sched_ptr;
|
||||
|
@ -84,7 +81,7 @@ class bc_sched
|
|||
{
|
||||
public:
|
||||
explicit bc_sched(const sched::cell_cfg_t& cfg_, rrc_interface_mac* rrc_);
|
||||
void dl_sched(tti_sched_result_t* tti_sched);
|
||||
void dl_sched(sf_sched* tti_sched);
|
||||
void reset();
|
||||
|
||||
private:
|
||||
|
@ -94,9 +91,9 @@ private:
|
|||
uint32_t n_tx = 0;
|
||||
};
|
||||
|
||||
void update_si_windows(tti_sched_result_t* tti_sched);
|
||||
void alloc_sibs(tti_sched_result_t* tti_sched);
|
||||
void alloc_paging(tti_sched_result_t* tti_sched);
|
||||
void update_si_windows(sf_sched* tti_sched);
|
||||
void alloc_sibs(sf_sched* tti_sched);
|
||||
void alloc_paging(sf_sched* tti_sched);
|
||||
|
||||
// args
|
||||
const sched::cell_cfg_t* cfg;
|
||||
|
@ -126,8 +123,8 @@ public:
|
|||
};
|
||||
|
||||
explicit ra_sched(const sched::cell_cfg_t& cfg_, srslte::log* log_, std::map<uint16_t, sched_ue>& ue_db_);
|
||||
void dl_sched(tti_sched_result_t* tti_sched);
|
||||
void ul_sched(tti_sched_result_t* tti_sched);
|
||||
void dl_sched(sf_sched* tti_sched);
|
||||
void ul_sched(sf_sched* tti_sched);
|
||||
int dl_rach_info(dl_sched_rar_info_t rar_info);
|
||||
void reset();
|
||||
const pending_msg3_t& find_pending_msg3(uint32_t tti) const;
|
||||
|
|
|
@ -104,7 +104,7 @@ private:
|
|||
};
|
||||
|
||||
//! manages a full TTI grid resources, namely CCE and DL/UL RB allocations
|
||||
class tti_grid_t
|
||||
class sf_grid_t
|
||||
{
|
||||
public:
|
||||
struct dl_ctrl_alloc_t {
|
||||
|
@ -148,7 +148,7 @@ private:
|
|||
};
|
||||
|
||||
//! generic interface used by DL scheduler algorithm
|
||||
class dl_tti_sched_t
|
||||
class dl_sf_sched_itf
|
||||
{
|
||||
public:
|
||||
virtual alloc_outcome_t alloc_dl_user(sched_ue* user, const rbgmask_t& user_mask, uint32_t pid) = 0;
|
||||
|
@ -159,7 +159,7 @@ public:
|
|||
};
|
||||
|
||||
//! generic interface used by UL scheduler algorithm
|
||||
class ul_tti_sched_t
|
||||
class ul_sf_sched_itf
|
||||
{
|
||||
public:
|
||||
virtual alloc_outcome_t alloc_ul_user(sched_ue* user, ul_harq_proc::ul_alloc_t alloc) = 0;
|
||||
|
@ -172,7 +172,7 @@ public:
|
|||
* Converts the stored allocations' metadata to the scheduler UL/DL result
|
||||
* Handles the generation of DCI formats
|
||||
*/
|
||||
class tti_sched_result_t : public dl_tti_sched_t, public ul_tti_sched_t
|
||||
class sf_sched : public dl_sf_sched_itf, public ul_sf_sched_itf
|
||||
{
|
||||
public:
|
||||
struct ctrl_alloc_t {
|
||||
|
@ -249,23 +249,21 @@ public:
|
|||
const tti_params_t& get_tti_params() const { return tti_params; }
|
||||
|
||||
private:
|
||||
bool is_dl_alloc(sched_ue* user) const final;
|
||||
bool is_ul_alloc(sched_ue* user) const final;
|
||||
ctrl_code_t alloc_dl_ctrl(uint32_t aggr_lvl, uint32_t tbs_bytes, uint16_t rnti);
|
||||
alloc_outcome_t alloc_ul(sched_ue* user,
|
||||
ul_harq_proc::ul_alloc_t alloc,
|
||||
tti_sched_result_t::ul_alloc_t::type_t alloc_type,
|
||||
uint32_t msg3 = 0);
|
||||
int generate_format1a(uint32_t rb_start,
|
||||
uint32_t l_crb,
|
||||
uint32_t tbs,
|
||||
uint32_t rv,
|
||||
uint16_t rnti,
|
||||
srslte_dci_dl_t* dci);
|
||||
void set_bc_sched_result(const pdcch_grid_t::alloc_result_t& dci_result);
|
||||
void set_rar_sched_result(const pdcch_grid_t::alloc_result_t& dci_result);
|
||||
void set_dl_data_sched_result(const pdcch_grid_t::alloc_result_t& dci_result);
|
||||
void set_ul_sched_result(const pdcch_grid_t::alloc_result_t& dci_result);
|
||||
bool is_dl_alloc(sched_ue* user) const final;
|
||||
bool is_ul_alloc(sched_ue* user) const final;
|
||||
ctrl_code_t alloc_dl_ctrl(uint32_t aggr_lvl, uint32_t tbs_bytes, uint16_t rnti);
|
||||
alloc_outcome_t
|
||||
alloc_ul(sched_ue* user, ul_harq_proc::ul_alloc_t alloc, sf_sched::ul_alloc_t::type_t alloc_type, uint32_t msg3 = 0);
|
||||
int generate_format1a(uint32_t rb_start,
|
||||
uint32_t l_crb,
|
||||
uint32_t tbs,
|
||||
uint32_t rv,
|
||||
uint16_t rnti,
|
||||
srslte_dci_dl_t* dci);
|
||||
void set_bc_sched_result(const pdcch_grid_t::alloc_result_t& dci_result);
|
||||
void set_rar_sched_result(const pdcch_grid_t::alloc_result_t& dci_result);
|
||||
void set_dl_data_sched_result(const pdcch_grid_t::alloc_result_t& dci_result);
|
||||
void set_ul_sched_result(const pdcch_grid_t::alloc_result_t& dci_result);
|
||||
|
||||
// consts
|
||||
const sched_params_t* sched_params = nullptr;
|
||||
|
@ -274,7 +272,7 @@ private:
|
|||
|
||||
// internal state
|
||||
tti_params_t tti_params{10241};
|
||||
tti_grid_t tti_alloc;
|
||||
sf_grid_t tti_alloc;
|
||||
std::vector<rar_alloc_t> rar_allocs;
|
||||
std::vector<bc_alloc_t> bc_allocs;
|
||||
std::vector<dl_alloc_t> data_allocs;
|
||||
|
|
|
@ -32,30 +32,30 @@ class dl_metric_rr : public sched::metric_dl
|
|||
|
||||
public:
|
||||
void set_params(const sched_params_t& sched_params_) final;
|
||||
void sched_users(std::map<uint16_t, sched_ue>& ue_db, dl_tti_sched_t* tti_sched, uint32_t cc_idx) final;
|
||||
void sched_users(std::map<uint16_t, sched_ue>& ue_db, dl_sf_sched_itf* tti_sched, uint32_t cc_idx) final;
|
||||
|
||||
private:
|
||||
bool find_allocation(uint32_t nof_rbg, rbgmask_t* rbgmask);
|
||||
dl_harq_proc* allocate_user(sched_ue* user, uint32_t cc_idx);
|
||||
|
||||
srslte::log* log_h = nullptr;
|
||||
dl_tti_sched_t* tti_alloc = nullptr;
|
||||
srslte::log* log_h = nullptr;
|
||||
dl_sf_sched_itf* tti_alloc = nullptr;
|
||||
};
|
||||
|
||||
class ul_metric_rr : public sched::metric_ul
|
||||
{
|
||||
public:
|
||||
void set_params(const sched_params_t& sched_params_) final;
|
||||
void sched_users(std::map<uint16_t, sched_ue>& ue_db, ul_tti_sched_t* tti_sched, uint32_t cc_idx) final;
|
||||
void sched_users(std::map<uint16_t, sched_ue>& ue_db, ul_sf_sched_itf* tti_sched, uint32_t cc_idx) final;
|
||||
|
||||
private:
|
||||
bool find_allocation(uint32_t L, ul_harq_proc::ul_alloc_t* alloc);
|
||||
ul_harq_proc* allocate_user_newtx_prbs(sched_ue* user, uint32_t cc_idx);
|
||||
ul_harq_proc* allocate_user_retx_prbs(sched_ue* user, uint32_t cc_idx);
|
||||
|
||||
srslte::log* log_h = nullptr;
|
||||
ul_tti_sched_t* tti_alloc = nullptr;
|
||||
uint32_t current_tti;
|
||||
srslte::log* log_h = nullptr;
|
||||
ul_sf_sched_itf* tti_alloc = nullptr;
|
||||
uint32_t current_tti;
|
||||
};
|
||||
|
||||
} // namespace srsenb
|
||||
|
|
|
@ -396,7 +396,7 @@ int sched::dl_sched(uint32_t tti, uint32_t cc_idx, sched_interface::dl_sched_res
|
|||
if (cc_idx < carrier_schedulers.size()) {
|
||||
// Compute scheduling Result for tti_rx
|
||||
pthread_rwlock_rdlock(&rwlock);
|
||||
tti_sched_result_t* tti_sched = carrier_schedulers[cc_idx]->generate_tti_result(tti_rx);
|
||||
sf_sched* tti_sched = carrier_schedulers[cc_idx]->generate_tti_result(tti_rx);
|
||||
pthread_rwlock_unlock(&rwlock);
|
||||
|
||||
// copy result
|
||||
|
@ -418,7 +418,7 @@ int sched::ul_sched(uint32_t tti, uint32_t cc_idx, srsenb::sched_interface::ul_s
|
|||
|
||||
if (cc_idx < carrier_schedulers.size()) {
|
||||
pthread_rwlock_rdlock(&rwlock);
|
||||
tti_sched_result_t* tti_sched = carrier_schedulers[cc_idx]->generate_tti_result(tti_rx);
|
||||
sf_sched* tti_sched = carrier_schedulers[cc_idx]->generate_tti_result(tti_rx);
|
||||
pthread_rwlock_unlock(&rwlock);
|
||||
|
||||
// copy result
|
||||
|
|
|
@ -34,7 +34,7 @@ namespace srsenb {
|
|||
|
||||
bc_sched::bc_sched(const sched::cell_cfg_t& cfg_, srsenb::rrc_interface_mac* rrc_) : cfg(&cfg_), rrc(rrc_) {}
|
||||
|
||||
void bc_sched::dl_sched(tti_sched_result_t* tti_sched)
|
||||
void bc_sched::dl_sched(sf_sched* tti_sched)
|
||||
{
|
||||
current_sf_idx = tti_sched->get_sf_idx();
|
||||
current_sfn = tti_sched->get_sfn();
|
||||
|
@ -52,7 +52,7 @@ void bc_sched::dl_sched(tti_sched_result_t* tti_sched)
|
|||
alloc_paging(tti_sched);
|
||||
}
|
||||
|
||||
void bc_sched::update_si_windows(tti_sched_result_t* tti_sched)
|
||||
void bc_sched::update_si_windows(sf_sched* tti_sched)
|
||||
{
|
||||
uint32_t tti_tx_dl = tti_sched->get_tti_tx_dl();
|
||||
|
||||
|
@ -90,7 +90,7 @@ void bc_sched::update_si_windows(tti_sched_result_t* tti_sched)
|
|||
}
|
||||
}
|
||||
|
||||
void bc_sched::alloc_sibs(tti_sched_result_t* tti_sched)
|
||||
void bc_sched::alloc_sibs(sf_sched* tti_sched)
|
||||
{
|
||||
for (uint32_t i = 0; i < pending_sibs.size(); i++) {
|
||||
if (cfg->sibs[i].len > 0 and pending_sibs[i].is_in_window and pending_sibs[i].n_tx < 4) {
|
||||
|
@ -112,7 +112,7 @@ void bc_sched::alloc_sibs(tti_sched_result_t* tti_sched)
|
|||
}
|
||||
}
|
||||
|
||||
void bc_sched::alloc_paging(tti_sched_result_t* tti_sched)
|
||||
void bc_sched::alloc_paging(sf_sched* tti_sched)
|
||||
{
|
||||
/* Allocate DCIs and RBGs for paging */
|
||||
if (rrc != nullptr) {
|
||||
|
@ -144,7 +144,7 @@ ra_sched::ra_sched(const sched::cell_cfg_t& cfg_, srslte::log* log_, std::map<ui
|
|||
// Schedules RAR
|
||||
// On every call to this function, we schedule the oldest RAR which is still within the window. If outside the window we
|
||||
// discard it.
|
||||
void ra_sched::dl_sched(srsenb::tti_sched_result_t* tti_sched)
|
||||
void ra_sched::dl_sched(srsenb::sf_sched* tti_sched)
|
||||
{
|
||||
tti_tx_dl = tti_sched->get_tti_tx_dl();
|
||||
rar_aggr_level = 2;
|
||||
|
@ -188,10 +188,10 @@ void ra_sched::dl_sched(srsenb::tti_sched_result_t* tti_sched)
|
|||
rar_grant.nof_grants++;
|
||||
|
||||
// Try to schedule DCI + RBGs for RAR Grant
|
||||
tti_sched_result_t::rar_code_t ret = tti_sched->alloc_rar(rar_aggr_level,
|
||||
rar_grant,
|
||||
rar.prach_tti,
|
||||
7 * rar_grant.nof_grants); // fixme: check RAR size
|
||||
sf_sched::rar_code_t ret = tti_sched->alloc_rar(rar_aggr_level,
|
||||
rar_grant,
|
||||
rar.prach_tti,
|
||||
7 * rar_grant.nof_grants); // fixme: check RAR size
|
||||
|
||||
// If we can allocate, schedule Msg3 and remove from pending
|
||||
if (!ret.first) {
|
||||
|
@ -218,7 +218,7 @@ void ra_sched::dl_sched(srsenb::tti_sched_result_t* tti_sched)
|
|||
}
|
||||
|
||||
// Schedules Msg3
|
||||
void ra_sched::ul_sched(tti_sched_result_t* tti_sched)
|
||||
void ra_sched::ul_sched(sf_sched* tti_sched)
|
||||
{
|
||||
uint32_t pending_tti = tti_sched->get_tti_tx_ul() % TTIMOD_SZ;
|
||||
|
||||
|
@ -283,7 +283,7 @@ sched::carrier_sched::carrier_sched(rrc_interface_mac* rrc_,
|
|||
ue_db(ue_db_),
|
||||
enb_cc_idx(enb_cc_idx_)
|
||||
{
|
||||
tti_dl_mask.resize(1, 0);
|
||||
sf_dl_mask.resize(1, 0);
|
||||
}
|
||||
|
||||
void sched::carrier_sched::reset()
|
||||
|
@ -319,7 +319,7 @@ void sched::carrier_sched::carrier_cfg(const sched_params_t& sched_params_)
|
|||
prach_mask.fill(cfg_->prach_freq_offset, cfg_->prach_freq_offset + 6);
|
||||
|
||||
// Initiate the tti_scheduler for each TTI
|
||||
for (tti_sched_result_t& tti_sched : tti_scheds) {
|
||||
for (sf_sched& tti_sched : sf_scheds) {
|
||||
tti_sched.init(*sched_params, enb_cc_idx);
|
||||
}
|
||||
}
|
||||
|
@ -332,12 +332,12 @@ void sched::carrier_sched::set_metric(sched::metric_dl* dl_metric_, sched::metri
|
|||
|
||||
void sched::carrier_sched::set_dl_tti_mask(uint8_t* tti_mask, uint32_t nof_sfs)
|
||||
{
|
||||
tti_dl_mask.assign(tti_mask, tti_mask + nof_sfs);
|
||||
sf_dl_mask.assign(tti_mask, tti_mask + nof_sfs);
|
||||
}
|
||||
|
||||
tti_sched_result_t* sched::carrier_sched::generate_tti_result(uint32_t tti_rx)
|
||||
sf_sched* sched::carrier_sched::generate_tti_result(uint32_t tti_rx)
|
||||
{
|
||||
tti_sched_result_t* tti_sched = get_tti_sched(tti_rx);
|
||||
sf_sched* tti_sched = get_sf_sched(tti_rx);
|
||||
|
||||
// if it is the first time tti is run, reset vars
|
||||
if (tti_rx != tti_sched->get_tti_rx()) {
|
||||
|
@ -351,7 +351,7 @@ tti_sched_result_t* sched::carrier_sched::generate_tti_result(uint32_t tti_rx)
|
|||
generate_phich(tti_sched);
|
||||
|
||||
/* Schedule DL control data */
|
||||
if (tti_dl_mask[tti_sched->get_tti_tx_dl() % tti_dl_mask.size()] == 0) {
|
||||
if (sf_dl_mask[tti_sched->get_tti_tx_dl() % sf_dl_mask.size()] == 0) {
|
||||
/* Schedule Broadcast data (SIB and paging) */
|
||||
bc_sched_ptr->dl_sched(tti_sched);
|
||||
|
||||
|
@ -383,7 +383,7 @@ tti_sched_result_t* sched::carrier_sched::generate_tti_result(uint32_t tti_rx)
|
|||
return tti_sched;
|
||||
}
|
||||
|
||||
void sched::carrier_sched::generate_phich(tti_sched_result_t* tti_sched)
|
||||
void sched::carrier_sched::generate_phich(sf_sched* tti_sched)
|
||||
{
|
||||
// Allocate user PHICHs
|
||||
uint32_t nof_phich_elems = 0;
|
||||
|
@ -415,9 +415,9 @@ void sched::carrier_sched::generate_phich(tti_sched_result_t* tti_sched)
|
|||
tti_sched->ul_sched_result.nof_phich_elems = nof_phich_elems;
|
||||
}
|
||||
|
||||
void sched::carrier_sched::alloc_dl_users(tti_sched_result_t* tti_result)
|
||||
void sched::carrier_sched::alloc_dl_users(sf_sched* tti_result)
|
||||
{
|
||||
if (tti_dl_mask[tti_result->get_tti_tx_dl() % tti_dl_mask.size()] != 0) {
|
||||
if (sf_dl_mask[tti_result->get_tti_tx_dl() % sf_dl_mask.size()] != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -437,7 +437,7 @@ void sched::carrier_sched::alloc_dl_users(tti_sched_result_t* tti_result)
|
|||
dl_metric->sched_users(*ue_db, tti_result, enb_cc_idx);
|
||||
}
|
||||
|
||||
int sched::carrier_sched::alloc_ul_users(tti_sched_result_t* tti_sched)
|
||||
int sched::carrier_sched::alloc_ul_users(sf_sched* tti_sched)
|
||||
{
|
||||
uint32_t tti_tx_ul = tti_sched->get_tti_tx_ul();
|
||||
prbmask_t& ul_mask = tti_sched->get_ul_mask();
|
||||
|
|
|
@ -263,7 +263,7 @@ std::string pdcch_grid_t::result_to_string(bool verbose) const
|
|||
* TTI resource Scheduling Methods
|
||||
*******************************************************/
|
||||
|
||||
void tti_grid_t::init(const sched_params_t& sched_params_, uint32_t cc_idx_)
|
||||
void sf_grid_t::init(const sched_params_t& sched_params_, uint32_t cc_idx_)
|
||||
{
|
||||
sched_params = &sched_params_;
|
||||
log_h = sched_params->log_h;
|
||||
|
@ -275,7 +275,7 @@ void tti_grid_t::init(const sched_params_t& sched_params_, uint32_t cc_idx_)
|
|||
pdcch_alloc.init(*sched_params);
|
||||
}
|
||||
|
||||
void tti_grid_t::new_tti(const tti_params_t& tti_params_, uint32_t start_cfi)
|
||||
void sf_grid_t::new_tti(const tti_params_t& tti_params_, uint32_t start_cfi)
|
||||
{
|
||||
tti_params = &tti_params_;
|
||||
|
||||
|
@ -289,7 +289,7 @@ void tti_grid_t::new_tti(const tti_params_t& tti_params_, uint32_t start_cfi)
|
|||
}
|
||||
|
||||
//! Allocates CCEs and RBs for the given mask and allocation type (e.g. data, BC, RAR, paging)
|
||||
alloc_outcome_t tti_grid_t::alloc_dl(uint32_t aggr_lvl, alloc_type_t alloc_type, rbgmask_t alloc_mask, sched_ue* user)
|
||||
alloc_outcome_t sf_grid_t::alloc_dl(uint32_t aggr_lvl, alloc_type_t alloc_type, rbgmask_t alloc_mask, sched_ue* user)
|
||||
{
|
||||
// Check RBG collision
|
||||
if ((dl_mask & alloc_mask).any()) {
|
||||
|
@ -316,7 +316,7 @@ alloc_outcome_t tti_grid_t::alloc_dl(uint32_t aggr_lvl, alloc_type_t alloc_type,
|
|||
}
|
||||
|
||||
//! Allocates CCEs and RBs for control allocs. It allocates RBs in a contiguous manner.
|
||||
tti_grid_t::dl_ctrl_alloc_t tti_grid_t::alloc_dl_ctrl(uint32_t aggr_lvl, alloc_type_t alloc_type)
|
||||
sf_grid_t::dl_ctrl_alloc_t sf_grid_t::alloc_dl_ctrl(uint32_t aggr_lvl, alloc_type_t alloc_type)
|
||||
{
|
||||
rbg_range_t range;
|
||||
range.rbg_start = nof_rbgs - avail_rbg;
|
||||
|
@ -339,7 +339,7 @@ tti_grid_t::dl_ctrl_alloc_t tti_grid_t::alloc_dl_ctrl(uint32_t aggr_lvl, alloc_t
|
|||
}
|
||||
|
||||
//! Allocates CCEs and RBs for a user DL data alloc.
|
||||
alloc_outcome_t tti_grid_t::alloc_dl_data(sched_ue* user, const rbgmask_t& user_mask)
|
||||
alloc_outcome_t sf_grid_t::alloc_dl_data(sched_ue* user, const rbgmask_t& user_mask)
|
||||
{
|
||||
srslte_dci_format_t dci_format = user->get_dci_format();
|
||||
uint32_t nof_bits = srslte_dci_format_sizeof(&sched_params->cfg->cell, nullptr, nullptr, dci_format);
|
||||
|
@ -347,7 +347,7 @@ alloc_outcome_t tti_grid_t::alloc_dl_data(sched_ue* user, const rbgmask_t& user_
|
|||
return alloc_dl(aggr_level, alloc_type_t::DL_DATA, user_mask, user);
|
||||
}
|
||||
|
||||
alloc_outcome_t tti_grid_t::alloc_ul_data(sched_ue* user, ul_harq_proc::ul_alloc_t alloc, bool needs_pdcch)
|
||||
alloc_outcome_t sf_grid_t::alloc_ul_data(sched_ue* user, ul_harq_proc::ul_alloc_t alloc, bool needs_pdcch)
|
||||
{
|
||||
if (alloc.RB_start + alloc.L > ul_mask.size()) {
|
||||
return alloc_outcome_t::ERROR;
|
||||
|
@ -382,7 +382,7 @@ alloc_outcome_t tti_grid_t::alloc_ul_data(sched_ue* user, ul_harq_proc::ul_alloc
|
|||
* TTI resource Scheduling Methods
|
||||
*******************************************************/
|
||||
|
||||
void tti_sched_result_t::init(const sched_params_t& sched_params_, uint32_t enb_cc_idx_)
|
||||
void sf_sched::init(const sched_params_t& sched_params_, uint32_t enb_cc_idx_)
|
||||
{
|
||||
sched_params = &sched_params_;
|
||||
enb_cc_idx = enb_cc_idx_;
|
||||
|
@ -390,7 +390,7 @@ void tti_sched_result_t::init(const sched_params_t& sched_params_, uint32_t enb_
|
|||
tti_alloc.init(*sched_params, 0);
|
||||
}
|
||||
|
||||
void tti_sched_result_t::new_tti(uint32_t tti_rx_, uint32_t start_cfi)
|
||||
void sf_sched::new_tti(uint32_t tti_rx_, uint32_t start_cfi)
|
||||
{
|
||||
tti_params = tti_params_t{tti_rx_};
|
||||
tti_alloc.new_tti(tti_params, start_cfi);
|
||||
|
@ -408,7 +408,7 @@ void tti_sched_result_t::new_tti(uint32_t tti_rx_, uint32_t start_cfi)
|
|||
bzero(&ul_sched_result, sizeof(ul_sched_result));
|
||||
}
|
||||
|
||||
bool tti_sched_result_t::is_dl_alloc(sched_ue* user) const
|
||||
bool sf_sched::is_dl_alloc(sched_ue* user) const
|
||||
{
|
||||
for (const auto& a : data_allocs) {
|
||||
if (a.user_ptr == user) {
|
||||
|
@ -418,7 +418,7 @@ bool tti_sched_result_t::is_dl_alloc(sched_ue* user) const
|
|||
return false;
|
||||
}
|
||||
|
||||
bool tti_sched_result_t::is_ul_alloc(sched_ue* user) const
|
||||
bool sf_sched::is_ul_alloc(sched_ue* user) const
|
||||
{
|
||||
for (const auto& a : ul_data_allocs) {
|
||||
if (a.user_ptr == user) {
|
||||
|
@ -428,7 +428,7 @@ bool tti_sched_result_t::is_ul_alloc(sched_ue* user) const
|
|||
return false;
|
||||
}
|
||||
|
||||
tti_sched_result_t::ctrl_code_t tti_sched_result_t::alloc_dl_ctrl(uint32_t aggr_lvl, uint32_t tbs_bytes, uint16_t rnti)
|
||||
sf_sched::ctrl_code_t sf_sched::alloc_dl_ctrl(uint32_t aggr_lvl, uint32_t tbs_bytes, uint16_t rnti)
|
||||
{
|
||||
ctrl_alloc_t ctrl_alloc{};
|
||||
|
||||
|
@ -441,7 +441,7 @@ tti_sched_result_t::ctrl_code_t tti_sched_result_t::alloc_dl_ctrl(uint32_t aggr_
|
|||
}
|
||||
|
||||
/* Allocate space in the DL RBG and PDCCH grids */
|
||||
tti_grid_t::dl_ctrl_alloc_t ret = tti_alloc.alloc_dl_ctrl(aggr_lvl, alloc_type);
|
||||
sf_grid_t::dl_ctrl_alloc_t ret = tti_alloc.alloc_dl_ctrl(aggr_lvl, alloc_type);
|
||||
if (not ret.outcome) {
|
||||
return {ret.outcome, ctrl_alloc};
|
||||
}
|
||||
|
@ -456,7 +456,7 @@ tti_sched_result_t::ctrl_code_t tti_sched_result_t::alloc_dl_ctrl(uint32_t aggr_
|
|||
return {ret.outcome, ctrl_alloc};
|
||||
}
|
||||
|
||||
alloc_outcome_t tti_sched_result_t::alloc_bc(uint32_t aggr_lvl, uint32_t sib_idx, uint32_t sib_ntx)
|
||||
alloc_outcome_t sf_sched::alloc_bc(uint32_t aggr_lvl, uint32_t sib_idx, uint32_t sib_ntx)
|
||||
{
|
||||
uint32_t sib_len = sched_params->cfg->sibs[sib_idx].len;
|
||||
uint32_t rv = sched::get_rvidx(sib_ntx);
|
||||
|
@ -479,7 +479,7 @@ alloc_outcome_t tti_sched_result_t::alloc_bc(uint32_t aggr_lvl, uint32_t sib_idx
|
|||
return ret.first;
|
||||
}
|
||||
|
||||
alloc_outcome_t tti_sched_result_t::alloc_paging(uint32_t aggr_lvl, uint32_t paging_payload)
|
||||
alloc_outcome_t sf_sched::alloc_paging(uint32_t aggr_lvl, uint32_t paging_payload)
|
||||
{
|
||||
ctrl_code_t ret = alloc_dl_ctrl(aggr_lvl, paging_payload, SRSLTE_PRNTI);
|
||||
if (not ret.first) {
|
||||
|
@ -495,10 +495,10 @@ alloc_outcome_t tti_sched_result_t::alloc_paging(uint32_t aggr_lvl, uint32_t pag
|
|||
return ret.first;
|
||||
}
|
||||
|
||||
tti_sched_result_t::rar_code_t tti_sched_result_t::alloc_rar(uint32_t aggr_lvl,
|
||||
const sched_interface::dl_sched_rar_t& rar_grant,
|
||||
uint32_t prach_tti,
|
||||
uint32_t buf_rar)
|
||||
sf_sched::rar_code_t sf_sched::alloc_rar(uint32_t aggr_lvl,
|
||||
const sched_interface::dl_sched_rar_t& rar_grant,
|
||||
uint32_t prach_tti,
|
||||
uint32_t buf_rar)
|
||||
{
|
||||
// RA-RNTI = 1 + t_id + f_id
|
||||
// t_id = index of first subframe specified by PRACH (0<=t_id<10)
|
||||
|
@ -519,7 +519,7 @@ tti_sched_result_t::rar_code_t tti_sched_result_t::alloc_rar(uint32_t
|
|||
return {ret.first, &rar_allocs.back()};
|
||||
}
|
||||
|
||||
alloc_outcome_t tti_sched_result_t::alloc_dl_user(sched_ue* user, const rbgmask_t& user_mask, uint32_t pid)
|
||||
alloc_outcome_t sf_sched::alloc_dl_user(sched_ue* user, const rbgmask_t& user_mask, uint32_t pid)
|
||||
{
|
||||
if (is_dl_alloc(user)) {
|
||||
log_h->warning("SCHED: Attempt to assign multiple harq pids to the same user rnti=0x%x\n", user->get_rnti());
|
||||
|
@ -543,10 +543,10 @@ alloc_outcome_t tti_sched_result_t::alloc_dl_user(sched_ue* user, const rbgmask_
|
|||
return alloc_outcome_t::SUCCESS;
|
||||
}
|
||||
|
||||
alloc_outcome_t tti_sched_result_t::alloc_ul(sched_ue* user,
|
||||
ul_harq_proc::ul_alloc_t alloc,
|
||||
tti_sched_result_t::ul_alloc_t::type_t alloc_type,
|
||||
uint32_t mcs)
|
||||
alloc_outcome_t sf_sched::alloc_ul(sched_ue* user,
|
||||
ul_harq_proc::ul_alloc_t alloc,
|
||||
sf_sched::ul_alloc_t::type_t alloc_type,
|
||||
uint32_t mcs)
|
||||
{
|
||||
// Check whether user was already allocated
|
||||
if (is_ul_alloc(user)) {
|
||||
|
@ -572,12 +572,12 @@ alloc_outcome_t tti_sched_result_t::alloc_ul(sched_ue*
|
|||
return alloc_outcome_t::SUCCESS;
|
||||
}
|
||||
|
||||
alloc_outcome_t tti_sched_result_t::alloc_ul_user(sched_ue* user, ul_harq_proc::ul_alloc_t alloc)
|
||||
alloc_outcome_t sf_sched::alloc_ul_user(sched_ue* user, ul_harq_proc::ul_alloc_t alloc)
|
||||
{
|
||||
// check whether adaptive/non-adaptive retx/newtx
|
||||
tti_sched_result_t::ul_alloc_t::type_t alloc_type;
|
||||
ul_harq_proc* h = user->get_ul_harq(get_tti_tx_ul(), user->get_cell_index(enb_cc_idx).second);
|
||||
bool has_retx = h->has_pending_retx();
|
||||
sf_sched::ul_alloc_t::type_t alloc_type;
|
||||
ul_harq_proc* h = user->get_ul_harq(get_tti_tx_ul(), user->get_cell_index(enb_cc_idx).second);
|
||||
bool has_retx = h->has_pending_retx();
|
||||
if (has_retx) {
|
||||
ul_harq_proc::ul_alloc_t prev_alloc = h->get_alloc();
|
||||
if (prev_alloc.L == alloc.L and prev_alloc.RB_start == prev_alloc.L) {
|
||||
|
@ -592,12 +592,12 @@ alloc_outcome_t tti_sched_result_t::alloc_ul_user(sched_ue* user, ul_harq_proc::
|
|||
return alloc_ul(user, alloc, alloc_type);
|
||||
}
|
||||
|
||||
alloc_outcome_t tti_sched_result_t::alloc_ul_msg3(sched_ue* user, ul_harq_proc::ul_alloc_t alloc, uint32_t mcs)
|
||||
alloc_outcome_t sf_sched::alloc_ul_msg3(sched_ue* user, ul_harq_proc::ul_alloc_t alloc, uint32_t mcs)
|
||||
{
|
||||
return alloc_ul(user, alloc, ul_alloc_t::MSG3, mcs);
|
||||
}
|
||||
|
||||
void tti_sched_result_t::set_bc_sched_result(const pdcch_grid_t::alloc_result_t& dci_result)
|
||||
void sf_sched::set_bc_sched_result(const pdcch_grid_t::alloc_result_t& dci_result)
|
||||
{
|
||||
for (const auto& bc_alloc : bc_allocs) {
|
||||
sched_interface::dl_sched_bc_t* bc = &dl_sched_result.bc[dl_sched_result.nof_bc_elems];
|
||||
|
@ -666,7 +666,7 @@ void tti_sched_result_t::set_bc_sched_result(const pdcch_grid_t::alloc_result_t&
|
|||
}
|
||||
}
|
||||
|
||||
void tti_sched_result_t::set_rar_sched_result(const pdcch_grid_t::alloc_result_t& dci_result)
|
||||
void sf_sched::set_rar_sched_result(const pdcch_grid_t::alloc_result_t& dci_result)
|
||||
{
|
||||
for (const auto& rar_alloc : rar_allocs) {
|
||||
sched_interface::dl_sched_rar_t* rar = &dl_sched_result.rar[dl_sched_result.nof_rar_elems];
|
||||
|
@ -713,7 +713,7 @@ void tti_sched_result_t::set_rar_sched_result(const pdcch_grid_t::alloc_result_t
|
|||
}
|
||||
}
|
||||
|
||||
void tti_sched_result_t::set_dl_data_sched_result(const pdcch_grid_t::alloc_result_t& dci_result)
|
||||
void sf_sched::set_dl_data_sched_result(const pdcch_grid_t::alloc_result_t& dci_result)
|
||||
{
|
||||
for (const auto& data_alloc : data_allocs) {
|
||||
sched_interface::dl_sched_data_t* data = &dl_sched_result.data[dl_sched_result.nof_data_elems];
|
||||
|
@ -772,7 +772,7 @@ void tti_sched_result_t::set_dl_data_sched_result(const pdcch_grid_t::alloc_resu
|
|||
}
|
||||
}
|
||||
|
||||
void tti_sched_result_t::set_ul_sched_result(const pdcch_grid_t::alloc_result_t& dci_result)
|
||||
void sf_sched::set_ul_sched_result(const pdcch_grid_t::alloc_result_t& dci_result)
|
||||
{
|
||||
/* Set UL data DCI locs and format */
|
||||
for (const auto& ul_alloc : ul_data_allocs) {
|
||||
|
@ -836,7 +836,7 @@ void tti_sched_result_t::set_ul_sched_result(const pdcch_grid_t::alloc_result_t&
|
|||
}
|
||||
}
|
||||
|
||||
void tti_sched_result_t::generate_dcis()
|
||||
void sf_sched::generate_dcis()
|
||||
{
|
||||
/* Pick one of the possible DCI masks */
|
||||
pdcch_grid_t::alloc_result_t dci_result;
|
||||
|
@ -856,17 +856,17 @@ void tti_sched_result_t::generate_dcis()
|
|||
set_ul_sched_result(dci_result);
|
||||
}
|
||||
|
||||
uint32_t tti_sched_result_t::get_nof_ctrl_symbols() const
|
||||
uint32_t sf_sched::get_nof_ctrl_symbols() const
|
||||
{
|
||||
return tti_alloc.get_cfi() + ((sched_params->cfg->cell.nof_prb <= 10) ? 1 : 0);
|
||||
}
|
||||
|
||||
int tti_sched_result_t::generate_format1a(uint32_t rb_start,
|
||||
uint32_t l_crb,
|
||||
uint32_t tbs_bytes,
|
||||
uint32_t rv,
|
||||
uint16_t rnti,
|
||||
srslte_dci_dl_t* dci)
|
||||
int sf_sched::generate_format1a(uint32_t rb_start,
|
||||
uint32_t l_crb,
|
||||
uint32_t tbs_bytes,
|
||||
uint32_t rv,
|
||||
uint16_t rnti,
|
||||
srslte_dci_dl_t* dci)
|
||||
{
|
||||
/* Calculate I_tbs for this TBS */
|
||||
int tbs = tbs_bytes * 8;
|
||||
|
|
|
@ -41,7 +41,7 @@ void dl_metric_rr::set_params(const sched_params_t& sched_params_)
|
|||
log_h = sched_params_.log_h;
|
||||
}
|
||||
|
||||
void dl_metric_rr::sched_users(std::map<uint16_t, sched_ue>& ue_db, dl_tti_sched_t* tti_sched, uint32_t enb_cc_idx)
|
||||
void dl_metric_rr::sched_users(std::map<uint16_t, sched_ue>& ue_db, dl_sf_sched_itf* tti_sched, uint32_t enb_cc_idx)
|
||||
{
|
||||
tti_alloc = tti_sched;
|
||||
|
||||
|
@ -160,7 +160,7 @@ void ul_metric_rr::set_params(const sched_params_t& sched_params_)
|
|||
log_h = sched_params_.log_h;
|
||||
}
|
||||
|
||||
void ul_metric_rr::sched_users(std::map<uint16_t, sched_ue>& ue_db, ul_tti_sched_t* tti_sched, uint32_t enb_cc_idx)
|
||||
void ul_metric_rr::sched_users(std::map<uint16_t, sched_ue>& ue_db, ul_sf_sched_itf* tti_sched, uint32_t enb_cc_idx)
|
||||
{
|
||||
tti_alloc = tti_sched;
|
||||
current_tti = tti_alloc->get_tti_tx_ul();
|
||||
|
|
|
@ -527,7 +527,7 @@ int sched_tester::assert_no_empty_allocs()
|
|||
*/
|
||||
int sched_tester::test_tti_result()
|
||||
{
|
||||
const srsenb::tti_sched_result_t* tti_sched = carrier_schedulers[0]->get_tti_sched_view(tti_data.tti_rx);
|
||||
const srsenb::sf_sched* tti_sched = carrier_schedulers[0]->get_sf_sched(tti_data.tti_rx);
|
||||
|
||||
// Helper Function: checks if there is any collision. If not, fills the mask
|
||||
auto try_cce_fill = [&](const srslte_dci_location_t& dci_loc, const char* ch) {
|
||||
|
@ -588,7 +588,7 @@ int sched_tester::test_tti_result()
|
|||
}
|
||||
|
||||
/* verify if sched_result "used_cce" coincide with sched "used_cce" */
|
||||
auto* tti_alloc = carrier_schedulers[0]->get_tti_sched_view(tti_data.tti_rx);
|
||||
auto* tti_alloc = carrier_schedulers[0]->get_sf_sched(tti_data.tti_rx);
|
||||
if (tti_data.used_cce != tti_alloc->get_pdcch_mask()) {
|
||||
std::string mask_str = tti_alloc->get_pdcch_mask().to_string();
|
||||
TESTERROR("[TESTER] The used_cce do not match: (%s!=%s)\n", mask_str.c_str(), tti_data.used_cce.to_hex().c_str());
|
||||
|
@ -793,7 +793,7 @@ int sched_tester::test_sibs()
|
|||
|
||||
int sched_tester::test_collisions()
|
||||
{
|
||||
const srsenb::tti_sched_result_t* tti_sched = carrier_schedulers[0]->get_tti_sched_view(tti_data.tti_rx);
|
||||
const srsenb::sf_sched* tti_sched = carrier_schedulers[0]->get_sf_sched(tti_data.tti_rx);
|
||||
|
||||
srsenb::prbmask_t ul_allocs(cfg.cell.nof_prb);
|
||||
|
||||
|
@ -937,7 +937,7 @@ int sched_tester::test_collisions()
|
|||
rbgmask.reset(i);
|
||||
}
|
||||
}
|
||||
if (rbgmask != carrier_schedulers[0]->get_tti_sched_view(tti_data.tti_rx)->get_dl_mask()) {
|
||||
if (rbgmask != carrier_schedulers[0]->get_sf_sched(tti_data.tti_rx)->get_dl_mask()) {
|
||||
TESTERROR("[TESTER] The UL PRB mask and the scheduler result UL mask are not consistent\n");
|
||||
}
|
||||
return SRSLTE_SUCCESS;
|
||||
|
|
Loading…
Reference in New Issue