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
parent
7c501032b2
commit
0499513f1e
14
clock.c
14
clock.c
|
@ -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;
|
||||||
|
|
5
clock.h
5
clock.h
|
@ -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.
|
||||||
|
|
7
ptp4l.c
7
ptp4l.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue