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 vfio_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 Worker# VFIO_TYPE is translated as a u8 since it is a char constant, but it needs to be u32 for use in 14*bb4ee6a4SAndroid Build Coastguard Worker# ioctl macros. 15*bb4ee6a4SAndroid Build Coastguard Workerfix_vfio_type() { 16*bb4ee6a4SAndroid Build Coastguard Worker sed -E -e 's/^pub const VFIO_TYPE: u8 = (.*)u8;/pub const VFIO_TYPE: u32 = \1;/' 17*bb4ee6a4SAndroid Build Coastguard Worker} 18*bb4ee6a4SAndroid Build Coastguard Worker 19*bb4ee6a4SAndroid Build Coastguard WorkerVFIO_EXTRA="// Added by vfio_sys/bindgen.sh 20*bb4ee6a4SAndroid Build Coastguard Workeruse zerocopy::AsBytes; 21*bb4ee6a4SAndroid Build Coastguard Workeruse zerocopy::FromBytes; 22*bb4ee6a4SAndroid Build Coastguard Workeruse zerocopy::FromZeroes; 23*bb4ee6a4SAndroid Build Coastguard Worker 24*bb4ee6a4SAndroid Build Coastguard Worker// TODO(b/292077398): Upstream or remove ACPI notification forwarding support 25*bb4ee6a4SAndroid Build Coastguard Workerpub const VFIO_PCI_ACPI_NTFY_IRQ_INDEX: std::os::raw::c_uint = 5; 26*bb4ee6a4SAndroid Build Coastguard Worker 27*bb4ee6a4SAndroid Build Coastguard Worker#[repr(C)] 28*bb4ee6a4SAndroid Build Coastguard Worker#[derive(Debug, Default)] 29*bb4ee6a4SAndroid Build Coastguard Workerpub struct vfio_acpi_dsm { 30*bb4ee6a4SAndroid Build Coastguard Worker pub argsz: u32, 31*bb4ee6a4SAndroid Build Coastguard Worker pub padding: u32, 32*bb4ee6a4SAndroid Build Coastguard Worker pub args: __IncompleteArrayField<u8>, 33*bb4ee6a4SAndroid Build Coastguard Worker} 34*bb4ee6a4SAndroid Build Coastguard Worker 35*bb4ee6a4SAndroid Build Coastguard Worker#[repr(C)] 36*bb4ee6a4SAndroid Build Coastguard Worker#[derive(Debug, Default, Copy, Clone)] 37*bb4ee6a4SAndroid Build Coastguard Workerpub struct vfio_acpi_notify_eventfd { 38*bb4ee6a4SAndroid Build Coastguard Worker pub notify_eventfd: i32, 39*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: u32, 40*bb4ee6a4SAndroid Build Coastguard Worker} 41*bb4ee6a4SAndroid Build Coastguard Worker 42*bb4ee6a4SAndroid Build Coastguard Worker#[repr(C)] 43*bb4ee6a4SAndroid Build Coastguard Worker#[derive(Debug, Default)] 44*bb4ee6a4SAndroid Build Coastguard Workerpub struct vfio_region_info_with_cap { 45*bb4ee6a4SAndroid Build Coastguard Worker pub region_info: vfio_region_info, 46*bb4ee6a4SAndroid Build Coastguard Worker pub cap_info: __IncompleteArrayField<u8>, 47*bb4ee6a4SAndroid Build Coastguard Worker} 48*bb4ee6a4SAndroid Build Coastguard Worker 49*bb4ee6a4SAndroid Build Coastguard Worker// vfio_iommu_type1_info_cap_iova_range minus the incomplete iova_ranges 50*bb4ee6a4SAndroid Build Coastguard Worker// array, so that Copy/AsBytes/FromBytes can be implemented. 51*bb4ee6a4SAndroid Build Coastguard Worker#[repr(C)] 52*bb4ee6a4SAndroid Build Coastguard Worker#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 53*bb4ee6a4SAndroid Build Coastguard Workerpub struct vfio_iommu_type1_info_cap_iova_range_header { 54*bb4ee6a4SAndroid Build Coastguard Worker pub header: vfio_info_cap_header, 55*bb4ee6a4SAndroid Build Coastguard Worker pub nr_iovas: u32, 56*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: u32, 57*bb4ee6a4SAndroid Build Coastguard Worker} 58*bb4ee6a4SAndroid Build Coastguard Worker 59*bb4ee6a4SAndroid Build Coastguard Worker// Experimental Android uABI 60*bb4ee6a4SAndroid Build Coastguard Workerpub const VFIO_PKVM_PVIOMMU: u32 = 11;" 61*bb4ee6a4SAndroid Build Coastguard Worker 62*bb4ee6a4SAndroid Build Coastguard Workerbindgen_generate \ 63*bb4ee6a4SAndroid Build Coastguard Worker --raw-line "${VFIO_EXTRA}" \ 64*bb4ee6a4SAndroid Build Coastguard Worker --allowlist-var='VFIO_.*' \ 65*bb4ee6a4SAndroid Build Coastguard Worker --blocklist-item='VFIO_DEVICE_API_.*_STRING' \ 66*bb4ee6a4SAndroid Build Coastguard Worker --allowlist-type='vfio_.*' \ 67*bb4ee6a4SAndroid Build Coastguard Worker --with-derive-custom "vfio_info_cap_header=FromZeroes,FromBytes,AsBytes" \ 68*bb4ee6a4SAndroid Build Coastguard Worker --with-derive-custom "vfio_iova_range=FromZeroes,FromBytes,AsBytes" \ 69*bb4ee6a4SAndroid Build Coastguard Worker "${BINDGEN_LINUX}/include/uapi/linux/vfio.h" \ 70*bb4ee6a4SAndroid Build Coastguard Worker -- \ 71*bb4ee6a4SAndroid Build Coastguard Worker -D__user= \ 72*bb4ee6a4SAndroid Build Coastguard Worker | replace_linux_int_types | fix_vfio_type \ 73*bb4ee6a4SAndroid Build Coastguard Worker > vfio_sys/src/vfio.rs 74