view cp/nucleus/mch.c @ 650:6fca4100a886

include: change uint64_t LP64 definition to be unsigned long This matches what is normally used in the Unix world. Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Tue, 30 Jul 2019 14:56:02 -0400
parents ea5c081a7642
children
line wrap: on
line source

/*
 * (C) Copyright 2007-2019  Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
 *
 * This file is released under the GPLv2.  See the COPYING file for more
 * details.
 */

#include <interrupt.h>
#include <channel.h>
#include <sclp.h>

static void get_crw()
{
	struct crw crw;
	int ret;

	do {
		ret = store_crw(&crw);
		if (ret)
			break;

		sclp_msg("%08x:", *(u32*)&crw);
		sclp_msg("RSC: %x", crw.rsc);
		sclp_msg("ERC: %x", crw.erc);
		sclp_msg("ID:  %x", crw.id);

		if (!crw.c)
			break;
	} while(1);
}

void __mch_int_handler(void)
{
	sclp_msg("MCH INTERRUPT!");
	sclp_msg("%016lx: ", *(u64*)MCH_INT_CODE);
	if (MCH_INT_CODE->sd)
		sclp_msg("-> system damage");
	if (MCH_INT_CODE->pd)
		sclp_msg("-> instruction processing damage");
	if (MCH_INT_CODE->sr)
		sclp_msg("-> system recovery");
	if (MCH_INT_CODE->cd)
		sclp_msg("-> timing-facility damage");
	if (MCH_INT_CODE->ed)
		sclp_msg("-> external damage");
	if (MCH_INT_CODE->dg)
		sclp_msg("-> degradation");
	if (MCH_INT_CODE->w)
		sclp_msg("-> warning");
	if (MCH_INT_CODE->cp)
		sclp_msg("-> channel report pending");
	if (MCH_INT_CODE->sp)
		sclp_msg("-> service-processor damage");
	if (MCH_INT_CODE->ck)
		sclp_msg("-> channel-subsystem damage");

	if (MCH_INT_CODE->sd)
		BUG();

	if (MCH_INT_CODE->ck)
		BUG();

	if (MCH_INT_CODE->cp)
		get_crw();
}