summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2017-07-31 15:00:15 +0600
committerVadim Yanitskiy <axilirator@gmail.com>2017-10-23 22:05:49 +0330
commit962fa7d345dc9cbeaff5488665a49f6c44bde77d (patch)
treea3cb1629f1bca91e8139c100072781b924a39493
parentd6ff1aafc2ed44269fa8f11126d0548dd2401d34 (diff)
host/trxcon/l1ctl.c: make l1ctl_tx_data_ind flexible
Now this function can send both DATA and TRAFFIC indications. Change-Id: I945c10c317155917b6e6ce9d663d9cb46f2e085c
-rw-r--r--src/host/trxcon/l1ctl.c15
-rw-r--r--src/host/trxcon/l1ctl.h3
-rw-r--r--src/host/trxcon/sched_lchan_xcch.c2
3 files changed, 14 insertions, 6 deletions
diff --git a/src/host/trxcon/l1ctl.c b/src/host/trxcon/l1ctl.c
index ed30205f..ee03ad60 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 e83138d6..4f48aaa0 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 1ea74685..9a7a09b4 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 */