• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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