ptp4l: remove timestamping as a per-port configuration option

The current code for the timestamping mode does not allow interfaces to have
separate timestamping modes. This is (probably) due to hardware timestamping
mode being required on all ports to work properly.

This patch removes the timestamping field in the struct iface, and makes it a
clock variable which is really what the mode does anyways. Ports get passed
the timestamping mode but no longer appear as though they are separate.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
master
Jacob Keller 2012-08-20 10:56:13 -07:00 committed by Richard Cochran
parent 7c501032b2
commit 0499513f1e
3 changed files with 16 additions and 24 deletions

14
clock.c
View File

@ -210,9 +210,10 @@ UInteger8 clock_class(struct clock *c)
} }
struct clock *clock_create(int phc_index, struct interface *iface, int count, struct clock *clock_create(int phc_index, struct interface *iface, int count,
struct defaultDS *ds, struct port_defaults *pod) enum timestamp_type timestamping, struct defaultDS *ds,
struct port_defaults *pod)
{ {
int i, max_adj, sw_ts = 0; int i, max_adj, sw_ts = timestamping == TS_SOFTWARE ? 1 : 0;
struct clock *c = &the_clock; struct clock *c = &the_clock;
char phc[32]; char phc[32];
@ -238,13 +239,6 @@ struct clock *clock_create(int phc_index, struct interface *iface, int count,
max_adj = 512000; max_adj = 512000;
} }
for (i = 0; i < count; i++) {
if (iface[i].timestamping == TS_SOFTWARE) {
sw_ts = 1;
break;
}
}
c->servo = servo_create("pi", max_adj, sw_ts); c->servo = servo_create("pi", max_adj, sw_ts);
if (!c->servo) { if (!c->servo) {
pr_err("Failed to create clock servo"); pr_err("Failed to create clock servo");
@ -274,7 +268,7 @@ struct clock *clock_create(int phc_index, struct interface *iface, int count,
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
c->port[i] = port_open(pod, phc_index, iface[i].name, iface[i].transport, c->port[i] = port_open(pod, phc_index, iface[i].name, iface[i].transport,
iface[i].timestamping, 1+i, iface[i].dm, c); timestamping, 1+i, iface[i].dm, c);
if (!c->port[i]) { if (!c->port[i]) {
pr_err("failed to open port %s", iface[i].name); pr_err("failed to open port %s", iface[i].name);
return NULL; return NULL;

View File

@ -35,7 +35,6 @@ struct interface {
char *name; char *name;
enum delay_mechanism dm; enum delay_mechanism dm;
enum transport_type transport; enum transport_type transport;
enum timestamp_type timestamping;
}; };
/** Opaque type. */ /** Opaque type. */
@ -72,12 +71,14 @@ UInteger8 clock_class(struct clock *c);
* Pass -1 to select CLOCK_REALTIME. * Pass -1 to select CLOCK_REALTIME.
* @param interface An array of network interfaces. * @param interface An array of network interfaces.
* @param count The number of elements in @a interfaces. * @param count The number of elements in @a interfaces.
* @param timestamping The timestamping mode for this clock.
* @param ds A pointer to a default data set for the clock. * @param ds A pointer to a default data set for the clock.
* @param pod A pointer to a default port data set for the clock. * @param pod A pointer to a default port data set for the clock.
* @return A pointer to the single global clock instance. * @return A pointer to the single global clock instance.
*/ */
struct clock *clock_create(int phc_index, struct interface *iface, int count, struct clock *clock_create(int phc_index, struct interface *iface, int count,
struct defaultDS *ds, struct port_defaults *pod); enum timestamp_type timestamping, struct defaultDS *ds,
struct port_defaults *pod);
/** /**
* Obtains a clock's default data set. * Obtains a clock's default data set.

View File

@ -73,7 +73,7 @@ static void usage(char *progname)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
char *config = NULL, *req_phc = NULL, *progname; char *config = NULL, *req_phc = NULL, *progname;
int c, i, nports = 0, slaveonly = 0; int c, nports = 0, slaveonly = 0;
struct interface iface[MAX_PORTS]; struct interface iface[MAX_PORTS];
enum delay_mechanism dm = DM_E2E; enum delay_mechanism dm = DM_E2E;
enum transport_type transport = TRANS_UDP_IPV4; enum transport_type transport = TRANS_UDP_IPV4;
@ -159,9 +159,6 @@ int main(int argc, char *argv[])
usage(progname); usage(progname);
return -1; return -1;
} }
for (i = 0; i < nports; i++) {
iface[i].timestamping = timestamping;
}
/* determine PHC Clock index */ /* determine PHC Clock index */
if (timestamping == TS_SOFTWARE || timestamping == TS_LEGACY_HW) { if (timestamping == TS_SOFTWARE || timestamping == TS_LEGACY_HW) {
@ -222,7 +219,7 @@ int main(int argc, char *argv[])
ds.clockQuality.clockClass = 255; ds.clockQuality.clockClass = 255;
} }
clock = clock_create(phc_index, iface, nports, &ds, &pod); clock = clock_create(phc_index, iface, nports, timestamping, &ds, &pod);
if (!clock) { if (!clock) {
fprintf(stderr, "failed to create a clock\n"); fprintf(stderr, "failed to create a clock\n");
return -1; return -1;