if (complete != 1) { 
if (complete == 1) { printk( KERN_WARNING "cciss cciss%d: SendCmd Timeout out, " "No command list address returned!\n", ctlr); status = IO_ERROR; done = 1; break; }  /* This will need to change for direct lookup completions */ 
static int sendcmd(	__u8	cmd,	int	ctlr,	void	*buff,	size_t	size,	unsigned int use_unit_num, /* 0: address the controller,				      1: address logical volume log_unit, 				      2: periph device address is scsi3addr */	unsigned int log_unit,	__u8	page_code,	unsigned char *scsi3addr,	int cmd_type){	CommandList_struct *c;	int i;	unsigned long complete;	ctlr_info_t *info_p= hba[ctlr];	u64bit buff_dma_handle;	int status;	if ((c = cmd_alloc(info_p, 1)) == NULL) {		printk(KERN_WARNING "cciss: unable to get memory");		return(IO_ERROR);	}	status = fill_cmd(c, cmd, ctlr, buff, size, use_unit_num,		log_unit, page_code, scsi3addr, cmd_type);	if (status != IO_OK) {		cmd_free(info_p, c, 1);		return status;	}resend_cmd1:	/*         * Disable interrupt         */#ifdef CCISS_DEBUG	printk(KERN_DEBUG "cciss: turning intr off\n");#endif /* CCISS_DEBUG */         info_p->access.set_intr_mask(info_p, CCISS_INTR_OFF);		/* Make sure there is room in the command FIFO */        /* Actually it should be completely empty at this time. */        for (i = 200000; i > 0; i--) 	{		/* if fifo isn't full go */                if (!(info_p->access.fifo_full(info_p))) 		{			                        break;                }                udelay(10);                printk(KERN_WARNING "cciss cciss%d: SendCmd FIFO full,"                        " waiting!\n", ctlr);        }        /*         * Send the cmd         */        info_p->access.submit_command(info_p, c);        complete = pollcomplete(ctlr);#ifdef CCISS_DEBUG	printk(KERN_DEBUG "cciss: command completed\n");#endif /* CCISS_DEBUG */	if (complete != 1) {		if ( (complete & CISS_ERROR_BIT)		     && (complete & ~CISS_ERROR_BIT) == c->busaddr)		     {			/* if data overrun or underun on Report command 				ignore it 			*/			if (((c->Request.CDB[0] == CISS_REPORT_LOG) ||			     (c->Request.CDB[0] == CISS_REPORT_PHYS) ||			     (c->Request.CDB[0] == CISS_INQUIRY)) &&				((c->err_info->CommandStatus == 					CMD_DATA_OVERRUN) || 				 (c->err_info->CommandStatus == 					CMD_DATA_UNDERRUN)			 	))			{				complete = c->busaddr;			} else {				if (c->err_info->CommandStatus ==						CMD_UNSOLICITED_ABORT) {					printk(KERN_WARNING "cciss%d: "						"unsolicited abort %p\n",						ctlr, c);					if (c->retry_count < MAX_CMD_RETRIES) {						printk(KERN_WARNING						   "cciss%d: retrying %p\n",						   ctlr, c);						c->retry_count++;						/* erase the old error */						/* information */						memset(c->err_info, 0,						   sizeof(ErrorInfo_struct));						goto resend_cmd1;					} else {						printk(KERN_WARNING						   "cciss%d: retried %p too "						   "many times\n", ctlr, c);						status = IO_ERROR;						goto cleanup1;					}				}				printk(KERN_WARNING "ciss ciss%d: sendcmd"				" Error %x \n", ctlr, 					c->err_info->CommandStatus); 				printk(KERN_WARNING "ciss ciss%d: sendcmd"				" offensive info\n"				"  size %x\n   num %x   value %x\n", ctlr,				  c->err_info->MoreErrInfo.Invalid_Cmd.offense_size,				  c->err_info->MoreErrInfo.Invalid_Cmd.offense_num,				  c->err_info->MoreErrInfo.Invalid_Cmd.offense_value);				status = IO_ERROR;				goto cleanup1;			}		}                if (complete != c->busaddr) {                        printk( KERN_WARNING "cciss cciss%d: SendCmd "                      "Invalid command list address returned! (%lx)\n",                                ctlr, complete);			status = IO_ERROR;			goto cleanup1;                }        } else {                printk( KERN_WARNING                        "cciss cciss%d: SendCmd Timeout out, "                        "No command list address returned!\n",                        ctlr);		status = IO_ERROR;        }		cleanup1:		/* unlock the data buffer from DMA */	buff_dma_handle.val32.lower = c->SG[0].Addr.lower;	buff_dma_handle.val32.upper = c->SG[0].Addr.upper;	pci_unmap_single(info_p->pdev, (dma_addr_t) buff_dma_handle.val,				c->SG[0].Len, PCI_DMA_BIDIRECTIONAL);	cmd_free(info_p, c, 1);	return (status);} 
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/3da8b713da723e78a03f0404beedf3cc6f4f860b/cciss.c/clean/drivers/block/cciss.c