Commit 6eb54cbb authored by Richard Cochran's avatar Richard Cochran Committed by David S. Miller

ptp: Extend the test program to check the external time stamp flags.

Because each driver and hardware has different capabilities, the test
cannot provide a simple pass/fail result, but it can at least show what
combinations of flags are supported.
Signed-off-by: default avatarRichard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ca12cf5a
...@@ -44,6 +44,46 @@ static int clock_adjtime(clockid_t id, struct timex *tx) ...@@ -44,6 +44,46 @@ static int clock_adjtime(clockid_t id, struct timex *tx)
} }
#endif #endif
static void show_flag_test(int rq_index, unsigned int flags, int err)
{
printf("PTP_EXTTS_REQUEST%c flags 0x%08x : (%d) %s\n",
rq_index ? '1' + rq_index : ' ',
flags, err, strerror(errno));
/* sigh, uClibc ... */
errno = 0;
}
static void do_flag_test(int fd, unsigned int index)
{
struct ptp_extts_request extts_request;
unsigned long request[2] = {
PTP_EXTTS_REQUEST,
PTP_EXTTS_REQUEST2,
};
unsigned int enable_flags[5] = {
PTP_ENABLE_FEATURE,
PTP_ENABLE_FEATURE | PTP_RISING_EDGE,
PTP_ENABLE_FEATURE | PTP_FALLING_EDGE,
PTP_ENABLE_FEATURE | PTP_RISING_EDGE | PTP_FALLING_EDGE,
PTP_ENABLE_FEATURE | (PTP_EXTTS_VALID_FLAGS + 1),
};
int err, i, j;
memset(&extts_request, 0, sizeof(extts_request));
extts_request.index = index;
for (i = 0; i < 2; i++) {
for (j = 0; j < 5; j++) {
extts_request.flags = enable_flags[j];
err = ioctl(fd, request[i], &extts_request);
show_flag_test(i, extts_request.flags, err);
extts_request.flags = 0;
err = ioctl(fd, request[i], &extts_request);
}
}
}
static clockid_t get_clockid(int fd) static clockid_t get_clockid(int fd)
{ {
#define CLOCKFD 3 #define CLOCKFD 3
...@@ -96,7 +136,8 @@ static void usage(char *progname) ...@@ -96,7 +136,8 @@ static void usage(char *progname)
" -s set the ptp clock time from the system time\n" " -s set the ptp clock time from the system time\n"
" -S set the system time from the ptp clock time\n" " -S set the system time from the ptp clock time\n"
" -t val shift the ptp clock time by 'val' seconds\n" " -t val shift the ptp clock time by 'val' seconds\n"
" -T val set the ptp clock time to 'val' seconds\n", " -T val set the ptp clock time to 'val' seconds\n"
" -z test combinations of rising/falling external time stamp flags\n",
progname); progname);
} }
...@@ -122,6 +163,7 @@ int main(int argc, char *argv[]) ...@@ -122,6 +163,7 @@ int main(int argc, char *argv[])
int adjtime = 0; int adjtime = 0;
int capabilities = 0; int capabilities = 0;
int extts = 0; int extts = 0;
int flagtest = 0;
int gettime = 0; int gettime = 0;
int index = 0; int index = 0;
int list_pins = 0; int list_pins = 0;
...@@ -138,7 +180,7 @@ int main(int argc, char *argv[]) ...@@ -138,7 +180,7 @@ int main(int argc, char *argv[])
progname = strrchr(argv[0], '/'); progname = strrchr(argv[0], '/');
progname = progname ? 1+progname : argv[0]; progname = progname ? 1+progname : argv[0];
while (EOF != (c = getopt(argc, argv, "cd:e:f:ghi:k:lL:p:P:sSt:T:v"))) { while (EOF != (c = getopt(argc, argv, "cd:e:f:ghi:k:lL:p:P:sSt:T:z"))) {
switch (c) { switch (c) {
case 'c': case 'c':
capabilities = 1; capabilities = 1;
...@@ -191,6 +233,9 @@ int main(int argc, char *argv[]) ...@@ -191,6 +233,9 @@ int main(int argc, char *argv[])
settime = 3; settime = 3;
seconds = atoi(optarg); seconds = atoi(optarg);
break; break;
case 'z':
flagtest = 1;
break;
case 'h': case 'h':
usage(progname); usage(progname);
return 0; return 0;
...@@ -322,6 +367,10 @@ int main(int argc, char *argv[]) ...@@ -322,6 +367,10 @@ int main(int argc, char *argv[])
} }
} }
if (flagtest) {
do_flag_test(fd, index);
}
if (list_pins) { if (list_pins) {
int n_pins = 0; int n_pins = 0;
if (ioctl(fd, PTP_CLOCK_GETCAPS, &caps)) { if (ioctl(fd, PTP_CLOCK_GETCAPS, &caps)) {
......
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