]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - include/linux/pps_kernel.h
block: remove per-queue plugging
[mirror_ubuntu-artful-kernel.git] / include / linux / pps_kernel.h
index 32aa6763ca1b961d19e48ed9564f26e6eb07aaaf..94048547f29ad424e27013c4eaa17ca6ca28c422 100644 (file)
  * Global defines
  */
 
+struct pps_device;
+
 /* The specific PPS source info */
 struct pps_source_info {
        char name[PPS_MAX_NAME_LEN];            /* simbolic name */
        char path[PPS_MAX_NAME_LEN];            /* path of connected device */
        int mode;                               /* PPS's allowed mode */
 
-       void (*echo)(int source, int event, void *data); /* PPS echo function */
+       void (*echo)(struct pps_device *pps,
+                       int event, void *data); /* PPS echo function */
 
        struct module *owner;
        struct device *dev;
 };
 
 struct pps_event_time {
+#ifdef CONFIG_NTP_PPS
+       struct timespec ts_raw;
+#endif /* CONFIG_NTP_PPS */
        struct timespec ts_real;
 };
 
@@ -65,35 +71,27 @@ struct pps_device {
        unsigned int id;                        /* PPS source unique ID */
        struct cdev cdev;
        struct device *dev;
-       int devno;
        struct fasync_struct *async_queue;      /* fasync method */
        spinlock_t lock;
-
-       atomic_t usage;                         /* usage count */
 };
 
 /*
  * Global variables
  */
 
-extern spinlock_t pps_idr_lock;
-extern struct idr pps_idr;
-
 extern struct device_attribute pps_attrs[];
 
 /*
  * Exported functions
  */
 
-struct pps_device *pps_get_source(int source);
-extern void pps_put_source(struct pps_device *pps);
-extern int pps_register_source(struct pps_source_info *info,
-                               int default_params);
-extern void pps_unregister_source(int source);
+extern struct pps_device *pps_register_source(
+               struct pps_source_info *info, int default_params);
+extern void pps_unregister_source(struct pps_device *pps);
 extern int pps_register_cdev(struct pps_device *pps);
 extern void pps_unregister_cdev(struct pps_device *pps);
-extern void pps_event(int source, struct pps_event_time *ts, int event,
-               void *data);
+extern void pps_event(struct pps_device *pps,
+               struct pps_event_time *ts, int event, void *data);
 
 static inline void timespec_to_pps_ktime(struct pps_ktime *kt,
                struct timespec ts)
@@ -102,10 +100,21 @@ static inline void timespec_to_pps_ktime(struct pps_ktime *kt,
        kt->nsec = ts.tv_nsec;
 }
 
+#ifdef CONFIG_NTP_PPS
+
+static inline void pps_get_ts(struct pps_event_time *ts)
+{
+       getnstime_raw_and_real(&ts->ts_raw, &ts->ts_real);
+}
+
+#else /* CONFIG_NTP_PPS */
+
 static inline void pps_get_ts(struct pps_event_time *ts)
 {
        getnstimeofday(&ts->ts_real);
 }
 
+#endif /* CONFIG_NTP_PPS */
+
 #endif /* LINUX_PPS_KERNEL_H */