blob: 4b090e58d55280ae00dd5cd19235bb6a8577ff1e [file] [log] [blame]
#include "cheri.hh"
#define TEST_NAME "MMIO"
#include "tests.hh"
using namespace CHERI;
void check_permissions(Capability<volatile void> mmio, PermissionSet p)
{
PermissionSet mmioPermissions =
Capability{const_cast<void *>(mmio.get())}.permissions();
TEST(mmioPermissions == p,
"MMIO regions has permissions {}, expected {}",
mmioPermissions,
p);
}
void test_mmio()
{
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, false, false, false, false),
{Permission::Global});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, false, false, true, false),
{Permission::Global});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, false, false, false, true),
{Permission::Global});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, false, false, true, true),
{Permission::Global});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, false, true, false, false),
{Permission::Global, Permission::Store});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, false, true, true, false),
{Permission::Global, Permission::Store, Permission::LoadStoreCapability});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, false, true, false, true),
{Permission::Global, Permission::Store});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, false, true, true, true),
{Permission::Global, Permission::Store, Permission::LoadStoreCapability});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, true, false, false, false),
{Permission::Global, Permission::Load});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, true, false, true, false),
{Permission::Global, Permission::Load, Permission::LoadStoreCapability});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, true, false, false, true),
{Permission::Global, Permission::Load});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, true, false, true, true),
{Permission::Global,
Permission::Load,
Permission::LoadStoreCapability,
Permission::LoadMutable});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, true, true, false, false),
{Permission::Global, Permission::Load, Permission::Store});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, true, true, true, false),
{Permission::Global,
Permission::Load,
Permission::Store,
Permission::LoadStoreCapability});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, true, true, false, true),
{Permission::Global, Permission::Load, Permission::Store});
check_permissions(
MMIO_CAPABILITY_WITH_PERMISSIONS(Uart, uart, true, true, true, true),
{Permission::Global,
Permission::Load,
Permission::Store,
Permission::LoadStoreCapability,
Permission::LoadMutable});
}