if (r1) *r1 = sa_readl(dev, Mailbox1); if (r2) *r2 = sa_readl(dev, Mailbox2); if (r3) *r3 = sa_readl(dev, Mailbox3); if (r4) *r4 = sa_readl(dev, Mailbox4); 
static int sa_sync_cmd(struct aac_dev *dev, u32 command, u32 p1, u32 *ret){	unsigned long start; 	int ok;	/*	 *	Write the Command into Mailbox 0	 */	sa_writel(dev, Mailbox0, command);	/*	 *	Write the parameters into Mailboxes 1 - 4	 */	sa_writel(dev, Mailbox1, p1);	sa_writel(dev, Mailbox2, 0);	sa_writel(dev, Mailbox3, 0);	sa_writel(dev, Mailbox4, 0);	/*	 *	Clear the synch command doorbell to start on a clean slate.	 */	sa_writew(dev, DoorbellClrReg_p, DOORBELL_0);	/*	 *	Signal that there is a new synch command	 */	sa_writew(dev, DoorbellReg_s, DOORBELL_0);	ok = 0;	start = jiffies;	while(time_before(jiffies, start+30*HZ))	{		/*		 *	Delay 5uS so that the monitor gets access		 */		udelay(5);		/*		 *	Mon110 will set doorbell0 bit when it has 		 *	completed the command.		 */		if(sa_readw(dev, DoorbellReg_p) & DOORBELL_0)  {			ok = 1;			break;		}		set_current_state(TASK_UNINTERRUPTIBLE);		schedule_timeout(1);	}	if (ok != 1)		return -ETIMEDOUT;	/*	 *	Clear the synch command doorbell.	 */	sa_writew(dev, DoorbellClrReg_p, DOORBELL_0);	/*	 *	Pull the synch status from Mailbox 0.	 */	if (ret)		*ret = sa_readl(dev, Mailbox0);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7c00ffa314bf0fb0e23858bbebad33b48b6abbb9/sa.c/buggy/drivers/scsi/aacraid/sa.c