fixeria has uploaded this change for review.

View Change

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),

To view, visit change 29957. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I8c2b3274f32d4d52424512d988b93d6233dd09a0
Gerrit-Change-Number: 29957
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>
Gerrit-MessageType: newchange