60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
/**
|
|
* \file
|
|
* Feature ID format and inline decode functions
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
/*****************************************************************************/
|
|
|
|
#define TA_MASK 0xFF000000
|
|
#define TA_OFFSET 24
|
|
#define TA_FIELD 8 // Max 256 TAs
|
|
|
|
#define FEATURE_MASK 0x00FFFFFF
|
|
#define FEATURE_OFFSET 0
|
|
#define FEATURE_FIELD 24 // Can support up to 2^24 features
|
|
|
|
#define TA_FROM_FEATURE_ID(id) \
|
|
((enum feature_support_app_id)((id & TA_MASK) >> TA_OFFSET))
|
|
#define MODULE_FROM_FEATURE_ID(id) ((id & FEATURE_MASK) >> FEATURE_OFFSET)
|
|
/*****************************************************************************/
|
|
|
|
enum feature_support_app_id {
|
|
feature_id_avb = 0,
|
|
feature_id_gfa = 1,
|
|
feature_id_identity = 2,
|
|
feature_id_keymint = 3,
|
|
feature_id_nugget = 4,
|
|
feature_id_weaver = 5,
|
|
|
|
/* Please do not change numbers after they've been released */
|
|
|
|
feature_id_count, // used in sparse lookup table
|
|
feature_id_max = 0xff, // 8-bit TA_FIELD
|
|
};
|
|
static_assert(feature_id_count <= feature_id_max,
|
|
"Too many enum feature_support_app_id values");
|
|
|
|
enum km_feature_list {
|
|
km_feature_individual_attest = 0,
|
|
km_feature_batch_attest = 1,
|
|
km_feature_gnubby_attest = 2,
|
|
km_feature_rkp = 3,
|
|
km_feature_rkp_dice = 4,
|
|
km_feature_dice = 5,
|
|
km_feature_multimei = 6,
|
|
|
|
/* Please do not change numbers after they've been released */
|
|
|
|
km_feature_max = FEATURE_MASK, // 24-bit FEATURE_FIELD
|
|
};
|
|
|
|
enum weaver_feature_list {
|
|
weaver_feature_api_no_proto = 0,
|
|
|
|
/* Please do not change numbers after they've been released */
|
|
|
|
weaver_feature_max = FEATURE_MASK, // 24-bit FEATURE_FIELD
|
|
};
|