/*
 * Copyright (c) 2019 Intel Corporation
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/kernel.h>
#include <ksched.h>
#include <zephyr/kernel_structs.h>
#include <kernel_internal.h>
#include <zephyr/logging/log.h>
LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);

/* NMI handlers should override weak implementation
 * return true if NMI is handled, false otherwise
 */
__weak bool z_x86_do_kernel_nmi(const z_arch_esf_t *esf)
{
	return false;
}

void z_x86_exception(z_arch_esf_t *esf)
{
	switch (esf->vector) {
	case Z_X86_OOPS_VECTOR:
		z_x86_do_kernel_oops(esf);
		break;
	case IV_PAGE_FAULT:
		z_x86_page_fault_handler(esf);
		break;
	case IV_NON_MASKABLE_INTERRUPT:
		if (!z_x86_do_kernel_nmi(esf)) {
			z_x86_unhandled_cpu_exception(esf->vector, esf);
			CODE_UNREACHABLE;
		}
		break;
	default:
		z_x86_unhandled_cpu_exception(esf->vector, esf);
		CODE_UNREACHABLE;
	}
}

#ifdef CONFIG_USERSPACE
void arch_syscall_oops(void *ssf_ptr)
{
	struct x86_ssf *ssf = ssf_ptr;

	LOG_ERR("Bad system call from RIP 0x%lx", ssf->rip);

	z_x86_fatal_error(K_ERR_KERNEL_OOPS, NULL);
}
#endif /* CONFIG_USERSPACE */
