include/rtdm/rtdm_driver.h File Reference


Detailed Description

Real-Time Driver Model for Xenomai, driver API header.

Note:
Copyright (C) 2005-2007 Jan Kiszka <jan.kiszka@web.de>

Copyright (C) 2005 Joerg Langenberg <joerg.langenberg@gmx.net>

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.

Include dependency graph for rtdm_driver.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  rtdm_operations
 Device operations. More...
struct  rtdm_dev_context
struct  rtdm_device

Spinlock with Preemption Deactivation

#define RTDM_LOCK_UNLOCKED   RTHAL_SPIN_LOCK_UNLOCKED
 Static lock initialisation.
#define rtdm_lock_init(lock)   rthal_spin_lock_init(lock)
 Dynamic lock initialisation.
#define rtdm_lock_get(lock)   rthal_spin_lock(lock)
 Acquire lock from non-preemptible contexts.
#define rtdm_lock_put(lock)   rthal_spin_unlock(lock)
 Release lock without preemption restoration.
#define rtdm_lock_get_irqsave(lock, context)   rthal_spin_lock_irqsave(lock, context)
 Acquire lock and disable preemption.
#define rtdm_lock_put_irqrestore(lock, context)   rthal_spin_unlock_irqrestore(lock, context)
 Release lock and restore preemption state.
#define rtdm_lock_irqsave(context)   rthal_local_irq_save(context)
 Disable preemption locally.
#define rtdm_lock_irqrestore(context)   rthal_local_irq_restore(context)
 Restore preemption state.
typedef rthal_spinlock_t rtdm_lock_t
 Lock variable.
typedef unsigned long rtdm_lockctx_t
 Variable to save the context while holding a lock.

Defines

#define rtdm_irq_get_arg(irq_handle, type)   ((type *)irq_handle->cookie)
 Retrieve IRQ handler argument.
Device Flags
Static flags describing a RTDM device

#define RTDM_EXCLUSIVE   0x0001
 If set, only a single instance of the device can be requested by an application.
#define RTDM_NAMED_DEVICE   0x0010
 If set, the device is addressed via a clear-text name.
#define RTDM_PROTOCOL_DEVICE   0x0020
 If set, the device is addressed via a combination of protocol ID and socket type.
#define RTDM_DEVICE_TYPE_MASK   0x00F0
 Mask selecting the device type.
Context Flags
Dynamic flags describing the state of an open RTDM device (bit numbers)

#define RTDM_CREATED_IN_NRT   0
 Set by RTDM if the device instance was created in non-real-time context.
#define RTDM_CLOSING   1
 Set by RTDM when the device is being closed.
#define RTDM_USER_CONTEXT_FLAG   8
 Lowest bit number the driver developer can use freely.
Driver Versioning
Current revisions of RTDM structures, encoding of driver versions. See API Versioning for the interface revision.

#define RTDM_DEVICE_STRUCT_VER   4
 Version of struct rtdm_device.
#define RTDM_CONTEXT_STRUCT_VER   3
 Version of struct rtdm_dev_context.
#define RTDM_SECURE_DEVICE   0x80000000
 Flag indicating a secure variant of RTDM (not supported here).
#define RTDM_DRIVER_VER(major, minor, patch)   (((major & 0xFF) << 16) | ((minor & 0xFF) << 8) | (patch & 0xFF))
 Version code constructor for driver revisions.
#define RTDM_DRIVER_MAJOR_VER(ver)   (((ver) >> 16) & 0xFF)
 Get major version number from driver revision code.
#define RTDM_DRIVER_MINOR_VER(ver)   (((ver) >> 8) & 0xFF)
 Get minor version number from driver revision code.
#define RTDM_DRIVER_PATCH_VER(ver)   ((ver) & 0xFF)
 Get patch version number from driver revision code.
Global Lock across Scheduler Invocation
#define RTDM_EXECUTE_ATOMICALLY(code_block)
RTDM_IRQTYPE_xxx
Interrupt registrations flags

#define RTDM_IRQTYPE_SHARED   XN_ISR_SHARED
 Enable IRQ-sharing with other real-time drivers.
#define RTDM_IRQTYPE_EDGE   XN_ISR_EDGE
 Mark IRQ as edge-triggered, relevant for correct handling of shared edge-triggered IRQs.
RTDM_IRQ_xxx
Return flags of interrupt handlers

#define RTDM_IRQ_NONE   XN_ISR_NONE
 Unhandled interrupt.
#define RTDM_IRQ_HANDLED   XN_ISR_HANDLED
 Denote handled interrupt.
Task Priority Range
Maximum and minimum task priorities

#define RTDM_TASK_LOWEST_PRIORITY   XNCORE_LOW_PRIO
#define RTDM_TASK_HIGHEST_PRIORITY   XNCORE_HIGH_PRIO
Task Priority Modification
Raise or lower task priorities by one level

#define RTDM_TASK_RAISE_PRIORITY   (+1)
#define RTDM_TASK_LOWER_PRIORITY   (-1)

Typedefs

typedef int(* rtdm_irq_handler_t )(rtdm_irq_t *irq_handle)
 Interrupt handler.
typedef void(* rtdm_nrtsig_handler_t )(rtdm_nrtsig_t nrt_sig, void *arg)
 Non-real-time signal handler.
typedef void(* rtdm_timer_handler_t )(rtdm_timer_t *timer)
 Timer handler.
typedef void(* rtdm_task_proc_t )(void *arg)
 Real-time task procedure.
Operation Handler Prototypes
typedef int(* rtdm_open_handler_t )(struct rtdm_dev_context *context, rtdm_user_info_t *user_info, int oflag)
 Named device open handler.
typedef int(* rtdm_socket_handler_t )(struct rtdm_dev_context *context, rtdm_user_info_t *user_info, int protocol)
 Socket creation handler for protocol devices.
typedef int(* rtdm_close_handler_t )(struct rtdm_dev_context *context, rtdm_user_info_t *user_info)
 Close handler.
typedef int(* rtdm_ioctl_handler_t )(struct rtdm_dev_context *context, rtdm_user_info_t *user_info, unsigned int request, void __user *arg)
 IOCTL handler.
typedef ssize_t(* rtdm_read_handler_t )(struct rtdm_dev_context *context, rtdm_user_info_t *user_info, void *buf, size_t nbyte)
 Read handler.
typedef ssize_t(* rtdm_write_handler_t )(struct rtdm_dev_context *context, rtdm_user_info_t *user_info, const void *buf, size_t nbyte)
 Write handler.
typedef ssize_t(* rtdm_recvmsg_handler_t )(struct rtdm_dev_context *context, rtdm_user_info_t *user_info, struct msghdr *msg, int flags)
 Receive message handler.
typedef ssize_t(* rtdm_sendmsg_handler_t )(struct rtdm_dev_context *context, rtdm_user_info_t *user_info, const struct msghdr *msg, int flags)
 Transmit message handler.

Enumerations

RTDM_TIMERMODE_xxx
Timer operation modes

enum  rtdm_timer_mode { RTDM_TIMERMODE_RELATIVE = XN_RELATIVE, RTDM_TIMERMODE_ABSOLUTE = XN_ABSOLUTE, RTDM_TIMERMODE_REALTIME = XN_REALTIME }

Functions

int rtdm_dev_register (struct rtdm_device *device)
int rtdm_dev_unregister (struct rtdm_device *device, unsigned int poll_delay)
struct rtdm_dev_contextrtdm_context_get (int fd)
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)
void rtdm_timer_destroy (rtdm_timer_t *timer)
int rtdm_timer_start (rtdm_timer_t *timer, nanosecs_abs_t expiry, nanosecs_rel_t interval, enum rtdm_timer_mode mode)
void rtdm_timer_stop (rtdm_timer_t *timer)
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)
void rtdm_task_busy_sleep (nanosecs_rel_t delay)
void rtdm_toseq_init (rtdm_toseq_t *timeout_seq, nanosecs_rel_t timeout)
void rtdm_event_init (rtdm_event_t *event, unsigned long pending)
int rtdm_event_wait (rtdm_event_t *event)
int rtdm_event_timedwait (rtdm_event_t *event, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq)
void rtdm_event_signal (rtdm_event_t *event)
void rtdm_event_clear (rtdm_event_t *event)
void rtdm_sem_init (rtdm_sem_t *sem, unsigned long value)
int rtdm_sem_down (rtdm_sem_t *sem)
int rtdm_sem_timeddown (rtdm_sem_t *sem, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq)
void rtdm_sem_up (rtdm_sem_t *sem)
void rtdm_mutex_init (rtdm_mutex_t *mutex)
int rtdm_mutex_lock (rtdm_mutex_t *mutex)
int rtdm_mutex_timedlock (rtdm_mutex_t *mutex, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq)


Generated on Mon Mar 24 18:02:40 2008 for Xenomai API by  doxygen 1.5.3