Review at https://gerrit.osmocom.org/7214
trxcon/scheduler: enforce lchan handlers to set message type Since this change, each lchan handler shall manually indicate a type of both message indications and confirmations. Change-Id: I02e0b87d61c127d2f6f5b9532909af78332bf707 --- M src/host/trxcon/sched_lchan_common.c M src/host/trxcon/sched_lchan_tchf.c M src/host/trxcon/sched_lchan_xcch.c M src/host/trxcon/sched_trx.h 4 files changed, 18 insertions(+), 21 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/14/7214/1 diff --git a/src/host/trxcon/sched_lchan_common.c b/src/host/trxcon/sched_lchan_common.c index 1858619..47b0162 100644 --- a/src/host/trxcon/sched_lchan_common.c +++ b/src/host/trxcon/sched_lchan_common.c @@ -82,9 +82,9 @@ }, }; -int sched_send_data_ind(struct trx_instance *trx, struct trx_ts *ts, +int sched_send_dt_ind(struct trx_instance *trx, struct trx_ts *ts, struct trx_lchan_state *lchan, uint8_t *l2, size_t l2_len, - bool dec_failed, int bit_error_count) + int bit_error_count, bool dec_failed, bool traffic) { const struct trx_lchan_desc *lchan_desc; struct l1ctl_info_dl dl_hdr; @@ -107,14 +107,13 @@ dl_hdr.fire_crc = dec_failed ? 2 : 0; /* Put a packet to higher layers */ - l1ctl_tx_dt_ind(trx->l1l, &dl_hdr, l2, l2_len, - l2_len != GSM_MACBLOCK_LEN); + l1ctl_tx_dt_ind(trx->l1l, &dl_hdr, l2, l2_len, traffic); return 0; } -int sched_send_data_conf(struct trx_instance *trx, struct trx_ts *ts, - struct trx_lchan_state *lchan, uint32_t fn, size_t l2_len) +int sched_send_dt_conf(struct trx_instance *trx, struct trx_ts *ts, + struct trx_lchan_state *lchan, uint32_t fn, bool traffic) { const struct trx_lchan_desc *lchan_desc; struct l1ctl_info_dl dl_hdr; @@ -131,8 +130,7 @@ dl_hdr.band_arfcn = htons(trx->band_arfcn); dl_hdr.frame_nr = htonl(fn); - l1ctl_tx_dt_conf(trx->l1l, &dl_hdr, - l2_len != GSM_MACBLOCK_LEN); + l1ctl_tx_dt_conf(trx->l1l, &dl_hdr, traffic); return 0; } diff --git a/src/host/trxcon/sched_lchan_tchf.c b/src/host/trxcon/sched_lchan_tchf.c index b023126..25c9b10 100644 --- a/src/host/trxcon/sched_lchan_tchf.c +++ b/src/host/trxcon/sched_lchan_tchf.c @@ -147,8 +147,8 @@ l2_len = sched_bad_frame_ind(l2, rsl_cmode, tch_mode); } else if (rc == GSM_MACBLOCK_LEN) { /* FACCH received, forward it to the higher layers */ - sched_send_data_ind(trx, ts, lchan, - l2, GSM_MACBLOCK_LEN, false, n_errors); + sched_send_dt_ind(trx, ts, lchan, l2, GSM_MACBLOCK_LEN, + n_errors, false, false); /* Send BFI instead of stolen TCH frame */ l2_len = sched_bad_frame_ind(l2, rsl_cmode, tch_mode); @@ -159,8 +159,8 @@ /* Send a traffic frame to the higher layers */ if (l2_len > 0) - sched_send_data_ind(trx, ts, lchan, - l2, l2_len, false, n_errors); + sched_send_dt_ind(trx, ts, lchan, l2, l2_len, + n_errors, rc < 4, true); return 0; } @@ -273,8 +273,7 @@ /* If we have sent the last (4/4) burst */ if (*mask == 0x0f) { /* Confirm data / traffic sending */ - sched_send_data_conf(trx, ts, lchan, fn, - lchan->prim->payload_len); + sched_send_dt_conf(trx, ts, lchan, fn, PRIM_IS_TCH(lchan->prim)); /* Forget processed primitive */ sched_prim_drop(lchan); diff --git a/src/host/trxcon/sched_lchan_xcch.c b/src/host/trxcon/sched_lchan_xcch.c index b2cbd22..f351674 100644 --- a/src/host/trxcon/sched_lchan_xcch.c +++ b/src/host/trxcon/sched_lchan_xcch.c @@ -109,8 +109,8 @@ } /* Send a L2 frame to the higher layers */ - sched_send_data_ind(trx, ts, lchan, - l2, GSM_MACBLOCK_LEN, rc != 0, n_errors); + sched_send_dt_ind(trx, ts, lchan, l2, GSM_MACBLOCK_LEN, + n_errors, rc != 0, false); return 0; } @@ -190,7 +190,7 @@ *mask = 0x00; /* Confirm data sending */ - sched_send_data_conf(trx, ts, lchan, fn, GSM_MACBLOCK_LEN); + sched_send_dt_conf(trx, ts, lchan, fn, false); } return 0; diff --git a/src/host/trxcon/sched_trx.h b/src/host/trxcon/sched_trx.h index 856566c..e9c0e6d 100644 --- a/src/host/trxcon/sched_trx.h +++ b/src/host/trxcon/sched_trx.h @@ -296,8 +296,8 @@ extern const uint8_t sched_nb_training_bits[8][26]; size_t sched_bad_frame_ind(uint8_t *l2, uint8_t rsl_cmode, uint8_t tch_mode); -int sched_send_data_ind(struct trx_instance *trx, struct trx_ts *ts, +int sched_send_dt_ind(struct trx_instance *trx, struct trx_ts *ts, struct trx_lchan_state *lchan, uint8_t *l2, size_t l2_len, - bool dec_failed, int bit_error_count); -int sched_send_data_conf(struct trx_instance *trx, struct trx_ts *ts, - struct trx_lchan_state *lchan, uint32_t fn, size_t l2_len); + int bit_error_count, bool dec_failed, bool traffic); +int sched_send_dt_conf(struct trx_instance *trx, struct trx_ts *ts, + struct trx_lchan_state *lchan, uint32_t fn, bool traffic); -- To view, visit https://gerrit.osmocom.org/7214 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I02e0b87d61c127d2f6f5b9532909af78332bf707 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: fixeria/trx Gerrit-Owner: Vadim Yanitskiy <axilira...@gmail.com>