aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gprs_rlcmac.h8
-rw-r--r--src/gprs_rlcmac_data.cpp25
-rw-r--r--src/pcu_l1_if.cpp4
-rw-r--r--src/tbf.cpp4
4 files changed, 22 insertions, 19 deletions
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index b8afdcd0..760579bf 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -183,7 +183,7 @@ void write_packet_uplink_ack(RlcMacDownlink_t * block, struct gprs_rlcmac_tbf *t
int gprs_rlcmac_tx_ul_ud(gprs_rlcmac_tbf *tbf);
-int gprs_rlcmac_poll_timeout(struct gprs_rlcmac_tbf *tbf);
+int gprs_rlcmac_poll_timeout(struct gprs_rlcmac_bts *bts, struct gprs_rlcmac_tbf *tbf);
int gprs_rlcmac_sba_timeout(struct gprs_rlcmac_sba *sba);
@@ -198,10 +198,12 @@ struct msgb *gprs_rlcmac_send_packet_uplink_assignment(
struct msgb *gprs_rlcmac_send_packet_downlink_assignment(
struct gprs_rlcmac_tbf *tbf, uint32_t fn);
-void gprs_rlcmac_trigger_downlink_assignment(struct gprs_rlcmac_tbf *tbf,
+void gprs_rlcmac_trigger_downlink_assignment(struct gprs_rlcmac_bts *bts,
+ struct gprs_rlcmac_tbf *tbf,
struct gprs_rlcmac_tbf *old_tbf, const char *imsi);
-int gprs_rlcmac_downlink_ack(struct gprs_rlcmac_tbf *tbf, uint8_t final,
+int gprs_rlcmac_downlink_ack(struct gprs_rlcmac_bts *bts,
+ struct gprs_rlcmac_tbf *tbf, uint8_t final,
uint8_t ssn, uint8_t *rbb);
int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,
diff --git a/src/gprs_rlcmac_data.cpp b/src/gprs_rlcmac_data.cpp
index c2ed9e6a..cd503f32 100644
--- a/src/gprs_rlcmac_data.cpp
+++ b/src/gprs_rlcmac_data.cpp
@@ -74,7 +74,8 @@ struct rlc_li_field {
} __attribute__ ((packed));
}
-static void gprs_rlcmac_downlink_assignment(gprs_rlcmac_tbf *tbf, uint8_t poll,
+static void gprs_rlcmac_downlink_assignment(struct gprs_rlcmac_bts *bts,
+ gprs_rlcmac_tbf *tbf, uint8_t poll,
const char *imsi);
static int gprs_rlcmac_diag(struct gprs_rlcmac_tbf *tbf)
@@ -82,7 +83,7 @@ static int gprs_rlcmac_diag(struct gprs_rlcmac_tbf *tbf)
return tbf->rlcmac_diag();
}
-int gprs_rlcmac_poll_timeout(struct gprs_rlcmac_tbf *tbf)
+int gprs_rlcmac_poll_timeout(struct gprs_rlcmac_bts *bts, struct gprs_rlcmac_tbf *tbf)
{
LOGP(DRLCMAC, LOGL_NOTICE, "Poll timeout for %s TBF=%d\n",
(tbf->direction == GPRS_RLCMAC_UL_TBF) ? "UL" : "DL", tbf->tfi);
@@ -99,8 +100,6 @@ int gprs_rlcmac_poll_timeout(struct gprs_rlcmac_tbf *tbf)
tbf->ul_ack_state = GPRS_RLCMAC_UL_ACK_NONE;
debug_diagram(tbf->diag, "timeout UL-ACK");
if (tbf->state_is(GPRS_RLCMAC_FINISHED)) {
- struct gprs_rlcmac_bts *bts = gprs_rlcmac_bts;
-
tbf->dir.ul.n3103++;
if (tbf->dir.ul.n3103 == bts->n3103) {
LOGP(DRLCMAC, LOGL_NOTICE,
@@ -185,7 +184,7 @@ int gprs_rlcmac_poll_timeout(struct gprs_rlcmac_tbf *tbf)
"for TBF=%d on PCH (IMSI=%s)\n", tbf->tfi,
tbf->dir.dl.imsi);
/* send immediate assignment */
- gprs_rlcmac_downlink_assignment(tbf, 0, tbf->dir.dl.imsi);
+ gprs_rlcmac_downlink_assignment(bts, tbf, 0, tbf->dir.dl.imsi);
tbf->dir.dl.wait_confirm = 1;
}
} else
@@ -352,7 +351,7 @@ int gprs_rlcmac_rcv_control_block(bitvec *rlc_block, uint8_t trx, uint8_t ts,
tbf->poll_state = GPRS_RLCMAC_POLL_NONE;
debug_diagram(tbf->diag, "got DL-ACK");
- rc = gprs_rlcmac_downlink_ack(tbf,
+ rc = gprs_rlcmac_downlink_ack(bts, tbf,
ul_control_block->u.Packet_Downlink_Ack_Nack.Ack_Nack_Description.FINAL_ACK_INDICATION,
ul_control_block->u.Packet_Downlink_Ack_Nack.Ack_Nack_Description.STARTING_SEQUENCE_NUMBER,
ul_control_block->u.Packet_Downlink_Ack_Nack.Ack_Nack_Description.RECEIVED_BLOCK_BITMAP);
@@ -1479,7 +1478,8 @@ tx_block:
return dl_msg;
}
-int gprs_rlcmac_downlink_ack(struct gprs_rlcmac_tbf *tbf, uint8_t final,
+int gprs_rlcmac_downlink_ack(struct gprs_rlcmac_bts *bts,
+ struct gprs_rlcmac_tbf *tbf, uint8_t final,
uint8_t ssn, uint8_t *rbb)
{
char show_rbb[65], show_v_b[RLC_MAX_SNS + 1];
@@ -1618,7 +1618,7 @@ int gprs_rlcmac_downlink_ack(struct gprs_rlcmac_tbf *tbf, uint8_t final,
tbf->state_flags &= GPRS_RLCMAC_FLAG_TO_MASK; /* keep TO flags */
tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
tbf_update(tbf);
- gprs_rlcmac_trigger_downlink_assignment(tbf, tbf, NULL);
+ gprs_rlcmac_trigger_downlink_assignment(bts, tbf, tbf, NULL);
return 0;
}
@@ -1715,10 +1715,10 @@ struct msgb *gprs_rlcmac_send_packet_downlink_assignment(
return msg;
}
-static void gprs_rlcmac_downlink_assignment(gprs_rlcmac_tbf *tbf, uint8_t poll,
+static void gprs_rlcmac_downlink_assignment(struct gprs_rlcmac_bts *bts,
+ gprs_rlcmac_tbf *tbf, uint8_t poll,
const char *imsi)
{
- struct gprs_rlcmac_bts *bts = gprs_rlcmac_bts;
int plen;
debug_diagram(tbf->diag, "IMM.ASS (PCH)");
@@ -1736,7 +1736,8 @@ static void gprs_rlcmac_downlink_assignment(gprs_rlcmac_tbf *tbf, uint8_t poll,
}
/* depending on the current TBF, we assign on PACCH or AGCH */
-void gprs_rlcmac_trigger_downlink_assignment(struct gprs_rlcmac_tbf *tbf,
+void gprs_rlcmac_trigger_downlink_assignment(struct gprs_rlcmac_bts *bts,
+ struct gprs_rlcmac_tbf *tbf,
struct gprs_rlcmac_tbf *old_tbf, const char *imsi)
{
#ifdef DEBUG_DL_ASS_IDLE
@@ -1779,7 +1780,7 @@ void gprs_rlcmac_trigger_downlink_assignment(struct gprs_rlcmac_tbf *tbf,
tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
strncpy(tbf->dir.dl.imsi, imsi, sizeof(tbf->dir.dl.imsi));
/* send immediate assignment */
- gprs_rlcmac_downlink_assignment(tbf, 0, imsi);
+ gprs_rlcmac_downlink_assignment(bts, tbf, 0, imsi);
tbf->dir.dl.wait_confirm = 1;
}
}
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index a31974f5..31ea8dcd 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -523,7 +523,7 @@ static int pcu_rx_time_ind(struct gsm_pcu_if_time_ind *time_ind)
elapsed = (frame_number + 2715648 - tbf->poll_fn)
% 2715648;
if (elapsed >= 20 && elapsed < 2715400)
- gprs_rlcmac_poll_timeout(tbf);
+ gprs_rlcmac_poll_timeout(gprs_rlcmac_bts, tbf);
}
}
llist_for_each_entry(tbf, &gprs_rlcmac_dl_tbfs, list) {
@@ -531,7 +531,7 @@ static int pcu_rx_time_ind(struct gsm_pcu_if_time_ind *time_ind)
elapsed = (frame_number + 2715648 - tbf->poll_fn)
% 2715648;
if (elapsed >= 20 && elapsed < 2715400)
- gprs_rlcmac_poll_timeout(tbf);
+ gprs_rlcmac_poll_timeout(gprs_rlcmac_bts, tbf);
}
}
llist_for_each_entry_safe(sba, sba2, &gprs_rlcmac_sbas, list) {
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 6ba117e6..acff1ff4 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -71,7 +71,7 @@ static int tbf_append_data(struct gprs_rlcmac_tbf *tbf,
tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
tbf_update_ms_class(tbf, ms_class);
tbf_update(tbf);
- gprs_rlcmac_trigger_downlink_assignment(tbf, tbf, NULL);
+ gprs_rlcmac_trigger_downlink_assignment(bts, tbf, tbf, NULL);
} else {
/* the TBF exists, so we must write it in the queue
* we prepend lifetime in front of PDU */
@@ -177,7 +177,7 @@ static int tbf_new_dl_assignment(struct gprs_rlcmac_bts *bts,
* we don't use old_downlink, so the possible uplink is used
* to trigger downlink assignment. if there is no uplink,
* AGCH is used. */
- gprs_rlcmac_trigger_downlink_assignment(tbf, old_tbf, imsi);
+ gprs_rlcmac_trigger_downlink_assignment(bts, tbf, old_tbf, imsi);
/* store IMSI for debugging purpose. TODO: it is more than debugging */
tbf_assign_imsi(tbf, imsi);