]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/i82527.c
LinCAN driver structured comments updated.
[lincan.git] / lincan / src / i82527.c
index cbd7870f74b2ecc746e5129fa325279a14ce5010..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 { 
@@ -520,14 +520,14 @@ irqreturn_t i82527_irq_handler(int irq, void *dev_id, struct pt_regs *regs)
                                message_id=(id0|id1)>>5;
                        }
 
-                       spin_lock(&hardware_p->rtr_lock);
+                       can_spin_lock(&hardware_p->rtr_lock);
                        rtr_search=hardware_p->rtr_queue;
                        while (rtr_search != NULL) {
                                if (rtr_search->id == message_id)
                                        break;
                                rtr_search=rtr_search->next;
                        }
-                       spin_unlock(&hardware_p->rtr_lock);
+                       can_spin_unlock(&hardware_p->rtr_lock);
                        if ((rtr_search!=NULL) && (rtr_search->id==message_id))
                                i82527_irq_rtr_handler(chip, obj, rtr_search, message_id);
                        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,
@@ -547,14 +547,14 @@ void i82527_irq_rtr_handler(struct chip_t *chip, struct msgobj_t *obj,
        canobj_write_reg(chip,obj,(MVAL_RES|TXIE_RES|RXIE_RES|INTPD_RES),iMSGCTL0);
        canobj_write_reg(chip,obj,(RMPD_RES|TXRQ_RES|MLST_RES|NEWD_RES),iMSGCTL1);
        
-       spin_lock(&hardware_p->rtr_lock);
+       can_spin_lock(&hardware_p->rtr_lock);
 
        rtr_search->rtr_message->id=message_id;
        rtr_search->rtr_message->length=(canobj_read_reg(chip,obj,iMSGCFG) & 0xf0)>>4;
        for (i=0; i<rtr_search->rtr_message->length; i++)
                rtr_search->rtr_message->data[i]=canobj_read_reg(chip,obj,iMSGDAT0+i);
        
-       spin_unlock(&hardware_p->rtr_lock);
+       can_spin_unlock(&hardware_p->rtr_lock);
 
        if (waitqueue_active(&rtr_search->rtr_wq))
                wake_up(&rtr_search->rtr_wq);
@@ -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 */
-       spinlock_t dummy_lock;
+       can_preempt_disable();
        
-       /*  preempt_disable() */
-       spin_lock_init(&dummy_lock);
-       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(); */
-       spin_unlock(&dummy_lock);
+       can_preempt_enable();
        return 0;
 }