Change in osmo-bts[master]: Move lchan related code to lchan.{c,h}

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

pespin gerrit-no-reply at lists.osmocom.org
Thu Oct 14 12:55:38 UTC 2021


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/25781 )


Change subject: Move lchan related code to lchan.{c,h}
......................................................................

Move lchan related code to lchan.{c,h}

Change-Id: I17ebe6af69e31d1b4dbad7656bbf043f4c9243c1
---
M include/osmo-bts/bts.h
M include/osmo-bts/lchan.h
M src/common/bts.c
M src/common/lchan.c
M src/common/sysinfo.c
5 files changed, 79 insertions(+), 78 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/81/25781/1

diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h
index 4683758..8832588 100644
--- a/include/osmo-bts/bts.h
+++ b/include/osmo-bts/bts.h
@@ -407,8 +407,6 @@
 void regenerate_si3_restoctets(struct gsm_bts *bts);
 void regenerate_si4_restoctets(struct gsm_bts *bts);
 int get_si4_ro_offset(const uint8_t *si4_buf);
-uint8_t *lchan_sacch_get(struct gsm_lchan *lchan);
-int lchan_init_lapdm(struct gsm_lchan *lchan);
 
 void load_timer_start(struct gsm_bts *bts);
 void load_timer_stop(struct gsm_bts *bts);
diff --git a/include/osmo-bts/lchan.h b/include/osmo-bts/lchan.h
index 8fcf36a..665bb44 100644
--- a/include/osmo-bts/lchan.h
+++ b/include/osmo-bts/lchan.h
@@ -329,6 +329,7 @@
 
 void gsm_lchan_init(struct gsm_lchan *lchan, struct gsm_bts_trx_ts *ts, unsigned int lchan_nr);
 void gsm_lchan_name_update(struct gsm_lchan *lchan);
+int lchan_init_lapdm(struct gsm_lchan *lchan);
 void gsm_lchan_release(struct gsm_lchan *lchan, enum lchan_rel_act_kind rel_kind);
 const char *gsm_lchans_name(enum gsm_lchan_state s);
 
@@ -337,6 +338,8 @@
 	return lchan->name;
 }
 
+uint8_t *lchan_sacch_get(struct gsm_lchan *lchan);
+
 uint8_t gsm_lchan2chan_nr(const struct gsm_lchan *lchan);
 uint8_t gsm_lchan2chan_nr_rsl(const struct gsm_lchan *lchan);
 uint8_t gsm_lchan_as_pchan2chan_nr(const struct gsm_lchan *lchan,
diff --git a/src/common/bts.c b/src/common/bts.c
index b226df2..86140ba 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -454,66 +454,6 @@
 	return bts_model_oml_estab(bts);
 }
 
-/* prepare the per-SAPI T200 arrays for a given lchan */
-static int t200_by_lchan(int *t200_ms_dcch, int *t200_ms_acch, struct gsm_lchan *lchan)
-{
-	struct gsm_bts *bts = lchan->ts->trx->bts;
-
-	/* we have to compensate for the "RTS advance" due to the asynchronous interface between
-	 * the BTS (LAPDm) and the PHY/L1 (OsmoTRX or DSP in case of osmo-bts-{sysmo,lc15,oc2g,octphy} */
-	int32_t fn_advance = bts_get_avg_fn_advance(bts);
-	int32_t fn_advance_us = fn_advance * 4615;
-	int fn_advance_ms = fn_advance_us / 1000;
-
-	t200_ms_acch[DL_SAPI0] = bts->t200_ms[T200_SACCH_SDCCH] + fn_advance_ms;
-	t200_ms_acch[DL_SAPI3] = bts->t200_ms[T200_SACCH_SDCCH] + fn_advance_ms;
-
-	if (lchan->repeated_acch_capability.dl_facch_all && (lchan->type == GSM_LCHAN_TCH_F || lchan->type == GSM_LCHAN_TCH_H)) {
-		t200_ms_acch[DL_SAPI0] *= 2;
-		t200_ms_acch[DL_SAPI3] *= 2;
-	}
-
-	switch (lchan->type) {
-	case GSM_LCHAN_SDCCH:
-		t200_ms_dcch[DL_SAPI0] = bts->t200_ms[T200_SDCCH] + fn_advance_ms;
-		t200_ms_dcch[DL_SAPI3] = bts->t200_ms[T200_SDCCH_SAPI3] + fn_advance_ms;
-		break;
-	case GSM_LCHAN_TCH_F:
-		t200_ms_dcch[DL_SAPI0] = bts->t200_ms[T200_FACCH_F] + fn_advance_ms;
-		t200_ms_dcch[DL_SAPI3] = bts->t200_ms[T200_FACCH_F] + fn_advance_ms;
-		break;
-	case GSM_LCHAN_TCH_H:
-		t200_ms_dcch[DL_SAPI0] = bts->t200_ms[T200_FACCH_H] + fn_advance_ms;
-		t200_ms_dcch[DL_SAPI3] = bts->t200_ms[T200_FACCH_H] + fn_advance_ms;
-		break;
-	default:
-		/* Channels such as CCCH don't use lapdm DL, and hence no T200 is needed */
-		return -1;
-	}
-	return 0;
-}
-
-int lchan_init_lapdm(struct gsm_lchan *lchan)
-{
-	struct lapdm_channel *lc = &lchan->lapdm_ch;
-	int t200_ms_dcch[_NR_DL_SAPI], t200_ms_acch[_NR_DL_SAPI];
-
-	if (t200_by_lchan(t200_ms_dcch, t200_ms_acch, lchan) == 0) {
-		LOGPLCHAN(lchan, DLLAPD, LOGL_DEBUG,
-			  "Setting T200 D0=%u, D3=%u, S0=%u, S3=%u (all in ms)\n",
-			  t200_ms_dcch[DL_SAPI0], t200_ms_dcch[DL_SAPI3],
-			  t200_ms_acch[DL_SAPI0], t200_ms_acch[DL_SAPI3]);
-		lapdm_channel_init3(lc, LAPDM_MODE_BTS, t200_ms_dcch, t200_ms_acch, lchan->type,
-				    gsm_lchan_name(lchan));
-		lapdm_channel_set_flags(lc, LAPDM_ENT_F_POLLING_ONLY);
-		lapdm_channel_set_l1(lc, NULL, lchan);
-	}
-	/* We still need to set Rx callback to receive RACH requests: */
-	lapdm_channel_set_l3(lc, lapdm_rll_tx_cb, lchan);
-
-	return 0;
-}
-
 #define CCCH_RACH_RATIO_COMBINED256      (256*1/9)
 #define CCCH_RACH_RATIO_SEPARATE256      (256*10/55)
 
diff --git a/src/common/lchan.c b/src/common/lchan.c
index 747e8b0..14fa625 100644
--- a/src/common/lchan.c
+++ b/src/common/lchan.c
@@ -52,6 +52,45 @@
 	{ 0, NULL }
 };
 
+/* prepare the per-SAPI T200 arrays for a given lchan */
+static int t200_by_lchan(int *t200_ms_dcch, int *t200_ms_acch, struct gsm_lchan *lchan)
+{
+	struct gsm_bts *bts = lchan->ts->trx->bts;
+
+	/* we have to compensate for the "RTS advance" due to the asynchronous interface between
+	 * the BTS (LAPDm) and the PHY/L1 (OsmoTRX or DSP in case of osmo-bts-{sysmo,lc15,oc2g,octphy} */
+	int32_t fn_advance = bts_get_avg_fn_advance(bts);
+	int32_t fn_advance_us = fn_advance * 4615;
+	int fn_advance_ms = fn_advance_us / 1000;
+
+	t200_ms_acch[DL_SAPI0] = bts->t200_ms[T200_SACCH_SDCCH] + fn_advance_ms;
+	t200_ms_acch[DL_SAPI3] = bts->t200_ms[T200_SACCH_SDCCH] + fn_advance_ms;
+
+	if (lchan->repeated_acch_capability.dl_facch_all && (lchan->type == GSM_LCHAN_TCH_F || lchan->type == GSM_LCHAN_TCH_H)) {
+		t200_ms_acch[DL_SAPI0] *= 2;
+		t200_ms_acch[DL_SAPI3] *= 2;
+	}
+
+	switch (lchan->type) {
+	case GSM_LCHAN_SDCCH:
+		t200_ms_dcch[DL_SAPI0] = bts->t200_ms[T200_SDCCH] + fn_advance_ms;
+		t200_ms_dcch[DL_SAPI3] = bts->t200_ms[T200_SDCCH_SAPI3] + fn_advance_ms;
+		break;
+	case GSM_LCHAN_TCH_F:
+		t200_ms_dcch[DL_SAPI0] = bts->t200_ms[T200_FACCH_F] + fn_advance_ms;
+		t200_ms_dcch[DL_SAPI3] = bts->t200_ms[T200_FACCH_F] + fn_advance_ms;
+		break;
+	case GSM_LCHAN_TCH_H:
+		t200_ms_dcch[DL_SAPI0] = bts->t200_ms[T200_FACCH_H] + fn_advance_ms;
+		t200_ms_dcch[DL_SAPI3] = bts->t200_ms[T200_FACCH_H] + fn_advance_ms;
+		break;
+	default:
+		/* Channels such as CCCH don't use lapdm DL, and hence no T200 is needed */
+		return -1;
+	}
+	return 0;
+}
+
 static void early_rr_ia_delay_cb(void *data)
 {
 	struct gsm_lchan *lchan = data;
@@ -105,6 +144,27 @@
 	lchan->name = name;
 }
 
+int lchan_init_lapdm(struct gsm_lchan *lchan)
+{
+	struct lapdm_channel *lc = &lchan->lapdm_ch;
+	int t200_ms_dcch[_NR_DL_SAPI], t200_ms_acch[_NR_DL_SAPI];
+
+	if (t200_by_lchan(t200_ms_dcch, t200_ms_acch, lchan) == 0) {
+		LOGPLCHAN(lchan, DLLAPD, LOGL_DEBUG,
+			  "Setting T200 D0=%u, D3=%u, S0=%u, S3=%u (all in ms)\n",
+			  t200_ms_dcch[DL_SAPI0], t200_ms_dcch[DL_SAPI3],
+			  t200_ms_acch[DL_SAPI0], t200_ms_acch[DL_SAPI3]);
+		lapdm_channel_init3(lc, LAPDM_MODE_BTS, t200_ms_dcch, t200_ms_acch, lchan->type,
+				    gsm_lchan_name(lchan));
+		lapdm_channel_set_flags(lc, LAPDM_ENT_F_POLLING_ONLY);
+		lapdm_channel_set_l1(lc, NULL, lchan);
+	}
+	/* We still need to set Rx callback to receive RACH requests: */
+	lapdm_channel_set_l3(lc, lapdm_rll_tx_cb, lchan);
+
+	return 0;
+}
+
 static int dyn_ts_pdch_release(struct gsm_lchan *lchan)
 {
 	struct gsm_bts_trx_ts *ts = lchan->ts;
@@ -179,6 +239,22 @@
 	return get_value_string(lchan_s_names, s);
 }
 
+/* obtain the next to-be transmitted dowlink SACCH frame (L2 hdr + L3); returns pointer to lchan->si buffer */
+uint8_t *lchan_sacch_get(struct gsm_lchan *lchan)
+{
+	uint32_t tmp, i;
+
+	for (i = 0; i < _MAX_SYSINFO_TYPE; i++) {
+		tmp = (lchan->si.last + 1 + i) % _MAX_SYSINFO_TYPE;
+		if (!(lchan->si.valid & (1 << tmp)))
+			continue;
+		lchan->si.last = tmp;
+		return GSM_LCHAN_SI(lchan, tmp);
+	}
+	LOGPLCHAN(lchan, DL1P, LOGL_NOTICE, "SACCH no SI available\n");
+	return NULL;
+}
+
 void lchan_set_state(struct gsm_lchan *lchan, enum gsm_lchan_state state)
 {
 	DEBUGP(DL1C, "%s state %s -> %s\n",
diff --git a/src/common/sysinfo.c b/src/common/sysinfo.c
index 5c5af25..b0f1ebf 100644
--- a/src/common/sysinfo.c
+++ b/src/common/sysinfo.c
@@ -164,22 +164,6 @@
 	return 1;
 }
 
-/* obtain the next to-be transmitted dowlink SACCH frame (L2 hdr + L3); returns pointer to lchan->si buffer */
-uint8_t *lchan_sacch_get(struct gsm_lchan *lchan)
-{
-	uint32_t tmp, i;
-
-	for (i = 0; i < _MAX_SYSINFO_TYPE; i++) {
-		tmp = (lchan->si.last + 1 + i) % _MAX_SYSINFO_TYPE;
-		if (!(lchan->si.valid & (1 << tmp)))
-			continue;
-		lchan->si.last = tmp;
-		return GSM_LCHAN_SI(lchan, tmp);
-	}
-	LOGPLCHAN(lchan, DL1P, LOGL_NOTICE, "SACCH no SI available\n");
-	return NULL;
-}
-
 /* re-generate SI3 restoctets with GPRS indicator depending on the PCU socket connection state */
 void regenerate_si3_restoctets(struct gsm_bts *bts)
 {

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/25781
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I17ebe6af69e31d1b4dbad7656bbf043f4c9243c1
Gerrit-Change-Number: 25781
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211014/00f68cbf/attachment.htm>


More information about the gerrit-log mailing list