+
+ if (msgctl1 & NEWD_SET)
+ continue;
+
+ if (msgctl1 & MLST_SET) {
+ canobj_write_reg(chip,obj,(RMPD_UNC|TXRQ_UNC|MLST_RES|NEWD_UNC),iMSGCTL1);
+ CANMSG("i82527_irq_read_handler: object %d message lost\n",objnum);
+ }
+
+ return;
+
+ } while(1);
+}
+
+/*
+ if (msgcfg&MCFG_XTD) {
+ message_id =canobj_read_reg(chip,obj,iMSGID3);
+ message_id|=canobj_read_reg(chip,obj,iMSGID2)<<8;
+ message_id|=canobj_read_reg(chip,obj,iMSGID1)<<16;
+ message_id|=canobj_read_reg(chip,obj,iMSGID0)<<24;
+ message_id>>=3;
+ }
+ else {
+ message_id =canobj_read_reg(chip,obj,iMSGID1);
+ message_id|=canobj_read_reg(chip,obj,iMSGID0)<<8;
+ message_id>>=5;
+ }
+
+ 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;
+ }
+ 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
+ i82527_irq_read_handler(chip, obj, message_id);
+*/
+
+
+static inline
+void i82527_irq_update_filter(struct canchip_t *chip, struct msgobj_t *obj)
+{
+ struct canfilt_t filt;
+
+ if(canqueue_ends_filt_conjuction(obj->qends, &filt)) {
+ obj->rx_preconfig_id=filt.id;
+ canobj_write_reg(chip,obj,(MVAL_RES|TXIE_RES|RXIE_RES|INTPD_RES),iMSGCTL0);
+ if(obj->object == 15) {
+ i82527_message15_mask(chip,filt.id,filt.mask);
+ }
+ if (filt.flags&MSG_EXT)
+ can_msgobj_set_fl(obj,RX_MODE_EXT);
+ else
+ can_msgobj_clear_fl(obj,RX_MODE_EXT);
+
+ i82527_pre_read_config(chip, obj);
+
+ CANMSG("i82527_irq_update_filter: obj at 0x%08lx\n",obj->obj_base_addr);
+ }
+}
+
+
+void i82527_irq_sync_activities(struct canchip_t *chip, struct msgobj_t *obj)
+{
+ while(!can_msgobj_test_and_set_fl(obj,TX_LOCK)) {