[Xenomai-git] Gilles Chanteperdrix : drivers/serial: adapt after RTDM API changes
Module: xenomai-forge Branch: next Commit: 3ab8c031b0e9938c42bffa95cad9cca5c2a781e0 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=3ab8c031b0e9938c42bffa95cad9cca5c2a781e0 Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org Date: Sat May 17 21:15:58 2014 +0200 drivers/serial: adapt after RTDM API changes Note: rt_imx_serial and mpc52xx were not compiled. rt_imx_serial does not compile with either Linux 3.10 or Linux 3.14. --- kernel/drivers/serial/16550A.c | 87 +++--- kernel/drivers/serial/Kconfig|2 +- kernel/drivers/serial/mpc52xx_uart.c | 75 + kernel/drivers/serial/rt_imx_uart.c | 77 ++ 4 files changed, 108 insertions(+), 133 deletions(-) diff --git a/kernel/drivers/serial/16550A.c b/kernel/drivers/serial/16550A.c index 8ee1c21..693f878 100644 --- a/kernel/drivers/serial/16550A.c +++ b/kernel/drivers/serial/16550A.c @@ -312,9 +312,7 @@ static int rt_16550_set_config(struct rt_16550_context *ctx, rtdm_lock_get_irqsave(ctx-lock, lock_ctx); if (config-config_mask RTSER_SET_BAUD) { - int dev_id = container_of(((void *)ctx), - struct rtdm_dev_context, - dev_private)-device-device_id; + int dev_id = rtdm_fd_device(rtdm_private_to_fd(ctx))-device_id; int baud_div; ctx-config.baud_rate = config-baud_rate; @@ -439,16 +437,15 @@ void rt_16550_cleanup_ctx(struct rt_16550_context *ctx) rtdm_mutex_destroy(ctx-out_lock); } -int rt_16550_open(struct rtdm_dev_context *context, - rtdm_user_info_t * user_info, int oflags) +int rt_16550_open(struct rtdm_fd *fd, int oflags) { struct rt_16550_context *ctx; - int dev_id = context-device-device_id; + int dev_id = rtdm_fd_device(fd)-device_id; int err; uint64_t *dummy; rtdm_lockctx_t lock_ctx; - ctx = (struct rt_16550_context *)context-dev_private; + ctx = rtdm_fd_to_private(fd); /* IPC initialisation - cannot fail with used parameters */ rtdm_lock_init(ctx-lock); @@ -480,8 +477,8 @@ int rt_16550_open(struct rtdm_dev_context *context, rt_16550_set_config(ctx, default_config, dummy); err = rtdm_irq_request(ctx-irq_handle, irq[dev_id], - rt_16550_interrupt, irqtype[dev_id], - context-device-proc_name, ctx); + rt_16550_interrupt, irqtype[dev_id], + rtdm_fd_device(fd)-proc_name, ctx); if (err) { /* reset DTR and RTS */ rt_16550_reg_out(rt_16550_io_mode_from_ctx(ctx), ctx-base_addr, @@ -504,8 +501,7 @@ int rt_16550_open(struct rtdm_dev_context *context, return 0; } -int rt_16550_close(struct rtdm_dev_context *context, - rtdm_user_info_t * user_info) +void rt_16550_close(struct rtdm_fd *fd) { struct rt_16550_context *ctx; unsigned long base; @@ -513,7 +509,7 @@ int rt_16550_close(struct rtdm_dev_context *context, uint64_t *in_history; rtdm_lockctx_t lock_ctx; - ctx = (struct rt_16550_context *)context-dev_private; + ctx = rtdm_fd_to_private(fd); base = ctx-base_addr; mode = rt_16550_io_mode_from_ctx(ctx); @@ -539,13 +535,9 @@ int rt_16550_close(struct rtdm_dev_context *context, rt_16550_cleanup_ctx(ctx); kfree(in_history); - - return 0; } -int rt_16550_ioctl(struct rtdm_dev_context *context, - rtdm_user_info_t * user_info, - unsigned int request, void *arg) +int rt_16550_ioctl(struct rtdm_fd *fd, unsigned int request, void *arg) { rtdm_lockctx_t lock_ctx; struct rt_16550_context *ctx; @@ -553,15 +545,15 @@ int rt_16550_ioctl(struct rtdm_dev_context *context, unsigned long base; int mode; - ctx = (struct rt_16550_context *)context-dev_private; + ctx = rtdm_fd_to_private(fd); base = ctx-base_addr; mode = rt_16550_io_mode_from_ctx(ctx); switch (request) { case RTSER_RTIOC_GET_CONFIG: - if (user_info) + if (rtdm_fd_is_user(fd)) err = - rtdm_safe_copy_to_user(user_info, arg, + rtdm_safe_copy_to_user(fd, arg, ctx-config, sizeof(struct rtser_config)); @@ -577,9 +569,9 @@ int rt_16550_ioctl(struct rtdm_dev_context *context, config = (struct rtser_config *)arg; - if (user_info) { + if (rtdm_fd_is_user(fd)) { err = -
[Xenomai-git] Gilles Chanteperdrix : drivers/rtcan: adapt to RTDM API changes
Module: xenomai-forge Branch: next Commit: cc965e6cdb1b8d9b233ec898944d3382e3937904 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=cc965e6cdb1b8d9b233ec898944d3382e3937904 Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org Date: Sat May 17 20:33:30 2014 +0200 drivers/rtcan: adapt to RTDM API changes --- kernel/drivers/can/rtcan_module.c | 29 +++--- kernel/drivers/can/rtcan_raw.c | 199 +--- kernel/drivers/can/rtcan_raw.h |3 +- kernel/drivers/can/rtcan_raw_dev.c | 19 ++-- kernel/drivers/can/rtcan_socket.c |8 +- kernel/drivers/can/rtcan_socket.h | 14 +-- 6 files changed, 126 insertions(+), 146 deletions(-) diff --git a/kernel/drivers/can/rtcan_module.c b/kernel/drivers/can/rtcan_module.c index 4e5b837..6c57515 100644 --- a/kernel/drivers/can/rtcan_module.c +++ b/kernel/drivers/can/rtcan_module.c @@ -169,7 +169,7 @@ static const struct file_operations rtcan_proc_devices_ops = { static int rtcan_read_proc_sockets(struct seq_file *p, void *data) { struct rtcan_socket *sock; -struct rtdm_dev_context *context; +struct rtdm_fd *fd; struct rtcan_device *dev; char name[IFNAMSIZ] = not-bound; char rx_timeout[20], tx_timeout[20]; @@ -179,16 +179,16 @@ static int rtcan_read_proc_sockets(struct seq_file *p, void *data) if (down_interruptible(rtcan_devices_nrt_lock)) return -ERESTARTSYS; -/* fd Name___ Filter ErrMask RX_Timeout TX_Timeout RX_BufFull TX_Lo - * 0 rtcan0 1 0x00010 1234567890 1234567890 1234567890 12345 +/* Name___ Filter ErrMask RX_Timeout TX_Timeout RX_BufFull TX_Lo + * rtcan0 1 0x00010 1234567890 1234567890 1234567890 12345 */ -seq_printf(p, fd Name___ Filter ErrMask RX_Timeout_ns +seq_printf(p, Name___ Filter ErrMask RX_Timeout_ns TX_Timeout_ns RX_BufFull TX_Lo\n); rtdm_lock_get_irqsave(rtcan_recv_list_lock, lock_ctx); list_for_each_entry(sock, rtcan_socket_list, socket_list) { - context = rtcan_socket_context(sock); + fd = rtcan_socket_to_fd(sock); if (rtcan_sock_is_bound(sock)) { ifindex = atomic_read(sock-ifindex); if (ifindex) { @@ -204,8 +204,8 @@ static int rtcan_read_proc_sockets(struct seq_file *p, void *data) tx_timeout, sizeof(tx_timeout)); rtcan_get_timeout_name(sock-rx_timeout, rx_timeout, sizeof(rx_timeout)); - seq_printf(p, %2d %-15s %6d 0x%05x %13s %13s %10d %5d\n, - context-fd, name, sock-flistlen, sock-err_mask, + seq_printf(p, %-15s %6d 0x%05x %13s %13s %10d %5d\n, + name, sock-flistlen, sock-err_mask, rx_timeout, tx_timeout, sock-rx_buf_full, rtcan_loopback_enabled(sock)); } @@ -286,23 +286,22 @@ static int rtcan_read_proc_filter(struct seq_file *p, void *data) { struct rtcan_device *dev = p-private; struct rtcan_recv *recv_listener = dev-recv_list; -struct rtdm_dev_context *context; +struct rtdm_fd *fd; rtdm_lockctx_t lock_ctx; -/* fd __CAN_ID__ _CAN_Mask_ Inv MatchCount - * 3 0x12345678 0x12345678 no 1234567890 +/* __CAN_ID__ _CAN_Mask_ Inv MatchCount + * 0x12345678 0x12345678 no 1234567890 */ -seq_printf(p, fd __CAN_ID__ _CAN_Mask_ Inv MatchCount\n); +seq_printf(p, __CAN_ID__ _CAN_Mask_ Inv MatchCount\n); rtdm_lock_get_irqsave(rtcan_recv_list_lock, lock_ctx); /* Loop over the reception list of the device */ while (recv_listener != NULL) { - context = rtcan_socket_context(recv_listener-sock); + fd = rtcan_socket_to_fd(recv_listener-sock); - seq_printf(p, %2d 0x%08x 0x%08x %s %10d\n, - context-fd, + seq_printf(p, 0x%08x 0x%08x %s %10d\n, recv_listener-can_filter.can_id, recv_listener-can_filter.can_mask ~CAN_INV_FILTER, (recv_listener-can_filter.can_mask CAN_INV_FILTER) ? @@ -394,7 +393,7 @@ static int rtcan_proc_register(void) } proc_create(devices, S_IFREG | S_IRUGO | S_IWUSR, rtcan_proc_root, - rtcan_proc_devices_ops); + rtcan_proc_devices_ops); proc_create(version, S_IFREG | S_IRUGO | S_IWUSR, rtcan_proc_root, rtcan_proc_version_ops); proc_create(sockets, S_IFREG | S_IRUGO | S_IWUSR, rtcan_proc_root, diff --git a/kernel/drivers/can/rtcan_raw.c b/kernel/drivers/can/rtcan_raw.c index d3cb88a..3864d0f 100644 --- a/kernel/drivers/can/rtcan_raw.c +++ b/kernel/drivers/can/rtcan_raw.c @@ -52,7 +52,7 @@ * Set if socket wants to receive a high precision timestamp together with * CAN frames */ -#define RTCAN_GET_TIMESTAMP RTDM_USER_CONTEXT_FLAG +#define RTCAN_GET_TIMESTAMP 0 MODULE_AUTHOR(RT-Socket-CAN Development Team); @@ -80,12 +80,17 @@ static
[Xenomai-git] Gilles Chanteperdrix : drivers/serial: adapt after RTDM API changes
Module: xenomai-forge Branch: master Commit: 3ab8c031b0e9938c42bffa95cad9cca5c2a781e0 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=3ab8c031b0e9938c42bffa95cad9cca5c2a781e0 Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org Date: Sat May 17 21:15:58 2014 +0200 drivers/serial: adapt after RTDM API changes Note: rt_imx_serial and mpc52xx were not compiled. rt_imx_serial does not compile with either Linux 3.10 or Linux 3.14. --- kernel/drivers/serial/16550A.c | 87 +++--- kernel/drivers/serial/Kconfig|2 +- kernel/drivers/serial/mpc52xx_uart.c | 75 + kernel/drivers/serial/rt_imx_uart.c | 77 ++ 4 files changed, 108 insertions(+), 133 deletions(-) diff --git a/kernel/drivers/serial/16550A.c b/kernel/drivers/serial/16550A.c index 8ee1c21..693f878 100644 --- a/kernel/drivers/serial/16550A.c +++ b/kernel/drivers/serial/16550A.c @@ -312,9 +312,7 @@ static int rt_16550_set_config(struct rt_16550_context *ctx, rtdm_lock_get_irqsave(ctx-lock, lock_ctx); if (config-config_mask RTSER_SET_BAUD) { - int dev_id = container_of(((void *)ctx), - struct rtdm_dev_context, - dev_private)-device-device_id; + int dev_id = rtdm_fd_device(rtdm_private_to_fd(ctx))-device_id; int baud_div; ctx-config.baud_rate = config-baud_rate; @@ -439,16 +437,15 @@ void rt_16550_cleanup_ctx(struct rt_16550_context *ctx) rtdm_mutex_destroy(ctx-out_lock); } -int rt_16550_open(struct rtdm_dev_context *context, - rtdm_user_info_t * user_info, int oflags) +int rt_16550_open(struct rtdm_fd *fd, int oflags) { struct rt_16550_context *ctx; - int dev_id = context-device-device_id; + int dev_id = rtdm_fd_device(fd)-device_id; int err; uint64_t *dummy; rtdm_lockctx_t lock_ctx; - ctx = (struct rt_16550_context *)context-dev_private; + ctx = rtdm_fd_to_private(fd); /* IPC initialisation - cannot fail with used parameters */ rtdm_lock_init(ctx-lock); @@ -480,8 +477,8 @@ int rt_16550_open(struct rtdm_dev_context *context, rt_16550_set_config(ctx, default_config, dummy); err = rtdm_irq_request(ctx-irq_handle, irq[dev_id], - rt_16550_interrupt, irqtype[dev_id], - context-device-proc_name, ctx); + rt_16550_interrupt, irqtype[dev_id], + rtdm_fd_device(fd)-proc_name, ctx); if (err) { /* reset DTR and RTS */ rt_16550_reg_out(rt_16550_io_mode_from_ctx(ctx), ctx-base_addr, @@ -504,8 +501,7 @@ int rt_16550_open(struct rtdm_dev_context *context, return 0; } -int rt_16550_close(struct rtdm_dev_context *context, - rtdm_user_info_t * user_info) +void rt_16550_close(struct rtdm_fd *fd) { struct rt_16550_context *ctx; unsigned long base; @@ -513,7 +509,7 @@ int rt_16550_close(struct rtdm_dev_context *context, uint64_t *in_history; rtdm_lockctx_t lock_ctx; - ctx = (struct rt_16550_context *)context-dev_private; + ctx = rtdm_fd_to_private(fd); base = ctx-base_addr; mode = rt_16550_io_mode_from_ctx(ctx); @@ -539,13 +535,9 @@ int rt_16550_close(struct rtdm_dev_context *context, rt_16550_cleanup_ctx(ctx); kfree(in_history); - - return 0; } -int rt_16550_ioctl(struct rtdm_dev_context *context, - rtdm_user_info_t * user_info, - unsigned int request, void *arg) +int rt_16550_ioctl(struct rtdm_fd *fd, unsigned int request, void *arg) { rtdm_lockctx_t lock_ctx; struct rt_16550_context *ctx; @@ -553,15 +545,15 @@ int rt_16550_ioctl(struct rtdm_dev_context *context, unsigned long base; int mode; - ctx = (struct rt_16550_context *)context-dev_private; + ctx = rtdm_fd_to_private(fd); base = ctx-base_addr; mode = rt_16550_io_mode_from_ctx(ctx); switch (request) { case RTSER_RTIOC_GET_CONFIG: - if (user_info) + if (rtdm_fd_is_user(fd)) err = - rtdm_safe_copy_to_user(user_info, arg, + rtdm_safe_copy_to_user(fd, arg, ctx-config, sizeof(struct rtser_config)); @@ -577,9 +569,9 @@ int rt_16550_ioctl(struct rtdm_dev_context *context, config = (struct rtser_config *)arg; - if (user_info) { + if (rtdm_fd_is_user(fd)) { err = -
[Xenomai-git] Philippe Gerum : cobalt/rtdm: fixup tracepoints after RTDM API changes
Module: xenomai-forge Branch: master Commit: ccacefe39f4531079bc58534c1bcd76ba46e769a URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=ccacefe39f4531079bc58534c1bcd76ba46e769a Author: Philippe Gerum r...@xenomai.org Date: Sat May 17 18:58:44 2014 +0200 cobalt/rtdm: fixup tracepoints after RTDM API changes --- include/cobalt/kernel/rtdm/driver.h | 49 ++--- include/cobalt/kernel/rtdm/fd.h | 33 ++-- kernel/cobalt/rtdm/core.c | 13 +++-- kernel/cobalt/rtdm/device.c |2 +- kernel/cobalt/rtdm/drvlib.c | 54 ++- kernel/cobalt/rtdm/fd.c | 67 +-- kernel/cobalt/trace/cobalt-rtdm.h | 101 --- 7 files changed, 143 insertions(+), 176 deletions(-) diff --git a/include/cobalt/kernel/rtdm/driver.h b/include/cobalt/kernel/rtdm/driver.h index e3ccc9c..6c805d8 100644 --- a/include/cobalt/kernel/rtdm/driver.h +++ b/include/cobalt/kernel/rtdm/driver.h @@ -1466,22 +1466,9 @@ void rtdm_event_signal(rtdm_event_t *event); void rtdm_event_clear(rtdm_event_t *event); -#ifndef DOXYGEN_CPP /* Avoid static inline tags for RTDM in doxygen */ -void __rtdm_synch_flush(struct xnsynch *synch, unsigned long reason); - -static inline void rtdm_event_pulse(rtdm_event_t *event) -{ - trace_cobalt_driver_event_pulse(event); - __rtdm_synch_flush(event-synch_base, 0); -} +void rtdm_event_pulse(rtdm_event_t *event); -static inline void rtdm_event_destroy(rtdm_event_t *event) -{ - trace_cobalt_driver_event_destroy(event); - __rtdm_synch_flush(event-synch_base, XNRMID); - xnselect_destroy(event-select_block); -} -#endif /* !DOXYGEN_CPP */ +void rtdm_event_destroy(rtdm_event_t *event); /* --- semaphore services --- */ @@ -1499,14 +1486,7 @@ 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); -#ifndef DOXYGEN_CPP /* Avoid static inline tags for RTDM in doxygen */ -static inline void rtdm_sem_destroy(rtdm_sem_t *sem) -{ - trace_cobalt_driver_sem_destroy(sem); - __rtdm_synch_flush(sem-synch_base, XNRMID); - xnselect_destroy(sem-select_block); -} -#endif /* !DOXYGEN_CPP */ +void rtdm_sem_destroy(rtdm_sem_t *sem); /* --- mutex services --- */ @@ -1518,27 +1498,8 @@ 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); - -#ifndef DOXYGEN_CPP /* Avoid static inline tags for RTDM in doxygen */ -static inline void rtdm_mutex_unlock(rtdm_mutex_t *mutex) -{ - if (!XENO_ASSERT(RTDM, !xnsched_interrupt_p())) - return; - - trace_cobalt_driver_mutex_release(mutex); - - if (unlikely(xnsynch_release(mutex-synch_base, -xnsched_current_thread()) != NULL)) - xnsched_run(); -} - -static inline void rtdm_mutex_destroy(rtdm_mutex_t *mutex) -{ - trace_cobalt_driver_mutex_destroy(mutex); - - __rtdm_synch_flush(mutex-synch_base, XNRMID); -} -#endif /* !DOXYGEN_CPP */ +void rtdm_mutex_unlock(rtdm_mutex_t *mutex); +void rtdm_mutex_destroy(rtdm_mutex_t *mutex); /* --- utility functions --- */ diff --git a/include/cobalt/kernel/rtdm/fd.h b/include/cobalt/kernel/rtdm/fd.h index f137b00..a107315 100644 --- a/include/cobalt/kernel/rtdm/fd.h +++ b/include/cobalt/kernel/rtdm/fd.h @@ -125,15 +125,15 @@ struct rtdm_fd_ops { rtdm_fd_sendmsg_t *sendmsg_rt; rtdm_fd_sendmsg_t *sendmsg_nrt; int (*select_bind)(struct rtdm_fd *fd, struct xnselector *selector, - unsigned type, unsigned index); + unsigned int type, unsigned int index); void (*close)(struct rtdm_fd *fd); }; struct rtdm_fd { - unsigned magic; + unsigned int magic; struct rtdm_fd_ops *ops; struct xnsys_ppd *cont; - unsigned refs; + unsigned int refs; struct list_head cleanup; }; @@ -150,9 +150,10 @@ static inline struct xnsys_ppd *rtdm_fd_owner(struct rtdm_fd *fd) } int rtdm_fd_enter(struct xnsys_ppd *p, struct rtdm_fd *rtdm_fd, int ufd, - unsigned magic, struct rtdm_fd_ops *ops); + unsigned int magic, struct rtdm_fd_ops *ops); -struct rtdm_fd *rtdm_fd_get(struct xnsys_ppd *p, int ufd, unsigned magic); +struct rtdm_fd *rtdm_fd_get(struct xnsys_ppd *p, + int ufd, unsigned int magic); int rtdm_fd_lock(struct rtdm_fd *fd); @@ -160,24 +161,26 @@ void rtdm_fd_put(struct rtdm_fd *fd); void rtdm_fd_unlock(struct rtdm_fd *fd); -int rtdm_fd_ioctl(struct xnsys_ppd *p, int fd, unsigned request, ...); +int rtdm_fd_ioctl(struct xnsys_ppd *p, int fd, unsigned int request, ...); -ssize_t rtdm_fd_read(struct xnsys_ppd *p, int fd, void __user *buf, size_t size);