uboot/include/avb_verify.h
<<
>>
Prefs
   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