// Copyright Microsoft and CHERIoT Contributors.
// SPDX-License-Identifier: MIT

#pragma once
#include <assembly-helpers.h>
EXPORT_ASSEMBLY_OFFSET(TrustedStack, mepcc, 0 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, cra, 1 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, csp, 2 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, cgp, 3 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ctp, 4 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ct0, 5 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ct1, 6 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ct2, 7 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, cs0, 8 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, cs1, 9 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ca0, 10 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ca1, 11 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ca2, 12 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ca3, 13 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ca4, 14 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, ca5, 15 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, hazardPointers, 16 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, mstatus, 17 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, mcause, (17 * 8) + 4)
#ifdef CONFIG_MSHWM
EXPORT_ASSEMBLY_OFFSET(TrustedStack, mshwm, 18 * 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, mshwmb, (18 * 8) + 4)

// Size of everything up to this point
#	define TSTACK_REGFRAME_SZ (19 * 8)
// frameoffset and padding
#	define TSTACK_HEADER_SZ 16
#else
// Size of everything up to this point
#	define TSTACK_REGFRAME_SZ ((17 * 8) + (2 * 4))
// frameoffset and padding
#	define TSTACK_HEADER_SZ 8
#endif
// The basic trusted stack is the size of the save area, 8 bytes of state for
// unwinding information, and then a single trusted stack frame used for the
// unwind state of the initial thread. (8 * 3) is the size of TrustedStackFrame
// and will match the value below.
EXPORT_ASSEMBLY_SIZE(TrustedStack,
                     TSTACK_REGFRAME_SZ + TSTACK_HEADER_SZ + (8 * 3))
EXPORT_ASSEMBLY_OFFSET(TrustedStack,
                       frames,
                       TSTACK_REGFRAME_SZ + TSTACK_HEADER_SZ)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, frameoffset, TSTACK_REGFRAME_SZ)
EXPORT_ASSEMBLY_OFFSET(TrustedStack, threadID, TSTACK_REGFRAME_SZ + 2)

EXPORT_ASSEMBLY_OFFSET(TrustedStackFrame, csp, 0)
EXPORT_ASSEMBLY_OFFSET(TrustedStackFrame, calleeExportTable, 8)
EXPORT_ASSEMBLY_OFFSET(TrustedStackFrame, errorHandlerCount, 16)
// If you change this value, you must replace size_to_trusted_stack_frames in
// entry.S with something that divides by the new size.
EXPORT_ASSEMBLY_SIZE(TrustedStackFrame, (8 * 3))

#define TSTACKOFFSET_FIRSTFRAME                                                \
	(TrustedStack_offset_frameoffset + TSTACK_HEADER_SZ)
