diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-10-16 17:55:57 +0200 |
---|---|---|
committer | Ivan Kluchnikov <kluchnikovi@gmail.com> | 2013-10-28 12:52:59 +0400 |
commit | 455613076aee24a70fb96ed858aac05b7241462f (patch) | |
tree | ecdd0488f11f9aff8e2514e2749226b15b9f2739 /src/gprs_rlcmac.cpp | |
parent | 4f6a4e5d6db39d2bb9825cf213165a07eb0e8ea8 (diff) |
tbf: Move many routines related to the tbf from gprs_rlcmac to tbf.c
Diffstat (limited to 'src/gprs_rlcmac.cpp')
-rw-r--r-- | src/gprs_rlcmac.cpp | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/src/gprs_rlcmac.cpp b/src/gprs_rlcmac.cpp index 3dab44f4..d33dc8c9 100644 --- a/src/gprs_rlcmac.cpp +++ b/src/gprs_rlcmac.cpp @@ -888,159 +888,6 @@ int alloc_algorithm_b(struct gprs_rlcmac_bts *bts, return 0; } -static void tbf_unlink_pdch(struct gprs_rlcmac_tbf *tbf) -{ - struct gprs_rlcmac_bts *bts = gprs_rlcmac_bts; - struct gprs_rlcmac_pdch *pdch; - int ts; - - if (tbf->direction == GPRS_RLCMAC_UL_TBF) { - bts->trx[tbf->trx].ul_tbf[tbf->tfi] = NULL; - for (ts = 0; ts < 8; ts++) { - pdch = tbf->pdch[ts]; - if (pdch) - pdch->ul_tbf[tbf->tfi] = NULL; - tbf->pdch[ts] = NULL; - } - } else { - bts->trx[tbf->trx].dl_tbf[tbf->tfi] = NULL; - for (ts = 0; ts < 8; ts++) { - pdch = tbf->pdch[ts]; - if (pdch) - pdch->dl_tbf[tbf->tfi] = NULL; - tbf->pdch[ts] = NULL; - } - } -} - -void tbf_free(struct gprs_rlcmac_tbf *tbf) -{ - struct msgb *msg; - - /* Give final measurement report */ - gprs_rlcmac_rssi_rep(tbf); - gprs_rlcmac_lost_rep(tbf); - - debug_diagram(tbf->diag, "+---------------+"); - debug_diagram(tbf->diag, "| THE END |"); - debug_diagram(tbf->diag, "+---------------+"); - LOGP(DRLCMAC, LOGL_INFO, "Free %s TBF=%d with TLLI=0x%08x.\n", - (tbf->direction == GPRS_RLCMAC_UL_TBF) ? "UL" : "DL", tbf->tfi, - tbf->tlli); - if (tbf->ul_ass_state != GPRS_RLCMAC_UL_ASS_NONE) - LOGP(DRLCMAC, LOGL_ERROR, "Software error: Pending uplink " - "assignment. This may not happen, because the " - "assignment message never gets transmitted. Please " - "be shure not to free in this state. PLEASE FIX!\n"); - if (tbf->dl_ass_state != GPRS_RLCMAC_DL_ASS_NONE) - LOGP(DRLCMAC, LOGL_ERROR, "Software error: Pending downlink " - "assignment. This may not happen, because the " - "assignment message never gets transmitted. Please " - "be shure not to free in this state. PLEASE FIX!\n"); - tbf_timer_stop(tbf); - while ((msg = msgb_dequeue(&tbf->llc_queue))) - msgb_free(msg); - tbf_unlink_pdch(tbf); - llist_del(&tbf->list); - LOGP(DRLCMAC, LOGL_DEBUG, "********** TBF ends here **********\n"); - talloc_free(tbf); -} - -int tbf_update(struct gprs_rlcmac_tbf *tbf) -{ - struct gprs_rlcmac_bts *bts = gprs_rlcmac_bts; - struct gprs_rlcmac_tbf *ul_tbf = NULL; - int rc; - - LOGP(DRLCMAC, LOGL_DEBUG, "********** TBF update **********\n"); - - if (tbf->direction != GPRS_RLCMAC_DL_TBF) - return -EINVAL; - - if (!tbf->ms_class) { - LOGP(DRLCMAC, LOGL_DEBUG, "- Cannot update, no class\n"); - return -EINVAL; - } - - ul_tbf = tbf_by_tlli(tbf->tlli, GPRS_RLCMAC_UL_TBF); - - tbf_unlink_pdch(tbf); - rc = bts->alloc_algorithm(bts, ul_tbf, tbf, bts->alloc_algorithm_curst, 0); - /* if no ressource */ - if (rc < 0) { - LOGP(DRLCMAC, LOGL_ERROR, "No ressource after update???\n"); - return -rc; - } - - return 0; -} - -int tbf_assign_control_ts(struct gprs_rlcmac_tbf *tbf) -{ - if (tbf->control_ts == 0xff) - LOGP(DRLCMAC, LOGL_INFO, "- Setting Control TS %d\n", - tbf->first_common_ts); - else if (tbf->control_ts != tbf->first_common_ts) - LOGP(DRLCMAC, LOGL_INFO, "- Changing Control TS %d\n", - tbf->first_common_ts); - tbf->control_ts = tbf->first_common_ts; - - return 0; -} - - -const char *tbf_state_name[] = { - "NULL", - "ASSIGN", - "FLOW", - "FINISHED", - "WAIT RELEASE", - "RELEASING", -}; - -void tbf_new_state(struct gprs_rlcmac_tbf *tbf, - enum gprs_rlcmac_tbf_state state) -{ - debug_diagram(tbf->diag, "->%s", tbf_state_name[state]); - LOGP(DRLCMAC, LOGL_DEBUG, "%s TBF=%d changes state from %s to %s\n", - (tbf->direction == GPRS_RLCMAC_UL_TBF) ? "UL" : "DL", tbf->tfi, - tbf_state_name[tbf->state], tbf_state_name[state]); - tbf->state = state; -} - -void tbf_timer_start(struct gprs_rlcmac_tbf *tbf, unsigned int T, - unsigned int seconds, unsigned int microseconds) -{ - if (!osmo_timer_pending(&tbf->timer)) - LOGP(DRLCMAC, LOGL_DEBUG, "Starting %s TBF=%d timer %u.\n", - (tbf->direction == GPRS_RLCMAC_UL_TBF) ? "UL" : "DL", - tbf->tfi, T); - else - LOGP(DRLCMAC, LOGL_DEBUG, "Restarting %s TBF=%d timer %u " - "while old timer %u pending \n", - (tbf->direction == GPRS_RLCMAC_UL_TBF) ? "UL" : "DL", - tbf->tfi, T, tbf->T); - - tbf->T = T; - tbf->num_T_exp = 0; - - /* Tunning timers can be safely re-scheduled. */ - tbf->timer.data = tbf; - tbf->timer.cb = &tbf_timer_cb; - - osmo_timer_schedule(&tbf->timer, seconds, microseconds); -} - -void tbf_timer_stop(struct gprs_rlcmac_tbf *tbf) -{ - if (osmo_timer_pending(&tbf->timer)) { - LOGP(DRLCMAC, LOGL_DEBUG, "Stopping %s TBF=%d timer %u.\n", - (tbf->direction == GPRS_RLCMAC_UL_TBF) ? "UL" : "DL", - tbf->tfi, tbf->T); - osmo_timer_del(&tbf->timer); - } -} - /* starting time for assigning single slot * This offset must be a multiple of 13. */ #define AGCH_START_OFFSET 52 |