diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2013-01-25 11:07:12 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2013-02-27 10:44:01 +0100 |
commit | faba73a81230db1e549aa43b6a5ee7902b45f919 (patch) | |
tree | a7599ac6d3b9db1655d8b7510404bf54deb7035d | |
parent | 305d8314bce8f10d9c42aa8e19ccd7960fc5f194 (diff) |
sysmobts: Improve the shutdown of the DSP on exit
Issue the RfDeactivate.REQ before sending the MphClose.REQ. Ideally
we would issue MphClose.REQ after the RfDeactivate.CNF but this is
not possible right now.
The current approach makes the following warning of the DSP go away
on shutdown. This was tested with my E71 and an active silent-call
using a SDCCH.
DSP Warning:
[ERROR] : DeviceMng_ValidateL1Handle() => Invalid layer 1 handle
-rw-r--r-- | include/osmo-bts/bts_model.h | 1 | ||||
-rw-r--r-- | src/common/bts.c | 4 | ||||
-rw-r--r-- | src/osmo-bts-sysmo/oml.c | 3 | ||||
-rw-r--r-- | tests/cipher/cipher_test.c | 2 | ||||
-rw-r--r-- | tests/paging/paging_test.c | 2 |
5 files changed, 9 insertions, 3 deletions
diff --git a/include/osmo-bts/bts_model.h b/include/osmo-bts/bts_model.h index 7ccec4cb..bfa6bd8d 100644 --- a/include/osmo-bts/bts_model.h +++ b/include/osmo-bts/bts_model.h @@ -33,6 +33,7 @@ int bts_model_rsl_deact_sacch(struct gsm_lchan *lchan); int bts_model_rsl_mode_modify(struct gsm_lchan *lchan); int bts_model_trx_deact_rf(struct gsm_bts_trx *trx); +int bts_model_trx_close(struct gsm_bts_trx *trx); void bts_model_rtp_rx_cb(struct osmo_rtp_socket *rs, const uint8_t *rtp_pl, unsigned int rtp_pl_len); diff --git a/src/common/bts.c b/src/common/bts.c index 8f6dc694..db58e12f 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -126,8 +126,10 @@ void bts_shutdown(struct gsm_bts *bts, const char *reason) LOGP(DOML, LOGL_NOTICE, "Shutting down BTS %u, Reason %s\n", bts->nr, reason); - llist_for_each_entry(trx, &bts->trx_list, list) + llist_for_each_entry(trx, &bts->trx_list, list) { bts_model_trx_deact_rf(trx); + bts_model_trx_close(trx); + } /* shedule a timer to make sure select loop logic can run again * to dispatch any pending primitives */ diff --git a/src/osmo-bts-sysmo/oml.c b/src/osmo-bts-sysmo/oml.c index bf4fe158..9e2ac8ee 100644 --- a/src/osmo-bts-sysmo/oml.c +++ b/src/osmo-bts-sysmo/oml.c @@ -310,7 +310,7 @@ static int trx_close_compl_cb(struct gsm_bts_trx *trx, struct msgb *l1_msg) return 0; } -static int trx_close(struct gsm_bts_trx *trx) +int bts_model_trx_close(struct gsm_bts_trx *trx) { struct femtol1_hdl *fl1h = trx_femtol1_hdl(trx); struct msgb *msg; @@ -1149,6 +1149,5 @@ int bts_model_trx_deact_rf(struct gsm_bts_trx *trx) { struct femtol1_hdl *fl1 = trx_femtol1_hdl(trx); - trx_close(trx); return l1if_activate_rf(fl1, 0); } diff --git a/tests/cipher/cipher_test.c b/tests/cipher/cipher_test.c index 7d037c21..9de18d96 100644 --- a/tests/cipher/cipher_test.c +++ b/tests/cipher/cipher_test.c @@ -108,6 +108,8 @@ int bts_model_rsl_deact_sacch(struct gsm_lchan *lchan) int bts_model_trx_deact_rf(struct gsm_bts_trx *trx) { return 0; } +int bts_model_trx_close(struct gsm_bts_trx *trx) +{ return 0; } int bts_model_check_oml(struct gsm_bts *bts, uint8_t msg_type, struct tlv_parsed *old_attr, struct tlv_parsed *new_attr, void *obj) diff --git a/tests/paging/paging_test.c b/tests/paging/paging_test.c index a0a39355..ae02b618 100644 --- a/tests/paging/paging_test.c +++ b/tests/paging/paging_test.c @@ -142,6 +142,8 @@ int bts_model_rsl_deact_sacch(struct gsm_lchan *lchan) int bts_model_trx_deact_rf(struct gsm_bts_trx *trx) { return 0; } +int bts_model_trx_close(struct gsm_bts_trx *trx) +{ return 0; } int bts_model_check_oml(struct gsm_bts *bts, uint8_t msg_type, struct tlv_parsed *old_attr, struct tlv_parsed *new_attr, void *obj) |