[PATCH 12/33] Add PCH/AGCH message to PH-/MPH-/TCH-SAP interface

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/OpenBSC@lists.osmocom.org/.

Harald Welte laforge at gnumonks.org
Wed Aug 27 21:54:31 UTC 2014


From: Andreas Eversberg <jolly at eversberg.eu>

This part moves PCH and AGCH message primitives from osmo-bts-sysmo to
common part.
---
 src/common/l1sap.c         |  8 ++++++++
 src/osmo-bts-sysmo/l1_if.c | 19 ++++++++++++-------
 2 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index 2dedf02..da4cc48 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -79,6 +79,7 @@ static int l1sap_ph_rts_ind(struct gsm_bts_trx *trx,
 	uint8_t tn;
 	uint32_t fn;
 	uint8_t *p, *si;
+	int rc;
 
 	chan_nr = rts_ind->chan_nr;
 	link_id = rts_ind->link_id;
@@ -109,6 +110,13 @@ static int l1sap_ph_rts_ind(struct gsm_bts_trx *trx,
 			memcpy(p, si, GSM_MACBLOCK_LEN);
 		else
 			memcpy(p, fill_frame, GSM_MACBLOCK_LEN);
+	} else if (L1SAP_IS_CHAN_AGCH_PCH(chan_nr)) {
+		p = msgb_put(msg, GSM_MACBLOCK_LEN);
+		/* if CCCH block is 0, it is AGCH */
+		rc = bts_ccch_copy_msg(trx->bts, p, &g_time,
+			(L1SAP_FN2CCCHBLOCK(fn) < 1));
+		if (rc <= 0)
+			memcpy(p, fill_frame, GSM_MACBLOCK_LEN);
 	}
 
 	DEBUGP(DL1P, "Tx PH-DATA.req %02u/%02u/%02u chan_nr=%d link_id=%d\n",
diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c
index d169b27..a3fd64e 100644
--- a/src/osmo-bts-sysmo/l1_if.c
+++ b/src/osmo-bts-sysmo/l1_if.c
@@ -468,6 +468,14 @@ static int ph_data_req(struct gsm_bts_trx *trx, struct msgb *msg,
 	subCh = 0x1f;
 	if (L1SAP_IS_CHAN_BCCH(chan_nr)) {
 		sapi = GsmL1_Sapi_Bcch;
+	} else if (L1SAP_IS_CHAN_AGCH_PCH(chan_nr)) {
+		/* The sapi depends on DSP configuration, not
+		 * on the actual SYSTEM INFORMATION 3. */
+		u8BlockNbr = L1SAP_FN2CCCHBLOCK(u32Fn);
+		if (u8BlockNbr >= 1)
+			sapi = GsmL1_Sapi_Pch;
+		else
+			sapi = GsmL1_Sapi_Agch;
 	} else {
 		LOGP(DL1C, LOGL_NOTICE, "unknown prim %d op %d "
 			"chan_nr %d link_id %d\n", l1sap->oph.primitive,
@@ -544,6 +552,10 @@ static uint8_t chan_nr_by_sapi(enum gsm_phys_chan_config pchan,
 	case GsmL1_Sapi_Bcch:
 		cbits = 0x10;
 		break;
+	case GsmL1_Sapi_Agch:
+	case GsmL1_Sapi_Pch:
+		cbits = 0x12;
+		break;
 	default:
 		return 0;
 	}
@@ -707,13 +719,6 @@ static int handle_ph_readytosend_ind(struct femtol1_hdl *fl1,
 			msgb_free(pp.oph.msg);
 		}
 		break;
-	case GsmL1_Sapi_Agch:
-	case GsmL1_Sapi_Pch:
-		rc = bts_ccch_copy_msg(bts, msu_param->u8Buffer, &g_time,
-				       rts_ind->sapi == GsmL1_Sapi_Agch);
-		if (rc <= 0)
-			memcpy(msu_param->u8Buffer, fill_frame, GSM_MACBLOCK_LEN);
-		break;
 	case GsmL1_Sapi_TchF:
 	case GsmL1_Sapi_TchH:
 		/* only hit in case we have a RTP underflow, as real TCH
-- 
2.1.0





More information about the OpenBSC mailing list