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


Go to the source code of this file.
| Data Structures | |
| struct | rtdm_operations | 
| Device operations.  More... | |
| struct | rtdm_dev_context | 
| Device context.  More... | |
| struct | rtdm_device | 
| RTDM device.  More... | |
| Defines | |
| #define | rtdm_irq_get_arg(irq_handle, type) ((type *)irq_handle->cookie) | 
| Retrieve IRQ handler argument. | |
| Device Flags | |
| #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 | |
| #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 /* first user-definable flag */ | 
| 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 5 | 
| 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) | 
| Execute code block atomically. | |
| RTDM_IRQTYPE_xxx | |
| #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 | |
| #define | RTDM_IRQ_NONE XN_ISR_NONE | 
| Unhandled interrupt. | |
| #define | RTDM_IRQ_HANDLED XN_ISR_HANDLED | 
| Denote handled interrupt. | |
| Task Priority Range | |
| #define | RTDM_TASK_LOWEST_PRIORITY XNSCHED_LOW_PRIO | 
| #define | RTDM_TASK_HIGHEST_PRIORITY XNSCHED_HIGH_PRIO | 
| Task Priority Modification | |
| #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 int(* | rtdm_select_bind_handler_t )(struct rtdm_dev_context *context, rtdm_selector_t *selector, enum rtdm_selecttype type, unsigned fd_index) | 
| Select binding 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_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_context_to_private (struct rtdm_dev_context *context) | 
| Locate the driver private area associated to a device context structure. | |
| static struct rtdm_dev_context * | rtdm_private_to_context (void *dev_private) | 
| Locate a device context structure from its driver private area. | |
| int | rtdm_dev_register (struct rtdm_device *device) | 
| Register a RTDM device. | |
| int | rtdm_dev_unregister (struct rtdm_device *device, unsigned int poll_delay) | 
| Unregisters a RTDM device. | |
| struct rtdm_dev_context * | rtdm_context_get (int fd) | 
| Retrieve and lock a device context. | |
| int | rtdm_select_bind (int fd, rtdm_selector_t *selector, enum rtdm_selecttype type, unsigned fd_index) | 
| Bind a selector to specified event types of a given file descriptor. | |
| 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. | |
| void | rtdm_timer_destroy (rtdm_timer_t *timer) | 
| Destroy a timer. | |
| int | rtdm_timer_start (rtdm_timer_t *timer, nanosecs_abs_t expiry, nanosecs_rel_t interval, enum rtdm_timer_mode mode) | 
| Start a timer. | |
| void | rtdm_timer_stop (rtdm_timer_t *timer) | 
| Stop a 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) | 
| Intialise and start a real-time task. | |
| void | rtdm_task_busy_sleep (nanosecs_rel_t delay) | 
| Busy-wait a specified amount of time. | |
| void | rtdm_toseq_init (rtdm_toseq_t *timeout_seq, nanosecs_rel_t timeout) | 
| Initialise a timeout sequence. | |
| void | rtdm_event_init (rtdm_event_t *event, unsigned long pending) | 
| Initialise an event. | |
| int | rtdm_event_select_bind (rtdm_event_t *event, rtdm_selector_t *selector, enum rtdm_selecttype type, unsigned fd_index) | 
| Bind a selector to an event. | |
| int | rtdm_event_wait (rtdm_event_t *event) | 
| Wait on event occurrence. | |
| int | rtdm_event_timedwait (rtdm_event_t *event, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq) | 
| Wait on event occurrence with timeout. | |
| void | rtdm_event_signal (rtdm_event_t *event) | 
| Signal an event occurrence. | |
| void | rtdm_event_clear (rtdm_event_t *event) | 
| Clear event state. | |
| void | rtdm_sem_init (rtdm_sem_t *sem, unsigned long value) | 
| Initialise a semaphore. | |
| int | rtdm_sem_select_bind (rtdm_sem_t *sem, rtdm_selector_t *selector, enum rtdm_selecttype type, unsigned fd_index) | 
| Bind a selector to a semaphore. | |
| int | rtdm_sem_down (rtdm_sem_t *sem) | 
| Decrement a semaphore. | |
| int | rtdm_sem_timeddown (rtdm_sem_t *sem, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq) | 
| Decrement a semaphore with timeout. | |
| void | rtdm_sem_up (rtdm_sem_t *sem) | 
| Increment a semaphore. | |
| void | rtdm_mutex_init (rtdm_mutex_t *mutex) | 
| Initialise a mutex. | |
| int | rtdm_mutex_lock (rtdm_mutex_t *mutex) | 
| Request a mutex. | |
| int | rtdm_mutex_timedlock (rtdm_mutex_t *mutex, nanosecs_rel_t timeout, rtdm_toseq_t *timeout_seq) | 
| Request a mutex with timeout. | |
| 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. | |
Real-Time Driver Model for Xenomai, driver API header.
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.