/*
 * Copyright (c) 2017 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/** @file
 * @brief PTP state machines
 *
 * This is not to be included by the application.
 */

#ifndef __GPTP_STATE_H
#define __GPTP_STATE_H

#ifdef __cplusplus
extern "C" {
#endif

#include "gptp_mi.h"

/* PDelayRequest states. */
enum gptp_pdelay_req_states {
	GPTP_PDELAY_REQ_NOT_ENABLED,
	GPTP_PDELAY_REQ_INITIAL_SEND_REQ,
	GPTP_PDELAY_REQ_RESET,
	GPTP_PDELAY_REQ_SEND_REQ,
	GPTP_PDELAY_REQ_WAIT_RESP,
	GPTP_PDELAY_REQ_WAIT_FOLLOW_UP,
	GPTP_PDELAY_REQ_WAIT_ITV_TIMER,
} __packed;

/* Path Delay Response states. */
enum gptp_pdelay_resp_states {
	GPTP_PDELAY_RESP_NOT_ENABLED,
	GPTP_PDELAY_RESP_INITIAL_WAIT_REQ,
	GPTP_PDELAY_RESP_WAIT_REQ,
	GPTP_PDELAY_RESP_WAIT_TSTAMP,
} __packed;

/* SyncReceive states. */
enum gptp_sync_rcv_states {
	GPTP_SYNC_RCV_DISCARD,
	GPTP_SYNC_RCV_WAIT_SYNC,
	GPTP_SYNC_RCV_WAIT_FOLLOW_UP,
} __packed;

/* SyncSend states. */
enum gptp_sync_send_states {
	GPTP_SYNC_SEND_INITIALIZING,
	GPTP_SYNC_SEND_SEND_SYNC,
	GPTP_SYNC_SEND_SEND_FUP,
} __packed;

/* PortSyncSyncReceive states. */
enum gptp_pss_rcv_states {
	GPTP_PSS_RCV_DISCARD,
	GPTP_PSS_RCV_RECEIVED_SYNC,
} __packed;

/* PortSyncSyncSend states. */
enum gptp_pss_send_states {
	GPTP_PSS_SEND_TRANSMIT_INIT,
	GPTP_PSS_SEND_SYNC_RECEIPT_TIMEOUT,
	GPTP_PSS_SEND_SEND_MD_SYNC,
	GPTP_PSS_SEND_SET_SYNC_RECEIPT_TIMEOUT,
} __packed;

/* SiteSyncSyncReceive states. */
enum gptp_site_sync_sync_states {
	GPTP_SSS_INITIALIZING,
	GPTP_SSS_RECEIVING_SYNC,
} __packed;

/* ClockSlaveSync states. */
enum gptp_clk_slave_sync_states {
	GPTP_CLK_SLAVE_SYNC_INITIALIZING,
	GPTP_CLK_SLAVE_SYNC_SEND_SYNC_IND,
} __packed;

/* PortAnnounceReceive states. */
enum gptp_pa_rcv_states {
	GPTP_PA_RCV_DISCARD,
	GPTP_PA_RCV_RECEIVE,
} __packed;

/* PortAnnounceInformation states. */
enum gptp_pa_info_states {
	GPTP_PA_INFO_DISABLED,
	/* State to handle the transition after DISABLED state. */
	GPTP_PA_INFO_POST_DISABLED,
	GPTP_PA_INFO_AGED,
	GPTP_PA_INFO_UPDATE,
	GPTP_PA_INFO_CURRENT,
	GPTP_PA_INFO_RECEIVE,
	GPTP_PA_INFO_SUPERIOR_MASTER_PORT,
	GPTP_PA_INFO_REPEATED_MASTER_PORT,
	GPTP_PA_INFO_INFERIOR_MASTER_OR_OTHER_PORT,
} __packed;

/* PortRoleSelection states. */
enum gptp_pr_selection_states {
	GPTP_PR_SELECTION_INIT_BRIDGE,
	GPTP_PR_SELECTION_ROLE_SELECTION,
} __packed;

/* PortAnnounceTransmit states. */
enum gptp_pa_transmit_states {
	GPTP_PA_TRANSMIT_INIT,
	GPTP_PA_TRANSMIT_PERIODIC,
	GPTP_PA_TRANSMIT_IDLE,
	GPTP_PA_TRANSMIT_POST_IDLE,
} __packed;

/* ClockMasterSyncOffset states. */
enum gptp_cms_offset_states {
	GPTP_CMS_OFFSET_INITIALIZING,
	GPTP_CMS_OFFSET_INDICATION,
} __packed;

/* ClockMasterSyncSend states. */
enum gptp_cms_snd_states {
	GPTP_CMS_SND_INITIALIZING,
	GPTP_CMS_SND_INDICATION,
} __packed;

/* ClockMasterSyncReceive states. */
enum gptp_cms_rcv_states {
	GPTP_CMS_RCV_INITIALIZING,
	GPTP_CMS_RCV_WAITING,
	GPTP_CMS_RCV_SOURCE_TIME,
} __packed;

/* Info_is enumeration2. */
enum gptp_info_is {
	GPTP_INFO_IS_RECEIVED,
	GPTP_INFO_IS_MINE,
	GPTP_INFO_IS_AGED,
	GPTP_INFO_IS_DISABLED,
} __packed;

enum gptp_time_source {
	GPTP_TS_ATOMIC_CLOCK        = 0x10,
	GPTP_TS_GPS                 = 0x20,
	GPTP_TS_TERRESTRIAL_AUDIO   = 0x30,
	GPTS_TS_PTP                 = 0x40,
	GPTP_TS_NTP                 = 0x50,
	GPTP_TS_HAND_SET            = 0x60,
	GPTP_TS_OTHER               = 0x90,
	GPTP_TS_INTERNAL_OSCILLATOR = 0xA0,
} __packed;

/**
 * @brief gPTP time-synchronization spanning tree priority vector
 *
 * Defines the best master selection information.
 */
struct gptp_priority_vector {
	/** Identity of the source clock. */
	struct gptp_root_system_identity root_system_id;

	/** portNumber of the receiving port. */
	u16_t port_number;

	/** Port identity of the transmitting time-aware system. */
	struct gptp_port_identity src_port_id;

	/** Steps removed from the announce message transmitter and the
	 * master clock.
	 */
	u16_t steps_removed;
} __packed;

/* Pdelay Request state machine variables. */
struct gptp_pdelay_req_state {
	/** Initial Path Delay Response Peer Timestamp. */
	u64_t ini_resp_evt_tstamp;

	/** Initial Path Delay Response Ingress Timestamp. */
	u64_t ini_resp_ingress_tstamp;

	/** Timer for the Path Delay Request. */
	struct k_timer pdelay_timer;

	/** Pointer to the received Path Delay Response. */
	struct net_pkt *rcvd_pdelay_resp_ptr;

	/** Pointer to the received Path Delay Follow Up. */
	struct net_pkt *rcvd_pdelay_follow_up_ptr;

	/** Pointer to the Path Delay Request to be transmitted. */
	struct net_pkt *tx_pdelay_req_ptr;

	/** Path Delay Response messages received. */
	u32_t rcvd_pdelay_resp;

	/** Path Delay Follow Up messages received. */
	u32_t rcvd_pdelay_follow_up;

	/** Number of lost Path Delay Responses. */
	u16_t lost_responses;

	/** Current state of the state machine. */
	enum gptp_pdelay_req_states state;

	/** Timer expired, a new Path Delay Request needs to be sent. */
	bool pdelay_timer_expired;

	/** NeighborRateRatio has been computed successfully. */
	bool neighbor_rate_ratio_valid;

	/** Path Delay has already been computed after initialization. */
	bool init_pdelay_compute;

	/** Count consecutive Pdelay_req with multiple responses. */
	u8_t multiple_resp_count;
};

/**
 * @brief Pdelay Response state machine variables.
 */
struct gptp_pdelay_resp_state {
	/** Current state of the state machine. */
	enum gptp_pdelay_resp_states state;
};

/* SyncReceive state machine variables. */
struct gptp_sync_rcv_state {
	/** Time at which a Sync Message without Follow Up will be discarded. */
	u64_t follow_up_receipt_timeout;

	/** Timer for the Follow Up discard. */
	struct k_timer follow_up_discard_timer;

	/** Pointer to the received Sync message. */
	struct net_pkt *rcvd_sync_ptr;

	/** Pointer to the received Follow Up message. */
	struct net_pkt *rcvd_follow_up_ptr;

	/** Current state of the state machine. */
	enum gptp_sync_rcv_states state;

	/** A Sync Message has been received. */
	bool rcvd_sync;

	/** A Follow Up Message has been received. */
	bool rcvd_follow_up;

	/** A Follow Up Message has been received. */
	bool follow_up_timeout_expired;
};

/* SyncSend state machine variables. */
struct gptp_sync_send_state {
	/** Pointer to the received MDSyncSend structure. */
	struct gptp_md_sync_info *sync_send_ptr;

	/** Pointer to the sync message to be sent. */
	struct net_pkt *sync_ptr;

	/** Current state of the state machine. */
	enum gptp_sync_send_states state;

	/** A MDSyncSend structure has been received. */
	bool rcvd_md_sync;

	/** The timestamp for the sync message has been received. */
	bool md_sync_timestamp_avail;
};

/* PortSyncSyncReceive state machine variables. */
struct gptp_pss_rcv_state {
	/** Sync receive provided by the MD Sync Receive State Machine. */
	struct gptp_md_sync_info sync_rcv;

	/** PortSyncSync structure to be transmitted to the Site Sync Sync. */
	struct gptp_mi_port_sync_sync pss;

	/** SyncReceiptTimeoutTimer for PortAnnounce state machines. */
	struct k_timer rcv_sync_receipt_timeout_timer;

	/** Ratio of the Grand Master frequency with the Local Clock. */
	double rate_ratio;

	/** Current state of the state machine. */
	enum gptp_pss_rcv_states state;

	/** A MDSyncReceive structure is ready to be processed. */
	bool rcvd_md_sync;

	/** Expiry of SyncReceiptTimeoutTimer. */
	bool rcv_sync_receipt_timeout_timer_expired;
};

/* PortSyncSyncSend state machine variables. */
struct gptp_pss_send_state {
	/** Precise Origin Timestamp of the last received PortSyncSync. */
	struct net_ptp_time last_precise_orig_ts;

	/** Half Sync Interval Timer. */
	struct k_timer half_sync_itv_timer;

	/** syncReceiptTimeout Timer. */
	struct k_timer send_sync_receipt_timeout_timer;

	/** GM Phase Change of the last received PortSyncSync. */
	struct gptp_scaled_ns last_gm_phase_change;

	/** Follow Up Correction Field of the last received PortSyncSync. */
	s64_t last_follow_up_correction_field;

	/** Upstream Tx Time of the last received PortSyncSync. */
	u64_t last_upstream_tx_time;

	/** PortSyncSync structure received from the SiteSyncSync. */
	struct gptp_mi_port_sync_sync *pss_sync_ptr;

	/** Rate Ratio of the last received PortSyncSync. */
	double last_rate_ratio;

	/** GM Freq Change of the last received PortSyncSync. */
	double last_gm_freq_change;

	/** Current state of the state machine. */
	enum gptp_pss_send_states state;

	/** GM Time Base Indicator of the last received PortSyncSync. */
	u16_t last_gm_time_base_indicator;

	/** Received Port Number of the last received PortSyncSync. */
	u16_t last_rcvd_port_num;

	/** Sync send to be transmitted to the MD Sync Send State Machine. */
	struct gptp_md_sync_info sync_send;

	/** A PortSyncSync structure is ready to be processed. */
	bool rcvd_pss_sync;

	/** Flag when the half_sync_itv_timer has expired. */
	bool half_sync_itv_timer_expired;

	/** Flag when the half_sync_itv_timer has expired twice. */
	bool sync_itv_timer_expired;

	/** Source Port Identity of the last received PortSyncSync. */
	struct gptp_port_identity last_src_port_id;

	/** Flag when the syncReceiptTimeoutTime has expired. */
	bool send_sync_receipt_timeout_timer_expired;
};

/* SiteSyncSync state machine variables. */
struct gptp_site_sync_sync_state {
	/** PortSyncSync structure to be sent to other ports and to the Slave.
	 */
	struct gptp_mi_port_sync_sync pss_send;

	/** Pointer to the PortSyncSync structure received. */
	struct gptp_mi_port_sync_sync *pss_rcv_ptr;

	/** Current state of the state machine. */
	enum gptp_site_sync_sync_states state;

	/** A PortSyncSync structure is ready to be processed. */
	bool rcvd_pss;
};

/* ClockSlaveSync state machine variables. */
struct gptp_clk_slave_sync_state {
	/** Pointer to the PortSyncSync structure received. */
	struct gptp_mi_port_sync_sync *pss_rcv_ptr;

	/** Current state of the state machine. */
	enum gptp_clk_slave_sync_states state;

	/** A PortSyncSync structure is ready to be processed. */
	bool rcvd_pss;

	/** The local clock has expired. */
	bool rcvd_local_clk_tick;
};

/* ClockMasterSyncOffset state machine variables. */
struct gptp_clk_master_sync_offset_state {
	/** Current state of the state machine. */
	enum gptp_cms_offset_states state;

	/** Notifies the state machine when Sync Receipt Time is received. */
	bool rcvd_sync_receipt_time;
};

/* ClockMasterSyncSend state machine variables. */
struct gptp_clk_master_sync_snd_state {
	/** Time when synchronization info will be sent. */
	struct gptp_uscaled_ns sync_send_time;

	/** PortSyncSync structure transmitted by the state machine. */
	struct gptp_mi_port_sync_sync pss_snd;

	/** Current state of the state machine. */
	enum gptp_cms_snd_states state;
};

/* ClockMasterSyncReceive state machine variables. */
struct gptp_clk_master_sync_rcv_state {
	/** The received ClockSourceTime.invoke parameters. Note that the
	 * standard defines this as a pointer, but storing the struct here is
	 * more convenient
	 */
	struct gptp_clk_src_time_invoke_params rcvd_clk_src_req;

	/** Current state of the state machine */
	enum gptp_cms_rcv_states state;

	/** A ClockSourceTime.invoke function is received from the
	 * Clock source entity
	 */
	bool rcvd_clock_source_req;

	/** The local clock has expired */
	bool rcvd_local_clock_tick;
};

/* PortAnnounceReceive state machine variables. */
struct gptp_port_announce_receive_state {
	/** Current state of the state machine. */
	enum gptp_pa_rcv_states state;

	/** An announce message is ready to be processed. */
	bool rcvd_announce;
};

struct gptp_port_announce_information_state {
	/** Timer for the announce expiry. */
	struct k_timer ann_rcpt_expiry_timer;

	/** PortRoleInformation state machine variables. */
	enum gptp_pa_info_states state;

	/* Expired announce information. */
	bool ann_expired;
};

/* PortRoleSelection state machine variables. */
struct gptp_port_role_selection_state {
	enum gptp_pr_selection_states state;
};

/**
 * @brief PortAnnounceTransmit state machine variables.
 */
struct gptp_port_announce_transmit_state {
	/** Timer for the announce expiry. */
	struct k_timer ann_send_periodic_timer;

	/** PortRoleTransmit state machine variables. */
	enum gptp_pa_transmit_states state;

	/** Trigger announce information. */
	bool ann_trigger;
};

/**
 * @brief Structure maintaining per Time-Aware States.
 */
struct gptp_states {
	/** SiteSyncSync state machine variables. */
	struct gptp_site_sync_sync_state site_ss;

	/** ClockSlaveSync state machine variables. */
	struct gptp_clk_slave_sync_state clk_slave_sync;

	/** PortRoleSelection state machine variables. */
	struct gptp_port_role_selection_state pr_sel;

	/** ClockMasterSyncOffset state machine variables. */
	struct gptp_clk_master_sync_offset_state clk_master_sync_offset;

	/** ClockMasterSyncSend state machine variables. */
	struct gptp_clk_master_sync_snd_state clk_master_sync_send;

	/** ClockMasterSyncReceive state machine variables. */
	struct gptp_clk_master_sync_rcv_state clk_master_sync_receive;
};

/**
 * @brief Structure maintaining per Port States.
 */
struct gptp_port_states {
	/** PathDelayRequest state machine variables. */
	struct gptp_pdelay_req_state pdelay_req;

	/** SyncReceive state machine variables. */
	struct gptp_sync_rcv_state sync_rcv;

	/** SyncSend state machine variables. */
	struct gptp_sync_send_state sync_send;

	/** PortSyncSyncReceive state machine variables. */
	struct gptp_pss_rcv_state pss_rcv;

	/** PortSyncSync Send state machine variables. */
	struct gptp_pss_send_state pss_send;

	/** PortAnnounceInformation state machine variables. */
	struct gptp_port_announce_information_state pa_info;

	/** PortAnnounceTransmit state machine variables. */
	struct gptp_port_announce_transmit_state pa_transmit;

	/** PathDelayResponse state machine variables. */
	struct gptp_pdelay_resp_state pdelay_resp;

	/** PortAnnounceReceive state machine variables. */
	struct gptp_port_announce_receive_state pa_rcv;
};

/**
 * @brief Structure maintaining per port BMCA state machines variables.
 */
struct gptp_port_bmca_data {
	/** Pointer to announce message. */
	struct net_pkt *rcvd_announce_ptr;

	/** The masterPriorityVector for the port. */
	struct gptp_priority_vector master_priority;

	/** The portPriorityVector for the port. */
	struct gptp_priority_vector port_priority;

	/** Announce interval. */
	struct gptp_uscaled_ns announce_interval;

	/** Announce receipt timeout time interval. */
	struct gptp_uscaled_ns ann_rcpt_timeout_time_interval;

	/** Origin and state of the port's spanning tree information. */
	enum gptp_info_is info_is;

	/** Last announce message time source. */
	enum gptp_time_source ann_time_source;

	/** Last announce message flags. */
	struct gptp_flags ann_flags;

	/** The value of steps removed for the port. */
	u16_t port_steps_removed;

	/** The value of steps removed for the port. */
	u16_t message_steps_removed;

	/** Last announce message current UTC offset value. */
	s16_t ann_current_utc_offset;

	/** A qualified announce message has been received. */
	bool rcvd_msg;

	/** Indicate if PortAnnounceInformation should copy the newly determined
	 * master_prioriry and master_steps_removed.
	 */
	bool updt_info;

	/** Cause a port to transmit Announce Information. */
	bool new_info;
};

#ifdef __cplusplus
}
#endif

#endif /* __GPTP_STATE_H */
