1#!/usr/bin/env bash 2# Copyright 2022 The ChromiumOS Authors 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6# Regenerate kvm_sys bindgen bindings. 7 8set -euo pipefail 9cd "$(dirname "${BASH_SOURCE[0]}")/.." 10 11source tools/impl/bindgen-common.sh 12 13KVM_EXTRAS="// Added by kvm_sys/bindgen.sh 14use zerocopy::FromBytes; 15use zerocopy::Immutable; 16use zerocopy::IntoBytes; 17use zerocopy::KnownLayout; 18 19// TODO(b/388092267): Replace this with an upstream equivalent when available. 20// The original index (236) used in the ChromeOS v6.6 kernel was reused upstream for another 21// capability, so this may return incorrect information on some kernels. 22pub const KVM_CAP_USER_CONFIGURE_NONCOHERENT_DMA_CROS: u32 = 236; 23 24// TODO(qwandor): Update this once the pKVM patches are merged upstream with a stable capability ID. 25pub const KVM_CAP_ARM_PROTECTED_VM: u32 = 0xffbadab1; 26pub const KVM_CAP_ARM_PROTECTED_VM_FLAGS_SET_FW_IPA: u32 = 0; 27pub const KVM_CAP_ARM_PROTECTED_VM_FLAGS_INFO: u32 = 1; 28pub const KVM_VM_TYPE_ARM_PROTECTED: u32 = 0x80000000; 29pub const KVM_X86_PKVM_PROTECTED_VM: u32 = 28; 30pub const KVM_CAP_X86_PROTECTED_VM: u32 = 0xffbadab2; 31pub const KVM_CAP_X86_PROTECTED_VM_FLAGS_SET_FW_GPA: u32 = 0; 32pub const KVM_CAP_X86_PROTECTED_VM_FLAGS_INFO: u32 = 1; 33pub const KVM_DEV_VFIO_PVIOMMU: u32 = 2; 34pub const KVM_DEV_VFIO_PVIOMMU_ATTACH: u32 = 1; 35#[repr(C)] 36#[derive(Debug, Default, Copy, Clone)] 37pub struct kvm_vfio_iommu_info { 38 pub device_fd: i32, 39 pub nr_sids: u32, 40} 41pub const KVM_DEV_VFIO_PVIOMMU_GET_INFO: u32 = 2; 42#[repr(C)] 43#[derive(Debug, Default, Copy, Clone)] 44pub struct kvm_vfio_iommu_config { 45 pub device_fd: i32, 46 pub sid_idx: u32, 47 pub vsid: u32, 48}" 49 50bindgen_generate \ 51 --raw-line "${KVM_EXTRAS}" \ 52 --blocklist-item='__kernel.*' \ 53 --blocklist-item='__BITS_PER_.*' \ 54 --blocklist-item='__FD_SETSIZE' \ 55 --blocklist-item='_?IOC.*' \ 56 --with-derive-custom "kvm_regs=FromBytes,Immutable,IntoBytes,KnownLayout" \ 57 --with-derive-custom "kvm_sregs=FromBytes,Immutable,IntoBytes,KnownLayout" \ 58 --with-derive-custom "kvm_fpu=FromBytes,Immutable,IntoBytes,KnownLayout" \ 59 --with-derive-custom "kvm_debugregs=FromBytes,Immutable,IntoBytes,KnownLayout" \ 60 --with-derive-custom "kvm_xcr=FromBytes,Immutable,IntoBytes,KnownLayout" \ 61 --with-derive-custom "kvm_xcrs=FromBytes,Immutable,IntoBytes,KnownLayout" \ 62 --with-derive-custom "kvm_lapic_state=FromBytes,Immutable,IntoBytes,KnownLayout" \ 63 --with-derive-custom "kvm_mp_state=FromBytes,Immutable,IntoBytes,KnownLayout" \ 64 --with-derive-custom "kvm_vcpu_events=FromBytes,Immutable,IntoBytes,KnownLayout" \ 65 --with-derive-custom "kvm_vcpu_events__bindgen_ty_1=FromBytes,Immutable,IntoBytes,KnownLayout" \ 66 --with-derive-custom "kvm_vcpu_events__bindgen_ty_2=FromBytes,Immutable,IntoBytes,KnownLayout" \ 67 --with-derive-custom "kvm_vcpu_events__bindgen_ty_3=FromBytes,Immutable,IntoBytes,KnownLayout" \ 68 --with-derive-custom "kvm_vcpu_events__bindgen_ty_4=FromBytes,Immutable,IntoBytes,KnownLayout" \ 69 --with-derive-custom "kvm_vcpu_events__bindgen_ty_5=FromBytes,Immutable,IntoBytes,KnownLayout" \ 70 --with-derive-custom "kvm_dtable=FromBytes,Immutable,IntoBytes,KnownLayout" \ 71 --with-derive-custom "kvm_segment=FromBytes,Immutable,IntoBytes,KnownLayout" \ 72 --with-derive-custom "kvm_pic_state=FromBytes,Immutable,IntoBytes,KnownLayout" \ 73 --with-derive-custom "kvm_pit_state2=FromBytes,Immutable,IntoBytes,KnownLayout" \ 74 --with-derive-custom "kvm_clock_data=FromBytes,Immutable,IntoBytes,KnownLayout" \ 75 --with-derive-custom "kvm_pit_channel_state=FromBytes,Immutable,IntoBytes,KnownLayout" \ 76 "${BINDGEN_LINUX_X86_HEADERS}/include/linux/kvm.h" \ 77 -- \ 78 -isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \ 79 | replace_linux_int_types \ 80 > kvm_sys/src/x86/bindings.rs 81 82bindgen_generate \ 83 --raw-line "${KVM_EXTRAS}" \ 84 --blocklist-item='__kernel.*' \ 85 --blocklist-item='__BITS_PER_.*' \ 86 --blocklist-item='__FD_SETSIZE' \ 87 --blocklist-item='_?IOC.*' \ 88 --with-derive-custom "kvm_regs=FromBytes,Immutable,IntoBytes,KnownLayout" \ 89 --with-derive-custom "kvm_sregs=FromBytes,Immutable,IntoBytes,KnownLayout" \ 90 --with-derive-custom "kvm_fpu=FromBytes,Immutable,IntoBytes,KnownLayout" \ 91 --with-derive-custom "kvm_vcpu_events=FromBytes,Immutable,IntoBytes,KnownLayout" \ 92 --with-derive-custom "kvm_vcpu_events__bindgen_ty_1=FromBytes,Immutable,IntoBytes,KnownLayout" \ 93 --with-derive-custom "kvm_mp_state=FromBytes,Immutable,IntoBytes,KnownLayout" \ 94 --with-derive-custom "user_fpsimd_state=FromBytes,Immutable,IntoBytes,KnownLayout" \ 95 --with-derive-custom "user_pt_regs=FromBytes,Immutable,IntoBytes,KnownLayout" \ 96 "${BINDGEN_LINUX_ARM64_HEADERS}/include/linux/kvm.h" \ 97 -- \ 98 -isystem "${BINDGEN_LINUX_ARM64_HEADERS}/include" \ 99 | replace_linux_int_types \ 100 > kvm_sys/src/aarch64/bindings.rs 101 102bindgen_generate \ 103 --raw-line "${KVM_EXTRAS}" \ 104 --blocklist-item='__kernel.*' \ 105 --blocklist-item='__BITS_PER_.*' \ 106 --blocklist-item='__FD_SETSIZE' \ 107 --blocklist-item='_?IOC.*' \ 108 "${BINDGEN_LINUX_RISCV_HEADERS}/include/linux/kvm.h" \ 109 -- \ 110 -isystem "${BINDGEN_LINUX_RISCV_HEADERS}/include" \ 111 | replace_linux_int_types \ 112 > kvm_sys/src/riscv64/bindings.rs 113