Skip to content
Snippets Groups Projects
ppsi-wrappers.c 1.91 KiB
Newer Older
Adam Wujek's avatar
Adam Wujek committed
#include <libwr/hal_shmem.h>
#include <libwr/shmem.h>
#include <wrc_ptp.h>
#include <syscon.h>
#include <endpoint.h>
#include <softpll_ng.h>
#include <ptpd_netif.h>
struct wrs_shm_head *ppsi_head;

/* Following code from ptp-noposix/libposix/freestanding-wrapper.c */

uint64_t ptpd_netif_get_msec_tics(void)
{
#if TICS_PER_SECOND != 1000
#error "This code assumes 1kHz timer"
#endif
Adam Wujek's avatar
Adam Wujek committed
static int read_phase_val(struct hal_port_state *port)
Adam Wujek's avatar
Adam Wujek committed
	int32_t dmtd_phase;
Adam Wujek's avatar
Adam Wujek committed
	if (spll_read_ptracker(0, &dmtd_phase, NULL)) {
		port->phase_val = dmtd_phase;
		port->phase_val_valid = 1;
	} else {
		port->phase_val = 0;
		port->phase_val_valid = 0;
	}
Adam Wujek's avatar
Adam Wujek committed
	return 0;
extern uint32_t cal_phase_transition;
Adam Wujek's avatar
Adam Wujek committed
int wrpc_get_port_state(struct hal_port_state *port, const char *port_name)
Adam Wujek's avatar
Adam Wujek committed
	if (wrc_ptp_get_mode() == WRC_MODE_SLAVE)
		port->mode = HEXP_PORT_MODE_WR_SLAVE;
	else
		port->mode = HEXP_PORT_MODE_WR_MASTER;
Adam Wujek's avatar
Adam Wujek committed
	/* all deltas are added anyway */
	ep_get_deltas(&port->calib.delta_tx_board,
		      &port->calib.delta_rx_board);
	port->calib.delta_tx_phy = 0;
	port->calib.delta_rx_phy = 0;
	port->calib.sfp.delta_tx_ps = 0;
	port->calib.sfp.delta_rx_ps = 0;
	read_phase_val(port);
	port->state = ep_link_up(NULL);
	port->calib.tx_calibrated = 1;
	port->calib.rx_calibrated = 1;
	port->locked = spll_check_lock(0);
	/*  port->lock_priority = 0;*/
	/*spll_get_phase_shift(0, NULL, (int32_t *)&port->phase_setpoint);*/
	port->clock_period  = 8000;
	port->t2_phase_transition = cal_phase_transition;
	port->t4_phase_transition = cal_phase_transition;
	get_mac_addr(port->hw_addr);
	port->hw_index      = 0;
Adam Wujek's avatar
Adam Wujek committed
	return 0;
int ptpd_netif_get_dmtd_phase(wr_socket_t *sock, int32_t *phase)
{
        if(phase)
                return spll_read_ptracker(0, phase, NULL);
        return 0;
}

/* dummy function, no shmem locks (no even shmem) are implemented in wrpc */
void wrs_shm_write(void *headptr, int flags)
{
	return;
}