aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmo-bts/bts_model.h3
-rw-r--r--include/osmo-bts/rsl.h2
-rw-r--r--src/common/rsl.c6
-rw-r--r--src/osmo-bts-litecell15/lc15bts_vty.c3
-rw-r--r--src/osmo-bts-litecell15/oml.c7
-rw-r--r--src/osmo-bts-octphy/l1_oml.c7
-rw-r--r--src/osmo-bts-sysmo/oml.c7
-rw-r--r--src/osmo-bts-sysmo/sysmobts_vty.c3
-rw-r--r--src/osmo-bts-trx/l1_if.c24
-rw-r--r--tests/handover/handover_test.c2
-rw-r--r--tests/stubs.c2
11 files changed, 45 insertions, 21 deletions
diff --git a/include/osmo-bts/bts_model.h b/include/osmo-bts/bts_model.h
index 7e2d0887..7a87d786 100644
--- a/include/osmo-bts/bts_model.h
+++ b/include/osmo-bts/bts_model.h
@@ -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_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);
int bts_model_ctrl_cmds_install(struct gsm_bts *bts);
diff --git a/include/osmo-bts/rsl.h b/include/osmo-bts/rsl.h
index 4311ffdc..d542ff62 100644
--- a/include/osmo-bts/rsl.h
+++ b/include/osmo-bts/rsl.h
@@ -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_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 */
int lapdm_rll_tx_cb(struct msgb *msg, struct lapdm_entity *le, void *ctx);
diff --git a/src/common/rsl.c b/src/common/rsl.c
index 6c8f5cc2..880136cd 100644
--- a/src/common/rsl.c
+++ b/src/common/rsl.c
@@ -2448,6 +2448,12 @@ static int rsl_rx_ipaccess(struct gsm_bts_trx *trx, struct msgb *msg)
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)
{
struct abis_rsl_common_hdr *rslh = msgb_l2(msg);
diff --git a/src/osmo-bts-litecell15/lc15bts_vty.c b/src/osmo-bts-litecell15/lc15bts_vty.c
index c5d404cc..0ffe6634 100644
--- a/src/osmo-bts-litecell15/lc15bts_vty.c
+++ b/src/osmo-bts-litecell15/lc15bts_vty.c
@@ -46,15 +46,14 @@
#include <osmo-bts/gsm_data.h>
#include <osmo-bts/phy_link.h>
#include <osmo-bts/logging.h>
+#include <osmo-bts/bts_model.h>
#include <osmo-bts/vty.h>
#include "lc15bts.h"
#include "l1_if.h"
#include "utils.h"
-
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"
diff --git a/src/osmo-bts-litecell15/oml.c b/src/osmo-bts-litecell15/oml.c
index 689ba70c..8afa2a2f 100644
--- a/src/osmo-bts-litecell15/oml.c
+++ b/src/osmo-bts-litecell15/oml.c
@@ -1656,10 +1656,9 @@ static void enqueue_rel_marker(struct gsm_lchan *lchan)
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->ciph_state = 0; /* FIXME: do this in common/\*.c */
enqueue_rel_marker(lchan);
return 0;
}
@@ -1674,7 +1673,7 @@ static void enqueue_sacch_rel_marker(struct gsm_lchan *lchan)
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);
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 */
if (lchan->state != LCHAN_S_ACTIVE)
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)
diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c
index db416bad..58656256 100644
--- a/src/osmo-bts-octphy/l1_oml.c
+++ b/src/osmo-bts-octphy/l1_oml.c
@@ -884,7 +884,7 @@ static void enqueue_sacch_rel_marker(struct gsm_lchan *lchan)
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);
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 */
if (lchan->state != LCHAN_S_ACTIVE)
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);
}
-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->ciph_state = 0; /* FIXME: do this in common *.c */
enqueue_rel_marker(lchan);
return 0;
}
diff --git a/src/osmo-bts-sysmo/oml.c b/src/osmo-bts-sysmo/oml.c
index ed02c745..b23d9924 100644
--- a/src/osmo-bts-sysmo/oml.c
+++ b/src/osmo-bts-sysmo/oml.c
@@ -1676,10 +1676,9 @@ static void enqueue_rel_marker(struct gsm_lchan *lchan)
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->ciph_state = 0; /* FIXME: do this in common/\*.c */
enqueue_rel_marker(lchan);
return 0;
}
@@ -1694,7 +1693,7 @@ static void enqueue_sacch_rel_marker(struct gsm_lchan *lchan)
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);
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 */
if (lchan->state != LCHAN_S_ACTIVE)
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)
diff --git a/src/osmo-bts-sysmo/sysmobts_vty.c b/src/osmo-bts-sysmo/sysmobts_vty.c
index c829c497..e67d8be0 100644
--- a/src/osmo-bts-sysmo/sysmobts_vty.c
+++ b/src/osmo-bts-sysmo/sysmobts_vty.c
@@ -42,15 +42,14 @@
#include <osmo-bts/gsm_data.h>
#include <osmo-bts/phy_link.h>
#include <osmo-bts/logging.h>
+#include <osmo-bts/bts_model.h>
#include <osmo-bts/vty.h>
#include "femtobts.h"
#include "l1_if.h"
#include "utils.h"
-
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"
diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c
index 202a05e1..3d5f52e9 100644
--- a/src/osmo-bts-trx/l1_if.c
+++ b/src/osmo-bts-trx/l1_if.c
@@ -144,6 +144,23 @@ int check_transceiver_availability(struct gsm_bts *bts, int avail)
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
@@ -646,16 +663,13 @@ int bts_model_l1sap_down(struct gsm_bts_trx *trx, struct osmo_phsap_prim *l1sap)
break;
}
/* 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) {
- /* set lchan inactive */
- lchan_set_state(lchan, LCHAN_S_NONE);
/* deactivate dedicated channel */
- trx_sched_set_lchan(&l1h->l1s, chan_nr, LID_DEDIC, 0);
+ lchan_deactivate(lchan);
/* confirm only on dedicated channel */
mph_info_chan_confirm(l1h, chan_nr,
PRIM_INFO_DEACTIVATE, 0);
- lchan->ciph_state = 0; /* FIXME: do this in common/\*.c */
}
break;
default:
diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c
index d1dc34ad..a7a66d06 100644
--- a/tests/handover/handover_test.c
+++ b/tests/handover/handover_test.c
@@ -275,3 +275,5 @@ void trx_get_hlayer1(void) {}
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_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; }
diff --git a/tests/stubs.c b/tests/stubs.c
index c680db04..f969cb3c 100644
--- a/tests/stubs.c
+++ b/tests/stubs.c
@@ -40,6 +40,8 @@ int bts_model_oml_estab(struct gsm_bts *bts)
int l1if_set_txpower(struct femtol1_hdl *fl1h, float tx_power)
{ 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)
{ return 0; }