pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-pcu/+/30564 )
Change subject: Move control_ts explicit checks out of the scheduler implementation ...................................................................... Move control_ts explicit checks out of the scheduler implementation Let each subsystem handle that internally. Change-Id: Ifaf7dde651d56942779d84aa9135fc8c974b6f26 --- M src/gprs_rlcmac_sched.cpp M src/nacc_fsm.c M src/nacc_fsm.h M src/tbf_dl_ass_fsm.c M src/tbf_dl_ass_fsm.h M src/tbf_ul_ack_fsm.c M src/tbf_ul_ack_fsm.h M src/tbf_ul_ass_fsm.c M src/tbf_ul_ass_fsm.h 9 files changed, 46 insertions(+), 24 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/64/30564/1 diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp index f641013..a201b92 100644 --- a/src/gprs_rlcmac_sched.cpp +++ b/src/gprs_rlcmac_sched.cpp @@ -28,6 +28,7 @@ extern "C" { #include <osmocom/core/gsmtap.h> + #include "nacc_fsm.h" } struct tbf_sched_candidates { @@ -47,17 +48,13 @@ llist_for_each_entry(pos, &pdch->trx->ul_tbfs, list) { ul_tbf = tbf_as_ul_tbf((struct gprs_rlcmac_tbf *)pos->entry); OSMO_ASSERT(ul_tbf); - /* this trx, this ts */ - if (!tbf_is_control_ts(ul_tbf, pdch)) - continue; - if (tbf_ul_ack_rts(ul_tbf)) + if (tbf_ul_ack_rts(ul_tbf, pdch)) tbf_cand->ul_ack = ul_tbf; - if (tbf_dl_ass_rts(ul_tbf)) + if (tbf_dl_ass_rts(ul_tbf, pdch)) tbf_cand->dl_ass = ul_tbf; - if (tbf_ul_ass_rts(ul_tbf)) + if (tbf_ul_ass_rts(ul_tbf, pdch)) tbf_cand->ul_ass = ul_tbf; - /* NACC ready to send. TFI assigned is needed to send messages */ - if (tbf_is_tfi_assigned(ul_tbf) && ms_nacc_rts(ul_tbf->ms())) + if (tbf_nacc_rts(ul_tbf, pdch)) tbf_cand->nacc = ul_tbf; /* FIXME: Is this supposed to be fair? The last TBF for each wins? Maybe use llist_add_tail and skip once we have all states? */ @@ -65,15 +62,11 @@ llist_for_each_entry(pos, &pdch->trx->dl_tbfs, list) { dl_tbf = tbf_as_dl_tbf((struct gprs_rlcmac_tbf *)pos->entry); OSMO_ASSERT(dl_tbf); - /* this trx, this ts */ - if (!tbf_is_control_ts(dl_tbf, pdch)) - continue; - if (tbf_dl_ass_rts(dl_tbf)) + if (tbf_dl_ass_rts(dl_tbf, pdch)) tbf_cand->dl_ass = dl_tbf; - if (tbf_ul_ass_rts(dl_tbf)) + if (tbf_ul_ass_rts(dl_tbf, pdch)) tbf_cand->ul_ass = dl_tbf; - /* NACC ready to send. TFI assigned is needed to send messages */ - if (tbf_is_tfi_assigned(dl_tbf) && ms_nacc_rts(dl_tbf->ms())) + if (tbf_nacc_rts(dl_tbf, pdch)) tbf_cand->nacc = dl_tbf; } } diff --git a/src/nacc_fsm.c b/src/nacc_fsm.c index 25e7cd8..864f196 100644 --- a/src/nacc_fsm.c +++ b/src/nacc_fsm.c @@ -900,3 +900,11 @@ ctx->continue_poll_fn == fn && ctx->continue_poll_ts == ts; } + +bool tbf_nacc_rts(const struct gprs_rlcmac_tbf *tbf, const struct gprs_rlcmac_pdch *pdch) +{ + if (!tbf_is_control_ts(tbf, pdch)) + return false; + + return tbf_is_tfi_assigned(tbf) && ms_nacc_rts(tbf_ms(tbf)); +} \ No newline at end of file diff --git a/src/nacc_fsm.h b/src/nacc_fsm.h index b33dafa..b67ba11 100644 --- a/src/nacc_fsm.h +++ b/src/nacc_fsm.h @@ -22,6 +22,7 @@ struct GprsMs; struct gprs_rlcmac_tbf; +struct gprs_rlcmac_pdch; enum nacc_fsm_event { NACC_EV_RX_CELL_CHG_NOTIFICATION, /* data: Packet_Cell_Change_Notification_t* */ @@ -73,3 +74,5 @@ const struct osmo_cell_global_id_ps *cgi_ps); bool nacc_fsm_exp_ctrl_ack(const struct nacc_fsm_ctx *ctx, uint32_t fn, uint8_t ts); + +bool tbf_nacc_rts(const struct gprs_rlcmac_tbf *tbf, const struct gprs_rlcmac_pdch *pdch); diff --git a/src/tbf_dl_ass_fsm.c b/src/tbf_dl_ass_fsm.c index fe959cc..d4dafe2 100644 --- a/src/tbf_dl_ass_fsm.c +++ b/src/tbf_dl_ass_fsm.c @@ -248,9 +248,14 @@ return data_ctx.msg; } -bool tbf_dl_ass_rts(const struct gprs_rlcmac_tbf *tbf) +bool tbf_dl_ass_rts(const struct gprs_rlcmac_tbf *tbf, const struct gprs_rlcmac_pdch *pdch) { - struct osmo_fsm_inst *fi = tbf_dl_ass_fi(tbf); + struct osmo_fsm_inst *fi; + + if (!tbf_is_control_ts(tbf, pdch)) + return false; + + fi = tbf_dl_ass_fi(tbf); if (fi->state != TBF_DL_ASS_SEND_ASS) return false; diff --git a/src/tbf_dl_ass_fsm.h b/src/tbf_dl_ass_fsm.h index a259c03..dc5f9b2 100644 --- a/src/tbf_dl_ass_fsm.h +++ b/src/tbf_dl_ass_fsm.h @@ -21,6 +21,7 @@ #include <gprs_pcu.h> struct gprs_rlcmac_tbf; +struct gprs_rlcmac_pdch; enum tbf_dl_ass_fsm_event { TBF_DL_ASS_EV_SCHED_ASS, /* Tx Uplink Assignment is pending */ @@ -62,4 +63,4 @@ struct msgb *tbf_dl_ass_create_rlcmac_msg(const struct gprs_rlcmac_tbf* tbf, uint32_t fn, uint8_t ts); -bool tbf_dl_ass_rts(const struct gprs_rlcmac_tbf* tbf); +bool tbf_dl_ass_rts(const struct gprs_rlcmac_tbf* tbf, const struct gprs_rlcmac_pdch *pdch); diff --git a/src/tbf_ul_ack_fsm.c b/src/tbf_ul_ack_fsm.c index f6e7a0d..1421c68 100644 --- a/src/tbf_ul_ack_fsm.c +++ b/src/tbf_ul_ack_fsm.c @@ -236,9 +236,14 @@ return data_ctx.msg; } -bool tbf_ul_ack_rts(const struct gprs_rlcmac_ul_tbf *ul_tbf) +bool tbf_ul_ack_rts(const struct gprs_rlcmac_ul_tbf *ul_tbf, const struct gprs_rlcmac_pdch *pdch) { - struct osmo_fsm_inst *fi = tbf_ul_ack_fi(ul_tbf); + struct osmo_fsm_inst *fi; + + if (!tbf_is_control_ts(ul_tbf_as_tbf_const(ul_tbf), pdch)) + return false; + + fi = tbf_ul_ack_fi(ul_tbf); return fi->state == TBF_UL_ACK_ST_SCHED_UL_ACK; } diff --git a/src/tbf_ul_ack_fsm.h b/src/tbf_ul_ack_fsm.h index f25972e..e06728e 100644 --- a/src/tbf_ul_ack_fsm.h +++ b/src/tbf_ul_ack_fsm.h @@ -22,6 +22,7 @@ struct gprs_rlcmac_tbf; struct gprs_rlcmac_ul_tbf; +struct gprs_rlcmac_pdch; enum tbf_ul_ack_fsm_event { TBF_UL_ACK_EV_SCHED_ACK, /* Tx UL ACK/NACK is pending */ @@ -63,6 +64,6 @@ struct msgb *tbf_ul_ack_create_rlcmac_msg(const struct gprs_rlcmac_ul_tbf *ul_tbf, uint32_t fn, uint8_t ts); -bool tbf_ul_ack_rts(const struct gprs_rlcmac_ul_tbf *ul_tbf); +bool tbf_ul_ack_rts(const struct gprs_rlcmac_ul_tbf *ul_tbf, const struct gprs_rlcmac_pdch *pdch); bool tbf_ul_ack_waiting_cnf_final_ack(const struct gprs_rlcmac_ul_tbf *ul_tbf); bool tbf_ul_ack_exp_ctrl_ack(const struct gprs_rlcmac_ul_tbf *ul_tbf, uint32_t fn, uint8_t ts); diff --git a/src/tbf_ul_ass_fsm.c b/src/tbf_ul_ass_fsm.c index 932a91f..cff17bc 100644 --- a/src/tbf_ul_ass_fsm.c +++ b/src/tbf_ul_ass_fsm.c @@ -341,8 +341,13 @@ return data_ctx.msg; } -bool tbf_ul_ass_rts(const struct gprs_rlcmac_tbf* tbf) +bool tbf_ul_ass_rts(const struct gprs_rlcmac_tbf *tbf, const struct gprs_rlcmac_pdch *pdch) { - struct osmo_fsm_inst *fi = tbf_ul_ass_fi(tbf); + struct osmo_fsm_inst *fi; + + if (!tbf_is_control_ts(tbf, pdch)) + return false; + + fi = tbf_ul_ass_fi(tbf); return fi->state == TBF_UL_ASS_SEND_ASS || fi->state == TBF_UL_ASS_SEND_ASS_REJ; } diff --git a/src/tbf_ul_ass_fsm.h b/src/tbf_ul_ass_fsm.h index 8a612f2..9b0de38 100644 --- a/src/tbf_ul_ass_fsm.h +++ b/src/tbf_ul_ass_fsm.h @@ -21,6 +21,7 @@ #include <gprs_pcu.h> struct gprs_rlcmac_tbf; +struct gprs_rlcmac_pdch; enum tbf_ul_ass_fsm_event { TBF_UL_ASS_EV_SCHED_ASS, /* Tx Uplink Assignment is pending */ @@ -65,4 +66,4 @@ struct msgb *tbf_ul_ass_create_rlcmac_msg(const struct gprs_rlcmac_tbf* tbf, uint32_t fn, uint8_t ts); -bool tbf_ul_ass_rts(const struct gprs_rlcmac_tbf* tbf); +bool tbf_ul_ass_rts(const struct gprs_rlcmac_tbf* tbf, const struct gprs_rlcmac_pdch *pdch); -- To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/30564 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-Change-Id: Ifaf7dde651d56942779d84aa9135fc8c974b6f26 Gerrit-Change-Number: 30564 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pes...@sysmocom.de> Gerrit-MessageType: newchange