Commit 805b7a8b authored by Alessandro Rubini's avatar Alessandro Rubini

timeout: WR can use a single timeout variable

This kills all WR-related timeouts because one of them
is enough (they are used in each state as a timeout for
completion of that very state).

Moreover, since ppsi should be extension-independent,
we now define 4 timeouts for the extension in use (and WR
only uses timeout 0).
Signed-off-by: Alessandro Rubini's avatarAlessandro Rubini <rubini@gnudd.com>
parent 063980a2
......@@ -52,14 +52,11 @@ enum pp_timeouts {
PP_TO_SYNC,
PP_TO_ANN_RECEIPT,
PP_TO_ANN_INTERVAL,
/* White Rabbit timers */
PP_TO_WRS_PRESENT,
PP_TO_WRS_S_LOCK,
PP_TO_WRS_M_LOCK,
PP_TO_WRS_LOCKED,
PP_TO_WRS_CALIBRATION,
PP_TO_WRS_CALIBRATED,
PP_TO_WRS_RESP_CALIB_REQ,
/* A few timeouts for the protocol extension */
PP_TO_EXT_0,
PP_TO_EXT_1,
PP_TO_EXT_2,
PP_TO_EXT_3,
__PP_TO_ARRAY_SIZE,
};
......
......@@ -13,11 +13,11 @@ int wr_calibrated(struct pp_instance *ppi, unsigned char *pkt, int plen)
if (ppi->is_new_state) {
WR_DSPOR(ppi)->wrPortState = WRS_CALIBRATED;
ppi->next_delay = PP_DEFAULT_NEXT_DELAY_MS;
pp_timeout_set(ppi, PP_TO_WRS_CALIBRATED,
pp_timeout_set(ppi, PP_TO_EXT_0,
WR_DSPOR(ppi)->wrStateTimeout);
}
if (pp_timeout(ppi, PP_TO_WRS_CALIBRATED)) {
if (pp_timeout(ppi, PP_TO_EXT_0)) {
if (WR_DSPOR(ppi)->wrMode == WR_MASTER)
ppi->next_state = PPS_MASTER;
else
......@@ -43,7 +43,7 @@ int wr_calibrated(struct pp_instance *ppi, unsigned char *pkt, int plen)
state_updated:
if (ppi->next_state != ppi->state)
pp_timeout_clr(ppi, PP_TO_WRS_CALIBRATED);
pp_timeout_clr(ppi, PP_TO_EXT_0);
ret:
ppi->next_delay = WR_DSPOR(ppi)->wrStateTimeout;
......
......@@ -16,13 +16,13 @@ int wr_calibration(struct pp_instance *ppi, unsigned char *pkt, int plen)
WR_DSPOR(ppi)->wrPortState = WRS_CALIBRATION;
e = msg_issue_wrsig(ppi, CALIBRATE);
pp_timeout_set(ppi, PP_TO_WRS_CALIBRATION,
pp_timeout_set(ppi, PP_TO_EXT_0,
WR_DSPOR(ppi)->calPeriod);
if (WR_DSPOR(ppi)->calibrated)
WR_DSPOR(ppi)->wrPortState = WRS_CALIBRATION_2;
}
if (pp_timeout(ppi, PP_TO_WRS_CALIBRATION)) {
if (pp_timeout(ppi, PP_TO_EXT_0)) {
if (WR_DSPOR(ppi)->wrMode == WR_MASTER)
ppi->next_state = PPS_MASTER;
else
......@@ -127,7 +127,7 @@ int wr_calibration(struct pp_instance *ppi, unsigned char *pkt, int plen)
state_updated:
if (ppi->next_state != ppi->state)
pp_timeout_clr(ppi, PP_TO_WRS_CALIBRATION);
pp_timeout_clr(ppi, PP_TO_EXT_0);
ppi->next_delay = WR_DSPOR(ppi)->wrStateTimeout;
......
......@@ -14,14 +14,14 @@ int wr_locked(struct pp_instance *ppi, unsigned char *pkt, int plen)
if (ppi->is_new_state) {
DSPOR(ppi)->portState = PPS_UNCALIBRATED;
WR_DSPOR(ppi)->wrPortState = WRS_LOCKED;
pp_timeout_set(ppi, PP_TO_WRS_LOCKED,
pp_timeout_set(ppi, PP_TO_EXT_0,
WR_DSPOR(ppi)->wrStateTimeout);
e = msg_issue_wrsig(ppi, LOCKED);
}
if (pp_timeout(ppi, PP_TO_WRS_LOCKED)) {
if (pp_timeout(ppi, PP_TO_EXT_0)) {
ppi->next_state = PPS_LISTENING;
WR_DSPOR(ppi)->wrMode = NON_WR;
WR_DSPOR(ppi)->wrPortState = WRS_IDLE;
......@@ -46,7 +46,7 @@ no_incoming_msg:
state_updated:
if (ppi->next_state != ppi->state)
pp_timeout_clr(ppi, PP_TO_WRS_LOCKED);
pp_timeout_clr(ppi, PP_TO_EXT_0);
ppi->next_delay = WR_DSPOR(ppi)->wrStateTimeout;
......
......@@ -16,10 +16,10 @@ int wr_m_lock(struct pp_instance *ppi, unsigned char *pkt, int plen)
WR_DSPOR(ppi)->wrPortState = WRS_M_LOCK;
WR_DSPOR(ppi)->wrMode = WR_MASTER;
e = msg_issue_wrsig(ppi, LOCK);
pp_timeout_set(ppi, PP_TO_WRS_M_LOCK, WR_M_LOCK_TIMEOUT_MS);
pp_timeout_set(ppi, PP_TO_EXT_0, WR_M_LOCK_TIMEOUT_MS);
}
if (pp_timeout(ppi, PP_TO_WRS_M_LOCK)) {
if (pp_timeout(ppi, PP_TO_EXT_0)) {
ppi->next_state = PPS_MASTER;
WR_DSPOR(ppi)->wrPortState = WRS_IDLE;
goto state_updated;
......@@ -43,7 +43,7 @@ no_incoming_msg:
state_updated:
if (ppi->next_state != ppi->state)
pp_timeout_clr(ppi, PP_TO_WRS_M_LOCK);
pp_timeout_clr(ppi, PP_TO_EXT_0);
ppi->next_delay = WR_DSPOR(ppi)->wrStateTimeout;
......
......@@ -17,13 +17,13 @@ int wr_present(struct pp_instance *ppi, unsigned char *pkt, int plen)
DSPOR(ppi)->portState = PPS_UNCALIBRATED;
WR_DSPOR(ppi)->wrPortState = WRS_PRESENT;
WR_DSPOR(ppi)->wrMode = WR_SLAVE;
pp_timeout_set(ppi, PP_TO_WRS_PRESENT,
pp_timeout_set(ppi, PP_TO_EXT_0,
WR_WRS_PRESENT_TIMEOUT_MS);
st_com_restart_annrec_timer(ppi);
e = msg_issue_wrsig(ppi, SLAVE_PRESENT);
}
if (pp_timeout(ppi, PP_TO_WRS_PRESENT)) {
if (pp_timeout(ppi, PP_TO_EXT_0)) {
ppi->next_state = PPS_LISTENING;
WR_DSPOR(ppi)->wrMode = NON_WR;
WR_DSPOR(ppi)->wrPortState = WRS_IDLE;
......@@ -50,7 +50,7 @@ no_incoming_msg:
state_updated:
if (ppi->next_state != ppi->state) {
pp_timeout_clr(ppi, PP_TO_WRS_PRESENT);
pp_timeout_clr(ppi, PP_TO_EXT_0);
pp_timeout_clr(ppi, PP_TO_ANN_RECEIPT);
}
......
......@@ -16,14 +16,14 @@ int wr_resp_calib_req(struct pp_instance *ppi, unsigned char *pkt, int plen)
ppi->next_delay = PP_DEFAULT_NEXT_DELAY_MS;
if (WR_DSPOR(ppi)->otherNodeCalSendPattern) {
wr_calibration_pattern_enable(ppi, 0, 0, 0);
pp_timeout_set(ppi, PP_TO_WRS_RESP_CALIB_REQ,
pp_timeout_set(ppi, PP_TO_EXT_0,
WR_DSPOR(ppi)->otherNodeCalPeriod / 1000);
}
}
if ((WR_DSPOR(ppi)->otherNodeCalSendPattern) &&
(pp_timeout(ppi, PP_TO_WRS_RESP_CALIB_REQ))) {
(pp_timeout(ppi, PP_TO_EXT_0))) {
if (WR_DSPOR(ppi)->wrMode == WR_MASTER)
ppi->next_state = PPS_MASTER;
else
......@@ -53,7 +53,7 @@ int wr_resp_calib_req(struct pp_instance *ppi, unsigned char *pkt, int plen)
state_updated:
if (ppi->next_state != ppi->state)
pp_timeout_clr(ppi, PP_TO_RESP_CALIB_REQ);
pp_timeout_clr(ppi, PP_TO_EXT_0);
ppi->next_delay = WR_DSPOR(ppi)->wrStateTimeout;
......
......@@ -14,10 +14,10 @@ int wr_s_lock(struct pp_instance *ppi, unsigned char *pkt, int plen)
WR_DSPOR(ppi)->wrPortState = WRS_S_LOCK;
ppi->next_delay = PP_DEFAULT_NEXT_DELAY_MS;
wr_locking_enable(ppi);
pp_timeout_set(ppi, PP_TO_WRS_S_LOCK, WR_S_LOCK_TIMEOUT_MS);
pp_timeout_set(ppi, PP_TO_EXT_0, WR_S_LOCK_TIMEOUT_MS);
}
if (pp_timeout(ppi, PP_TO_WRS_S_LOCK)) {
if (pp_timeout(ppi, PP_TO_EXT_0)) {
ppi->next_state = PPS_FAULTY;
WR_DSPOR(ppi)->wrPortState = WRS_IDLE;
WR_DSPOR(ppi)->wrMode = NON_WR;
......@@ -31,7 +31,7 @@ int wr_s_lock(struct pp_instance *ppi, unsigned char *pkt, int plen)
state_updated:
if (ppi->next_state != ppi->state)
pp_timeout_clr(ppi, PP_TO_WRS_S_LOCK);
pp_timeout_clr(ppi, PP_TO_EXT_0);
ppi->next_delay = WR_DSPOR(ppi)->wrStateTimeout;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment