[PATCH] Update parameters in osmo-bts for 11 bit RACH

Bhargava Abhyankar Bhargava.Abhyankar at radisys.com
Tue Apr 5 11:57:41 UTC 2016


Based on the indication from L1, number of bits in RACH and burst
type is determined. Appropriate parameters are filled in osmo-bts.
These parameters are sent to osmo-pcu for processing of the RACH.
---
 src/osmo-bts-sysmo/l1_if.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c
index a8f957c..1aec989 100644
--- a/src/osmo-bts-sysmo/l1_if.c
+++ b/src/osmo-bts-sysmo/l1_if.c
@@ -857,7 +857,7 @@ static int handle_ph_ra_ind(struct femtol1_hdl *fl1, GsmL1_PhRaInd_t *ra_ind,
 	struct gsm_lchan *lchan;
 	struct osmo_phsap_prim *l1sap;
 	uint32_t fn;
-	uint8_t ra, acc_delay = 0;
+	uint16_t ra, acc_delay = 0, is_11bit = 0, burst_type = 0;
 	int rc;
 
 	/* increment number of busy RACH slots, if required */
@@ -879,16 +879,25 @@ static int handle_ph_ra_ind(struct femtol1_hdl *fl1, GsmL1_PhRaInd_t *ra_ind,
 		btsb->load.rach.access++;
 
 	dump_meas_res(LOGL_DEBUG, &ra_ind->measParam);
+	burst_type = ra_ind->burstType;
 
-	if (ra_ind->msgUnitParam.u8Size != 1) {
+	if ((ra_ind->msgUnitParam.u8Size != 1) &&
+		(ra_ind->msgUnitParam.u8Size != 2)) {
 		LOGP(DL1C, LOGL_ERROR, "PH-RACH-INDICATION has %d bits\n",
 			ra_ind->sapi);
 		msgb_free(l1p_msg);
 		return 0;
 	}
 
+	if (ra_ind->msgUnitParam.u8Size == 2) {
+		is_11bit = 1;
+		memcpy(&ra, ra_ind->msgUnitParam.u8Buffer, 2);
+	} else {
+		is_11bit = 0;
+		ra = ra_ind->msgUnitParam.u8Buffer[0];
+	}
+
 	fn = ra_ind->u32Fn;
-	ra = ra_ind->msgUnitParam.u8Buffer[0];
 	rc = msgb_trim(l1p_msg, sizeof(*l1sap));
 	if (rc < 0)
 		MSGB_ABORT(l1p_msg, "No room for primitive data\n");
@@ -898,11 +907,8 @@ static int handle_ph_ra_ind(struct femtol1_hdl *fl1, GsmL1_PhRaInd_t *ra_ind,
 	l1sap->u.rach_ind.ra = ra;
 	l1sap->u.rach_ind.acc_delay = acc_delay;
 	l1sap->u.rach_ind.fn = fn;
-
-	/* Initialising the parameters needs to be handled when 11 bit RACH
-	 * is supported */
-	l1sap->u.rach_ind.is_11bit = 0;
-	l1sap->u.rach_ind.burst = GSM_L1_BURST_TYPE_ACCESS_0;
+	l1sap->u.rach_ind.is_11bit = is_11bit;	/* no of bits in 11 bit RACH */
+	l1sap->u.rach_ind.burst = burst_type;	/* type of burst */
 
 	if (!lchan || lchan->ts->pchan == GSM_PCHAN_CCCH ||
 	    lchan->ts->pchan == GSM_PCHAN_CCCH_SDCCH4)
@@ -911,6 +917,7 @@ static int handle_ph_ra_ind(struct femtol1_hdl *fl1, GsmL1_PhRaInd_t *ra_ind,
 		l1sap->u.rach_ind.chan_nr = gsm_lchan2chan_nr(lchan);
 
 	return l1sap_up(trx, l1sap);
+
 }
 
 /* handle any random indication from the L1 */
-- 
2.5.0




More information about the osmocom-net-gprs mailing list