[PATCH 05/20] 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/.

Andreas Eversberg jolly at eversberg.eu
Thu Sep 19 12:11:50 UTC 2013


This part moves PCH and AGCH message primitives from osmo-bts-sysmo to
common part.
---
 src/common/l1sap.c         | 17 +++++++++++++++++
 src/osmo-bts-sysmo/l1_if.c | 28 ++++++++++++----------------
 2 files changed, 29 insertions(+), 16 deletions(-)

diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index 996a589..16e1af8 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -108,6 +108,23 @@ 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 (L1SAP_FN2CCCHBLOCK(fn) >= 1) {
+			/* PCH */
+			struct gsm_bts_role_bts *btsb = trx->bts->role;
+			paging_gen_msg(btsb->paging_state, p, &g_time);
+		} else {
+			/* AGCH */
+			/* special queue of messages from IMM ASS CMD */
+			struct msgb *amsg = bts_agch_dequeue(trx->bts);
+			if (!amsg)
+				memcpy(p, fill_frame, GSM_MACBLOCK_LEN);
+			else {
+				memcpy(p, amsg->data, amsg->len);
+				msgb_free(amsg);
+			}
+		}
 	}
 
 	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 874ec15..511b466 100644
--- a/src/osmo-bts-sysmo/l1_if.c
+++ b/src/osmo-bts-sysmo/l1_if.c
@@ -389,6 +389,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,
@@ -486,6 +494,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;
 	}
@@ -499,7 +511,6 @@ static int handle_ph_readytosend_ind(struct femtol1_hdl *fl1,
 {
 	struct gsm_bts_trx *trx = fl1->priv;
 	struct gsm_bts *bts = trx->bts;
-	struct gsm_bts_role_bts *btsb = bts->role;
 	struct msgb *resp_msg;
 	GsmL1_PhDataReq_t *data_req;
 	GsmL1_MsgUnitParam_t *msu_param;
@@ -647,21 +658,6 @@ static int handle_ph_readytosend_ind(struct femtol1_hdl *fl1,
 			msgb_free(pp.oph.msg);
 		}
 		break;
-	case GsmL1_Sapi_Agch:
-		/* special queue of messages from IMM ASS CMD */
-		{
-			struct msgb *msg = bts_agch_dequeue(bts);
-			if (!msg)
-				memcpy(msu_param->u8Buffer, fill_frame, GSM_MACBLOCK_LEN);
-			else {
-				memcpy(msu_param->u8Buffer, msg->data, msg->len);
-				msgb_free(msg);
-			}
-		}
-		break;
-	case GsmL1_Sapi_Pch:
-		rc = paging_gen_msg(btsb->paging_state, msu_param->u8Buffer, &g_time);
-		break;
 	case GsmL1_Sapi_TchF:
 	case GsmL1_Sapi_TchH:
 		/* only hit in case we have a RTP underflow, as real TCH
-- 
1.8.1.5





More information about the OpenBSC mailing list