#pragma once

#ifndef ROS_INC_TRAPFRAME_H
#error "Do not include include ros/arch/trapframe.h directly"
#endif

#include <ros/common.h>
#include <stdint.h>

struct hw_trapframe
{
  uintptr_t gpr[32];
  uintptr_t sr;
  uintptr_t epc;
  uintptr_t badvaddr;
  long cause;
};

struct sw_trapframe {
	/* TODO */
};

struct vm_trapframe {
	/* TODO */
};

#define GPR_RA 1
#define GPR_SP 14
#define GPR_A0 18
#define GPR_A1 19

#error "fix this #define"
/* this is an error flag, reflected back in faults.  similar to flags that say
 * if a PF was a write fault, read fault, or user fault. */
#define PF_VMR_BACKED (1 << 31)

typedef struct ancillary_state
{
	uint64_t fpr[32];
	uint32_t fsr;
} ancillary_state_t;

static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf)
{
	#warning "fix me"
	return 0;
	//return hw_tf->tf_rip;
}

static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf)
{
	/* do you even have frame pointers?  this is used for backtrace, but if you
	 * don't use FPs, we'll need to change up our parameters or something. */
	#warning "fix me"
	return 0;
	//return hw_tf->tf_rbp;
}

static inline uintptr_t get_hwtf_sp(struct hw_trapframe *hw_tf)
{
	/* do you even have frame pointers?  this is used for backtrace, but if you
	 * don't use FPs, we'll need to change up our parameters or something. */
	#warning "fix me"
	return 0;
	//return hw_tf->tf_rsp;
}

static inline uintptr_t get_swtf_pc(struct sw_trapframe *sw_tf)
{
	#warning "fix me"
	return 0;
	//return sw_tf->tf_rip;
}

static inline uintptr_t get_swtf_fp(struct sw_trapframe *sw_tf)
{
	#warning "fix me"
	return 0;
	//return sw_tf->tf_rbp;
}

static inline uintptr_t get_swtf_sp(struct sw_trapframe *sw_tf)
{
	#warning "fix me"
	return 0;
	//return sw_tf->tf_rsp;
}

static inline uintptr_t get_vmtf_pc(struct vm_trapframe *vm_tf)
{
	#warning "fix me"
	return 0;
}

static inline uintptr_t get_vmtf_fp(struct vm_trapframe *vm_tf)
{
	#warning "fix me"
	return 0;
}

static inline uintptr_t get_vmtf_sp(struct vm_trapframe *vm_tf)
{
	#warning "fix me"
	return 0;
}
