X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/a4c9ead4b64bd4de307f375c2ff313a7a07a06e0..95c031e101c74ae6472a7e538f3128f67a490082:/lincan/src/c_can_irq.c diff --git a/lincan/src/c_can_irq.c b/lincan/src/c_can_irq.c index 29a85a4..eb03ac8 100644 --- a/lincan/src/c_can_irq.c +++ b/lincan/src/c_can_irq.c @@ -23,11 +23,11 @@ union c_can_data // prototypes -inline void c_can_irq_read_handler( struct chip_t *pchip, int idxobj, u32 msgid ); +inline void c_can_irq_read_handler( struct canchip_t *pchip, int idxobj, u32 msgid ); -inline void c_can_irq_write_handler( struct chip_t *pchip, int idxobj); +inline void c_can_irq_write_handler( struct canchip_t *pchip, int idxobj); -void c_can_irq_rtr_handler( struct chip_t *pchip, int idxobj, u32 msgid ); +void c_can_irq_rtr_handler( struct canchip_t *pchip, int idxobj, u32 msgid ); u16 readMaskCM = IFXCM_ARB | IFXCM_CNTRL | IFXCM_CLRINTPND | IFXCM_TRND | IFXCM_DA | IFXCM_DB; @@ -41,7 +41,7 @@ u16 msgLstWriteMaskCM = IFXCM_CNTRL | IFXCM_WRRD; // Send a message from the output fifo ( if any ). // -inline void c_can_irq_write_handler( struct chip_t *pchip, int idxobj) +inline void c_can_irq_write_handler( struct canchip_t *pchip, int idxobj) { int cmd; struct msgobj_t *pmsgobj = pchip->msgobj[idxobj]; @@ -52,6 +52,9 @@ inline void c_can_irq_write_handler( struct chip_t *pchip, int idxobj) if(pmsgobj->tx_slot){ /* Do local transmitted message distribution if enabled */ if (processlocal){ + /* fill CAN message timestamp */ + can_filltimestamp(&pmsgobj->tx_slot->msg.timestamp); + pmsgobj->tx_slot->msg.flags |= MSG_LOCAL; canque_filter_msg2edges(pmsgobj->qends, &pmsgobj->tx_slot->msg); } @@ -100,7 +103,7 @@ inline void c_can_irq_write_handler( struct chip_t *pchip, int idxobj) // Message received form the line. Write it in the input fifo-> // -inline void c_can_irq_read_handler( struct chip_t *pchip, +inline void c_can_irq_read_handler( struct canchip_t *pchip, int idxobj, u32 msgid ) { int i=0; @@ -147,6 +150,9 @@ inline void c_can_irq_read_handler( struct chip_t *pchip, for ( i=0; i < pmsgobj->rx_msg.length; i++ ) DEBUGMSG(" data[%d] = 0x%.2x\n", i, pmsgobj->rx_msg.data[i]); + /* fill CAN message timestamp */ + can_filltimestamp(&pmsgobj->rx_msg.timestamp); + canque_filter_msg2edges(pmsgobj->qends, &pmsgobj->rx_msg); #ifdef CAN_WITH_STATISTICS @@ -178,7 +184,7 @@ inline void c_can_irq_read_handler( struct chip_t *pchip, // while } -void c_can_irq_sync_activities(struct chip_t *chip, struct msgobj_t *obj) +void c_can_irq_sync_activities(struct canchip_t *chip, struct msgobj_t *obj) { while(!can_msgobj_test_and_set_fl(obj,TX_LOCK)) { @@ -208,10 +214,9 @@ void c_can_irq_sync_activities(struct chip_t *chip, struct msgobj_t *obj) // c_can_irq_handler // -can_irqreturn_t c_can_irq_handler(int irq, void *dev_id, struct pt_regs *regs) +int c_can_irq_handler(int irq, struct canchip_t *chip) { struct rtr_id *rtr_search = hardware_p->rtr_queue; - struct chip_t *pchip = (struct chip_t *)dev_id; u16 chip_status; int id0=0, id1=0; u16 errcount = 0; @@ -234,7 +239,7 @@ can_irqreturn_t c_can_irq_handler(int irq, void *dev_id, struct pt_regs *regs) DEBUGMSG( "\n(c%d)IRQ handler: addr=%.8lx spurious interrupt\n", pchip->chip_idx, (long)( pchip->/*v*/chip_base_addr/* + CCSR*/)); - return CAN_IRQ_NONE; + return CANCHIP_IRQ_NONE; } DEBUGMSG( "\n(c%d)IRQ handler: addr=%.8lx irqreg=0x%.4x\n", @@ -470,14 +475,14 @@ can_irqreturn_t c_can_irq_handler(int irq, void *dev_id, struct pt_regs *regs) // Get irq status again irqreg = c_can_read_reg_w( pchip, CCINTR ); } - return CAN_IRQ_HANDLED; + return CANCHIP_IRQ_HANDLED; } /////////////////////////////////////////////////////////////////////////////// // c_can_irq_rtr_handler // -void c_can_irq_rtr_handler( struct chip_t *pchip, int idxobj, u32 msgid ) +void c_can_irq_rtr_handler( struct canchip_t *pchip, int idxobj, u32 msgid ) { short int i=0; struct rtr_id *prtr_search = hardware_p->rtr_queue;