Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/tools/include/linux/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 5 kB image not shown  

Quelle  arm-smccc.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2015, Linaro Limited
 */

#ifndef __LINUX_ARM_SMCCC_H
#define __LINUX_ARM_SMCCC_H

#include <linux/const.h>

/*
 * This file provides common defines for ARM SMC Calling Convention as
 * specified in
 * https://developer.arm.com/docs/den0028/latest
 *
 * This code is up-to-date with version DEN 0028 C
 */


#define ARM_SMCCC_STD_CALL         _AC(0,U)
#define ARM_SMCCC_FAST_CALL         _AC(1,U)
#define ARM_SMCCC_TYPE_SHIFT  31

#define ARM_SMCCC_SMC_32  0
#define ARM_SMCCC_SMC_64  1
#define ARM_SMCCC_CALL_CONV_SHIFT 30

#define ARM_SMCCC_OWNER_MASK  0x3F
#define ARM_SMCCC_OWNER_SHIFT  24

#define ARM_SMCCC_FUNC_MASK  0xFFFF

#define ARM_SMCCC_IS_FAST_CALL(smc_val) \
 ((smc_val) & (ARM_SMCCC_FAST_CALL << ARM_SMCCC_TYPE_SHIFT))
#define ARM_SMCCC_IS_64(smc_val) \
 ((smc_val) & (ARM_SMCCC_SMC_64 << ARM_SMCCC_CALL_CONV_SHIFT))
#define ARM_SMCCC_FUNC_NUM(smc_val) ((smc_val) & ARM_SMCCC_FUNC_MASK)
#define ARM_SMCCC_OWNER_NUM(smc_val) \
 (((smc_val) >> ARM_SMCCC_OWNER_SHIFT) & ARM_SMCCC_OWNER_MASK)

#define ARM_SMCCC_CALL_VAL(type, calling_convention, owner, func_num) \
 (((type) << ARM_SMCCC_TYPE_SHIFT) | \
 ((calling_convention) << ARM_SMCCC_CALL_CONV_SHIFT) | \
 (((owner) & ARM_SMCCC_OWNER_MASK) << ARM_SMCCC_OWNER_SHIFT) | \
 ((func_num) & ARM_SMCCC_FUNC_MASK))

#define ARM_SMCCC_OWNER_ARCH  0
#define ARM_SMCCC_OWNER_CPU  1
#define ARM_SMCCC_OWNER_SIP  2
#define ARM_SMCCC_OWNER_OEM  3
#define ARM_SMCCC_OWNER_STANDARD 4
#define ARM_SMCCC_OWNER_STANDARD_HYP 5
#define ARM_SMCCC_OWNER_VENDOR_HYP 6
#define ARM_SMCCC_OWNER_TRUSTED_APP 48
#define ARM_SMCCC_OWNER_TRUSTED_APP_END 49
#define ARM_SMCCC_OWNER_TRUSTED_OS 50
#define ARM_SMCCC_OWNER_TRUSTED_OS_END 63

#define ARM_SMCCC_FUNC_QUERY_CALL_UID  0xff01

#define ARM_SMCCC_QUIRK_NONE  0
#define ARM_SMCCC_QUIRK_QCOM_A6  1 /* Save/restore register a6 */

#define ARM_SMCCC_VERSION_1_0  0x10000
#define ARM_SMCCC_VERSION_1_1  0x10001
#define ARM_SMCCC_VERSION_1_2  0x10002
#define ARM_SMCCC_VERSION_1_3  0x10003

#define ARM_SMCCC_1_3_SVE_HINT  0x10000

#define ARM_SMCCC_VERSION_FUNC_ID     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      0, 0)

#define ARM_SMCCC_ARCH_FEATURES_FUNC_ID     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      0, 1)

#define ARM_SMCCC_ARCH_SOC_ID      \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      0, 2)

#define ARM_SMCCC_ARCH_WORKAROUND_1     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      0, 0x8000)

#define ARM_SMCCC_ARCH_WORKAROUND_2     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      0, 0x7fff)

#define ARM_SMCCC_ARCH_WORKAROUND_3     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      0, 0x3fff)

#define ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID    \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      ARM_SMCCC_OWNER_VENDOR_HYP,   \
      ARM_SMCCC_FUNC_QUERY_CALL_UID)

/* KVM UID value: 28b46fb6-2ec5-11e9-a9ca-4b564d003a74 */
#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_0 0xb66fb428U
#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_1 0xe911c52eU
#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_2 0x564bcaa9U
#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_3 0x743a004dU

/* KVM "vendor specific" services */
#define ARM_SMCCC_KVM_FUNC_FEATURES  0
#define ARM_SMCCC_KVM_FUNC_PTP   1
#define ARM_SMCCC_KVM_FUNC_FEATURES_2  127
#define ARM_SMCCC_KVM_NUM_FUNCS   128

#define ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID   \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      ARM_SMCCC_OWNER_VENDOR_HYP,   \
      ARM_SMCCC_KVM_FUNC_FEATURES)

#define SMCCC_ARCH_WORKAROUND_RET_UNAFFECTED 1

/*
 * ptp_kvm is a feature used for time sync between vm and host.
 * ptp_kvm module in guest kernel will get service from host using
 * this hypercall ID.
 */

#define ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID    \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,    \
      ARM_SMCCC_SMC_32,    \
      ARM_SMCCC_OWNER_VENDOR_HYP,   \
      ARM_SMCCC_KVM_FUNC_PTP)

/* ptp_kvm counter type ID */
#define KVM_PTP_VIRT_COUNTER   0
#define KVM_PTP_PHYS_COUNTER   1

/* Paravirtualised time calls (defined by ARM DEN0057A) */
#define ARM_SMCCC_HV_PV_TIME_FEATURES    \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,   \
      ARM_SMCCC_SMC_64,   \
      ARM_SMCCC_OWNER_STANDARD_HYP, \
      0x20)

#define ARM_SMCCC_HV_PV_TIME_ST     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,   \
      ARM_SMCCC_SMC_64,   \
      ARM_SMCCC_OWNER_STANDARD_HYP, \
      0x21)

/* TRNG entropy source calls (defined by ARM DEN0098) */
#define ARM_SMCCC_TRNG_VERSION     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,   \
      ARM_SMCCC_SMC_32,   \
      ARM_SMCCC_OWNER_STANDARD,  \
      0x50)

#define ARM_SMCCC_TRNG_FEATURES     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,   \
      ARM_SMCCC_SMC_32,   \
      ARM_SMCCC_OWNER_STANDARD,  \
      0x51)

#define ARM_SMCCC_TRNG_GET_UUID     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,   \
      ARM_SMCCC_SMC_32,   \
      ARM_SMCCC_OWNER_STANDARD,  \
      0x52)

#define ARM_SMCCC_TRNG_RND32     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,   \
      ARM_SMCCC_SMC_32,   \
      ARM_SMCCC_OWNER_STANDARD,  \
      0x53)

#define ARM_SMCCC_TRNG_RND64     \
 ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,   \
      ARM_SMCCC_SMC_64,   \
      ARM_SMCCC_OWNER_STANDARD,  \
      0x53)

/*
 * Return codes defined in ARM DEN 0070A
 * ARM DEN 0070A is now merged/consolidated into ARM DEN 0028 C
 */

#define SMCCC_RET_SUCCESS   0
#define SMCCC_RET_NOT_SUPPORTED   -1
#define SMCCC_RET_NOT_REQUIRED   -2
#define SMCCC_RET_INVALID_PARAMETER  -3

#endif /*__LINUX_ARM_SMCCC_H*/

Messung V0.5
C=87 H=92 G=89

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.