xref: /aosp_15_r20/external/crosvm/kvm_sys/bindgen.sh (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker#!/usr/bin/env bash
2*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2022 The ChromiumOS Authors
3*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file.
5*bb4ee6a4SAndroid Build Coastguard Worker
6*bb4ee6a4SAndroid Build Coastguard Worker# Regenerate kvm_sys bindgen bindings.
7*bb4ee6a4SAndroid Build Coastguard Worker
8*bb4ee6a4SAndroid Build Coastguard Workerset -euo pipefail
9*bb4ee6a4SAndroid Build Coastguard Workercd "$(dirname "${BASH_SOURCE[0]}")/.."
10*bb4ee6a4SAndroid Build Coastguard Worker
11*bb4ee6a4SAndroid Build Coastguard Workersource tools/impl/bindgen-common.sh
12*bb4ee6a4SAndroid Build Coastguard Worker
13*bb4ee6a4SAndroid Build Coastguard WorkerKVM_EXTRAS="// Added by kvm_sys/bindgen.sh
14*bb4ee6a4SAndroid Build Coastguard Workeruse zerocopy::AsBytes;
15*bb4ee6a4SAndroid Build Coastguard Workeruse zerocopy::FromBytes;
16*bb4ee6a4SAndroid Build Coastguard Workeruse zerocopy::FromZeroes;
17*bb4ee6a4SAndroid Build Coastguard Worker
18*bb4ee6a4SAndroid Build Coastguard Worker// TODO(b/316337317): Update if new memslot flag is accepted in upstream
19*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_MEM_NON_COHERENT_DMA: u32 = 8;
20*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_CAP_USER_CONFIGURE_NONCOHERENT_DMA: u32 = 236;
21*bb4ee6a4SAndroid Build Coastguard Worker
22*bb4ee6a4SAndroid Build Coastguard Worker// TODO(qwandor): Update this once the pKVM patches are merged upstream with a stable capability ID.
23*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_CAP_ARM_PROTECTED_VM: u32 = 0xffbadab1;
24*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_CAP_ARM_PROTECTED_VM_FLAGS_SET_FW_IPA: u32 = 0;
25*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_CAP_ARM_PROTECTED_VM_FLAGS_INFO: u32 = 1;
26*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_VM_TYPE_ARM_PROTECTED: u32 = 0x80000000;
27*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_X86_PKVM_PROTECTED_VM: u32 = 28;
28*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_DEV_VFIO_PVIOMMU: u32 = 2;
29*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_DEV_VFIO_PVIOMMU_ATTACH: u32 = 1;
30*bb4ee6a4SAndroid Build Coastguard Worker#[repr(C)]
31*bb4ee6a4SAndroid Build Coastguard Worker#[derive(Debug, Default, Copy, Clone)]
32*bb4ee6a4SAndroid Build Coastguard Workerpub struct kvm_vfio_iommu_info {
33*bb4ee6a4SAndroid Build Coastguard Worker    pub device_fd: i32,
34*bb4ee6a4SAndroid Build Coastguard Worker    pub nr_sids: u32,
35*bb4ee6a4SAndroid Build Coastguard Worker}
36*bb4ee6a4SAndroid Build Coastguard Workerpub const KVM_DEV_VFIO_PVIOMMU_GET_INFO: u32 = 2;
37*bb4ee6a4SAndroid Build Coastguard Worker#[repr(C)]
38*bb4ee6a4SAndroid Build Coastguard Worker#[derive(Debug, Default, Copy, Clone)]
39*bb4ee6a4SAndroid Build Coastguard Workerpub struct kvm_vfio_iommu_config {
40*bb4ee6a4SAndroid Build Coastguard Worker    pub device_fd: i32,
41*bb4ee6a4SAndroid Build Coastguard Worker    pub sid_idx: u32,
42*bb4ee6a4SAndroid Build Coastguard Worker    pub vsid: u32,
43*bb4ee6a4SAndroid Build Coastguard Worker}"
44*bb4ee6a4SAndroid Build Coastguard Worker
45*bb4ee6a4SAndroid Build Coastguard WorkerX86_64_EXTRAS="
46*bb4ee6a4SAndroid Build Coastguard Worker// This is how zerocopy's author deal with bindings for __BindgenBitfieldUnit<Storage>, see:
47*bb4ee6a4SAndroid Build Coastguard Worker// https://fuchsia-review.googlesource.com/c/859278/8/src/starnix/lib/linux_uapi/generate.py
48*bb4ee6a4SAndroid Build Coastguard Workerunsafe impl<Storage> AsBytes for __BindgenBitfieldUnit<Storage>
49*bb4ee6a4SAndroid Build Coastguard Workerwhere
50*bb4ee6a4SAndroid Build Coastguard Worker    Storage: AsBytes,
51*bb4ee6a4SAndroid Build Coastguard Worker{
52*bb4ee6a4SAndroid Build Coastguard Worker    fn only_derive_is_allowed_to_implement_this_trait() {}
53*bb4ee6a4SAndroid Build Coastguard Worker}
54*bb4ee6a4SAndroid Build Coastguard Worker
55*bb4ee6a4SAndroid Build Coastguard Workerunsafe impl<Storage> FromBytes for __BindgenBitfieldUnit<Storage>
56*bb4ee6a4SAndroid Build Coastguard Workerwhere
57*bb4ee6a4SAndroid Build Coastguard Worker    Storage: FromBytes,
58*bb4ee6a4SAndroid Build Coastguard Worker{
59*bb4ee6a4SAndroid Build Coastguard Worker    fn only_derive_is_allowed_to_implement_this_trait() {}
60*bb4ee6a4SAndroid Build Coastguard Worker}
61*bb4ee6a4SAndroid Build Coastguard Worker
62*bb4ee6a4SAndroid Build Coastguard Workerunsafe impl<Storage> FromZeroes for __BindgenBitfieldUnit<Storage>
63*bb4ee6a4SAndroid Build Coastguard Workerwhere
64*bb4ee6a4SAndroid Build Coastguard Worker    Storage: FromZeroes,
65*bb4ee6a4SAndroid Build Coastguard Worker{
66*bb4ee6a4SAndroid Build Coastguard Worker    fn only_derive_is_allowed_to_implement_this_trait() {}
67*bb4ee6a4SAndroid Build Coastguard Worker}"
68*bb4ee6a4SAndroid Build Coastguard Worker
69*bb4ee6a4SAndroid Build Coastguard Workerbindgen_generate \
70*bb4ee6a4SAndroid Build Coastguard Worker    --raw-line "${KVM_EXTRAS}" \
71*bb4ee6a4SAndroid Build Coastguard Worker    --raw-line "${X86_64_EXTRAS}" \
72*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__kernel.*' \
73*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__BITS_PER_LONG' \
74*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__FD_SETSIZE' \
75*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='_?IOC.*' \
76*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_regs=FromZeroes,FromBytes,AsBytes" \
77*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_sregs=FromZeroes,FromBytes,AsBytes" \
78*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_fpu=FromZeroes,FromBytes,AsBytes" \
79*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_debugregs=FromZeroes,FromBytes,AsBytes" \
80*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_xcr=FromZeroes,FromBytes,AsBytes" \
81*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_xcrs=FromZeroes,FromBytes,AsBytes" \
82*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_lapic_state=FromZeroes,FromBytes,AsBytes" \
83*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_mp_state=FromZeroes,FromBytes,AsBytes" \
84*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_vcpu_events=FromZeroes,FromBytes,AsBytes" \
85*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_vcpu_events__bindgen_ty_1=FromZeroes,FromBytes,AsBytes" \
86*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_vcpu_events__bindgen_ty_2=FromZeroes,FromBytes,AsBytes" \
87*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_vcpu_events__bindgen_ty_3=FromZeroes,FromBytes,AsBytes" \
88*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_vcpu_events__bindgen_ty_4=FromZeroes,FromBytes,AsBytes" \
89*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_vcpu_events__bindgen_ty_5=FromZeroes,FromBytes,AsBytes" \
90*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_dtable=FromZeroes,FromBytes,AsBytes" \
91*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_segment=FromZeroes,FromBytes,AsBytes" \
92*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_pic_state=FromZeroes,FromBytes,AsBytes" \
93*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_ioapic_state=FromZeroes,FromBytes,AsBytes" \
94*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_pit_state2=FromZeroes,FromBytes,AsBytes" \
95*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_clock_data=FromZeroes,FromBytes,AsBytes" \
96*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_ioapic_state__bindgen_ty_1=FromZeroes,FromBytes,AsBytes" \
97*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_ioapic_state__bindgen_ty_1__bindgen_ty_1=FromZeroes,FromBytes,AsBytes" \
98*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_pit_channel_state=FromZeroes,FromBytes,AsBytes" \
99*bb4ee6a4SAndroid Build Coastguard Worker    "${BINDGEN_LINUX_X86_HEADERS}/include/linux/kvm.h" \
100*bb4ee6a4SAndroid Build Coastguard Worker    -- \
101*bb4ee6a4SAndroid Build Coastguard Worker    -isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
102*bb4ee6a4SAndroid Build Coastguard Worker    | replace_linux_int_types \
103*bb4ee6a4SAndroid Build Coastguard Worker    > kvm_sys/src/x86/bindings.rs
104*bb4ee6a4SAndroid Build Coastguard Worker
105*bb4ee6a4SAndroid Build Coastguard Workerbindgen_generate \
106*bb4ee6a4SAndroid Build Coastguard Worker    --raw-line "${KVM_EXTRAS}" \
107*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__kernel.*' \
108*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__BITS_PER_LONG' \
109*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__FD_SETSIZE' \
110*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='_?IOC.*' \
111*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_regs=FromZeroes,FromBytes,AsBytes" \
112*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_sregs=FromZeroes,FromBytes,AsBytes" \
113*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_fpu=FromZeroes,FromBytes,AsBytes" \
114*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_vcpu_events=FromZeroes,FromBytes,AsBytes" \
115*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_vcpu_events__bindgen_ty_1=FromZeroes,FromBytes,AsBytes" \
116*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "kvm_mp_state=FromZeroes,FromBytes,AsBytes" \
117*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "user_fpsimd_state=FromZeroes,FromBytes,AsBytes" \
118*bb4ee6a4SAndroid Build Coastguard Worker    --with-derive-custom "user_pt_regs=FromZeroes,FromBytes,AsBytes" \
119*bb4ee6a4SAndroid Build Coastguard Worker    "${BINDGEN_LINUX_ARM64_HEADERS}/include/linux/kvm.h" \
120*bb4ee6a4SAndroid Build Coastguard Worker    -- \
121*bb4ee6a4SAndroid Build Coastguard Worker    -isystem "${BINDGEN_LINUX_ARM64_HEADERS}/include" \
122*bb4ee6a4SAndroid Build Coastguard Worker    | replace_linux_int_types \
123*bb4ee6a4SAndroid Build Coastguard Worker    > kvm_sys/src/aarch64/bindings.rs
124*bb4ee6a4SAndroid Build Coastguard Worker
125*bb4ee6a4SAndroid Build Coastguard Workerbindgen_generate \
126*bb4ee6a4SAndroid Build Coastguard Worker    --raw-line "${KVM_EXTRAS}" \
127*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__kernel.*' \
128*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__BITS_PER_LONG' \
129*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='__FD_SETSIZE' \
130*bb4ee6a4SAndroid Build Coastguard Worker    --blocklist-item='_?IOC.*' \
131*bb4ee6a4SAndroid Build Coastguard Worker    "${BINDGEN_LINUX_RISCV_HEADERS}/include/linux/kvm.h" \
132*bb4ee6a4SAndroid Build Coastguard Worker    -- \
133*bb4ee6a4SAndroid Build Coastguard Worker    -isystem "${BINDGEN_LINUX_RISCV_HEADERS}/include" \
134*bb4ee6a4SAndroid Build Coastguard Worker    | replace_linux_int_types \
135*bb4ee6a4SAndroid Build Coastguard Worker    > kvm_sys/src/riscv64/bindings.rs
136