if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) 
if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) { 
mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply){	int freereq = 1;	u8 func;	dprintk((MYIOC_s_INFO_FMT "mpt_base_reply() called\n", ioc->name));	if ((mf == NULL) ||	    (mf >= MPT_INDEX_2_MFPTR(ioc, ioc->req_depth))) {		printk(MYIOC_s_ERR_FMT "NULL or BAD request frame ptr! (=%p)\n",				ioc->name, (void *)mf);		return 1;	}	if (reply == NULL) {		dprintk((MYIOC_s_ERR_FMT "Unexpected NULL Event (turbo?) reply!\n",				ioc->name));		return 1;	}	if (!(reply->u.hdr.MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY)) {		dmfprintk((KERN_INFO MYNAM ": Original request frame (@%p) header\n", mf));		DBG_DUMP_REQUEST_FRAME_HDR(mf)	}	func = reply->u.hdr.Function;	dprintk((MYIOC_s_INFO_FMT "mpt_base_reply, Function=%02Xh\n",			ioc->name, func));	if (func == MPI_FUNCTION_EVENT_NOTIFICATION) {		EventNotificationReply_t *pEvReply = (EventNotificationReply_t *) reply;		int evHandlers = 0;		int results;		results = ProcessEventNotification(ioc, pEvReply, &evHandlers);		if (results != evHandlers) {			/* CHECKME! Any special handling needed here? */			devtprintk((MYIOC_s_WARN_FMT "Called %d event handlers, sum results = %d\n",					ioc->name, evHandlers, results));		}		/*		 *	Hmmm...  It seems that EventNotificationReply is an exception		 *	to the rule of one reply per request.		 */		if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY)			freereq = 0;#ifdef CONFIG_PROC_FS//		LogEvent(ioc, pEvReply);#endif	} else if (func == MPI_FUNCTION_EVENT_ACK) {		dprintk((MYIOC_s_INFO_FMT "mpt_base_reply, EventAck reply received\n",				ioc->name));	} else if (func == MPI_FUNCTION_CONFIG ||		   func == MPI_FUNCTION_TOOLBOX) {		CONFIGPARMS *pCfg;		unsigned long flags;		dcprintk((MYIOC_s_INFO_FMT "config_complete (mf=%p,mr=%p)\n",				ioc->name, mf, reply));		pCfg = * ((CONFIGPARMS **)((u8 *) mf + ioc->req_sz - sizeof(void *)));		if (pCfg) {			/* disable timer and remove from linked list */			del_timer(&pCfg->timer);			spin_lock_irqsave(&ioc->FreeQlock, flags);			list_del(&pCfg->linkage);			spin_unlock_irqrestore(&ioc->FreeQlock, flags);			/*			 *	If IOC Status is SUCCESS, save the header			 *	and set the status code to GOOD.			 */			pCfg->status = MPT_CONFIG_ERROR;			if (reply) {				ConfigReply_t	*pReply = (ConfigReply_t *)reply;				u16		 status;				status = le16_to_cpu(pReply->IOCStatus) & MPI_IOCSTATUS_MASK;				dcprintk((KERN_NOTICE "  IOCStatus=%04xh, IOCLogInfo=%08xh\n",				     status, le32_to_cpu(pReply->IOCLogInfo)));				pCfg->status = status;				if (status == MPI_IOCSTATUS_SUCCESS) {					if ((pReply->Header.PageType &					    MPI_CONFIG_PAGETYPE_MASK) ==					    MPI_CONFIG_PAGETYPE_EXTENDED) {						pCfg->cfghdr.ehdr->ExtPageLength =						    le16_to_cpu(pReply->ExtPageLength);						pCfg->cfghdr.ehdr->ExtPageType =						    pReply->ExtPageType;					}					pCfg->cfghdr.hdr->PageVersion = pReply->Header.PageVersion;					/* If this is a regular header, save PageLength. */					/* LMP Do this better so not using a reserved field! */					pCfg->cfghdr.hdr->PageLength = pReply->Header.PageLength;					pCfg->cfghdr.hdr->PageNumber = pReply->Header.PageNumber;					pCfg->cfghdr.hdr->PageType = pReply->Header.PageType;				}			}			/*			 *	Wake up the original calling thread			 */			pCfg->wait_done = 1;			wake_up(&mpt_waitq);		}	} else {		printk(MYIOC_s_ERR_FMT "Unexpected msg function (=%02Xh) reply received!\n",				ioc->name, func);	}	/*	 *	Conditionally tell caller to free the original	 *	EventNotification/EventAck/unexpected request frame!	 */	return freereq;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/c6678e0cfb41b029c3600c54b5bb65954de1230a/mptbase.c/clean/drivers/message/fusion/mptbase.c