diff --git a/makefile b/makefile new file mode 100644 index 0000000..1522661 --- /dev/null +++ b/makefile @@ -0,0 +1,53 @@ +# +# Copyright (C) 2011 Richard Cochran +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +KBUILD_OUTPUT ?= /lib/modules/$(shell uname -r)/build + +DEBUG = +CC = gcc +INC = -I$(KBUILD_OUTPUT)/usr/include +CFLAGS = -Wall $(INC) $(DEBUG) +LDFLAGS = +LDLIBS = -lm -lrt +PRG = linuxptp +OBJ = phc.o + +SRC = $(OBJ:.o=.c) +DEPEND = $(OBJ:.o=.d) +srcdir := $(dir $(lastword $(MAKEFILE_LIST))) +VPATH = $(srcdir) + +all: $(OBJ) + +linuxptp: $(OBJ) + +clean: + rm -f $(OBJ) $(DEPEND) + +distclean: clean + rm -f $(PRG) + +# Implicit rule to generate a C source file's dependencies. +%.d: %.c + @echo DEPEND $<; \ + rm -f $@; \ + $(CC) -MM $(CPPFLAGS) $(CFLAGS) $< > $@.$$$$; \ + sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$ + +-include $(DEPEND) + diff --git a/phc.c b/phc.c new file mode 100644 index 0000000..d733cb2 --- /dev/null +++ b/phc.c @@ -0,0 +1,39 @@ +/** + * @file phc.c + * @note Copyright (C) 2011 Richard Cochran + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#include +#include +#include +#include + +#include "phc.h" + +clockid_t phc_open(char *phc) +{ + int fd = open(phc, O_RDWR); + + return fd < 0 ? CLOCK_INVALID : FD_TO_CLOCKID(fd); +} + +void phc_close(clockid_t clkid) +{ + if (clkid == CLOCK_INVALID) + return; + + close(CLOCKID_TO_FD(clkid)); +} diff --git a/phc.h b/phc.h new file mode 100644 index 0000000..8ea9e05 --- /dev/null +++ b/phc.h @@ -0,0 +1,40 @@ +/** + * @file phc.h + * @note Copyright (C) 2011 Richard Cochran + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#ifndef HAVE_PHC_H +#define HAVE_PHC_H + +#include "missing.h" + +/** + * Opens a PTP hardware clock device. + * + * @param phc The device to open. + * + * @return A valid clock ID on success, CLOCK_INVALID otherwise. + */ +clockid_t phc_open(char *phc); + +/** + * Closes a PTP hardware clock device. + * + * @param clkid A clock ID obtained using phc_open(). + */ +void phc_close(clockid_t clkid); + +#endif