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 20enum avb_boot_state { 21 AVB_GREEN, 22 AVB_YELLOW, 23 AVB_ORANGE, 24 AVB_RED, 25}; 26 27struct 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 37struct mmc_part { 38 int dev_num; 39 struct mmc *mmc; 40 struct blk_desc *mmc_blk; 41 struct disk_partition info; 42}; 43 44enum mmc_io_type { 45 IO_READ, 46 IO_WRITE 47}; 48 49AvbOps *avb_ops_alloc(int boot_device); 50void avb_ops_free(AvbOps *ops); 51 52char *avb_set_state(AvbOps *ops, enum avb_boot_state boot_state); 53char *avb_set_enforce_verity(const char *cmdline); 54char *avb_set_ignore_corruption(const char *cmdline); 55 56char *append_cmd_line(char *cmdline_orig, char *cmdline_new); 57 58/** 59 * ============================================================================ 60 * I/O helper inline functions 61 * ============================================================================ 62 */ 63static 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 73static inline size_t get_sector_buf_size(void) 74{ 75 return (size_t)CONFIG_AVB_BUF_SIZE; 76} 77 78static inline void *get_sector_buf(void) 79{ 80 return map_sysmem(CONFIG_AVB_BUF_ADDR, CONFIG_AVB_BUF_SIZE); 81} 82 83static inline bool is_buf_unaligned(void *buffer) 84{ 85 return (bool)((uintptr_t)buffer % ALLOWED_BUF_ALIGN); 86} 87 88static 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 */ 102