]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/main.c
Added full RT-Linux POSIX interface to LinCAN driver, needs preparation of RT tests.
[lincan.git] / lincan / src / main.c
index c40310dbde3cc2738d6189ce1488e27246056ec5..38a0ec0d56b78f6f47b302e075bc3ead14c7e2e8 100644 (file)
 #include "../include/finish.h"
 #include "../include/fasync.h"
 
+#ifdef CAN_WITH_RTL
+#include <rtl_posixio.h>
+#include "../include/can_iortl.h"
+#endif /*CAN_WITH_RTL*/
+
 #define EXPORT_SYMTAB
 
+can_spinlock_t canuser_manipulation_lock;
+
 /* Module parameters, some must be supplied at module loading time */
 int major=CAN_MAJOR;
 MODULE_PARM(major,"1i");
@@ -130,6 +137,20 @@ struct file_operations can_fops=
 
 EXPORT_SYMBOL(can_fops);
 
+
+#ifdef CAN_WITH_RTL
+struct rtl_file_operations can_fops_rtl = {
+       llseek:         NULL,
+       read:           can_read_rtl_posix,
+       write:          can_write_rtl_posix,
+       ioctl:          can_ioctl_rtl_posix,
+       mmap:           NULL,
+       open:           can_open_rtl_posix,
+       release:        can_release_rtl_posix
+};
+#endif /*CAN_WITH_RTL*/
+
+
 int init_module(void)
 {
        int res=0,i=0, j;
@@ -156,6 +177,11 @@ int init_module(void)
 
        #ifdef CAN_WITH_RTL
        canqueue_rtl_initialize();
+       res=rtl_register_rtldev(major,DEVICE_NAME,&can_fops_rtl);
+       if (res<0) {
+               CANMSG("Error registering RT-Linux major number.\n");
+               goto rtldev_error;
+       }
        #endif /*CAN_WITH_RTL*/
 
        for (i=0; i<hardware_p->nr_boards; i++) {
@@ -233,6 +259,8 @@ int init_module(void)
                canhardware_done(hardware_p);
 
                #ifdef CAN_WITH_RTL
+               rtl_unregister_rtldev(major,DEVICE_NAME);
+       rtldev_error:
                canqueue_rtl_done();
                #endif /*CAN_WITH_RTL*/
 
@@ -272,6 +300,7 @@ void cleanup_module(void)
        canhardware_done(hardware_p);
 
        #ifdef CAN_WITH_RTL
+       rtl_unregister_rtldev(major,DEVICE_NAME);
        canqueue_rtl_done();
        #endif /*CAN_WITH_RTL*/