blob: 75f88179d815199268a2df351726db3b577f0763 [file] [log] [blame]
Mate Toth-Pal83a45bd2023-09-01 11:17:19 +02001/*
2 * SPDX-License-Identifier: BSD-3-Clause
3 * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
4 */
5
6#ifndef TB_GRANULES_H
7#define TB_GRANULES_H
8
9#include "buffer.h"
10#include "granule.h"
11#include "granule_types.h"
Mate Toth-Pal83a45bd2023-09-01 11:17:19 +020012#include "host_defs.h"
13#include "host_utils.h"
14#include "platform_api.h"
Mate Toth-Pala18676e2023-10-27 17:05:01 +020015#include "sizes.h"
Mate Toth-Pal83a45bd2023-09-01 11:17:19 +020016
17/*
18 * The granule states and gpt state
19 */
20#define UNDELEGATED GRANULE_STATE_NS
21#define DELEGATED GRANULE_STATE_DELEGATED
22#define RD GRANULE_STATE_RD
23#define DATA GRANULE_STATE_DATA
24#define REC GRANULE_STATE_REC
25#define RTT GRANULE_STATE_RTT
26
27#define RMM_GRANULE_SIZE GRANULE_SIZE
28
29enum granule_gpt {
30 GPT_AAP,
31 GPT_NS,
32 GPT_REALM,
33 GPT_ROOT,
34 GPT_SECURE
35};
36
37struct SPEC_granule {
38 enum granule_gpt gpt;
39 enum granule_state state;
40};
41
42extern unsigned char granules_buffer[HOST_MEM_SIZE];
43
44/*
45 * Declare nondet_* functions.
46 * CBMC automatically returns nondet values based on the return types.
47 * However, enum is treated as integer hence the value might out of range.
48 */
49struct granule nondet_struct_granule(void);
50struct SPEC_granule nondet_struct_SPEC_granule(void);
51
52bool valid_granule_ptr(struct granule *p);
53struct granule init_granule(void);
54void init_granule_and_page(void);
55
56/*
57 * Pedicates
58 */
59bool AddrIsGranuleAligned(uint64_t addr);
60bool PaIsDelegable(uint64_t addr);
61struct SPEC_granule Granule(uint64_t addr);
62
63#endif /* !TB_GRANULES_H */