-/* int irq_register, status, error_code;
- struct msgobj_t *obj=chip->msgobj[0];
- int loop_cnt=CHIP_MAX_IRQLOOP;
-
- irq_register=can_read_reg(chip,SJAIR);
-// DEBUGMSG("sja1000_irq_handler: SJAIR:%02x\n",irq_register);
-// DEBUGMSG("sja1000_irq_handler: SJASR:%02x\n",
-// can_read_reg(chip,SJASR));
-
- if ((irq_register & (sjaIR_BEI|sjaIR_EPI|sjaIR_DOI|sjaIR_EI|sjaIR_TI|sjaIR_RI)) == 0)
- return CANCHIP_IRQ_NONE;
-
- if(!(chip->flags&CHIP_CONFIGURED)) {
- CANMSG("usbcan_irq_handler: called for non-configured device, irq_register 0x%02x\n", irq_register);
- return CANCHIP_IRQ_NONE;
- }
-
- status=can_read_reg(chip,SJASR);
-
- do {
-
- if(!loop_cnt--) {
- CANMSG("usbcan_irq_handler IRQ %d stuck\n",irq);
- return CANCHIP_IRQ_STUCK;
- }
-
- // (irq_register & sjaIR_TI)
- // old variant using SJAIR, collides with intended use with irq_accept
- if (((status & sjaSR_TBS) && can_msgobj_test_fl(obj,TX_PENDING))||
- (can_msgobj_test_fl(obj,TX_REQUEST))) {
- DEBUGMSG("sja1000_irq_handler: TI or TX_PENDING and TBS\n");
- obj->ret = 0;
- can_msgobj_set_fl(obj,TX_REQUEST);
- while(!can_msgobj_test_and_set_fl(obj,TX_LOCK)){
- can_msgobj_clear_fl(obj,TX_REQUEST);
-
- if (can_read_reg(chip, SJASR) & sjaSR_TBS)
- usbcan_irq_write_handler(chip, obj);
-
- can_msgobj_clear_fl(obj,TX_LOCK);
- if(!can_msgobj_test_fl(obj,TX_REQUEST)) break;
- DEBUGMSG("TX looping in sja1000_irq_handler\n");
- }
- }
- if ((irq_register & (sjaIR_EI|sjaIR_BEI|sjaIR_EPI|sjaIR_DOI)) != 0) {
- // Some error happened
- error_code=can_read_reg(chip,SJAECC);
- sja1000_report_error(chip, status, irq_register, error_code);
-// FIXME: chip should be brought to usable state. Transmission cancelled if in progress.
-// Reset flag set to 0 if chip is already off the bus. Full state report
- obj->ret=-1;
-
- if(error_code == 0xd9) {
- obj->ret= -ENXIO;
- // no such device or address - no ACK received
- }
- if(obj->tx_retry_cnt++>MAX_RETR) {
- can_write_reg(chip, sjaCMR_AT, SJACMR); // cancel any transmition
- obj->tx_retry_cnt = 0;
- }
- if(status&sjaSR_BS) {
- CANMSG("bus-off, resetting usbcan\n");
- can_write_reg(chip, 0, SJAMOD);
- }
-
- if(obj->tx_slot){
- canque_notify_inends(obj->tx_qedge, CANQUEUE_NOTIFY_ERRTX_BUS);
- //canque_free_outslot(obj->qends, obj->tx_qedge, obj->tx_slot);
- //obj->tx_slot=NULL;
- }
-
- } else {
- if(sja1000_report_error_limit_counter)
- sja1000_report_error_limit_counter--;
- obj->tx_retry_cnt=0;
- }
-
- irq_register=can_read_reg(chip,SJAIR);
-
- status=can_read_reg(chip,SJASR);
-
- if(((status & sjaSR_TBS) && can_msgobj_test_fl(obj,TX_PENDING)) ||
- (irq_register & sjaIR_TI))
- can_msgobj_set_fl(obj,TX_REQUEST);
-
- } while((irq_register & (sjaIR_BEI|sjaIR_EPI|sjaIR_DOI|sjaIR_EI|sjaIR_RI)) ||
- (can_msgobj_test_fl(obj,TX_REQUEST) && !can_msgobj_test_fl(obj,TX_LOCK)) ||
- (status & sjaSR_RBS));
-*/