aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-02-28 13:19:15 +0000
committerHarald Welte <laforge@gnumonks.org>2009-02-28 13:19:15 +0000
commitddab3c78c526de42600d3309ce4683e50cdaf350 (patch)
treee133627cdd8492037808836c1d3a636f1cea7f7f
parent4a543e81cf3ace7f5b5b55c838fcb4377a2a34b4 (diff)
introduce new 'mode' parameter to RSL ACTIVATE CHANNEL
-rw-r--r--include/openbsc/abis_rsl.h2
-rw-r--r--src/abis_rsl.c21
2 files changed, 15 insertions, 8 deletions
diff --git a/include/openbsc/abis_rsl.h b/include/openbsc/abis_rsl.h
index b6d9a9d10..532595b90 100644
--- a/include/openbsc/abis_rsl.h
+++ b/include/openbsc/abis_rsl.h
@@ -379,7 +379,7 @@ int rsl_chan_activate(struct gsm_bts_trx *trx, u_int8_t chan_nr,
u_int8_t bs_power, u_int8_t ms_power,
u_int8_t ta);
int rsl_chan_activate_lchan(struct gsm_lchan *lchan, u_int8_t act_type,
- u_int8_t ta);
+ u_int8_t ta, u_int8_t mode);
int rsl_chan_mode_modify_req(struct gsm_lchan *ts);
int rsl_paging_cmd(struct gsm_bts *bts, u_int8_t paging_group, u_int8_t len,
u_int8_t *ms_ident, u_int8_t chan_needed);
diff --git a/src/abis_rsl.c b/src/abis_rsl.c
index 918255c4a..c84d8e506 100644
--- a/src/abis_rsl.c
+++ b/src/abis_rsl.c
@@ -356,6 +356,7 @@ int rsl_sacch_filling(struct gsm_bts_trx *trx, u_int8_t type,
}
/* Chapter 8.4.1 */
+#if 0
int rsl_chan_activate(struct gsm_bts_trx *trx, u_int8_t chan_nr,
u_int8_t act_type,
struct rsl_ie_chan_mode *chan_mode,
@@ -388,11 +389,10 @@ int rsl_chan_activate(struct gsm_bts_trx *trx, u_int8_t chan_nr,
return abis_rsl_sendmsg(msg);
}
-
-#define TSC 7
+#endif
int rsl_chan_activate_lchan(struct gsm_lchan *lchan, u_int8_t act_type,
- u_int8_t ta)
+ u_int8_t ta, u_int8_t mode)
{
struct abis_rsl_dchan_hdr *dh;
struct msgb *msg = rsl_msgb_alloc();
@@ -412,10 +412,17 @@ int rsl_chan_activate_lchan(struct gsm_lchan *lchan, u_int8_t act_type,
cm.chan_rate = 0x00;
break;
case GSM_LCHAN_TCH_F:
- /* TCH/F are always activated in signalling mode first */
- cm.spd_ind = RSL_CMOD_SPD_SIGN;
cm.chan_rt = RSL_CMOD_CRT_TCH_Bm;
- cm.chan_rate = 0x00;
+ switch (mode) {
+ case RSL_CMOD_SPD_SIGN:
+ cm.spd_ind = RSL_CMOD_SPD_SIGN;
+ cm.chan_rate = 0x00;
+ break;
+ case RSL_CMOD_SPD_SPEECH:
+ cm.spd_ind = RSL_CMOD_SPD_SPEECH;
+ cm.chan_rate = RSL_CMOD_SP_GSM2;
+ break;
+ }
break;
case GSM_LCHAN_TCH_H:
DEBUGP(DRSL, "Unimplemented TCH_H activation\n");
@@ -805,7 +812,7 @@ static int rsl_rx_chan_rqd(struct msgb *msg)
subch = lchan->nr;
lchan->ms_power = lchan->bs_power = 0x0f; /* 30dB reduction */
- rsl_chan_activate_lchan(lchan, 0x00, rqd_ta);
+ rsl_chan_activate_lchan(lchan, 0x00, rqd_ta, RSL_CMOD_SPD_SIGN);
/* create IMMEDIATE ASSIGN 04.08 messge */
memset(&ia, 0, sizeof(ia));