On Tue, 19 Feb 2008 00:28:33 +0100 Rodolfo Giometti wrote:

> This patch adds the kernel side of the PPS support currently named
> "LinuxPPS".
> 
> PPS means "pulse per second" and a PPS source is just a device which
> provides a high precision signal each second so that an application
> can use it to adjust system clock time.
> 
> Common use is the combination of the NTPD as userland program with a
> GPS receiver as PPS source to obtain a wallclock-time with
> sub-millisecond synchronisation to UTC.

Hi,
I'm mostly reading documentation and Kconfig/Makefiles...

> To obtain this goal the userland programs shoud use the PPS API
> specification (RFC 2783 - Pulse-Per-Second API for UNIX-like Operating
> Systems, Version 1.0) which in part is implemented by this patch. It
> provides a set of chars devices, one per PPS source, which can be used
> to get the time signal. The RFC's functions can be implemented by
> accessing to these char devices.
> 
> Signed-off-by: Rodolfo Giometti <[EMAIL PROTECTED]>
> ---
>  Documentation/ABI/testing/sysfs-pps |   73 ++++++++
>  Documentation/pps/pps.txt           |  170 +++++++++++++++++
>  MAINTAINERS                         |    7 +
>  drivers/Kconfig                     |    2 +
>  drivers/Makefile                    |    1 +
>  drivers/pps/Kconfig                 |   32 ++++
>  drivers/pps/Makefile                |    8 +
>  drivers/pps/kapi.c                  |  272 ++++++++++++++++++++++++++++
>  drivers/pps/pps.c                   |  342 
> +++++++++++++++++++++++++++++++++++
>  drivers/pps/sysfs.c                 |  130 +++++++++++++
>  include/linux/Kbuild                |    1 +
>  include/linux/pps.h                 |  204 +++++++++++++++++++++
>  12 files changed, 1242 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/ABI/testing/sysfs-pps
>  create mode 100644 Documentation/pps/pps.txt
>  create mode 100644 drivers/pps/Kconfig
>  create mode 100644 drivers/pps/Makefile
>  create mode 100644 drivers/pps/kapi.c
>  create mode 100644 drivers/pps/pps.c
>  create mode 100644 drivers/pps/sysfs.c
>  create mode 100644 include/linux/pps.h
> 
> diff --git a/Documentation/pps/pps.txt b/Documentation/pps/pps.txt
> new file mode 100644
> index 0000000..2af58bd
> --- /dev/null
> +++ b/Documentation/pps/pps.txt
> @@ -0,0 +1,170 @@
> +
> +                     PPS - Pulse Per Second
> +                     ----------------------
> +

...

> +
> +
> +Coding example
> +--------------
> +
> +To register a PPS source into the kernel you should define a struct
> +pps_source_info_s as follow:
> +
> +    static struct pps_source_info_s 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,
> +    };

Oops, bad struct name "pps_source_info_s".  What's that trailing _s
doing there?  We already know that it's a struct, so it must be
something else.  :)
We don't add such trailing (or leading) type/struct indicators in Linux.

> +
> +and then calling the function pps_register_source() in your
> +intialization routine as follow:
> +
> +    source = pps_register_source(&pps_ktimer_info,
> +                     PPS_CAPTUREASSERT | PPS_OFFSETASSERT);
> +
> +The pps_register_source() prototype is:
> +
> +  int pps_register_source(struct pps_source_info_s *info, int default_params)
> +
> +where "info" is a pointer to a structure that describes a particular
> +PPS source, "default_params" tells the system what the initial default
> +parameters for the device should be (is obvious that these parameters
> +must be a subset of ones defined into the struct
> +pps_source_info_s which describe the capabilities of the driver).
> +
> +Once you have registered a new PPS source into the system you can
> +signal an assert event (for example in the interrupt handler routine)
> +just using:
> +
> +    pps_event(source, PPS_CAPTUREASSERT, ptr);
> +
> +The same function may also run the defined echo function
> +(pps_ktimer_echo(), passing to it the "ptr" pointer) if the user
> +asked for that... etc..
> +
> +Please see the file drivers/pps/clients/ktimer.c for an example code.

Drop "an".


> diff --git a/drivers/pps/Kconfig b/drivers/pps/Kconfig
> new file mode 100644
> index 0000000..dce4a1f
> --- /dev/null
> +++ b/drivers/pps/Kconfig
> @@ -0,0 +1,32 @@
> +#
> +# PPS support configuration
> +#
> +
> +menu "PPS support"
> +
> +config PPS
> +     tristate "PPS support"
> +     depends on EXPERIMENTAL
> +     ---help---
> +       PPS (Pulse Per Second) is a special pulse provided by some GPS
> +       antennae. Userland can use it to get an high time reference.

s/an/a/

"high time reference":  maybe a "high-resolution time reference"?
or "high-precision time reference"?
Just having "high time reference" is missing something...

> +
> +       Some antennae's PPS signals are connected with the CD (Carrier
> +       Detect) pin of the serial line they use to communicate with the
> +       host. In this case use the SERIAL_LINE client support.
> +
> +       Some antennae's PPS signals are connected with some special host
> +       inputs so you have to enable the corresponding client support.
> +
> +       To compile this driver as a module, choose M here: the module
> +       will be called pps_core.ko.
> +
> +config PPS_DEBUG
> +     bool "PPS debugging messages"
> +     depends on PPS
> +     help
> +       Say Y here if you want the PPS support to produce a bunch of 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.
> +
> +endmenu

> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
> new file mode 100644
> index 0000000..b3b9af8
> --- /dev/null
> +++ b/drivers/pps/pps.c
> @@ -0,0 +1,342 @@
> +/*
> + * pps.c -- Main PPS support file
> + *

...

> +/*
> + * Module staff

             stuff

> + */

> diff --git a/include/linux/pps.h b/include/linux/pps.h
> new file mode 100644
> index 0000000..5a86109
> --- /dev/null
> +++ b/include/linux/pps.h
> @@ -0,0 +1,204 @@

> +#define PPS_CHECK            _IO('P', 0)
> +#define PPS_GETPARAMS                _IOR('P', 1, struct pps_kparams *)
> +#define PPS_SETPARAMS                _IOW('P', 2, struct pps_kparams *)
> +#define PPS_GETCAP           _IOR('P', 3, int *)
> +#define PPS_FETCH            _IOWR('P', 4, struct pps_fdata *)

Did you add any line(s) to Documentation/ioctl-number.txt ?
If not, please do so.

> +#ifdef __KERNEL__
> +
> +#include <linux/cdev.h>
> +#include <linux/device.h>
> +
> +#define PPS_VERSION          "5.0.0"
> +#define PPS_MAX_SOURCES              16              /* should be enought... 
> */

s/enought/enough/

---
~Randy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to