Remove duplicated code

Remove lchan deactivation related code duplication to facilitate future
use for dynamic CCCH re-activation.

Change-Id: Id0d3b19dbfaa16d1734321a07a6eb0355bfd77c9
This commit is contained in:
Max 2016-11-11 17:44:57 +01:00 committed by Harald Welte
parent aabeb2eae4
commit 36153239bf
11 changed files with 45 additions and 21 deletions

View File

@ -45,6 +45,9 @@ int bts_model_adjst_ms_pwr(struct gsm_lchan *lchan);
int bts_model_l1sap_down(struct gsm_bts_trx *trx, struct osmo_phsap_prim *l1sap); int bts_model_l1sap_down(struct gsm_bts_trx *trx, struct osmo_phsap_prim *l1sap);
int bts_model_lchan_deactivate(struct gsm_lchan *lchan);
int bts_model_lchan_deactivate_sacch(struct gsm_lchan *lchan);
void bts_model_abis_close(struct gsm_bts *bts); void bts_model_abis_close(struct gsm_bts *bts);
int bts_model_ctrl_cmds_install(struct gsm_bts *bts); int bts_model_ctrl_cmds_install(struct gsm_bts *bts);

View File

@ -26,6 +26,8 @@ int rsl_tx_conn_fail(struct gsm_lchan *lchan, uint8_t cause);
int rsl_tx_rf_rel_ack(struct gsm_lchan *lchan); int rsl_tx_rf_rel_ack(struct gsm_lchan *lchan);
int rsl_tx_hando_det(struct gsm_lchan *lchan, uint8_t *ho_delay); int rsl_tx_hando_det(struct gsm_lchan *lchan, uint8_t *ho_delay);
int lchan_deactivate(struct gsm_lchan *lchan);
/* call-back for LAPDm code, called when it wants to send msgs UP */ /* call-back for LAPDm code, called when it wants to send msgs UP */
int lapdm_rll_tx_cb(struct msgb *msg, struct lapdm_entity *le, void *ctx); int lapdm_rll_tx_cb(struct msgb *msg, struct lapdm_entity *le, void *ctx);

View File

@ -2448,6 +2448,12 @@ static int rsl_rx_ipaccess(struct gsm_bts_trx *trx, struct msgb *msg)
return ret; return ret;
} }
int lchan_deactivate(struct gsm_lchan *lchan)
{
lchan->ciph_state = 0;
return bts_model_lchan_deactivate(lchan);
}
int down_rsl(struct gsm_bts_trx *trx, struct msgb *msg) int down_rsl(struct gsm_bts_trx *trx, struct msgb *msg)
{ {
struct abis_rsl_common_hdr *rslh = msgb_l2(msg); struct abis_rsl_common_hdr *rslh = msgb_l2(msg);

View File

@ -46,15 +46,14 @@
#include <osmo-bts/gsm_data.h> #include <osmo-bts/gsm_data.h>
#include <osmo-bts/phy_link.h> #include <osmo-bts/phy_link.h>
#include <osmo-bts/logging.h> #include <osmo-bts/logging.h>
#include <osmo-bts/bts_model.h>
#include <osmo-bts/vty.h> #include <osmo-bts/vty.h>
#include "lc15bts.h" #include "lc15bts.h"
#include "l1_if.h" #include "l1_if.h"
#include "utils.h" #include "utils.h"
extern int lchan_activate(struct gsm_lchan *lchan); extern int lchan_activate(struct gsm_lchan *lchan);
extern int lchan_deactivate(struct gsm_lchan *lchan);
#define TRX_STR "Transceiver related commands\n" "TRX number\n" #define TRX_STR "Transceiver related commands\n" "TRX number\n"

View File

@ -1656,10 +1656,9 @@ static void enqueue_rel_marker(struct gsm_lchan *lchan)
queue_sapi_command(lchan, cmd); queue_sapi_command(lchan, cmd);
} }
int lchan_deactivate(struct gsm_lchan *lchan) int bts_model_lchan_deactivate(struct gsm_lchan *lchan)
{ {
lchan_set_state(lchan, LCHAN_S_REL_REQ); lchan_set_state(lchan, LCHAN_S_REL_REQ);
lchan->ciph_state = 0; /* FIXME: do this in common/\*.c */
enqueue_rel_marker(lchan); enqueue_rel_marker(lchan);
return 0; return 0;
} }
@ -1674,7 +1673,7 @@ static void enqueue_sacch_rel_marker(struct gsm_lchan *lchan)
queue_sapi_command(lchan, cmd); queue_sapi_command(lchan, cmd);
} }
static int lchan_deactivate_sacch(struct gsm_lchan *lchan) int bts_model_lchan_deactivate_sacch(struct gsm_lchan *lchan)
{ {
enqueue_sacch_rel_marker(lchan); enqueue_sacch_rel_marker(lchan);
return 0; return 0;
@ -1858,7 +1857,7 @@ int l1if_rsl_deact_sacch(struct gsm_lchan *lchan)
/* Only de-activate the SACCH if the lchan is active */ /* Only de-activate the SACCH if the lchan is active */
if (lchan->state != LCHAN_S_ACTIVE) if (lchan->state != LCHAN_S_ACTIVE)
return 0; return 0;
return lchan_deactivate_sacch(lchan); return bts_model_lchan_deactivate_sacch(lchan);
} }
int bts_model_trx_deact_rf(struct gsm_bts_trx *trx) int bts_model_trx_deact_rf(struct gsm_bts_trx *trx)

View File

@ -884,7 +884,7 @@ static void enqueue_sacch_rel_marker(struct gsm_lchan *lchan)
queue_sapi_command(lchan, cmd); queue_sapi_command(lchan, cmd);
} }
static int lchan_deactivate_sacch(struct gsm_lchan *lchan) int bts_model_lchan_deactivate_sacch(struct gsm_lchan *lchan)
{ {
enqueue_sacch_rel_marker(lchan); enqueue_sacch_rel_marker(lchan);
return 0; return 0;
@ -895,7 +895,7 @@ int l1if_rsl_deact_sacch(struct gsm_lchan *lchan)
/* Only de-activate the SACCH if the lchan is active */ /* Only de-activate the SACCH if the lchan is active */
if (lchan->state != LCHAN_S_ACTIVE) if (lchan->state != LCHAN_S_ACTIVE)
return 0; return 0;
return lchan_deactivate_sacch(lchan); return bts_model_lchan_deactivate_sacch(lchan);
} }
@ -913,10 +913,9 @@ static void enqueue_rel_marker(struct gsm_lchan *lchan)
queue_sapi_command(lchan, cmd); queue_sapi_command(lchan, cmd);
} }
static int lchan_deactivate(struct gsm_lchan *lchan) int bts_model_lchan_deactivate(struct gsm_lchan *lchan)
{ {
lchan_set_state(lchan, LCHAN_S_REL_REQ); lchan_set_state(lchan, LCHAN_S_REL_REQ);
lchan->ciph_state = 0; /* FIXME: do this in common *.c */
enqueue_rel_marker(lchan); enqueue_rel_marker(lchan);
return 0; return 0;
} }

View File

@ -1676,10 +1676,9 @@ static void enqueue_rel_marker(struct gsm_lchan *lchan)
queue_sapi_command(lchan, cmd); queue_sapi_command(lchan, cmd);
} }
int lchan_deactivate(struct gsm_lchan *lchan) int bts_model_lchan_deactivate(struct gsm_lchan *lchan)
{ {
lchan_set_state(lchan, LCHAN_S_REL_REQ); lchan_set_state(lchan, LCHAN_S_REL_REQ);
lchan->ciph_state = 0; /* FIXME: do this in common/\*.c */
enqueue_rel_marker(lchan); enqueue_rel_marker(lchan);
return 0; return 0;
} }
@ -1694,7 +1693,7 @@ static void enqueue_sacch_rel_marker(struct gsm_lchan *lchan)
queue_sapi_command(lchan, cmd); queue_sapi_command(lchan, cmd);
} }
static int lchan_deactivate_sacch(struct gsm_lchan *lchan) int bts_model_lchan_deactivate_sacch(struct gsm_lchan *lchan)
{ {
enqueue_sacch_rel_marker(lchan); enqueue_sacch_rel_marker(lchan);
return 0; return 0;
@ -1878,7 +1877,7 @@ int l1if_rsl_deact_sacch(struct gsm_lchan *lchan)
/* Only de-activate the SACCH if the lchan is active */ /* Only de-activate the SACCH if the lchan is active */
if (lchan->state != LCHAN_S_ACTIVE) if (lchan->state != LCHAN_S_ACTIVE)
return 0; return 0;
return lchan_deactivate_sacch(lchan); return bts_model_lchan_deactivate_sacch(lchan);
} }
int bts_model_trx_deact_rf(struct gsm_bts_trx *trx) int bts_model_trx_deact_rf(struct gsm_bts_trx *trx)

View File

@ -42,15 +42,14 @@
#include <osmo-bts/gsm_data.h> #include <osmo-bts/gsm_data.h>
#include <osmo-bts/phy_link.h> #include <osmo-bts/phy_link.h>
#include <osmo-bts/logging.h> #include <osmo-bts/logging.h>
#include <osmo-bts/bts_model.h>
#include <osmo-bts/vty.h> #include <osmo-bts/vty.h>
#include "femtobts.h" #include "femtobts.h"
#include "l1_if.h" #include "l1_if.h"
#include "utils.h" #include "utils.h"
extern int lchan_activate(struct gsm_lchan *lchan); extern int lchan_activate(struct gsm_lchan *lchan);
extern int lchan_deactivate(struct gsm_lchan *lchan);
#define TRX_STR "Transceiver related commands\n" "TRX number\n" #define TRX_STR "Transceiver related commands\n" "TRX number\n"

View File

@ -144,6 +144,23 @@ int check_transceiver_availability(struct gsm_bts *bts, int avail)
return 0; return 0;
} }
int bts_model_lchan_deactivate(struct gsm_lchan *lchan)
{
struct phy_instance *pinst = trx_phy_instance(lchan->ts->trx);
struct trx_l1h *l1h = pinst->u.osmotrx.hdl;
/* set lchan inactive */
lchan_set_state(lchan, LCHAN_S_NONE);
return trx_sched_set_lchan(&l1h->l1s, lchan->nr, LID_DEDIC, 0);
}
int bts_model_lchan_deactivate_sacch(struct gsm_lchan *lchan)
{
struct phy_instance *pinst = trx_phy_instance(lchan->ts->trx);
struct trx_l1h *l1h = pinst->u.osmotrx.hdl;
return trx_sched_set_lchan(&l1h->l1s, lchan->nr, LID_SACCH, 0);
}
/* /*
* transceiver provisioning * transceiver provisioning
@ -646,16 +663,13 @@ int bts_model_l1sap_down(struct gsm_bts_trx *trx, struct osmo_phsap_prim *l1sap)
break; break;
} }
/* deactivate associated channel */ /* deactivate associated channel */
trx_sched_set_lchan(&l1h->l1s, chan_nr, LID_SACCH, 0); bts_model_lchan_deactivate_sacch(lchan);
if (!l1sap->u.info.u.act_req.sacch_only) { if (!l1sap->u.info.u.act_req.sacch_only) {
/* set lchan inactive */
lchan_set_state(lchan, LCHAN_S_NONE);
/* deactivate dedicated channel */ /* deactivate dedicated channel */
trx_sched_set_lchan(&l1h->l1s, chan_nr, LID_DEDIC, 0); lchan_deactivate(lchan);
/* confirm only on dedicated channel */ /* confirm only on dedicated channel */
mph_info_chan_confirm(l1h, chan_nr, mph_info_chan_confirm(l1h, chan_nr,
PRIM_INFO_DEACTIVATE, 0); PRIM_INFO_DEACTIVATE, 0);
lchan->ciph_state = 0; /* FIXME: do this in common/\*.c */
} }
break; break;
default: default:

View File

@ -275,3 +275,5 @@ void trx_get_hlayer1(void) {}
int bts_model_adjst_ms_pwr(struct gsm_lchan *lchan) { return 0; } int bts_model_adjst_ms_pwr(struct gsm_lchan *lchan) { return 0; }
int bts_model_ts_disconnect(struct gsm_bts_trx_ts *ts) { return 0; } int bts_model_ts_disconnect(struct gsm_bts_trx_ts *ts) { return 0; }
int bts_model_ts_connect(struct gsm_bts_trx_ts *ts, enum gsm_phys_chan_config as_pchan) { return 0; } int bts_model_ts_connect(struct gsm_bts_trx_ts *ts, enum gsm_phys_chan_config as_pchan) { return 0; }
int bts_model_lchan_deactivate(struct gsm_lchan *lchan) { return 0; }
int bts_model_lchan_deactivate_sacch(struct gsm_lchan *lchan) { return 0; }

View File

@ -40,6 +40,8 @@ int bts_model_oml_estab(struct gsm_bts *bts)
int l1if_set_txpower(struct femtol1_hdl *fl1h, float tx_power) int l1if_set_txpower(struct femtol1_hdl *fl1h, float tx_power)
{ return 0; } { return 0; }
int bts_model_lchan_deactivate(struct gsm_lchan *lchan) { return 0; }
int bts_model_lchan_deactivate_sacch(struct gsm_lchan *lchan) { return 0; }
int bts_model_adjst_ms_pwr(struct gsm_lchan *lchan) int bts_model_adjst_ms_pwr(struct gsm_lchan *lchan)
{ return 0; } { return 0; }