Xenomai  3.0-rc3
rtdm_helpers.h
Go to the documentation of this file.
1 
22 #ifndef _COBALT_RTDM_ANALOGY_RTDM_HELPERS_H
23 #define _COBALT_RTDM_ANALOGY_RTDM_HELPERS_H
24 
25 #include <linux/fs.h>
26 #include <linux/spinlock.h>
27 #include <linux/sched.h>
28 #include <linux/time.h>
29 #include <linux/delay.h>
30 #include <linux/interrupt.h>
31 #include <asm/uaccess.h>
32 #include <rtdm/driver.h>
33 
34 /* --- Trace section --- */
35 #define A4L_PROMPT "Analogy: "
36 
37 #define RTDM_SUBCLASS_ANALOGY 0
38 
39 #define __a4l_err(fmt, args...) rtdm_printk(KERN_ERR A4L_PROMPT fmt, ##args)
40 #define __a4l_warn(fmt, args...) rtdm_printk(KERN_WARNING A4L_PROMPT fmt, ##args)
41 
42 #ifdef CONFIG_XENO_DRIVERS_ANALOGY_DEBUG_FTRACE
43 #define __a4l_info(fmt, args...) trace_printk(fmt, ##args)
44 #else
45 #define __a4l_info(fmt, args...) \
46  rtdm_printk(KERN_INFO A4L_PROMPT "%s: " fmt, __FUNCTION__, ##args)
47 #endif
48 
49 #ifdef CONFIG_XENO_DRIVERS_ANALOGY_DEBUG
50 #ifdef CONFIG_XENO_DRIVERS_ANALOGY_DEBUG_FTRACE
51 #define __a4l_dbg(level, debug, fmt, args...) \
52  do { \
53  if ((debug) >= (level)) \
54  trace_printk(fmt, ##args); \
55  } while (0)
56 #else
57 #define __a4l_dbg(level, debug, fmt, args...) \
58  do { \
59  if ((debug) >= (level)) \
60  rtdm_printk(KERN_DEBUG A4L_PROMPT "%s: " fmt, __FUNCTION__ , ##args); \
61  } while (0)
62 #endif
63 
64 #define core_dbg CONFIG_XENO_DRIVERS_ANALOGY_DEBUG_LEVEL
65 #define drv_dbg CONFIG_XENO_DRIVERS_ANALOGY_DRIVER_DEBUG_LEVEL
66 
67 #else /* !CONFIG_XENO_DRIVERS_ANALOGY_DEBUG */
68 
69 #define __a4l_dbg(level, debug, fmt, args...)
70 
71 #endif /* CONFIG_XENO_DRIVERS_ANALOGY_DEBUG */
72 
73 #define __a4l_dev_name(dev) \
74  (dev->driver == NULL) ? "unattached dev" : dev->driver->board_name
75 
76 #define a4l_err(dev, fmt, args...) \
77  __a4l_err("%s: " fmt, __a4l_dev_name(dev), ##args)
78 
79 #define a4l_warn(dev, fmt, args...) \
80  __a4l_warn("%s: " fmt, __a4l_dev_name(dev), ##args)
81 
82 #define a4l_info(dev, fmt, args...) \
83  __a4l_info("%s: " fmt, __a4l_dev_name(dev), ##args)
84 
85 #define a4l_dbg(level, debug, dev, fmt, args...) \
86  __a4l_dbg(level, debug, "%s: " fmt, __a4l_dev_name(dev), ##args)
87 
88 
89 /* --- Time section --- */
90 static inline void a4l_udelay(unsigned int us)
91 {
92  rtdm_task_busy_sleep(((nanosecs_rel_t) us) * 1000);
93 }
94 
95 /* Function which gives absolute time */
96 nanosecs_abs_t a4l_get_time(void);
97 
98 /* Function for setting up the absolute time recovery */
99 void a4l_init_time(void);
100 
101 /* --- IRQ section --- */
102 #define A4L_IRQ_DISABLED 0
103 
104 typedef int (*a4l_irq_hdlr_t) (unsigned int irq, void *d);
105 
106 struct a4l_irq_descriptor {
107  /* These fields are useful to launch the IRQ trampoline;
108  that is the reason why a structure has been defined */
109  a4l_irq_hdlr_t handler;
110  unsigned int irq;
111  void *cookie;
112  rtdm_irq_t rtdm_desc;
113 };
114 
115 int __a4l_request_irq(struct a4l_irq_descriptor * dsc,
116  unsigned int irq,
117  a4l_irq_hdlr_t handler,
118  unsigned long flags, void *cookie);
119 int __a4l_free_irq(struct a4l_irq_descriptor * dsc);
120 
121 /* --- Synchronization section --- */
122 #define __NRT_WAITER 1
123 #define __RT_WAITER 2
124 #define __EVT_PDING 3
125 
126 struct a4l_sync {
127  unsigned long status;
128  rtdm_event_t rtdm_evt;
129  rtdm_nrtsig_t nrt_sig;
130  wait_queue_head_t wq;
131 };
132 
133 #define a4l_select_sync(snc, slr, type, fd) \
134  rtdm_event_select(&((snc)->rtdm_evt), slr, type, fd)
135 
136 int a4l_init_sync(struct a4l_sync * snc);
137 void a4l_cleanup_sync(struct a4l_sync * snc);
138 void a4l_flush_sync(struct a4l_sync * snc);
139 int a4l_wait_sync(struct a4l_sync * snc, int rt);
140 int a4l_timedwait_sync(struct a4l_sync * snc,
141  int rt, unsigned long long ns_timeout);
142 void a4l_signal_sync(struct a4l_sync * snc);
143 
144 
145 #endif /* !_COBALT_RTDM_ANALOGY_RTDM_HELPERS_H */
void rtdm_task_busy_sleep(nanosecs_rel_t delay)
Busy-wait a specified amount of time.
Definition: drvlib.c:387
int64_t nanosecs_rel_t
RTDM type for representing relative intervals.
Definition: rtdm.h:49
Real-Time Driver Model for Xenomai, driver API header.
uint64_t nanosecs_abs_t
RTDM type for representing absolute dates.
Definition: rtdm.h:43