lkml.org 
[lkml]   [2010]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3/8] pps: LinuxPPS clients support.
    Each PPS source can be registered/deregistered into the system by
    using special modules called "clients". They simply define the PPS
    sources' attributes and implement the time signal registartion
    mechanism.

    This patch adds a special directory for such clients and adds a dummy
    client that can be useful to test system integrity on real systems.

    Signed-off-by: Rodolfo Giometti <giometti@linux.it>
    ---
    drivers/pps/Kconfig | 2 +
    drivers/pps/Makefile | 1 +
    drivers/pps/clients/Kconfig | 18 ++++++
    drivers/pps/clients/Makefile | 9 +++
    drivers/pps/clients/ktimer.c | 123 ++++++++++++++++++++++++++++++++++++++++++
    5 files changed, 153 insertions(+), 0 deletions(-)
    create mode 100644 drivers/pps/clients/Kconfig
    create mode 100644 drivers/pps/clients/Makefile
    create mode 100644 drivers/pps/clients/ktimer.c

    diff --git a/drivers/pps/Kconfig b/drivers/pps/Kconfig
    index cc2eb8e..1afe4e0 100644
    --- a/drivers/pps/Kconfig
    +++ b/drivers/pps/Kconfig
    @@ -30,4 +30,6 @@ config PPS_DEBUG
    messages to the system log. Select this if you are having a
    problem with PPS support and want to see more of what is going on.

    +source drivers/pps/clients/Kconfig
    +
    endmenu
    diff --git a/drivers/pps/Makefile b/drivers/pps/Makefile
    index 19ea582..98960dd 100644
    --- a/drivers/pps/Makefile
    +++ b/drivers/pps/Makefile
    @@ -4,5 +4,6 @@

    pps_core-y := pps.o kapi.o sysfs.o
    obj-$(CONFIG_PPS) := pps_core.o
    +obj-y += clients/

    ccflags-$(CONFIG_PPS_DEBUG) := -DDEBUG
    diff --git a/drivers/pps/clients/Kconfig b/drivers/pps/clients/Kconfig
    new file mode 100644
    index 0000000..60b83be
    --- /dev/null
    +++ b/drivers/pps/clients/Kconfig
    @@ -0,0 +1,18 @@
    +#
    +# PPS clients configuration
    +#
    +
    +if PPS
    +
    +comment "PPS clients support"
    +
    +config PPS_CLIENT_KTIMER
    + tristate "Kernel timer client (Testing client, use for debug)"
    + help
    + If you say yes here you get support for a PPS debugging client
    + which uses a kernel timer to generate the PPS signal.
    +
    + This driver can also be built as a module. If so, the module
    + will be called ktimer.ko.
    +
    +endif
    diff --git a/drivers/pps/clients/Makefile b/drivers/pps/clients/Makefile
    new file mode 100644
    index 0000000..f3c1e39
    --- /dev/null
    +++ b/drivers/pps/clients/Makefile
    @@ -0,0 +1,9 @@
    +#
    +# Makefile for PPS clients.
    +#
    +
    +obj-$(CONFIG_PPS_CLIENT_KTIMER) += ktimer.o
    +
    +ifeq ($(CONFIG_PPS_DEBUG),y)
    +EXTRA_CFLAGS += -DDEBUG
    +endif
    diff --git a/drivers/pps/clients/ktimer.c b/drivers/pps/clients/ktimer.c
    new file mode 100644
    index 0000000..6de5dfc
    --- /dev/null
    +++ b/drivers/pps/clients/ktimer.c
    @@ -0,0 +1,123 @@
    +/*
    + * ktimer.c -- kernel timer test client
    + *
    + *
    + * Copyright (C) 2005-2006 Rodolfo Giometti <giometti@linux.it>
    + *
    + * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
    + */
    +
    +
    +#include <linux/kernel.h>
    +#include <linux/module.h>
    +#include <linux/init.h>
    +#include <linux/time.h>
    +#include <linux/timer.h>
    +#include <linux/pps_kernel.h>
    +
    +/*
    + * Global variables
    + */
    +
    +static int source;
    +static struct timer_list ktimer;
    +
    +/*
    + * The kernel timer
    + */
    +
    +static void pps_ktimer_event(unsigned long ptr)
    +{
    + struct timespec __ts;
    + struct pps_ktime ts;
    +
    + /* First of all we get the time stamp... */
    + getnstimeofday(&__ts);
    +
    + pr_info("PPS event at %lu\n", jiffies);
    +
    + /* ... and translate it to PPS time data struct */
    + ts.sec = __ts.tv_sec;
    + ts.nsec = __ts.tv_nsec;
    +
    + pps_event(source, &ts, PPS_CAPTUREASSERT, NULL);
    +
    + mod_timer(&ktimer, jiffies + HZ);
    +}
    +
    +/*
    + * The echo function
    + */
    +
    +static void pps_ktimer_echo(int source, int event, void *data)
    +{
    + pr_info("echo %s %s for source %d\n",
    + event & PPS_CAPTUREASSERT ? "assert" : "",
    + event & PPS_CAPTURECLEAR ? "clear" : "",
    + source);
    +}
    +
    +/*
    + * The PPS info struct
    + */
    +
    +static struct pps_source_info pps_ktimer_info = {
    + .name = "ktimer",
    + .path = "",
    + .mode = PPS_CAPTUREASSERT | PPS_OFFSETASSERT | \
    + PPS_ECHOASSERT | \
    + PPS_CANWAIT | PPS_TSFMT_TSPEC,
    + .echo = pps_ktimer_echo,
    + .owner = THIS_MODULE,
    +};
    +
    +/*
    + * Module staff
    + */
    +
    +static void __exit pps_ktimer_exit(void)
    +{
    + del_timer_sync(&ktimer);
    + pps_unregister_source(source);
    +
    + pr_info("ktimer PPS source unregistered\n");
    +}
    +
    +static int __init pps_ktimer_init(void)
    +{
    + int ret;
    +
    + ret = pps_register_source(&pps_ktimer_info,
    + PPS_CAPTUREASSERT | PPS_OFFSETASSERT);
    + if (ret < 0) {
    + printk(KERN_ERR "cannot register ktimer source\n");
    + return ret;
    + }
    + source = ret;
    +
    + setup_timer(&ktimer, pps_ktimer_event, 0);
    + mod_timer(&ktimer, jiffies + HZ);
    +
    + pr_info("ktimer PPS source registered at %d\n", source);
    +
    + return 0;
    +}
    +
    +module_init(pps_ktimer_init);
    +module_exit(pps_ktimer_exit);
    +
    +MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
    +MODULE_DESCRIPTION("dummy PPS source by using a kernel timer (just for debug)");
    +MODULE_LICENSE("GPL");
    --
    1.6.3.3


    \
     
     \ /
      Last update: 2010-02-16 10:55    [W:7.727 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site