Merge tag 'dm-pull-1apr20' of git://git.denx.de/u-boot-dm
[platform/kernel/u-boot.git] / include / avb_verify.h
1
2 /*
3  * (C) Copyright 2018, Linaro Limited
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #ifndef _AVB_VERIFY_H
9 #define _AVB_VERIFY_H
10
11 #include <../lib/libavb/libavb.h>
12 #include <mapmem.h>
13 #include <mmc.h>
14
15 #define AVB_MAX_ARGS                    1024
16 #define VERITY_TABLE_OPT_RESTART        "restart_on_corruption"
17 #define VERITY_TABLE_OPT_LOGGING        "ignore_corruption"
18 #define ALLOWED_BUF_ALIGN               8
19
20 enum avb_boot_state {
21         AVB_GREEN,
22         AVB_YELLOW,
23         AVB_ORANGE,
24         AVB_RED,
25 };
26
27 struct AvbOpsData {
28         struct AvbOps ops;
29         int mmc_dev;
30         enum avb_boot_state boot_state;
31 #ifdef CONFIG_OPTEE_TA_AVB
32         struct udevice *tee;
33         u32 session;
34 #endif
35 };
36
37 struct mmc_part {
38         int dev_num;
39         struct mmc *mmc;
40         struct blk_desc *mmc_blk;
41         disk_partition_t info;
42 };
43
44 enum mmc_io_type {
45         IO_READ,
46         IO_WRITE
47 };
48
49 AvbOps *avb_ops_alloc(int boot_device);
50 void avb_ops_free(AvbOps *ops);
51
52 char *avb_set_state(AvbOps *ops, enum avb_boot_state boot_state);
53 char *avb_set_enforce_verity(const char *cmdline);
54 char *avb_set_ignore_corruption(const char *cmdline);
55
56 char *append_cmd_line(char *cmdline_orig, char *cmdline_new);
57
58 /**
59  * ============================================================================
60  * I/O helper inline functions
61  * ============================================================================
62  */
63 static inline uint64_t calc_offset(struct mmc_part *part, int64_t offset)
64 {
65         u64 part_size = part->info.size * part->info.blksz;
66
67         if (offset < 0)
68                 return part_size + offset;
69
70         return offset;
71 }
72
73 static inline size_t get_sector_buf_size(void)
74 {
75         return (size_t)CONFIG_FASTBOOT_BUF_SIZE;
76 }
77
78 static inline void *get_sector_buf(void)
79 {
80         return map_sysmem(CONFIG_FASTBOOT_BUF_ADDR, CONFIG_FASTBOOT_BUF_SIZE);
81 }
82
83 static inline bool is_buf_unaligned(void *buffer)
84 {
85         return (bool)((uintptr_t)buffer % ALLOWED_BUF_ALIGN);
86 }
87
88 static inline int get_boot_device(AvbOps *ops)
89 {
90         struct AvbOpsData *data;
91
92         if (ops) {
93                 data = ops->user_data;
94                 if (data)
95                         return data->mmc_dev;
96         }
97
98         return -1;
99 }
100
101 #endif /* _AVB_VERIFY_H */