devtprintk((MYIOC_s_WARN_FMT "EventAck required\n",ioc->name)); 
ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply, int *evHandlers){	u16 evDataLen;	u32 evData0 = 0;//	u32 evCtx;	int ii;	int r = 0;	int handlers = 0;	char *evStr;	u8 event;	/*	 *  Do platform normalization of values	 */	event = le32_to_cpu(pEventReply->Event) & 0xFF;//	evCtx = le32_to_cpu(pEventReply->EventContext);	evDataLen = le16_to_cpu(pEventReply->EventDataLength);	if (evDataLen) {		evData0 = le32_to_cpu(pEventReply->Data[0]);	}	evStr = EventDescriptionStr(event, evData0);	devtprintk((MYIOC_s_INFO_FMT "MPT event (%s=%02Xh) detected!\n",			ioc->name,			evStr,			event));#if defined(MPT_DEBUG) || defined(MPT_DEBUG_EVENTS)	printk(KERN_INFO MYNAM ": Event data:\n" KERN_INFO);	for (ii = 0; ii < evDataLen; ii++)		printk(" %08x", le32_to_cpu(pEventReply->Data[ii]));	printk("\n");#endif	/*	 *  Do general / base driver event processing	 */	switch(event) {	case MPI_EVENT_NONE:			/* 00 */	case MPI_EVENT_LOG_DATA:		/* 01 */	case MPI_EVENT_STATE_CHANGE:		/* 02 */	case MPI_EVENT_UNIT_ATTENTION:		/* 03 */	case MPI_EVENT_IOC_BUS_RESET:		/* 04 */	case MPI_EVENT_EXT_BUS_RESET:		/* 05 */	case MPI_EVENT_RESCAN:			/* 06 */	case MPI_EVENT_LINK_STATUS_CHANGE:	/* 07 */	case MPI_EVENT_LOOP_STATE_CHANGE:	/* 08 */	case MPI_EVENT_LOGOUT:			/* 09 */	case MPI_EVENT_INTEGRATED_RAID:		/* 0B */	case MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE:	/* 0C */	default:		break;	case MPI_EVENT_EVENT_CHANGE:		/* 0A */		if (evDataLen) {			u8 evState = evData0 & 0xFF;			/* CHECKME! What if evState unexpectedly says OFF (0)? */			/* Update EventState field in cached IocFacts */			if (ioc->facts.Function) {				ioc->facts.EventState = evState;			}		}		break;	}	/*	 * Should this event be logged? Events are written sequentially.	 * When buffer is full, start again at the top.	 */	if (ioc->events && (ioc->eventTypes & ( 1 << event))) {		int idx;		idx = ioc->eventContext % ioc->eventLogSize;		ioc->events[idx].event = event;		ioc->events[idx].eventContext = ioc->eventContext;		for (ii = 0; ii < 2; ii++) {			if (ii < evDataLen)				ioc->events[idx].data[ii] = le32_to_cpu(pEventReply->Data[ii]);			else				ioc->events[idx].data[ii] =  0;		}		ioc->eventContext++;	}	/*	 *  Call each currently registered protocol event handler.	 */	for (ii=MPT_MAX_PROTOCOL_DRIVERS-1; ii; ii--) {		if (MptEvHandlers[ii]) {			devtprintk((MYIOC_s_INFO_FMT "Routing Event to event handler #%d\n",					ioc->name, ii));			r += (*(MptEvHandlers[ii]))(ioc, pEventReply);			handlers++;		}	}	/* FIXME?  Examine results here? */	/*	 *  If needed, send (a single) EventAck.	 */	if (pEventReply->AckRequired == MPI_EVENT_NOTIFICATION_ACK_REQUIRED) {		if ((ii = SendEventAck(ioc, pEventReply)) != 0) {			devtprintk((MYIOC_s_WARN_FMT "SendEventAck returned %d\n",					ioc->name, ii));		}	}	*evHandlers = handlers;	return r;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/c6678e0cfb41b029c3600c54b5bb65954de1230a/mptbase.c/clean/drivers/message/fusion/mptbase.c