/* Pull incoming environmental events off the physical link to the system controller and put them in a temporary holding area in SAL. Schedule scdrv_event() to move them along to their ultimate destination.  */
static irqreturn_t scdrv_event_interrupt(int irq, void *subch_data)
/* Pull incoming environmental events off the physical link to the system controller and put them in a temporary holding area in SAL. Schedule scdrv_event() to move them along to their ultimate destination.  */
static irqreturn_t scdrv_event_interrupt(int irq, void *subch_data)
{
	struct subch_data_s *sd = subch_data;
	unsigned long flags;
	int status;
	spin_lock_irqsave(&sd->sd_rlock, flags);
	status = ia64_sn_irtr_intr(sd->sd_nasid, sd->sd_subch);
	if ((status > 0) && (status & SAL_IROUTER_INTR_RECV)) {
		tasklet_schedule(&sn_sysctl_event);
	}
	spin_unlock_irqrestore(&sd->sd_rlock, flags);
	return IRQ_HANDLED;
}