ゲストに公開される KVM/arm64 固有のハイパーコール

このファイルは、KVM/arm64 がゲスト OS に公開する可能性がある KVM/arm64 固有の ハイパーコールについて記述する。これらのハイパーコールは、Arm SMC Calling Convention (DEN0028/C) のバージョン 1.1 に従って HVC 命令で発行する。

https://developer.arm.com/docs/den0028/c

KVM/arm64 固有のハイパーコールはすべて、UID 28b46fb6-2ec5-11e9-a9ca-4b564d003a74 を持つ「Vendor Specific Hypervisor Service Call」範囲に割り当てられている。KVM/arm64 固有のハイパーコールが 利用できるかを判断するため、ゲストはこのサービス範囲の標準の「Call UID」関数を 使ってこの UID を問い合わせるべきである。

ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID

他の KVM/arm64 ハイパーコールを検出する仕組みを提供する。

有無:

KVM/arm64 UID に対して必須

呼び出し規約:

HVC32

関数 ID:

(uint32)

0x86000000

引数:

なし

戻り値:

(uint32)

R0

利用可能な関数番号 0-31 のビットマップ

(uint32)

R1

利用可能な関数番号 32-63 のビットマップ

(uint32)

R2

利用可能な関数番号 64-95 のビットマップ

(uint32)

R3

利用可能な関数番号 96-127 のビットマップ

ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID

ptp_kvm.rst を参照

ARM_SMCCC_KVM_FUNC_HYP_MEMINFO

pKVM 保護仮想マシンのメモリ保護パラメータを問い合わせる。

有無:

任意。pKVM 保護ゲストのみ。

呼び出し規約:

HVC64

関数 ID:

(uint32)

0xC6000002

引数:

(uint64)

R1

予約済み/0 でなければならない

(uint64)

R2

予約済み/0 でなければならない

(uint64)

R3

予約済み/0 でなければならない

戻り値:

(int64)

R0

エラー時は INVALID_PARAMETER (-3)、 それ以外はメモリ保護グラニュールのバイト数

ARM_SMCCC_KVM_FUNC_MEM_SHARE

KVM ホストとメモリ領域を共有し、読み取り、書き込み、実行の権限を与える。 領域のサイズは ARM_SMCCC_KVM_FUNC_HYP_MEMINFO が通知するメモリ保護 グラニュールに等しい。

有無:

任意。pKVM 保護ゲストのみ。

呼び出し規約:

HVC64

関数 ID:

(uint32)

0xC6000003

引数:

(uint64)

R1

共有するメモリ領域のベース IPA

(uint64)

R2

予約済み/0 でなければならない

(uint64)

R3

予約済み/0 でなければならない

戻り値:

(int64)

R0

SUCCESS (0)

INVALID_PARAMETER (-3)

ARM_SMCCC_KVM_FUNC_MEM_UNSHARE

以前に ARM_SMCCC_KVM_FUNC_MEM_SHARE で共有したメモリ領域から、KVM ホストの アクセス権限を取り消す。領域のサイズは ARM_SMCCC_KVM_FUNC_HYP_MEMINFO が 通知するメモリ保護グラニュールに等しい。

有無:

任意。pKVM 保護ゲストのみ。

呼び出し規約:

HVC64

関数 ID:

(uint32)

0xC6000004

引数:

(uint64)

R1

共有を解除するメモリ領域のベース IPA

(uint64)

R2

予約済み/0 でなければならない

(uint64)

R3

予約済み/0 でなければならない

戻り値:

(int64)

R0

SUCCESS (0)

INVALID_PARAMETER (-3)

ARM_SMCCC_KVM_FUNC_MMIO_GUARD

指定したメモリ領域をハイパーバイザが MMIO として扱うよう要求する。これにより、 この領域へのアクセスを KVM ホストがエミュレートできる。領域のサイズは ARM_SMCCC_KVM_FUNC_HYP_MEMINFO が通知するメモリ保護グラニュールに等しい。

有無:

任意。pKVM 保護ゲストのみ。

呼び出し規約:

HVC64

関数 ID:

(uint32)

0xC6000007

引数:

(uint64)

R1

MMIO メモリ領域のベース IPA

(uint64)

R2

予約済み/0 でなければならない

(uint64)

R3

予約済み/0 でなければならない

戻り値:

(int64)

R0

SUCCESS (0)

INVALID_PARAMETER (-3)

ARM_SMCCC_VENDOR_HYP_KVM_DISCOVER_IMPL_VER_FUNC_ID

ゲスト VM 向けに、対象 CPU 実装のバージョン情報と対象実装の数を要求する。

有無:

Optional; KVM/ARM64 Guests only

呼び出し規約:

HVC64

関数 ID:

(uint32)

0xC6000040

引数:

なし

戻り値:

(int64)

R0

SUCCESS (0)

NOT_SUPPORTED (-1)

(uint64)

R1

ビット [63:32] は予約済み/0 必須

ビット [31:16] メジャーバージョン

ビット [15:0] マイナーバージョン

(uint64)

R2

対象実装の数

(uint64)

R3

予約済み/0 でなければならない

ARM_SMCCC_VENDOR_HYP_KVM_DISCOVER_IMPL_CPUS_FUNC_ID

ゲスト VM 向けに、対象 CPU 実装の情報を要求する。ゲストカーネルはこの情報を 使って、関連するエラッタを有効にする。

有無:

Optional; KVM/ARM64 Guests only

呼び出し規約:

HVC64

関数 ID:

(uint32)

0xC6000041

引数:

(uint64)

R1

選択した実装のインデックス

(uint64)

R2

予約済み/0 でなければならない

(uint64)

R3

予約済み/0 でなければならない

戻り値:

(int64)

R0

SUCCESS (0)

INVALID_PARAMETER (-3)

(uint64)

R1

選択した実装の MIDR_EL1

(uint64)

R2

選択した実装の REVIDR_EL1

(uint64)

R3

AIDR_EL1 of the selected implementation