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 <mmc.h> 13 14#define AVB_MAX_ARGS 1024 15#define VERITY_TABLE_OPT_RESTART "restart_on_corruption" 16#define VERITY_TABLE_OPT_LOGGING "ignore_corruption" 17#define ALLOWED_BUF_ALIGN 8 18 19enum avb_boot_state { 20 AVB_GREEN, 21 AVB_YELLOW, 22 AVB_ORANGE, 23 AVB_RED, 24}; 25 26struct AvbOpsData { 27 struct AvbOps ops; 28 int mmc_dev; 29 enum avb_boot_state boot_state; 30}; 31 32struct mmc_part { 33 int dev_num; 34 struct mmc *mmc; 35 struct blk_desc *mmc_blk; 36 disk_partition_t info; 37}; 38 39enum mmc_io_type { 40 IO_READ, 41 IO_WRITE 42}; 43 44AvbOps *avb_ops_alloc(int boot_device); 45void avb_ops_free(AvbOps *ops); 46 47char *avb_set_state(AvbOps *ops, enum avb_boot_state boot_state); 48char *avb_set_enforce_verity(const char *cmdline); 49char *avb_set_ignore_corruption(const char *cmdline); 50 51char *append_cmd_line(char *cmdline_orig, char *cmdline_new); 52 53/** 54 * ============================================================================ 55 * I/O helper inline functions 56 * ============================================================================ 57 */ 58static inline uint64_t calc_offset(struct mmc_part *part, int64_t offset) 59{ 60 u64 part_size = part->info.size * part->info.blksz; 61 62 if (offset < 0) 63 return part_size + offset; 64 65 return offset; 66} 67 68static inline size_t get_sector_buf_size(void) 69{ 70 return (size_t)CONFIG_FASTBOOT_BUF_SIZE; 71} 72 73static inline void *get_sector_buf(void) 74{ 75 return (void *)CONFIG_FASTBOOT_BUF_ADDR; 76} 77 78static inline bool is_buf_unaligned(void *buffer) 79{ 80 return (bool)((uintptr_t)buffer % ALLOWED_BUF_ALIGN); 81} 82 83static inline int get_boot_device(AvbOps *ops) 84{ 85 struct AvbOpsData *data; 86 87 if (ops) { 88 data = ops->user_data; 89 if (data) 90 return data->mmc_dev; 91 } 92 93 return -1; 94} 95 96#endif /* _AVB_VERIFY_H */ 97