xref: /openbmc/u-boot/include/avb_verify.h (revision bbddbef998b9bb37917c9340ac5280d06d224703)
13af30e44SIgor Opaniuk 
23af30e44SIgor Opaniuk /*
33af30e44SIgor Opaniuk  * (C) Copyright 2018, Linaro Limited
43af30e44SIgor Opaniuk  *
53af30e44SIgor Opaniuk  * SPDX-License-Identifier:	GPL-2.0+
63af30e44SIgor Opaniuk  */
73af30e44SIgor Opaniuk 
83af30e44SIgor Opaniuk #ifndef	_AVB_VERIFY_H
93af30e44SIgor Opaniuk #define _AVB_VERIFY_H
103af30e44SIgor Opaniuk 
113af30e44SIgor Opaniuk #include <../lib/libavb/libavb.h>
12*bbddbef9SJens Wiklander #include <mapmem.h>
133af30e44SIgor Opaniuk #include <mmc.h>
143af30e44SIgor Opaniuk 
155d4fd877SIgor Opaniuk #define AVB_MAX_ARGS			1024
165d4fd877SIgor Opaniuk #define VERITY_TABLE_OPT_RESTART	"restart_on_corruption"
175d4fd877SIgor Opaniuk #define VERITY_TABLE_OPT_LOGGING	"ignore_corruption"
183af30e44SIgor Opaniuk #define ALLOWED_BUF_ALIGN		8
193af30e44SIgor Opaniuk 
205d4fd877SIgor Opaniuk enum avb_boot_state {
215d4fd877SIgor Opaniuk 	AVB_GREEN,
225d4fd877SIgor Opaniuk 	AVB_YELLOW,
235d4fd877SIgor Opaniuk 	AVB_ORANGE,
245d4fd877SIgor Opaniuk 	AVB_RED,
255d4fd877SIgor Opaniuk };
265d4fd877SIgor Opaniuk 
273af30e44SIgor Opaniuk struct AvbOpsData {
283af30e44SIgor Opaniuk 	struct AvbOps ops;
293af30e44SIgor Opaniuk 	int mmc_dev;
305d4fd877SIgor Opaniuk 	enum avb_boot_state boot_state;
316663e074SJens Wiklander #ifdef CONFIG_OPTEE_TA_AVB
326663e074SJens Wiklander 	struct udevice *tee;
336663e074SJens Wiklander 	u32 session;
346663e074SJens Wiklander #endif
353af30e44SIgor Opaniuk };
363af30e44SIgor Opaniuk 
373af30e44SIgor Opaniuk struct mmc_part {
383af30e44SIgor Opaniuk 	int dev_num;
393af30e44SIgor Opaniuk 	struct mmc *mmc;
403af30e44SIgor Opaniuk 	struct blk_desc *mmc_blk;
413af30e44SIgor Opaniuk 	disk_partition_t info;
423af30e44SIgor Opaniuk };
433af30e44SIgor Opaniuk 
443af30e44SIgor Opaniuk enum mmc_io_type {
453af30e44SIgor Opaniuk 	IO_READ,
463af30e44SIgor Opaniuk 	IO_WRITE
473af30e44SIgor Opaniuk };
483af30e44SIgor Opaniuk 
493af30e44SIgor Opaniuk AvbOps *avb_ops_alloc(int boot_device);
503af30e44SIgor Opaniuk void avb_ops_free(AvbOps *ops);
513af30e44SIgor Opaniuk 
525d4fd877SIgor Opaniuk char *avb_set_state(AvbOps *ops, enum avb_boot_state boot_state);
535d4fd877SIgor Opaniuk char *avb_set_enforce_verity(const char *cmdline);
545d4fd877SIgor Opaniuk char *avb_set_ignore_corruption(const char *cmdline);
555d4fd877SIgor Opaniuk 
565d4fd877SIgor Opaniuk char *append_cmd_line(char *cmdline_orig, char *cmdline_new);
575d4fd877SIgor Opaniuk 
583af30e44SIgor Opaniuk /**
593af30e44SIgor Opaniuk  * ============================================================================
603af30e44SIgor Opaniuk  * I/O helper inline functions
613af30e44SIgor Opaniuk  * ============================================================================
623af30e44SIgor Opaniuk  */
calc_offset(struct mmc_part * part,int64_t offset)633af30e44SIgor Opaniuk static inline uint64_t calc_offset(struct mmc_part *part, int64_t offset)
643af30e44SIgor Opaniuk {
653af30e44SIgor Opaniuk 	u64 part_size = part->info.size * part->info.blksz;
663af30e44SIgor Opaniuk 
673af30e44SIgor Opaniuk 	if (offset < 0)
683af30e44SIgor Opaniuk 		return part_size + offset;
693af30e44SIgor Opaniuk 
703af30e44SIgor Opaniuk 	return offset;
713af30e44SIgor Opaniuk }
723af30e44SIgor Opaniuk 
get_sector_buf_size(void)733af30e44SIgor Opaniuk static inline size_t get_sector_buf_size(void)
743af30e44SIgor Opaniuk {
753af30e44SIgor Opaniuk 	return (size_t)CONFIG_FASTBOOT_BUF_SIZE;
763af30e44SIgor Opaniuk }
773af30e44SIgor Opaniuk 
get_sector_buf(void)783af30e44SIgor Opaniuk static inline void *get_sector_buf(void)
793af30e44SIgor Opaniuk {
80*bbddbef9SJens Wiklander 	return map_sysmem(CONFIG_FASTBOOT_BUF_ADDR, CONFIG_FASTBOOT_BUF_SIZE);
813af30e44SIgor Opaniuk }
823af30e44SIgor Opaniuk 
is_buf_unaligned(void * buffer)833af30e44SIgor Opaniuk static inline bool is_buf_unaligned(void *buffer)
843af30e44SIgor Opaniuk {
853af30e44SIgor Opaniuk 	return (bool)((uintptr_t)buffer % ALLOWED_BUF_ALIGN);
863af30e44SIgor Opaniuk }
873af30e44SIgor Opaniuk 
get_boot_device(AvbOps * ops)883af30e44SIgor Opaniuk static inline int get_boot_device(AvbOps *ops)
893af30e44SIgor Opaniuk {
903af30e44SIgor Opaniuk 	struct AvbOpsData *data;
913af30e44SIgor Opaniuk 
923af30e44SIgor Opaniuk 	if (ops) {
933af30e44SIgor Opaniuk 		data = ops->user_data;
943af30e44SIgor Opaniuk 		if (data)
953af30e44SIgor Opaniuk 			return data->mmc_dev;
963af30e44SIgor Opaniuk 	}
973af30e44SIgor Opaniuk 
983af30e44SIgor Opaniuk 	return -1;
993af30e44SIgor Opaniuk }
1003af30e44SIgor Opaniuk 
1013af30e44SIgor Opaniuk #endif /* _AVB_VERIFY_H */
102