jolly has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/34482?usp=email )
Change subject: ASCI: Add UIC support to random access burst ...................................................................... ASCI: Add UIC support to random access burst A different identity code can be used on uplink access bursts on voice group channel. This is optional for the network, but mandatory for the MS side. If the network does not define a UIC, the BSIC is used instead. BSIC is used for RACH channel and handover. Related: OS#5364 Change-Id: I4039734676949aefa5be4b5298764b8ba7e1b8ed --- M include/l1ctl_proto.h M src/host/layer23/include/osmocom/bb/common/l1ctl.h M src/host/layer23/src/common/l1ctl.c M src/host/layer23/src/common/l1ctl_lapdm_glue.c M src/host/layer23/src/modem/grr.c M src/target/firmware/include/layer1/prim.h M src/target/firmware/include/layer1/sync.h M src/target/firmware/layer1/l23_api.c M src/target/firmware/layer1/prim_rach.c 9 files changed, 35 insertions(+), 12 deletions(-) Approvals: jolly: Looks good to me, approved pespin: Looks good to me, but someone else must approve Jenkins Builder: Verified diff --git a/include/l1ctl_proto.h b/include/l1ctl_proto.h index 2bdb560..941a947 100644 --- a/include/l1ctl_proto.h +++ b/include/l1ctl_proto.h @@ -230,6 +230,7 @@ uint8_t ra; uint8_t combined; uint16_t offset; + uint8_t uic; } __attribute__((packed)); diff --git a/src/host/layer23/include/osmocom/bb/common/l1ctl.h b/src/host/layer23/include/osmocom/bb/common/l1ctl.h index d49e16d..a74c9c3 100644 --- a/src/host/layer23/include/osmocom/bb/common/l1ctl.h +++ b/src/host/layer23/include/osmocom/bb/common/l1ctl.h @@ -23,7 +23,7 @@ /* Transmit L1CTL_RACH_REQ */ int l1ctl_tx_rach_req(struct osmocom_ms *ms, uint8_t chan_nr, uint8_t link_id, - uint8_t ra, uint16_t offset, uint8_t combined); + uint8_t ra, uint16_t offset, uint8_t combined, uint8_t uic); /* Transmit L1CTL_DM_EST_REQ */ int l1ctl_tx_dm_est_req_h0(struct osmocom_ms *ms, uint16_t band_arfcn, uint8_t chan_nr, uint8_t tsc, diff --git a/src/host/layer23/src/common/l1ctl.c b/src/host/layer23/src/common/l1ctl.c index e950c85..589af09 100644 --- a/src/host/layer23/src/common/l1ctl.c +++ b/src/host/layer23/src/common/l1ctl.c @@ -514,7 +514,7 @@ /* Transmit L1CTL_RACH_REQ */ int l1ctl_tx_rach_req(struct osmocom_ms *ms, uint8_t chan_nr, uint8_t link_id, - uint8_t ra, uint16_t offset, uint8_t combined) + uint8_t ra, uint16_t offset, uint8_t combined, uint8_t uic) { struct msgb *msg; struct l1ctl_info_ul *ul; @@ -524,7 +524,7 @@ if (!msg) return -1; - DEBUGP(DL1C, "RACH Req. offset=%d combined=%d\n", offset, combined); + DEBUGP(DL1C, "RACH Req. offset=%d combined=%d uic=0x%02x\n", offset, combined, uic); ul = (struct l1ctl_info_ul *) msgb_put(msg, sizeof(*ul)); ul->chan_nr = chan_nr; ul->link_id = link_id; @@ -532,6 +532,7 @@ req->ra = ra; req->offset = htons(offset); req->combined = combined; + req->uic = uic; return osmo_send_l1(ms, msg); } diff --git a/src/host/layer23/src/common/l1ctl_lapdm_glue.c b/src/host/layer23/src/common/l1ctl_lapdm_glue.c index 601bed6..458cc81 100644 --- a/src/host/layer23/src/common/l1ctl_lapdm_glue.c +++ b/src/host/layer23/src/common/l1ctl_lapdm_glue.c @@ -52,7 +52,8 @@ RSL_CHAN_RACH, 0x00, pp->u.rach_req.ra, pp->u.rach_req.offset, - pp->u.rach_req.is_combined_ccch); + pp->u.rach_req.is_combined_ccch, + 0xff); break; default: rc = -EINVAL; diff --git a/src/host/layer23/src/modem/grr.c b/src/host/layer23/src/modem/grr.c index b1912ea..1bb172e 100644 --- a/src/host/layer23/src/modem/grr.c +++ b/src/host/layer23/src/modem/grr.c @@ -653,7 +653,7 @@ rr->cr_ra, rr->n_chan_req); l1ctl_tx_rach_req(ms, RSL_CHAN_RACH, 0x00, rr->cr_ra, 0, - ms->cellsel.ccch_mode == CCCH_MODE_COMBINED); + ms->cellsel.ccch_mode == CCCH_MODE_COMBINED, 0xff); } static void grr_st_packet_access_action(struct osmo_fsm_inst *fi, diff --git a/src/target/firmware/include/layer1/prim.h b/src/target/firmware/include/layer1/prim.h index 30c51ae..4e34bb2 100644 --- a/src/target/firmware/include/layer1/prim.h +++ b/src/target/firmware/include/layer1/prim.h @@ -20,7 +20,7 @@ void l1s_fbsb_req(uint8_t base_fn, struct l1ctl_fbsb_req *req); void l1a_freq_req(uint32_t fn_sched); -void l1a_rach_req(uint16_t offset, uint8_t combined, uint8_t ra); +void l1a_rach_req(uint16_t offset, uint8_t combined, uint8_t ra, uint8_t uic); /* Primitives raw scheduling sets */ extern const struct tdma_sched_item nb_sched_set[]; diff --git a/src/target/firmware/include/layer1/sync.h b/src/target/firmware/include/layer1/sync.h index ff56354..e0a4412 100644 --- a/src/target/firmware/include/layer1/sync.h +++ b/src/target/firmware/include/layer1/sync.h @@ -117,6 +117,7 @@ struct { uint8_t ra; + uint8_t uic; } rach; struct { diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index 68bb2c0..f4309e2 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -386,11 +386,10 @@ struct l1ctl_info_ul *ul = (struct l1ctl_info_ul *) l1h->data; struct l1ctl_rach_req *rach_req = (struct l1ctl_rach_req *) ul->payload; - printd("L1CTL_RACH_REQ (ra=0x%02x, offset=%d, combined=%d)\n", - rach_req->ra, ntohs(rach_req->offset), rach_req->combined); + printd("L1CTL_RACH_REQ (ra=0x%02x, offset=%d, combined=%d, uic=0x%02x)\n", + rach_req->ra, ntohs(rach_req->offset), rach_req->combined, rach_req->uic); - l1a_rach_req(ntohs(rach_req->offset), rach_req->combined, - rach_req->ra); + l1a_rach_req(ntohs(rach_req->offset), rach_req->combined, rach_req->ra, rach_req->uic); } /* receive a L1CTL_DATA_REQ from L23 */ diff --git a/src/target/firmware/layer1/prim_rach.c b/src/target/firmware/layer1/prim_rach.c index 20dab5f..580131e 100644 --- a/src/target/firmware/layer1/prim_rach.c +++ b/src/target/firmware/layer1/prim_rach.c @@ -62,7 +62,11 @@ l1s_tx_apc_helper(l1s.serving_cell.arfcn); - data[0] = l1s.serving_cell.bsic << 2; + /* If an invalid UIC is given, use BSIC. */ + if (l1s.rach.uic > 0x3f) + data[0] = l1s.serving_cell.bsic << 2; + else + data[0] = l1s.rach.uic << 2; data[1] = l1s.rach.ra; info_ptr = &dsp_api.ndb->d_rach; @@ -128,7 +132,7 @@ 45, 46}; /* schedule access burst */ -void l1a_rach_req(uint16_t offset, uint8_t combined, uint8_t ra) +void l1a_rach_req(uint16_t offset, uint8_t combined, uint8_t ra, uint8_t uic) { uint32_t fn_sched; unsigned long flags; @@ -158,6 +162,7 @@ } else fn_sched = l1s.current_time.fn + offset; l1s.rach.ra = ra; + l1s.rach.uic = uic; fn_sched %= GSM_MAX_FN; sched_gsmtime(rach_sched_set_ul, fn_sched, 0); local_irq_restore(flags); -- To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/34482?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Change-Id: I4039734676949aefa5be4b5298764b8ba7e1b8ed Gerrit-Change-Number: 34482 Gerrit-PatchSet: 9 Gerrit-Owner: jolly <andr...@eversberg.eu> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: jolly <andr...@eversberg.eu> Gerrit-Reviewer: laforge <lafo...@osmocom.org> Gerrit-Reviewer: pespin <pes...@sysmocom.de> Gerrit-CC: fixeria <vyanits...@sysmocom.de> Gerrit-MessageType: merged