Change in osmo-bts[master]: osmo-bts-trx/scheduler: refactor dummy burst scheduling

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/.

fixeria gerrit-no-reply at lists.osmocom.org
Sun Jun 28 13:39:16 UTC 2020


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


Change subject: osmo-bts-trx/scheduler: refactor dummy burst scheduling
......................................................................

osmo-bts-trx/scheduler: refactor dummy burst scheduling

This change facilitates the upcoming freq. hopping implementation,
in particular scheduling of dummy bursts on C0 with hopping time-
slots.  One problem is that we cannot know in advance, whether to
send a dummy burst on a given timeslot unless all transceivers are
processed.  For example, trx#3 may want to send a normal burst on
ARFCN of trx#0 (C0), while we have already sent a dummy burst...

Another important aspect is that we shall not be sending dummy
bursts on transceivers other than C0.  Scheduling dummy bursts
from _sched_dl_burst() in the context of a single hopping timeslot
of a single transceiver leaves trx_sched_fn() no way to know
whether it's a dummy burst or something else.

Let's solve both problems by moving dummy burst scheduling logic
from _sched_dl_burst() to trx_sched_fn().  Maintain C0 slot-mask
in the inner (per-trx) loop, so that we can fill missing bursts
with dummy bursts afterwards.

Change-Id: I8c3651c27d2991079e83b8abdb7e2c3f95b97a43
Related: OS#4546
---
M include/osmo-bts/scheduler_backend.h
M src/common/scheduler.c
M src/osmo-bts-trx/scheduler_trx.c
3 files changed, 29 insertions(+), 17 deletions(-)



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

diff --git a/include/osmo-bts/scheduler_backend.h b/include/osmo-bts/scheduler_backend.h
index eb8039f..e3326f6 100644
--- a/include/osmo-bts/scheduler_backend.h
+++ b/include/osmo-bts/scheduler_backend.h
@@ -35,6 +35,7 @@
 };
 extern const struct trx_chan_desc trx_chan_desc[_TRX_CHAN_MAX];
 
+extern const ubit_t _sched_dummy_burst[];
 extern const ubit_t _sched_tsc[8][26];
 extern const ubit_t _sched_egprs_tsc[8][78];
 extern const ubit_t _sched_sch_train[64];
diff --git a/src/common/scheduler.c b/src/common/scheduler.c
index 3068918..e5836b0 100644
--- a/src/common/scheduler.c
+++ b/src/common/scheduler.c
@@ -51,8 +51,9 @@
 	enum trx_chan_type chan);
 static int rts_tchh_fn(struct l1sched_trx *l1t, uint8_t tn, uint32_t fn,
 	enum trx_chan_type chan);
+
 /*! \brief Dummy Burst (TS 05.02 Chapter 5.2.6) */
-static const ubit_t dummy_burst[GSM_BURST_LEN] = {
+const ubit_t _sched_dummy_burst[] = {
 	0,0,0,
 	1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,0,
 	0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,
@@ -1188,7 +1189,7 @@
 	enum trx_chan_type chan;
 
 	if (!l1ts->mf_index)
-		goto no_data;
+		return;
 
 	/* get frame from multiframe */
 	period = l1ts->mf_period;
@@ -1203,11 +1204,11 @@
 
 	/* check if channel is active */
 	if (!TRX_CHAN_IS_ACTIVE(l1cs, chan))
-		goto no_data;
+		return;
 
 	/* get burst from function */
 	if (func(l1t, chan, bid, br) != 0)
-		goto no_data;
+		return;
 
 	/* BS Power reduction (in dB) per logical channel */
 	if (l1cs->lchan != NULL)
@@ -1224,19 +1225,6 @@
 			br->burst[i + 88] ^= ks[i + 57];
 		}
 	}
-
-no_data:
-	/* in case of C0, we need a dummy burst to maintain RF power */
-	if (!br->burst_len && l1t->trx == l1t->trx->bts->c0) {
-#if 0
-		if (chan != TRXC_IDLE) // hack
-			LOGP(DL1C, LOGL_DEBUG, "No burst data for %s fn=%u ts=%u "
-			     "burst=%d on C0, so filling with dummy burst\n",
-			     trx_chan_desc[chan].name, fn, tn, bid);
-#endif
-		memcpy(br->burst, dummy_burst, ARRAY_SIZE(dummy_burst));
-		br->burst_len = ARRAY_SIZE(dummy_burst);
-	}
 }
 
 static int trx_sched_calc_frame_loss(struct l1sched_trx *l1t,
diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c
index 472bae8..8e1ccfa 100644
--- a/src/osmo-bts-trx/scheduler_trx.c
+++ b/src/osmo-bts-trx/scheduler_trx.c
@@ -60,6 +60,7 @@
 {
 	struct trx_dl_burst_req br;
 	struct gsm_bts_trx *trx;
+	uint8_t c0_mask = 0x00;
 	uint32_t sched_fn;
 	uint8_t tn;
 
@@ -99,9 +100,31 @@
 				continue;
 			}
 
+			/* update dummy burst mask for C0 */
+			if (trx == bts->c0)
+				c0_mask |= (1 << tn);
+
 			trx_if_send_burst(l1h, &br);
 		}
 	}
+
+	/* send dummy bursts on inactive timeslots of C0 */
+	struct phy_instance *pinst = trx_phy_instance(bts->c0);
+	struct trx_l1h *l1h = pinst->u.osmotrx.hdl;
+	struct phy_link *plink = pinst->phy_link;
+
+	br = (struct trx_dl_burst_req) {
+		.fn = GSM_TDMA_FN_SUM(fn, plink->u.osmotrx.clock_advance),
+		.burst_len = GSM_BURST_LEN,
+	};
+
+	memcpy(br.burst, _sched_dummy_burst, GSM_BURST_LEN);
+
+	for (br.tn = 0; br.tn < TRX_NR_TS; br.tn++) {
+		if (c0_mask & (1 << br.tn))
+			continue;
+		trx_if_send_burst(l1h, &br);
+	}
 }
 
 /*! maximum number of 'missed' frame periods we can tolerate of OS doesn't schedule us*/

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

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I8c3651c27d2991079e83b8abdb7e2c3f95b97a43
Gerrit-Change-Number: 19029
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200628/002e3f61/attachment.htm>


More information about the gerrit-log mailing list