183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 260083261SDirk Eibach /* 360083261SDirk Eibach * (C) Copyright 2013 460083261SDirk Eibach * Reinhard Pfau, Guntermann & Drunck GmbH, reinhard.pfau@gdsys.cc 560083261SDirk Eibach */ 660083261SDirk Eibach 760083261SDirk Eibach #ifndef __HRE_H 860083261SDirk Eibach #define __HRE_H 960083261SDirk Eibach 1060083261SDirk Eibach struct key_program { 1160083261SDirk Eibach uint32_t magic; 1260083261SDirk Eibach uint32_t code_crc; 1360083261SDirk Eibach uint32_t code_size; 1460083261SDirk Eibach uint8_t code[]; 1560083261SDirk Eibach }; 1660083261SDirk Eibach 1760083261SDirk Eibach struct h_reg { 1860083261SDirk Eibach bool valid; 1960083261SDirk Eibach uint8_t digest[20]; 2060083261SDirk Eibach }; 2160083261SDirk Eibach 2260083261SDirk Eibach /* CCDM specific contants */ 2360083261SDirk Eibach enum { 2460083261SDirk Eibach /* NV indices */ 2560083261SDirk Eibach NV_COMMON_DATA_INDEX = 0x40000001, 2660083261SDirk Eibach /* magics for key blob chains */ 2760083261SDirk Eibach MAGIC_KEY_PROGRAM = 0x68726500, 2860083261SDirk Eibach MAGIC_HMAC = 0x68616300, 2960083261SDirk Eibach MAGIC_END_OF_CHAIN = 0x00000000, 3060083261SDirk Eibach /* sizes */ 3160083261SDirk Eibach NV_COMMON_DATA_MIN_SIZE = 3 * sizeof(uint64_t) + 2 * sizeof(uint16_t), 3260083261SDirk Eibach }; 3360083261SDirk Eibach 3460083261SDirk Eibach int hre_verify_program(struct key_program *prg); 35*abdc7b8aSSimon Glass int hre_run_program(struct udevice *tpm, const uint8_t *code, size_t code_size); 3660083261SDirk Eibach 3760083261SDirk Eibach #endif /* __HRE_H */ 38