fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/29957 )
Change subject: trxcon: merge TRXCON_EV_TX_TRAFFIC_* with TRXCON_EV_TX_DATA_* ......................................................................
trxcon: merge TRXCON_EV_TX_TRAFFIC_* with TRXCON_EV_TX_DATA_*
It's not really necessary to handle signalling and traffic via different events, so let's reduce complexity by merging them.
Change-Id: I8c2b3274f32d4d52424512d988b93d6233dd09a0 Related: OS#5599 --- M src/host/trxcon/include/osmocom/bb/trxcon/l1ctl.h M src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h M src/host/trxcon/src/l1ctl.c M src/host/trxcon/src/trxcon.c M src/host/trxcon/src/trxcon_fsm.c 5 files changed, 31 insertions(+), 44 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/57/29957/1
diff --git a/src/host/trxcon/include/osmocom/bb/trxcon/l1ctl.h b/src/host/trxcon/include/osmocom/bb/trxcon/l1ctl.h index 70d804f..0d55ff1 100644 --- a/src/host/trxcon/include/osmocom/bb/trxcon/l1ctl.h +++ b/src/host/trxcon/include/osmocom/bb/trxcon/l1ctl.h @@ -17,8 +17,8 @@ int l1ctl_tx_reset_conf(struct l1ctl_client *l1c, uint8_t type); int l1ctl_tx_reset_ind(struct l1ctl_client *l1c, uint8_t type);
-int l1ctl_tx_dt_ind(struct l1ctl_client *l1c, bool traffic, - const struct trxcon_param_rx_traffic_data_ind *ind); +int l1ctl_tx_dt_ind(struct l1ctl_client *l1c, + const struct trxcon_param_rx_data_ind *ind); int l1ctl_tx_dt_conf(struct l1ctl_client *l1c, struct l1ctl_info_dl *data, bool traffic); int l1ctl_tx_rach_conf(struct l1ctl_client *l1c, diff --git a/src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h b/src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h index 37e3f14..9c641df 100644 --- a/src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h +++ b/src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h @@ -29,8 +29,6 @@ TRXCON_EV_UPDATE_SACCH_CACHE_REQ, TRXCON_EV_DEDICATED_ESTABLISH_REQ, TRXCON_EV_DEDICATED_RELEASE_REQ, - TRXCON_EV_TX_TRAFFIC_REQ, - TRXCON_EV_RX_TRAFFIC_IND, TRXCON_EV_TX_DATA_REQ, TRXCON_EV_RX_DATA_IND, TRXCON_EV_CRYPTO_REQ, @@ -84,16 +82,18 @@ }; };
-/* param of TRXCON_EV_TX_{TRAFFIC,DATA}_REQ */ -struct trxcon_param_tx_traffic_data_req { +/* param of TRXCON_EV_TX_DATA_REQ */ +struct trxcon_param_tx_data_req { + bool traffic; uint8_t chan_nr; uint8_t link_id; size_t data_len; const uint8_t *data; };
-/* param of TRXCON_EV_RX_{TRAFFIC,DATA}_IND */ -struct trxcon_param_rx_traffic_data_ind { +/* param of TRXCON_EV_RX_DATA_IND */ +struct trxcon_param_rx_data_ind { + bool traffic; uint8_t chan_nr; uint8_t link_id; uint16_t band_arfcn; diff --git a/src/host/trxcon/src/l1ctl.c b/src/host/trxcon/src/l1ctl.c index 5baac1f..7a35d59 100644 --- a/src/host/trxcon/src/l1ctl.c +++ b/src/host/trxcon/src/l1ctl.c @@ -232,13 +232,12 @@ /** * Handles both L1CTL_DATA_IND and L1CTL_TRAFFIC_IND. */ -int l1ctl_tx_dt_ind(struct l1ctl_client *l1c, bool traffic, - const struct trxcon_param_rx_traffic_data_ind *ind) +int l1ctl_tx_dt_ind(struct l1ctl_client *l1c, + const struct trxcon_param_rx_data_ind *ind) { struct msgb *msg;
- msg = l1ctl_alloc_msg(traffic ? - L1CTL_TRAFFIC_IND : L1CTL_DATA_IND); + msg = l1ctl_alloc_msg(ind->traffic ? L1CTL_TRAFFIC_IND : L1CTL_DATA_IND); if (msg == NULL) return -ENOMEM;
@@ -637,7 +636,8 @@ ul = (struct l1ctl_info_ul *) msg->l1h; msg->l2h = ul->payload;
- struct trxcon_param_tx_traffic_data_req req = { + struct trxcon_param_tx_data_req req = { + .traffic = traffic, .chan_nr = ul->chan_nr, .link_id = ul->link_id & 0x40, .data_len = msgb_l2len(msg), @@ -650,10 +650,7 @@
switch (fi->state) { case TRXCON_ST_DEDICATED: - if (traffic) - osmo_fsm_inst_dispatch(fi, TRXCON_EV_TX_TRAFFIC_REQ, &req); - else - osmo_fsm_inst_dispatch(fi, TRXCON_EV_TX_DATA_REQ, &req); + osmo_fsm_inst_dispatch(fi, TRXCON_EV_TX_DATA_REQ, &req); break; default: if (!traffic && req.link_id == 0x40) /* only for SACCH */ diff --git a/src/host/trxcon/src/trxcon.c b/src/host/trxcon/src/trxcon.c index 0bbb602..039195b 100644 --- a/src/host/trxcon/src/trxcon.c +++ b/src/host/trxcon/src/trxcon.c @@ -197,7 +197,8 @@
lchan_desc = &l1sched_lchan_desc[lchan->type];
- struct trxcon_param_rx_traffic_data_ind ind = { + struct trxcon_param_rx_data_ind ind = { + /* .traffic is set below */ .chan_nr = lchan_desc->chan_nr | lchan->ts->index, .link_id = lchan_desc->link_id, .band_arfcn = trxcon->l1p.band_arfcn, @@ -211,10 +212,10 @@ };
switch (dt) { - case L1SCHED_DT_TRAFFIC: case L1SCHED_DT_PACKET_DATA: - rc = osmo_fsm_inst_dispatch(trxcon->fi, TRXCON_EV_RX_TRAFFIC_IND, &ind); - break; + case L1SCHED_DT_TRAFFIC: + ind.traffic = true; + /* fall-through */ case L1SCHED_DT_SIGNALING: rc = osmo_fsm_inst_dispatch(trxcon->fi, TRXCON_EV_RX_DATA_IND, &ind); break; diff --git a/src/host/trxcon/src/trxcon_fsm.c b/src/host/trxcon/src/trxcon_fsm.c index 0e005a3..fb375c4 100644 --- a/src/host/trxcon/src/trxcon_fsm.c +++ b/src/host/trxcon/src/trxcon_fsm.c @@ -88,7 +88,7 @@ } case TRXCON_EV_UPDATE_SACCH_CACHE_REQ: { - const struct trxcon_param_tx_traffic_data_req *req = data; + const struct trxcon_param_tx_data_req *req = data;
if (req->link_id != L1SCHED_CH_LID_SACCH) { LOGPFSML(fi, LOGL_ERROR, "Unexpected link_id=0x%02x\n", req->link_id); @@ -340,12 +340,8 @@ break; } case TRXCON_EV_RX_DATA_IND: - { - const struct trxcon_param_rx_traffic_data_ind *ind = data; - - l1ctl_tx_dt_ind(trxcon->l2if, false, ind); + l1ctl_tx_dt_ind(trxcon->l2if, (const struct trxcon_param_rx_data_ind *)data); break; - } default: OSMO_ASSERT(0); } @@ -433,10 +429,9 @@ } break; } - case TRXCON_EV_TX_TRAFFIC_REQ: case TRXCON_EV_TX_DATA_REQ: { - const struct trxcon_param_tx_traffic_data_req *req = data; + const struct trxcon_param_tx_data_req *req = data; struct l1sched_ts_prim *prim;
prim = l1sched_prim_push(trxcon->sched, L1SCHED_PRIM_DATA, @@ -448,14 +443,9 @@ } break; } - case TRXCON_EV_RX_TRAFFIC_IND: case TRXCON_EV_RX_DATA_IND: - { - const struct trxcon_param_rx_traffic_data_ind *ind = data; - - l1ctl_tx_dt_ind(trxcon->l2if, event == TRXCON_EV_RX_TRAFFIC_IND, ind); + l1ctl_tx_dt_ind(trxcon->l2if, (const struct trxcon_param_rx_data_ind *)data); break; - } default: OSMO_ASSERT(0); } @@ -470,12 +460,16 @@ case TRXCON_EV_TX_ACCESS_BURST_REQ: handle_tx_access_burst_req(fi, data); break; - case TRXCON_EV_RX_TRAFFIC_IND: - LOGPFSML(fi, LOGL_NOTICE, "Rx PDTCH/D message\n"); - break; case TRXCON_EV_RX_DATA_IND: - LOGPFSML(fi, LOGL_NOTICE, "Rx PTCCH/D message\n"); + { + const struct trxcon_param_rx_data_ind *ind = data; + + if (ind->link_id == 0x00) + LOGPFSML(fi, LOGL_NOTICE, "Rx PDTCH/D message\n"); + else + LOGPFSML(fi, LOGL_NOTICE, "Rx PTCCH/D message\n"); break; + } case TRXCON_EV_DEDICATED_RELEASE_REQ: l1sched_reset(trxcon->sched, false); osmo_fsm_inst_state_chg(fi, TRXCON_ST_RESET, 0, 0); @@ -554,8 +548,6 @@ .in_event_mask = S(TRXCON_EV_DEDICATED_RELEASE_REQ) | S(TRXCON_EV_TX_ACCESS_BURST_REQ) | S(TRXCON_EV_SET_TCH_MODE_REQ) - | S(TRXCON_EV_TX_TRAFFIC_REQ) - | S(TRXCON_EV_RX_TRAFFIC_IND) | S(TRXCON_EV_TX_DATA_REQ) | S(TRXCON_EV_RX_DATA_IND) | S(TRXCON_EV_CRYPTO_REQ), @@ -568,7 +560,6 @@ | S(TRXCON_ST_BCCH_CCCH), .in_event_mask = S(TRXCON_EV_DEDICATED_RELEASE_REQ) | S(TRXCON_EV_TX_ACCESS_BURST_REQ) - | S(TRXCON_EV_RX_TRAFFIC_IND) | S(TRXCON_EV_RX_DATA_IND), .action = &trxcon_st_packet_data_action, }, @@ -590,8 +581,6 @@ OSMO_VALUE_STRING(TRXCON_EV_UPDATE_SACCH_CACHE_REQ), OSMO_VALUE_STRING(TRXCON_EV_DEDICATED_ESTABLISH_REQ), OSMO_VALUE_STRING(TRXCON_EV_DEDICATED_RELEASE_REQ), - OSMO_VALUE_STRING(TRXCON_EV_TX_TRAFFIC_REQ), - OSMO_VALUE_STRING(TRXCON_EV_RX_TRAFFIC_IND), OSMO_VALUE_STRING(TRXCON_EV_TX_DATA_REQ), OSMO_VALUE_STRING(TRXCON_EV_RX_DATA_IND), OSMO_VALUE_STRING(TRXCON_EV_CRYPTO_REQ),