void xor_waiton_eng(int chan) { int timeout = 0; if(!xor_channel[chan].chan_active) return; while(!(MV_REG_READ(XOR_CAUSE_REG) & XOR_CAUSE_DONE_MASK(chan))) { if(timeout > XOR_TIMEOUT) goto timeout; timeout++; } timeout = 0; while(mvXorStateGet(chan) != MV_IDLE) { if(timeout > XOR_TIMEOUT) goto timeout; timeout++; } /* Clear int */ MV_REG_WRITE(XOR_CAUSE_REG, ~(XOR_CAUSE_DONE_MASK(chan))); xor_channel[chan].chan_active = 0; timeout: if(timeout > XOR_TIMEOUT) { printk("ERR: XOR eng got timedout!!\n"); BUG(); } return; }
static inline int xorReady(void) { int timeout = 0; while (!(MV_REG_READ(XOR_CAUSE_REG(1)) & XOR_CAUSE_DONE_MASK(XOR_CHAN(0)))) { if (timeout > 0x100000) { mvOsPrintf("XOR timeout\n"); return 0; } timeout++; } /* Clear int */ MV_REG_WRITE(XOR_CAUSE_REG(1), ~(XOR_CAUSE_DONE_MASK(XOR_CHAN(0)))); return 1; }