From f2179e6763d1a7ea551df1c026078d5cfd25a04d Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Mon, 31 Jul 2017 15:00:15 +0600 Subject: [PATCH] host/trxcon/l1ctl.c: make l1ctl_tx_data_ind flexible Now this function can send both DATA and TRAFFIC indications. Change-Id: I945c10c317155917b6e6ce9d663d9cb46f2e085c --- src/host/trxcon/l1ctl.c | 15 +++++++++++---- src/host/trxcon/l1ctl.h | 3 ++- src/host/trxcon/sched_lchan_xcch.c | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/host/trxcon/l1ctl.c b/src/host/trxcon/l1ctl.c index ed30205f5..ee03ad60f 100644 --- a/src/host/trxcon/l1ctl.c +++ b/src/host/trxcon/l1ctl.c @@ -177,18 +177,25 @@ int l1ctl_tx_ccch_mode_conf(struct l1ctl_link *l1l, uint8_t mode) return l1ctl_link_send(l1l, msg); } -int l1ctl_tx_data_ind(struct l1ctl_link *l1l, struct l1ctl_info_dl *data) +int l1ctl_tx_data_ind(struct l1ctl_link *l1l, + struct l1ctl_info_dl *data, uint8_t msg_type) { struct l1ctl_info_dl *dl; struct msgb *msg; size_t len; - msg = l1ctl_alloc_msg(L1CTL_DATA_IND); + if (msg_type != L1CTL_DATA_IND && msg_type != L1CTL_TRAFFIC_IND) { + LOGP(DL1C, LOGL_DEBUG, "Incorrect indication type\n"); + return -EINVAL; + } + + msg = l1ctl_alloc_msg(msg_type); if (msg == NULL) return -ENOMEM; - /* We store the 23-byte payload as a flexible array member */ - len = sizeof(struct l1ctl_info_dl) + 23; + /* We store the payload as a flexible array member */ + len = sizeof(struct l1ctl_info_dl); + len += msg_type == L1CTL_DATA_IND ? 23 : TRAFFIC_DATA_LEN; dl = (struct l1ctl_info_dl *) msgb_put(msg, len); /* Copy header and data from source message */ diff --git a/src/host/trxcon/l1ctl.h b/src/host/trxcon/l1ctl.h index e83138d6a..4f48aaa0f 100644 --- a/src/host/trxcon/l1ctl.h +++ b/src/host/trxcon/l1ctl.h @@ -18,6 +18,7 @@ int l1ctl_tx_pm_conf(struct l1ctl_link *l1l, uint16_t band_arfcn, int l1ctl_tx_reset_conf(struct l1ctl_link *l1l, uint8_t type); int l1ctl_tx_reset_ind(struct l1ctl_link *l1l, uint8_t type); -int l1ctl_tx_data_ind(struct l1ctl_link *l1l, struct l1ctl_info_dl *ind); +int l1ctl_tx_data_ind(struct l1ctl_link *l1l, + struct l1ctl_info_dl *data, uint8_t msg_type); int l1ctl_tx_rach_conf(struct l1ctl_link *l1l, uint32_t fn); int l1ctl_tx_data_conf(struct l1ctl_link *l1l); diff --git a/src/host/trxcon/sched_lchan_xcch.c b/src/host/trxcon/sched_lchan_xcch.c index 1ea74685f..9a7a09b44 100644 --- a/src/host/trxcon/sched_lchan_xcch.c +++ b/src/host/trxcon/sched_lchan_xcch.c @@ -181,7 +181,7 @@ int rx_data_fn(struct trx_instance *trx, struct trx_ts *ts, memcpy(data->payload, l2, 23); /* Put a packet to higher layers */ - l1ctl_tx_data_ind(trx->l1l, data); + l1ctl_tx_data_ind(trx->l1l, data, L1CTL_DATA_IND); talloc_free(data); /* TODO: AGC, TA loops */