use super::{DecodeError, FieldInfo, reserved_fids};
pub fn decode_arm_service(smccc: u64, conv: u64) -> Result<FieldInfo, DecodeError> {
if conv == 0 {
FieldInfo::get(smccc, "Function Number", None, 0, 16).describe(describe_arm32_service)
} else {
FieldInfo::get(smccc, "Function Number", None, 0, 16).describe(describe_arm64_service)
}
}
fn describe_arm32_service(service: u64) -> Result<&'static str, DecodeError> {
Ok(match service {
0x0000 => "SMCCC_VERSION",
0x0001 => "SMCCC_ARCH_FEATURES",
0x0002 => "SMCCC_ARCH_SOC_ID",
0x3FFF => "SMCCC_ARCH_WORKAROUND_3",
0x7FFF => "SMCCC_ARCH_WORKAROUND_2",
0x8000 => "SMCCC_ARCH_WORKAROUND_1",
0xFF00 => "Call Count Query, deprecated from SMCCCv1.2",
0xFF01 => "Call UUID Query, deprecated from SMCCCv1.2",
0xFF03 => "Revision Query, deprecated from SMCCCv1.2",
_ => reserved_fids(service),
})
}
fn describe_arm64_service(service: u64) -> Result<&'static str, DecodeError> {
Ok(reserved_fids(service))
}