+ obj->tx_retry_cnt=0;
+ }
+
+ return IRQ_HANDLED;
+}
+
+/**
+ * sja1000p_wakeup_tx: - wakeups TX processing
+ * @chip: pointer to chip state structure
+ * @obj: pointer to message object structure
+ *
+ * Return Value: negative value reports error.
+ * File: src/sja1000p.c
+ */
+int sja1000p_wakeup_tx(struct chip_t *chip, struct msgobj_t *obj)
+{
+ /* dummy lock to prevent preemption fully portable way */
+ spinlock_t dummy_lock;
+
+ /* 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);
+
+ if (can_read_reg(chip, SJASR) & SR_TBS){
+ obj->tx_retry_cnt=0;
+ sja1000p_irq_write_handler(chip, obj);
+ }
+
+ clear_bit(OBJ_TX_LOCK,&obj->flags);
+ if(!test_bit(OBJ_TX_REQUEST,&obj->flags)) break;
+ DEBUGMSG("TX looping in sja1000p_wakeup_tx\n");