From 4fa1e68ebcf4dd3ac874f8ed1bbbea096e29a6fc Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Wed, 11 Dec 2013 11:20:50 +0100 Subject: [WIP] HO: Add RX only mode for handover When establishing dedicate mode, a flag is used to disable transitter. When transmitter is disabled, access bursts are allowed. After sending a L1CTL_PARAM_REQ, the transmitter is enabled with given parameters. Change-Id: I43b14089e0b8988db6a73dd143c8ea806284ab7a --- src/target/firmware/include/layer1/sync.h | 2 ++ src/target/firmware/layer1/l23_api.c | 7 +++++++ src/target/firmware/layer1/prim_tch.c | 8 ++++++++ 3 files changed, 17 insertions(+) diff --git a/src/target/firmware/include/layer1/sync.h b/src/target/firmware/include/layer1/sync.h index 11faf81b..6aa5ab5a 100644 --- a/src/target/firmware/include/layer1/sync.h +++ b/src/target/firmware/include/layer1/sync.h @@ -148,6 +148,8 @@ struct l1s_state { struct l1s_h0 st_h0; struct l1s_h1 st_h1; }; + + uint8_t rx_only; } dedicated; /* neighbor cell power measurement process */ diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index 7d126cf1..5c5e2c71 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -276,6 +276,12 @@ static void l1ctl_rx_dm_est_req(struct msgb *msg) audio_set_enabled(est_req->tch_mode, est_req->audio_mode); } + /* Handover config */ + if ((est_req->flags & L1CTL_EST_F_RXONLY)) + l1s.dedicated.rx_only = 1; + else + l1s.dedicated.rx_only = 0; + /* figure out which MF tasks to enable */ l1s.neigh_pm.n = 0; l1a_mftask_set(chan_nr2mf_task_mask(ul->chan_nr, NEIGH_MODE_PM)); @@ -364,6 +370,7 @@ static void l1ctl_rx_param_req(struct msgb *msg) l1s.ta = par_req->ta; l1s.tx_power = par_req->tx_power; + l1s.dedicated.rx_only = 0; } /* receive a L1CTL_RACH_REQ from L23 */ diff --git a/src/target/firmware/layer1/prim_tch.c b/src/target/firmware/layer1/prim_tch.c index a8036d2f..230a3b5f 100644 --- a/src/target/firmware/layer1/prim_tch.c +++ b/src/target/firmware/layer1/prim_tch.c @@ -535,6 +535,10 @@ skip_tx_traffic: ); l1s_rx_win_ctrl(arfcn, L1_RXWIN_NB, 0); + /* stop here, if TX is disabled */ + if (l1s.dedicated.rx_only) + return 0; + dsp_load_tx_task( dsp_task_iq_swap(TCHT_DSP_TASK, arfcn, 1), 0, tsc /* burst_id unused for TCH */ @@ -800,6 +804,10 @@ static int l1s_tch_a_cmd(__unused uint8_t p1, __unused uint8_t p2, uint16_t p3) ); l1s_rx_win_ctrl(arfcn, L1_RXWIN_NB, 0); + /* stop here, if TX is disabled */ + if (l1s.dedicated.rx_only) + return 0; + dsp_load_tx_task( dsp_task_iq_swap(TCHA_DSP_TASK, arfcn, 1), 0, tsc /* burst_id unused for TCHA */ -- cgit v1.2.3