]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/i82527.c
Corrected typo in Kconfig (OC_LINCAN_CARD_bfad -> OC_LINCAN_CARD_bfadcan)
[lincan.git] / lincan / src / i82527.c
index 7a57f45c7e7601753cd0b11b35e7a5db5f01ebde..7b9602f90db47546c0eeb867259b50705ae06db8 100644 (file)
@@ -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;
 }