Xenomai
3.1
|
Real-Time Driver Model for Xenomai, driver API header. More...
Go to the source code of this file.
Data Structures | |
struct | rtdm_dev_context |
Device context. More... | |
struct | rtdm_profile_info |
RTDM profile information. More... | |
struct | rtdm_sm_ops |
RTDM state management handlers. More... | |
struct | rtdm_driver |
RTDM driver. More... | |
struct | rtdm_device |
RTDM device. More... | |
Macros | |
#define | RTDM_MAX_MINOR 4096 |
Maximum number of named devices per driver. More... | |
#define | RTDM_PROFILE_INFO(__name, __id, __subid, __version) |
Initializer for class profile information. More... | |
#define | cobalt_atomic_enter(__context) |
Enter atomic section (dual kernel only) More... | |
#define | cobalt_atomic_leave(__context) |
Leave atomic section (dual kernel only) More... | |
#define | RTDM_EXECUTE_ATOMICALLY(code_block) |
Execute code block atomically (DEPRECATED) More... | |
#define | RTDM_LOCK_UNLOCKED(__name) IPIPE_SPIN_LOCK_UNLOCKED |
Static lock initialisation. | |
#define | rtdm_lock_get_irqsave(__lock, __context) ((__context) = __rtdm_lock_get_irqsave(__lock)) |
Acquire lock and disable preemption, by stalling the head domain. More... | |
#define | rtdm_lock_irqsave(__context) splhigh(__context) |
Disable preemption locally More... | |
#define | rtdm_lock_irqrestore(__context) splexit(__context) |
Restore preemption state More... | |
#define | rtdm_irq_get_arg(irq_handle, type) ((type *)irq_handle->cookie) |
Retrieve IRQ handler argument More... | |
Device Flags | |
#define | RTDM_EXCLUSIVE 0x0001 |
If set, only a single instance of the device can be requested by an application. More... | |
#define | RTDM_FIXED_MINOR 0x0002 |
Use fixed minor provided in the rtdm_device description for registering. More... | |
#define | RTDM_NAMED_DEVICE 0x0010 |
If set, the device is addressed via a clear-text name. More... | |
#define | RTDM_PROTOCOL_DEVICE 0x0020 |
If set, the device is addressed via a combination of protocol ID and socket type. More... | |
#define | RTDM_DEVICE_TYPE_MASK 0x00F0 |
Mask selecting the device type. More... | |
#define | RTDM_SECURE_DEVICE 0x80000000 |
Flag indicating a secure variant of RTDM (not supported here) | |
RTDM_IRQTYPE_xxx | |
#define | RTDM_IRQTYPE_SHARED XN_IRQTYPE_SHARED |
Enable IRQ-sharing with other real-time drivers. | |
#define | RTDM_IRQTYPE_EDGE XN_IRQTYPE_EDGE |
Mark IRQ as edge-triggered, relevant for correct handling of shared edge-triggered IRQs. | |
RTDM_IRQ_xxx | |
#define | RTDM_IRQ_NONE XN_IRQ_NONE |
Unhandled interrupt. | |
#define | RTDM_IRQ_HANDLED XN_IRQ_HANDLED |
Denote handled interrupt. | |
#define | RTDM_IRQ_DISABLE XN_IRQ_DISABLE |
Request interrupt disabling on exit. | |
Task Priority Range | |
#define | RTDM_TASK_LOWEST_PRIORITY 0 |
#define | RTDM_TASK_HIGHEST_PRIORITY 99 |
Task Priority Modification | |
#define | RTDM_TASK_RAISE_PRIORITY (+1) |
#define | RTDM_TASK_LOWER_PRIORITY (-1) |
Typedefs | |
typedef ipipe_spinlock_t | rtdm_lock_t |
Lock variable. | |
typedef unsigned long | rtdm_lockctx_t |
Variable to save the context while holding a lock. | |
typedef int(* | rtdm_irq_handler_t) (rtdm_irq_t *irq_handle) |
Interrupt handler. More... | |
typedef void(* | rtdm_nrtsig_handler_t) (rtdm_nrtsig_t *nrt_sig, void *arg) |
Non-real-time signal handler. More... | |
typedef void(* | rtdm_timer_handler_t) (rtdm_timer_t *timer) |
Timer handler. More... | |
typedef void(* | rtdm_task_proc_t) (void *arg) |
Real-time task procedure. More... | |
Enumerations | |
RTDM_SELECTTYPE_xxx | |
enum | rtdm_selecttype { RTDM_SELECTTYPE_READ = XNSELECT_READ, RTDM_SELECTTYPE_WRITE = XNSELECT_WRITE, RTDM_SELECTTYPE_EXCEPT = XNSELECT_EXCEPT } |
RTDM_TIMERMODE_xxx | |
enum | rtdm_timer_mode { RTDM_TIMERMODE_RELATIVE = XN_RELATIVE, RTDM_TIMERMODE_ABSOLUTE = XN_ABSOLUTE, RTDM_TIMERMODE_REALTIME = XN_REALTIME } |
Functions | |
static void * | rtdm_fd_to_private (struct rtdm_fd *fd) |
Locate the driver private area associated to a device context structure. More... | |
static struct rtdm_fd * | rtdm_private_to_fd (void *dev_private) |
Locate a device file descriptor structure from its driver private area. More... | |
static bool | rtdm_fd_is_user (struct rtdm_fd *fd) |
Tell whether the passed file descriptor belongs to an application. More... | |
static struct rtdm_device * | rtdm_fd_device (struct rtdm_fd *fd) |
Locate a device structure from a file descriptor. More... | |
int | rtdm_drv_set_sysclass (struct rtdm_driver *drv, struct class *cls) |
Set the kernel device class of a RTDM driver. More... | |
int | rtdm_dev_register (struct rtdm_device *device) |
Register a RTDM device More... | |
void | rtdm_dev_unregister (struct rtdm_device *device) |
Unregister a RTDM device More... | |
void | rtdm_toseq_init (rtdm_toseq_t *timeout_seq, nanosecs_rel_t timeout) |
Initialise a timeout sequence More... | |
static void | rtdm_lock_init (rtdm_lock_t *lock) |
Dynamic lock initialisation More... | |
static void | rtdm_lock_get (rtdm_lock_t *lock) |
Acquire lock from non-preemptible contexts More... | |
static void | rtdm_lock_put (rtdm_lock_t *lock) |
Release lock without preemption restoration More... | |
static void | rtdm_lock_put_irqrestore (rtdm_lock_t *lock, rtdm_lockctx_t context) |
Release lock and restore preemption state More... | |
int | rtdm_irq_request (rtdm_irq_t *irq_handle, unsigned int irq_no, rtdm_irq_handler_t handler, unsigned long flags, const char *device_name, void *arg) |
Register an interrupt handler More... | |
void | rtdm_schedule_nrt_work (struct work_struct *lostage_work) |
Put a work task in Linux non real-time global workqueue from primary mode. More... | |
int | rtdm_timer_init (rtdm_timer_t *timer, rtdm_timer_handler_t handler, const char *name) |
Initialise a timer More... | |
void | rtdm_timer_destroy (rtdm_timer_t *timer) |
Destroy a timer More... | |
int | rtdm_timer_start (rtdm_timer_t *timer, nanosecs_abs_t expiry, nanosecs_rel_t interval, enum rtdm_timer_mode mode) |
Start a timer More... | |
void | rtdm_timer_stop (rtdm_timer_t *timer) |
Stop a timer More... | |
int | rtdm_task_init (rtdm_task_t *task, const char *name, rtdm_task_proc_t task_proc, void *arg, int priority, nanosecs_rel_t period) |
Initialise and start a real-time task More... | |
void | rtdm_task_busy_sleep (nanosecs_rel_t delay) |
Busy-wait a specified amount of time More... | |
void | rtdm_event_init (rtdm_event_t *event, unsigned long pending) |
Initialise an event More... | |
int | rtdm_event_wait (rtdm_event_t *event) |
Wait on event occurrence More... | |
int | rtdm_event_timedwait (rtdm_event_t *event, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq) |
Wait on event occurrence with timeout More... | |
void | rtdm_event_signal (rtdm_event_t *event) |
Signal an event occurrence More... | |
void | rtdm_event_clear (rtdm_event_t *event) |
Clear event state More... | |
void | rtdm_event_pulse (rtdm_event_t *event) |
Signal an event occurrence to currently listening waiters More... | |
void | rtdm_event_destroy (rtdm_event_t *event) |
Destroy an event More... | |
void | rtdm_sem_init (rtdm_sem_t *sem, unsigned long value) |
Initialise a semaphore More... | |
int | rtdm_sem_down (rtdm_sem_t *sem) |
Decrement a semaphore More... | |
int | rtdm_sem_timeddown (rtdm_sem_t *sem, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq) |
Decrement a semaphore with timeout More... | |
void | rtdm_sem_up (rtdm_sem_t *sem) |
Increment a semaphore More... | |
void | rtdm_sem_destroy (rtdm_sem_t *sem) |
Destroy a semaphore More... | |
void | rtdm_mutex_init (rtdm_mutex_t *mutex) |
Initialise a mutex More... | |
int | rtdm_mutex_lock (rtdm_mutex_t *mutex) |
Request a mutex More... | |
int | rtdm_mutex_timedlock (rtdm_mutex_t *mutex, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq) |
Request a mutex with timeout More... | |
void | rtdm_mutex_unlock (rtdm_mutex_t *mutex) |
Release a mutex More... | |
void | rtdm_mutex_destroy (rtdm_mutex_t *mutex) |
Destroy a mutex More... | |
Real-Time Driver Model for Xenomai, driver API header.
Copyright (C) 2005-2007 Jan Kiszka jan.k Copyright (C) 2005 Joerg Langenberg iszk a@web .dejoerg Copyright (C) 2008 Gilles Chanteperdrix .lan genbe rg@g mx.ne tgille Copyright (C) 2014 Philippe Gerum s.ch antep erdr ix@xe noma i.orgrpm@x enom ai.or g
Xenomai 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.
Xenomai 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 Xenomai; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define RTDM_PROFILE_INFO | ( | __name, | |
__id, | |||
__subid, | |||
__version | |||
) |
Initializer for class profile information.
This macro must be used to fill in the class profile information field from a RTDM driver.
__name | Class name (unquoted). |
__id | Class major identification number (profile_version.class_id). |
__subid | Class minor identification number (profile_version.subclass_id). |
__version | Profile version number. |
|
inlinestatic |
Locate a device structure from a file descriptor.
[in] | fd | File descriptor |
|
inlinestatic |
Tell whether the passed file descriptor belongs to an application.
[in] | fd | File descriptor |
|
inlinestatic |
Locate the driver private area associated to a device context structure.
[in] | fd | File descriptor structure associated with opened device instance |
|
inlinestatic |
Locate a device file descriptor structure from its driver private area.
[in] | dev_private | Address of a private context area |
References rtdm_dev_context::dev_private.