* The CAN driver uses this pointer to store relationship of interrupt
* to chip state structure - @struct canchip_t
* @regs: system dependent value pointing to registers stored in exception frame
* The CAN driver uses this pointer to store relationship of interrupt
* to chip state structure - @struct canchip_t
* @regs: system dependent value pointing to registers stored in exception frame
* Interrupt handler is activated when state of CAN controller chip changes,
* there is message to be read or there is more space for new messages or
* error occurs. The receive events results in reading of the message from
* Interrupt handler is activated when state of CAN controller chip changes,
* there is message to be read or there is more space for new messages or
* error occurs. The receive events results in reading of the message from
while(!can_msgobj_test_and_set_fl(obj,TX_LOCK)){
can_msgobj_clear_fl(obj,TX_REQUEST);
while(!can_msgobj_test_and_set_fl(obj,TX_LOCK)){
can_msgobj_clear_fl(obj,TX_REQUEST);
cmd=canque_test_outslot(obj->qends, &obj->tx_qedge, &obj->tx_slot);
if(cmd>=0) {
mod_timer(&obj->tx_timeout,
jiffies+virtual_bus_latency(obj));
DEBUGMSG("virtual: scheduled delivery\n");
cmd=canque_test_outslot(obj->qends, &obj->tx_qedge, &obj->tx_slot);
if(cmd>=0) {
mod_timer(&obj->tx_timeout,
jiffies+virtual_bus_latency(obj));
DEBUGMSG("virtual: scheduled delivery\n");
if(!can_msgobj_test_fl(obj,TX_REQUEST)) break;
DEBUGMSG("TX looping in virtual_schedule_next\n");
}
if(!can_msgobj_test_fl(obj,TX_REQUEST)) break;
DEBUGMSG("TX looping in virtual_schedule_next\n");
}
int virtual_wakeup_tx(struct canchip_t *chip, struct msgobj_t *obj)
{
/* can_msgobj_set_fl(obj,TX_REQUEST); */
int virtual_wakeup_tx(struct canchip_t *chip, struct msgobj_t *obj)
{
/* can_msgobj_set_fl(obj,TX_REQUEST); */
canque_filter_msg2edges(obj->qends, &slot->msg);
DEBUGMSG("virtual: direct delivery\n");
}
canque_filter_msg2edges(obj->qends, &slot->msg);
DEBUGMSG("virtual: direct delivery\n");
}