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