Review at https://gerrit.osmocom.org/7210
trxcon/l1ctl.c: combine both DATA and TRAFFIC REQ handlers Both functions are almost identical, and the only difference is the message type they set. Let's combine them into a single function and introduce a 'traffic' flag, which can be used to define a message type. Change-Id: I288f5d7b6cd242c4793973dcb3d2b1b6925d61a7 --- M src/host/trxcon/l1ctl.c 1 file changed, 17 insertions(+), 45 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/10/7210/1 diff --git a/src/host/trxcon/l1ctl.c b/src/host/trxcon/l1ctl.c index f138b88..0bcd5d9 100644 --- a/src/host/trxcon/l1ctl.c +++ b/src/host/trxcon/l1ctl.c @@ -606,25 +606,35 @@ return 0; } -static int l1ctl_rx_data_req(struct l1ctl_link *l1l, struct msgb *msg) +/** + * Handles both L1CTL_DATA_REQ and L1CTL_TRAFFIC_REQ. + */ +static int l1ctl_rx_dt_req(struct l1ctl_link *l1l, + struct msgb *msg, bool traffic) { struct l1ctl_info_ul *ul; struct trx_ts_prim *prim; uint8_t chan_nr, link_id; + size_t payload_len; int rc; /* Extract UL frame header */ ul = (struct l1ctl_info_ul *) msg->l1h; + /* Calculate the payload len */ + msg->l2h = ul->payload; + payload_len = msgb_l2len(msg); + /* Obtain channel description */ chan_nr = ul->chan_nr; link_id = ul->link_id & 0x40; - LOGP(DL1D, LOGL_DEBUG, "Recv Data Req (chan_nr=0x%02x, " - "link_id=0x%02x)\n", chan_nr, link_id); + LOGP(DL1D, LOGL_DEBUG, "Recv %s Req (chan_nr=0x%02x, " + "link_id=0x%02x, len=%zu)\n", traffic ? "TRAFFIC" : "DATA", + chan_nr, link_id, payload_len); /* Init a new primitive */ - rc = sched_prim_init(l1l->trx, &prim, 23, + rc = sched_prim_init(l1l->trx, &prim, payload_len, chan_nr, link_id); if (rc) goto exit; @@ -637,45 +647,7 @@ } /* Fill in the payload */ - memcpy(prim->payload, ul->payload, 23); - -exit: - msgb_free(msg); - return rc; -} - -static int l1ctl_rx_traffic_req(struct l1ctl_link *l1l, struct msgb *msg) -{ - struct l1ctl_info_ul *ul; - struct trx_ts_prim *prim; - uint8_t chan_nr, link_id; - int rc; - - /* Extract UL frame header */ - ul = (struct l1ctl_info_ul *) msg->l1h; - - /* Obtain channel description */ - chan_nr = ul->chan_nr; - link_id = ul->link_id & 0x40; - - LOGP(DL1D, LOGL_DEBUG, "Recv Traffic Req (chan_nr=0x%02x, " - "link_id=0x%02x)\n", chan_nr, link_id); - - /* Init a new primitive */ - rc = sched_prim_init(l1l->trx, &prim, TRAFFIC_DATA_LEN, - chan_nr, link_id); - if (rc) - goto exit; - - /* Push this primitive to transmit queue */ - rc = sched_prim_push(l1l->trx, prim, chan_nr); - if (rc) { - talloc_free(prim); - goto exit; - } - - /* Fill in the payload */ - memcpy(prim->payload, ul->payload, TRAFFIC_DATA_LEN); + memcpy(prim->payload, ul->payload, payload_len); exit: msgb_free(msg); @@ -811,9 +783,9 @@ case L1CTL_DM_REL_REQ: return l1ctl_rx_dm_rel_req(l1l, msg); case L1CTL_DATA_REQ: - return l1ctl_rx_data_req(l1l, msg); + return l1ctl_rx_dt_req(l1l, msg, false); case L1CTL_TRAFFIC_REQ: - return l1ctl_rx_traffic_req(l1l, msg); + return l1ctl_rx_dt_req(l1l, msg, true); case L1CTL_PARAM_REQ: return l1ctl_rx_param_req(l1l, msg); case L1CTL_TCH_MODE_REQ: -- To view, visit https://gerrit.osmocom.org/7210 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I288f5d7b6cd242c4793973dcb3d2b1b6925d61a7 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: fixeria/trx Gerrit-Owner: Vadim Yanitskiy <axilira...@gmail.com>