#ifndef AVM_SBL_H #define AVM_SBL_H #define AVM_TAG_VERSION_LENGTH 32 #define SBL_MAGIC_STRING_V1 \ "(c) AVM 2017, SBL Boot Info Magic" \ "(c) AVM 2017, SBL Boot Info Magic" \ "(c) AVM 2017, SBL Boot Info Magic" #define SBL_MAGIC_STRING_V2 \ "(c) AVM 2022, SBL Boot Info Magic" \ "(c) AVM 2022, SBL Boot Info Magic" \ "(c) AVM 2022, SBL Boot Info Magic" struct avm_tag_version { unsigned int v0; unsigned int v1; unsigned int v2; unsigned int v3; unsigned int v4; unsigned int m; }; struct sbl_boot_status_v1 { unsigned char magic_str[256]; /* Magic */ unsigned int tz_boot_index; /* 0 or 1, depending on chosen TZ */ unsigned int tz_boot_successful; /* kernel writes a 1 to mark successful boot */ unsigned int tz_verified[2]; /* TZ passed Verification */ unsigned int tz_version[2]; /* Version of TZ */ unsigned int tz_modified[2]; /* Modified Status of TZ */ unsigned int eva_boot_index; /* 0 or 1, depending on chosen eva */ unsigned int eva_boot_successful; /* kernel writes a 1 to mark successful boot */ unsigned int eva_verified[2]; /* eva passed Verification */ unsigned int eva_version[2]; /* Version of eva */ unsigned int eva_modified[2]; /* Modified Status of eva*/ unsigned int sbl_version; unsigned int sbl_modified; }; struct sbl_boot_status_v2 { unsigned char magic_str[256]; /* Magic */ unsigned int struct_version; unsigned int tz_boot_index; /* 0 or 1, depending on chosen TZ */ unsigned int tz_boot_successful; /* kernel writes a 1 to mark successful boot */ unsigned int tz_verified[2]; /* TZ passed Verification */ unsigned char tz_version[2][AVM_TAG_VERSION_LENGTH]; unsigned int eva_boot_index; /* 0 or 1, depending on chosen eva */ unsigned int eva_boot_successful; /* kernel writes a 1 to mark successful boot */ unsigned int eva_verified[2]; /* eva passed Verification */ unsigned char eva_version[2][AVM_TAG_VERSION_LENGTH]; unsigned char sbl_version[AVM_TAG_VERSION_LENGTH]; }; union sbl_boot_status { struct sbl_boot_status_v1 v1; struct sbl_boot_status_v2 v2; }; union sbl_boot_status *get_sbl_boot_status(void); int get_sbl_boot_status_version(union sbl_boot_status *sbl_status); struct avm_tag_version get_avm_tag_version_from_string(char *version); unsigned int avm_tag_version_valid(struct avm_tag_version a); #endif