nacc: Implement Pkt Cell Change Continue retransmission

Use the fact that the MS must answer the RRBP of the Pkt Cell Change
Continue with a CTRL ACK to find out whether the message was received
successfuly or a retransmission is potentially required.

3GPP TS 44.060:
"""
When the mobile station receives the PACKET CELL CHANGE ORDER or
the PACKET CELL CHANGE CONTINUE message the mobile station shall
transmit a PACKET CONTROL ACKNOWLEDGMENT message in the specified
uplink radio block if a valid RRBP field is received as part of the
message; the mobile station may then switch to a new cell.
"""

Related: SYS#4909
Change-Id: I7cc28922e71699598da0ef6eb90136a47d3c002f
diff --git a/src/nacc_fsm.h b/src/nacc_fsm.h
index 9107daf..7b0adfd 100644
--- a/src/nacc_fsm.h
+++ b/src/nacc_fsm.h
@@ -32,6 +32,8 @@
 	NACC_EV_RX_RAC_CI, /* no data passed, RAC_CI became available in neigh_cache */
 	NACC_EV_RX_SI, /* data: struct si_cache_entry* */
 	NACC_EV_CREATE_RLCMAC_MSG, /* data: struct nacc_ev_create_rlcmac_msg_ctx* */
+	NACC_EV_RX_CELL_CHG_CONTINUE_ACK,
+	NACC_EV_TIMEOUT_CELL_CHG_CONTINUE, /* Poll Timeout */
 };
 
 enum nacc_fsm_states {
@@ -40,6 +42,7 @@
 	NACC_ST_WAIT_REQUEST_SI,
 	NACC_ST_TX_NEIGHBOUR_DATA,
 	NACC_ST_TX_CELL_CHG_CONTINUE,
+	NACC_ST_WAIT_CELL_CHG_CONTINUE_ACK,
 	NACC_ST_DONE,
 };
 
@@ -53,11 +56,15 @@
 	struct si_cache_value si_info; /* SI info resolved from SGSN, to be sent to MS */
 	size_t si_info_bytes_sent; /* How many bytes out of si_info->si_len were already sent to MS */
 	size_t container_idx; /* Next container_idx to assign when sending Packet Neighbor Data message */
+	uint32_t continue_poll_fn; /* Scheduled poll FN to CTRL ACK the Pkt Cell Chg Continue */
+	uint8_t continue_poll_ts; /* Scheduled poll TS to CTRL ACK the Pkt Cell Chg Continue */
 };
 
 /* passed as data in NACC_EV_CREATE_RLCMAC_MSG */
 struct nacc_ev_create_rlcmac_msg_ctx {
 	struct gprs_rlcmac_tbf *tbf; /* target tbf to create messages for */
+	uint32_t fn; /* FN where the created DL ctrl block is to be sent */
+	uint8_t ts; /* TS where the created DL ctrl block is to be sent */
 	struct msgb *msg; /* to be filled by FSM during event processing */
 };