X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/302f7b23bb1f40fd1c8f3010f6ff4d6a44ac566e..8a3b29f17483c98e116e6352176cd30b2c76019b:/lincan/src/devcommon.c diff --git a/lincan/src/devcommon.c b/lincan/src/devcommon.c index 2af0f86..bc4157d 100644 --- a/lincan/src/devcommon.c +++ b/lincan/src/devcommon.c @@ -36,7 +36,7 @@ void canqueue_wake_chip_worker(struct canque_ends_t *qends, struct canchip_t *ch /** * canqueue_notify_chip - notification callback handler for CAN chips ends of queues * @qends: pointer to the callback side ends structure - * @qedge: edge which invoked notification + * @qedge: edge which invoked notification * @what: notification type * * This function has to deal with more possible cases. It can be called from @@ -59,7 +59,10 @@ void canqueue_notify_chip(struct canque_ends_t *qends, struct canque_edge_t *qed case CANQUEUE_NOTIFY_PROC: #ifndef CAN_WITH_RTL /*wake_up(&qends->endinfo.chipinfo.daemonq);*/ - chip->chipspecops->wakeup_tx(chip, obj); + if(canque_fifo_test_fl(&qedge->fifo, READY)){ + if ((chip) && (chip->flags & CHIP_ATTACHED)) + chip->chipspecops->wakeup_tx(chip, obj); + } #else /*CAN_WITH_RTL*/ can_msgobj_set_fl(obj,TX_REQUEST); canqueue_wake_chip_worker(qends, chip, obj); @@ -81,7 +84,7 @@ void canqueue_notify_chip(struct canque_ends_t *qends, struct canque_edge_t *qed can_msgobj_set_fl(obj,FILTCH_REQUEST); canqueue_wake_chip_worker(qends, chip, obj); #endif /*CAN_WITH_RTL*/ - + break; } } @@ -98,7 +101,7 @@ int canqueue_ends_init_chip(struct canque_ends_t *qends, struct canchip_t *chip, int ret; ret=canqueue_ends_init_gen(qends); if(ret<0) return ret; - + qends->context=NULL; #ifndef CAN_WITH_RTL init_waitqueue_head(&qends->endinfo.chipinfo.daemonq); @@ -121,7 +124,7 @@ int canqueue_ends_init_chip(struct canque_ends_t *qends, struct canchip_t *chip, int canqueue_ends_done_chip(struct canque_ends_t *qends) { int delayed; - + /* Finish or kill all outgoing edges listed in inends */ delayed=canqueue_ends_kill_inlist(qends, 1); /* Kill all incoming edges listed in outends */