]> rtime.felk.cvut.cz Git - lincan.git/commitdiff
Merge branch 'master' into can-usb1
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Sat, 25 Jul 2015 21:14:55 +0000 (23:14 +0200)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Sat, 25 Jul 2015 21:14:55 +0000 (23:14 +0200)
lincan/include/can_sysdep.h
lincan/include/main.h
lincan/src/i82527.c
lincan/src/ioctl_remote.c
lincan/src/open.c
omk/rules/linux/Makefile.rules
omk/rules/linux/kernelcfg2mk

index 60c76de28b8d551ba900621c9650937656e41383..b2c8d83e3d5ce0ff54c2d1ad7d58dca944038c01 100644 (file)
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,7)) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
 
-#define MINOR_NR \
-       (MINOR(file->f_dentry->d_inode->i_rdev))
+#define INODE2MINOR_NR(inode) \
+       (MINOR(inode->i_rdev))
 
 #else /* Linux kernel < 2.5.7 or >= 2.6.0 */
 
-#define MINOR_NR \
-       (minor(file->f_dentry->d_inode->i_rdev))
+#define INODE2MINOR_NR(inode) \
+       (minor(inode->i_rdev))
 
 #endif /* Linux kernel < 2.5.7 or >= 2.6.0 */
 
index f7a302c53d25ad219ad709cda402044578c2b9bc..aad913dfcd979b7beae0e832b5dee002818aed0c 100644 (file)
@@ -406,6 +406,7 @@ struct mem_addr {
 /* Structure for the RTR queue */
 struct rtr_id {
        unsigned long id;
+       int ready_fl;
        struct canmsg_t *rtr_message;
        wait_queue_head_t rtr_wq;
        struct rtr_id *next;
index 635dfc7b7f8d5fd93488e91e6719078cd0ede6d0..6445f5d1bafbe2dc56a5a2404b839a350aaaf718 100644 (file)
@@ -750,6 +750,7 @@ void i82527_irq_rtr_handler(struct canchip_t *chip, struct msgobj_t *obj,
 
        can_spin_unlock(&hardware_p->rtr_lock);
 
+       rtr_search->ready_fl = 1;
        if (waitqueue_active(&rtr_search->rtr_wq))
                wake_up(&rtr_search->rtr_wq);
 }
index 5ba89f8ad00ef61cd6633982c62043ebfa2d8a9b..8c3dd77f03638d3012f6db384df5d2d2b19aca24 100644 (file)
@@ -46,6 +46,7 @@ int can_ioctl_remote_read(struct canuser_t *canuser, struct canmsg_t *rtr_msg,
        struct rtr_id *rtr_current, *new_rtr_entry;
        struct msgobj_t *obj;
        struct canchip_t *chip;
+       int err;
        /*struct canque_ends_t *qends;*/
 
        DEBUGMSG("Remote transmission request\n");
@@ -84,6 +85,7 @@ int can_ioctl_remote_read(struct canuser_t *canuser, struct canmsg_t *rtr_msg,
        }
        init_waitqueue_head(&new_rtr_entry->rtr_wq);
        new_rtr_entry->id = rtr_id;
+       new_rtr_entry->ready_fl = 0;
        new_rtr_entry->rtr_message = rtr_msg;
        new_rtr_entry->next=NULL;
 
@@ -92,7 +94,8 @@ int can_ioctl_remote_read(struct canuser_t *canuser, struct canmsg_t *rtr_msg,
        /* Send remote transmission request */
        chip->chipspecops->remote_request(chip,obj);
        obj->ret = 0;
-       interruptible_sleep_on(&new_rtr_entry->rtr_wq);
+
+       err = wait_event_interruptible(new_rtr_entry->rtr_wq, new_rtr_entry->ready_fl);
 
        can_spin_lock_irqsave(&hardware_p->rtr_lock, flags);
        if (hardware_p->rtr_queue == new_rtr_entry) {
@@ -113,6 +116,9 @@ int can_ioctl_remote_read(struct canuser_t *canuser, struct canmsg_t *rtr_msg,
        can_spin_unlock_irqrestore(&hardware_p->rtr_lock, flags);
        kfree(new_rtr_entry);
 
+       if (err)
+               return -EINTR;
+
        return obj->ret;
 }
 
index 942225a8fbaa4c726340e98a5fc6753d6b311a59..266aed414743109592a41cfade17c54f15332bd4 100644 (file)
@@ -50,15 +50,21 @@ int can_open(struct inode *inode, struct file *file)
        struct canque_edge_t *edge;
        can_spin_irqflags_t iflags;
        char openflag;          // Martin Petera: Object already opened
+       int minor_nr = INODE2MINOR_NR(inode);
 
-       if ( ((obj=objects_p[MINOR_NR]) == NULL) ||
-                       ((chip=objects_p[MINOR_NR]->hostchip) == NULL) ) {
-               CANMSG("There is no hardware support for the device file with minor nr.: %d\n",MINOR_NR);
+       if ((minor_nr < 0) || (minor_nr >= MAX_TOT_MSGOBJS)) {
+               CANMSG("can_open: bad minor %d\n", minor_nr);
+               return -ENODEV;
+       }
+
+       if ( ((obj=objects_p[minor_nr]) == NULL) ||
+           ((chip=objects_p[minor_nr]->hostchip) == NULL) ) {
+               CANMSG("There is no hardware support for the device file with minor nr.: %d\n", minor_nr);
                return -ENODEV;
        }
 
        atomic_inc(&obj->obj_used);
-       DEBUGMSG("Device %d opened %d times.\n", MINOR_NR, atomic_read(&obj->obj_used));
+       DEBUGMSG("Device %d opened %d times.\n", minor_nr, atomic_read(&obj->obj_used));
        openflag = can_msgobj_test_fl(obj,OPENED);      // Martin Petera: store previous status
        can_msgobj_set_fl(obj,OPENED);
 
index 1458619e30c2cc83e9c058a0a1f9b3092cf6465a..6c3095e3cb100d4fc3a8baa5b730ed0865a17dd1 100644 (file)
@@ -4,7 +4,7 @@
 #  (C) Copyright 2006, 2007, 2008, 2009, 2010, 2011 by Michal Sojka - Czech Technical University, FEE, DCE
 #
 #  Homepage: http://rtime.felk.cvut.cz/omk/
-#  Version:  0.2-97-g532aeb1
+#  Version:  0.2-111-g8f9236e
 #
 # The OMK build system is distributed under the GNU General Public
 # License.  See file COPYING for details.
@@ -348,7 +348,7 @@ omkize:
        fi
        $(Q)for i in `find -L . -name Makefile.omk` ; do \
           d=`dirname $${i}`; \
-          if ! test -f "$${d}/Makefile.rules" && ( test -f "$${d}/Makefile" && ! cmp --silent Makefile "$${d}/Makefile" ); then \
+          if ! test -f "$${d}/Makefile.rules" && ( test -f "$${d}/Makefile" && ! cmp -s Makefile "$${d}/Makefile" ); then \
              rm -f "$${d}/Makefile"; \
              cp -v Makefile "$${d}/Makefile"; \
           fi \
@@ -402,14 +402,15 @@ endif
 
 ifneq ($(LN_HEADERS),y)
 define cp_cmd
-if ! cmp --quiet $(1) $(2); then \
+if ! cmp -s $(1) $(2); then \
     echo "  CP      $(1:$(OUTPUT_DIR)/%=%) -> $(2:$(OUTPUT_DIR)/%=%)"; \
-    install -D $(CPHEADER_FLAGS) $(1) $(2) || exit 1; \
+    install -d $(CPHEADER_FLAGS) `dirname $(2)` && \
+    install $(CPHEADER_FLAGS) $(1) $(2) || exit 1; \
 fi
 endef
 else
 define cp_cmd
-if ! cmp --quiet $(1) $(2); then \
+if ! cmp -s $(1) $(2); then \
     echo "  LN      $(1:$(OUTPUT_DIR)/%=%) -> $(2:$(OUTPUT_DIR)/%=%)"; \
     if [ -f $(1) ]; then d=$(2); mkdir -p $${d%/*} && ln -sf $(LNHEADER_FLAGS) $(1) $(2) || exit 1; else exit 1; fi; \
 fi
@@ -568,9 +569,9 @@ endif
 
 ifdef USER_RULE_TEMPLATES
 
-USER_SOURCES2OBJS = .o/.c .o/.cc .o/.cxx .o/.S .o/.o
+USER_SOURCES2OBJS = .o/.c .o/.cc .o/.cxx .o/.cpp .o/.S .o/.o
 
-USER_SOURCES2OBJSLO = .lo/.c .lo/.cc .lo/.cxx .lo/.S .lo/.lo
+USER_SOURCES2OBJSLO = .lo/.c .lo/.cc .lo/.cxx .lo/.cpp .lo/.S .lo/.lo
 
 #%.lo: %.c
 #      $(CC) -o $@ $(LCFLAGS) -c $<
@@ -579,7 +580,7 @@ c_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_USER
 
 cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_USER
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(CXXFLAGS) -DOMK_FOR_USER
 
 S_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(ASFLAGS) -DOMK_FOR_USER
@@ -689,7 +690,7 @@ USER_SOURCES += $$($(1)_SOURCES)
 
 $(2)/$(1)$(3): $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
-       $(Q) $$(if $$(filter %.cc,$$($(1)_SOURCES:%.cxx=%.cc)),$$(CXX),$$(CC)) \
+       $(Q) $$(if $$(filter %.cc,$$($(1)_SOURCES))$$(filter %.cxx,$$($(1)_SOURCES))$$(filter %.cpp,$$($(1)_SOURCES)),$$(CXX),$$(CC)) \
          $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(LDFLAGS) $$($(1)_LDFLAGS) -Wl,-rpath-link,$(USER_LIB_DIR) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $$@
        @echo "$(2)/$(1)$(3): \\" >$(USER_OBJS_DIR)/$(1).exe.d
        @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(USER_OBJS_DIR)/$(1).exe.map|tr '&' '\134'  >>$(USER_OBJS_DIR)/$(1).exe.d
@@ -994,6 +995,7 @@ define MODULE_kern_template
 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))
 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))
 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))
+$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cpp=%.o))
 $(1)_OBJS := $$(sort $$($(1)_OBJS))
 
 KERN_OBJS  += $$($(1)_OBJS)
@@ -1046,6 +1048,7 @@ define LIBRARY_kern_template
 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))
 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))
 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))
+$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cpp=%.o))
 $(1)_OBJS := $$(sort $$($(1)_OBJS))
 
 KERN_OBJS  += $$($(1)_OBJS)
@@ -1177,6 +1180,8 @@ $(foreach src,$(filter %.cc,$(USER_SOURCES)),$(eval $(call COMPILE_cc_o_template
 
 $(foreach src,$(filter %.cxx,$(USER_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.o),)))
 
+$(foreach src,$(filter %.cpp,$(USER_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cpp=%.o),)))
+
 $(foreach src,$(filter %.S,$(USER_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.o),)))
 
 $(foreach src,$(filter %.c,$(USER_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(src),$(src:%.c=%.o),)))
@@ -1196,6 +1201,8 @@ $(foreach src,$(filter %.cc,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_templat
 
 $(foreach src,$(filter %.cxx,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.lo),$(SOLIB_PICFLAGS))))
 
+$(foreach src,$(filter %.cpp,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cpp=%.lo),$(SOLIB_PICFLAGS))))
+
 $(foreach src,$(filter %.S,$(SOLIB_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.lo),$(SOLIB_PICFLAGS))))
 
 $(foreach src,$(filter %.c,$(SOLIB_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(src),$(src:%.c=%.lo),$(SOLIB_PICFLAGS))))
@@ -1226,6 +1233,8 @@ $(foreach src,$(filter %.cc,$(KERN_SOURCES)),$(eval $(call COMPILE_cc_o_kern_tem
 
 $(foreach src,$(filter %.cxx,$(KERN_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.o),)))
 
+$(foreach src,$(filter %.cpp,$(KERN_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cpp=%.o),)))
+
 $(foreach src,$(filter %.S,$(USER_SOURCES)),$(eval $(call COMPILE_S_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.o),)))
 endif
 
@@ -1274,7 +1283,7 @@ $(addprefix $(1)/,$(notdir $(addsuffix .stamp,$(2)))) : $(CONFIG_FILES)
                  >> "$(2).tmp"
        @echo "#endif /*$(4)*/" >> "$(2).tmp"
        @touch "$$@"
-       @if cmp --quiet "$(2).tmp" "$(2)" ; then rm "$(2).tmp"; \
+       @if cmp -s "$(2).tmp" "$(2)" ; then rm "$(2).tmp"; \
        else mv "$(2).tmp" "$(2)" ; \
        echo "Updated configuration $(2)" ; fi
 
index 9636241b26b261e0d8dd46c2b7a9a6ecc2d22fea..ecbd28621485767c3bad88ef8f2058f24054e2da 100755 (executable)
@@ -121,7 +121,7 @@ EOF
 #=====================================================================
 # test for 2.6.x and 3.x kernels
 
-    2.6 | 3.* )
+    2.6 | 3.* | 4.* )
 
        rm -f ${KERN_BUILD_DIR}/kernel.mk
        rm -rf ${KERN_TEST_DIR}
@@ -155,9 +155,9 @@ flags:
        @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>\$(obj)/flags
        @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>\$(obj)/flags
 ifdef KBUILD_CFLAGS
-       @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)\$(if \$(filter -I,\$(KBUILD_CPPFLAGS)),, \$(LINUXINCLUDE))" | sed 's#-I\(include\|arch\)#-I"\$(LINUXDIR)/\1"#g'>>\$(obj)/flags
-       @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
-       @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
+       @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)\$(if \$(filter -I,\$(KBUILD_CPPFLAGS)),, \$(LINUXINCLUDE))" | sed 's#-I\(\./\|include\|arch\)#-I"\$(LINUXDIR)/\1"#g'>>\$(obj)/flags
+       @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#-I\(\./\|include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
+       @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#-I\(\./\|include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
 else
        @echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>\$(obj)/flags
        @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
@@ -166,7 +166,7 @@ endif
 ifdef KBUILD_CFLAGS_MODULE
        @echo LINUX_CFLAGS_MODULE="\$(KBUILD_CFLAGS_MODULE)" >>\$(obj)/flags
        @echo LINUX_AFLAGS_MODULE="\$(KBUILD_AFLAGS_MODULE)" >>\$(obj)/flags
-       @echo LINUX_LDFLAGS_MODULE="\$(KBUILD_LDFLAGS_MODULE)" >>\$(obj)/flags
+       @echo LINUX_LDFLAGS_MODULE="\$(KBUILD_LDFLAGS_MODULE)" | sed 's# \./#"\$(OMK_LINUX_SRC)"/#g' >>\$(obj)/flags
 else
        @echo LINUX_CFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags
        @echo LINUX_AFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags