Commit 3cf119ad authored by Alex Maftei's avatar Alex Maftei Committed by David S. Miller
Browse files

selftests/ptp: Add -X option for testing PTP_SYS_OFFSET_PRECISE



The -X option was chosen because X looks like a cross, and the underlying
callback is 'get cross timestamp'.

Signed-off-by: default avatarAlex Maftei <alex.maftei@amd.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c8ba75c4
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -144,6 +144,7 @@ static void usage(char *progname)
		" -t val     shift the ptp clock time by 'val' seconds\n"
		" -T val     set the ptp clock time to 'val' seconds\n"
		" -x val     get an extended ptp clock time with the desired number of samples (up to %d)\n"
		" -X         get a ptp clock cross timestamp\n"
		" -z         test combinations of rising/falling external time stamp flags\n",
		progname, PTP_MAX_SAMPLES);
}
@@ -160,6 +161,7 @@ int main(int argc, char *argv[])
	struct ptp_clock_time *pct;
	struct ptp_sys_offset *sysoff;
	struct ptp_sys_offset_extended *soe;
	struct ptp_sys_offset_precise *xts;

	char *progname;
	unsigned int i;
@@ -179,6 +181,7 @@ int main(int argc, char *argv[])
	int list_pins = 0;
	int pct_offset = 0;
	int getextended = 0;
	int getcross = 0;
	int n_samples = 0;
	int pin_index = -1, pin_func;
	int pps = -1;
@@ -193,7 +196,7 @@ int main(int argc, char *argv[])

	progname = strrchr(argv[0], '/');
	progname = progname ? 1+progname : argv[0];
	while (EOF != (c = getopt(argc, argv, "cd:e:f:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:z"))) {
	while (EOF != (c = getopt(argc, argv, "cd:e:f:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:Xz"))) {
		switch (c) {
		case 'c':
			capabilities = 1;
@@ -267,6 +270,9 @@ int main(int argc, char *argv[])
				return -1;
			}
			break;
		case 'X':
			getcross = 1;
			break;
		case 'z':
			flagtest = 1;
			break;
@@ -575,6 +581,29 @@ int main(int argc, char *argv[])
		free(soe);
	}

	if (getcross) {
		xts = calloc(1, sizeof(*xts));
		if (!xts) {
			perror("calloc");
			return -1;
		}

		if (ioctl(fd, PTP_SYS_OFFSET_PRECISE, xts)) {
			perror("PTP_SYS_OFFSET_PRECISE");
		} else {
			puts("system and phc crosstimestamping request okay");

			printf("device time: %lld.%09u\n",
			       xts->device.sec, xts->device.nsec);
			printf("system time: %lld.%09u\n",
			       xts->sys_realtime.sec, xts->sys_realtime.nsec);
			printf("monoraw time: %lld.%09u\n",
			       xts->sys_monoraw.sec, xts->sys_monoraw.nsec);
		}

		free(xts);
	}

	close(fd);
	return 0;
}