/*
 * Copyright 2017, Data61
 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
 * ABN 41 687 119 230.
 *
 * This software may be distributed and modified according to the terms of
 * the GNU General Public License version 2. Note that NO WARRANTY is provided.
 * See "LICENSE_GPLv2.txt" for details.
 *
 * @TAG(DATA61_GPL)
 */

#pragma once

#include <autoconf.h>
#include <sel4vmm/gen_config.h>
#include "vmm/vmm.h"

#ifndef COLOUR
#define COLOUR "\033[;1;%dm"
#define COLOUR_R "\033[;1;31m"
#define COLOUR_G "\033[;1;32m"
#define COLOUR_Y "\033[;1;33m"
#define COLOUR_B "\033[;1;34m"
#define COLOUR_M "\033[;1;35m"
#define COLOUR_C "\033[;1;36m"
#define COLOUR_RESET "\033[0m"
#endif

#ifdef CONFIG_LIB_VMM_DEBUG

#define DPRINTF(lvl, ...) \
        do{ \
            if(lvl <= 0 || lvl < CONFIG_LIB_VMM_DEBUG_LEVEL){ \
                printf("%s:%d | ", __func__, __LINE__); \
                printf(__VA_ARGS__); \
            } \
        }while(0)

#define drun(lvl, cmd) \
        do{ \
            if(lvl < LIB_VMM_DEBUG_LEVEL){ \
                cmd; \
            } \
        }while(0)

#else /* CONFIG_LIB_VMM_DEBUG */

#define DPRINTF(lvl, ...) do{ /* nothing */ }while(0)
#define drun() do{ /* nothing */ }while(0)

#endif /* CONFIG_LIB_VMM_DEBUG */

#ifndef panic
#define panic(msg) \
        do{ \
            printf(COLOUR_R "!!!!!!!!!!!! LIBVMM PANIC !!!!!!!!!!!!! \n"\
                   "    @ %s: %d | %s\n" COLOUR_RESET, __func__, __LINE__, msg);\
            assert(!msg);\
            while(1);\
        }while(0)
#endif

void vmm_print_guest_context(int, vmm_vcpu_t *);

