X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/91dfab84182937b62ef64cb12d8e4f89e6d5c3ec..7141c7431254da48f6c27129a623acfbdae67986:/lincan/src/i82527.c diff --git a/lincan/src/i82527.c b/lincan/src/i82527.c index 7a57f45..7b9602f 100644 --- a/lincan/src/i82527.c +++ b/lincan/src/i82527.c @@ -463,7 +463,7 @@ inline void i82527_irq_read_handler(struct chip_t *chip, struct msgobj_t *obj, } } -irqreturn_t i82527_irq_handler(int irq, void *dev_id, struct pt_regs *regs) +can_irqreturn_t i82527_irq_handler(int irq, void *dev_id, struct pt_regs *regs) { int id0=0, id1=0, id2=0, id3=0; @@ -483,7 +483,7 @@ irqreturn_t i82527_irq_handler(int irq, void *dev_id, struct pt_regs *regs) if (irq_register == 0x01) { DEBUGMSG("Status register: 0x%x\n",can_read_reg(chip, iSTAT)); - return IRQ_NONE; + return CAN_IRQ_NONE; } if (irq_register == 0x02) @@ -494,15 +494,15 @@ irqreturn_t i82527_irq_handler(int irq, void *dev_id, struct pt_regs *regs) obj=chip->msgobj[object]; if (canobj_read_reg(chip,obj,iMSGCFG) & MCFG_DIR) { - set_bit(OBJ_TX_REQUEST,&obj->flags); - while(!test_and_set_bit(OBJ_TX_LOCK,&obj->flags)){ - clear_bit(OBJ_TX_REQUEST,&obj->flags); + 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(canobj_read_reg(chip,obj,iMSGCTL1)&TXRQ_RES) i82527_irq_write_handler(chip, obj); - clear_bit(OBJ_TX_LOCK,&obj->flags); - if(!test_bit(OBJ_TX_REQUEST,&obj->flags)) break; + can_msgobj_clear_fl(obj,TX_LOCK); + if(!can_msgobj_test_fl(obj,TX_REQUEST)) break; } } else { @@ -536,7 +536,7 @@ irqreturn_t i82527_irq_handler(int irq, void *dev_id, struct pt_regs *regs) irq_register=i82527_seg_read_reg(chip, iIRQ); } - return IRQ_HANDLED; + return CAN_IRQ_HANDLED; } void i82527_irq_rtr_handler(struct chip_t *chip, struct msgobj_t *obj, @@ -562,26 +562,20 @@ void i82527_irq_rtr_handler(struct chip_t *chip, struct msgobj_t *obj, int i82527_wakeup_tx(struct chip_t *chip, struct msgobj_t *obj) { - /* dummy lock to prevent preemption fully portable way */ - can_spinlock_t dummy_lock; + can_preempt_disable(); - /* preempt_disable() */ - can_spin_lock_init(&dummy_lock); - can_spin_lock(&dummy_lock); - - set_bit(OBJ_TX_REQUEST,&obj->flags); - while(!test_and_set_bit(OBJ_TX_LOCK,&obj->flags)){ - clear_bit(OBJ_TX_REQUEST,&obj->flags); + 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(canobj_read_reg(chip,obj,iMSGCTL1)&TXRQ_RES) i82527_irq_write_handler(chip, obj); - clear_bit(OBJ_TX_LOCK,&obj->flags); - if(!test_bit(OBJ_TX_REQUEST,&obj->flags)) break; + can_msgobj_clear_fl(obj,TX_LOCK); + if(!can_msgobj_test_fl(obj,TX_REQUEST)) break; } - /* preempt_enable(); */ - can_spin_unlock(&dummy_lock); + can_preempt_enable(); return 0; }