1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker //! This file was generated by the following commands and modified manually. 6*bb4ee6a4SAndroid Build Coastguard Worker //! 7*bb4ee6a4SAndroid Build Coastguard Worker //! ```shell 8*bb4ee6a4SAndroid Build Coastguard Worker //! $ bindgen virtio_iommu.h \ 9*bb4ee6a4SAndroid Build Coastguard Worker //! --allowlist-type "virtio_iommu.*" \ 10*bb4ee6a4SAndroid Build Coastguard Worker //! --allowlist-var "VIRTIO_IOMMU_.*" \ 11*bb4ee6a4SAndroid Build Coastguard Worker //! --with-derive-default \ 12*bb4ee6a4SAndroid Build Coastguard Worker //! --no-layout-tests \ 13*bb4ee6a4SAndroid Build Coastguard Worker //! --no-prepend-enum-name > protocol.rs 14*bb4ee6a4SAndroid Build Coastguard Worker //! $ sed -i "s/__u/u/g" protocol.rs 15*bb4ee6a4SAndroid Build Coastguard Worker //! $ sed -i "s/__le/Le/g" protocol.rs 16*bb4ee6a4SAndroid Build Coastguard Worker //! 17*bb4ee6a4SAndroid Build Coastguard Worker //! The main points of the manual modifications are as follows: 18*bb4ee6a4SAndroid Build Coastguard Worker //! * Removed `head` and `tail` from each command struct. Instead, we process 19*bb4ee6a4SAndroid Build Coastguard Worker //! them as separate payloads. 20*bb4ee6a4SAndroid Build Coastguard Worker //! * Derive implementations of zerocopy::{AsBytes, FromZeroes, FromBytes} as needed. 21*bb4ee6a4SAndroid Build Coastguard Worker //! * Use of `packed` because removing `head` and `tail` introduces paddings 22*bb4ee6a4SAndroid Build Coastguard Worker //! * Remove `IncompleteArrayField` 23*bb4ee6a4SAndroid Build Coastguard Worker //! * Convert padding of [u8; 64usize] to [u64; 8usize]. According to the rust 24*bb4ee6a4SAndroid Build Coastguard Worker //! doc, "Arrays of sizes from 0 to 32 (inclusive) implement the Default trait 25*bb4ee6a4SAndroid Build Coastguard Worker //! if the element type allows it." 26*bb4ee6a4SAndroid Build Coastguard Worker 27*bb4ee6a4SAndroid Build Coastguard Worker #![allow(dead_code)] 28*bb4ee6a4SAndroid Build Coastguard Worker #![allow(non_camel_case_types)] 29*bb4ee6a4SAndroid Build Coastguard Worker 30*bb4ee6a4SAndroid Build Coastguard Worker use data_model::Le16; 31*bb4ee6a4SAndroid Build Coastguard Worker use data_model::Le32; 32*bb4ee6a4SAndroid Build Coastguard Worker use data_model::Le64; 33*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::AsBytes; 34*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::FromBytes; 35*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::FromZeroes; 36*bb4ee6a4SAndroid Build Coastguard Worker 37*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_F_INPUT_RANGE: u32 = 0; 38*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_F_DOMAIN_RANGE: u32 = 1; 39*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_F_MAP_UNMAP: u32 = 2; 40*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_F_BYPASS: u32 = 3; 41*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_F_PROBE: u32 = 4; 42*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_F_MMIO: u32 = 5; 43*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_T_ATTACH: u8 = 1; 44*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_T_DETACH: u8 = 2; 45*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_T_MAP: u8 = 3; 46*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_T_UNMAP: u8 = 4; 47*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_T_PROBE: u8 = 5; 48*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_OK: u8 = 0; 49*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_IOERR: u8 = 1; 50*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_UNSUPP: u8 = 2; 51*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_DEVERR: u8 = 3; 52*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_INVAL: u8 = 4; 53*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_RANGE: u8 = 5; 54*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_NOENT: u8 = 6; 55*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_FAULT: u8 = 7; 56*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_S_NOMEM: u8 = 8; 57*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_MAP_F_READ: u32 = 1; 58*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_MAP_F_WRITE: u32 = 2; 59*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_MAP_F_MMIO: u32 = 4; 60*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_MAP_F_MASK: u32 = 7; 61*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_PROBE_T_NONE: u32 = 0; 62*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_PROBE_T_RESV_MEM: u32 = 1; 63*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_PROBE_T_MASK: u32 = 4095; 64*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_RESV_MEM_T_RESERVED: u32 = 0; 65*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_RESV_MEM_T_MSI: u32 = 1; 66*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_FAULT_R_UNKNOWN: u32 = 0; 67*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_FAULT_R_DOMAIN: u32 = 1; 68*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_FAULT_R_MAPPING: u32 = 2; 69*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_FAULT_F_READ: u32 = 1; 70*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_FAULT_F_WRITE: u32 = 2; 71*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_FAULT_F_EXEC: u32 = 4; 72*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_IOMMU_FAULT_F_ADDRESS: u32 = 256; 73*bb4ee6a4SAndroid Build Coastguard Worker 74*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 75*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 76*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_range_64 { 77*bb4ee6a4SAndroid Build Coastguard Worker pub start: Le64, 78*bb4ee6a4SAndroid Build Coastguard Worker pub end: Le64, 79*bb4ee6a4SAndroid Build Coastguard Worker } 80*bb4ee6a4SAndroid Build Coastguard Worker 81*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 82*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 83*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_range_32 { 84*bb4ee6a4SAndroid Build Coastguard Worker pub start: Le32, 85*bb4ee6a4SAndroid Build Coastguard Worker pub end: Le32, 86*bb4ee6a4SAndroid Build Coastguard Worker } 87*bb4ee6a4SAndroid Build Coastguard Worker 88*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 89*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 90*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_config { 91*bb4ee6a4SAndroid Build Coastguard Worker pub page_size_mask: Le64, 92*bb4ee6a4SAndroid Build Coastguard Worker pub input_range: virtio_iommu_range_64, 93*bb4ee6a4SAndroid Build Coastguard Worker pub domain_range: virtio_iommu_range_32, 94*bb4ee6a4SAndroid Build Coastguard Worker pub probe_size: Le32, 95*bb4ee6a4SAndroid Build Coastguard Worker } 96*bb4ee6a4SAndroid Build Coastguard Worker 97*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 98*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 99*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_req_head { 100*bb4ee6a4SAndroid Build Coastguard Worker pub type_: u8, 101*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: [u8; 3usize], 102*bb4ee6a4SAndroid Build Coastguard Worker } 103*bb4ee6a4SAndroid Build Coastguard Worker 104*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 105*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 106*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_req_tail { 107*bb4ee6a4SAndroid Build Coastguard Worker pub status: u8, 108*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: [u8; 3usize], 109*bb4ee6a4SAndroid Build Coastguard Worker } 110*bb4ee6a4SAndroid Build Coastguard Worker 111*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 112*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 113*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_req_attach { 114*bb4ee6a4SAndroid Build Coastguard Worker pub domain: Le32, 115*bb4ee6a4SAndroid Build Coastguard Worker pub endpoint: Le32, 116*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: [u8; 8usize], 117*bb4ee6a4SAndroid Build Coastguard Worker } 118*bb4ee6a4SAndroid Build Coastguard Worker 119*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 120*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 121*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_req_detach { 122*bb4ee6a4SAndroid Build Coastguard Worker pub domain: Le32, 123*bb4ee6a4SAndroid Build Coastguard Worker pub endpoint: Le32, 124*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: [u8; 8usize], 125*bb4ee6a4SAndroid Build Coastguard Worker } 126*bb4ee6a4SAndroid Build Coastguard Worker 127*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 128*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 129*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_req_map { 130*bb4ee6a4SAndroid Build Coastguard Worker pub domain: Le32, 131*bb4ee6a4SAndroid Build Coastguard Worker pub virt_start: Le64, 132*bb4ee6a4SAndroid Build Coastguard Worker pub virt_end: Le64, 133*bb4ee6a4SAndroid Build Coastguard Worker pub phys_start: Le64, 134*bb4ee6a4SAndroid Build Coastguard Worker pub flags: Le32, 135*bb4ee6a4SAndroid Build Coastguard Worker } 136*bb4ee6a4SAndroid Build Coastguard Worker 137*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 138*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 139*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_req_unmap { 140*bb4ee6a4SAndroid Build Coastguard Worker pub domain: Le32, 141*bb4ee6a4SAndroid Build Coastguard Worker pub virt_start: Le64, 142*bb4ee6a4SAndroid Build Coastguard Worker pub virt_end: Le64, 143*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: [u8; 4usize], 144*bb4ee6a4SAndroid Build Coastguard Worker } 145*bb4ee6a4SAndroid Build Coastguard Worker 146*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 147*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 148*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_probe_property { 149*bb4ee6a4SAndroid Build Coastguard Worker pub type_: Le16, 150*bb4ee6a4SAndroid Build Coastguard Worker pub length: Le16, 151*bb4ee6a4SAndroid Build Coastguard Worker } 152*bb4ee6a4SAndroid Build Coastguard Worker 153*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 154*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 155*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_probe_resv_mem { 156*bb4ee6a4SAndroid Build Coastguard Worker pub head: virtio_iommu_probe_property, 157*bb4ee6a4SAndroid Build Coastguard Worker pub subtype: u8, 158*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: [u8; 3usize], 159*bb4ee6a4SAndroid Build Coastguard Worker pub start: Le64, 160*bb4ee6a4SAndroid Build Coastguard Worker pub end: Le64, 161*bb4ee6a4SAndroid Build Coastguard Worker } 162*bb4ee6a4SAndroid Build Coastguard Worker 163*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 164*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)] 165*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_req_probe { 166*bb4ee6a4SAndroid Build Coastguard Worker pub endpoint: Le32, 167*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: [u64; 8usize], 168*bb4ee6a4SAndroid Build Coastguard Worker } 169*bb4ee6a4SAndroid Build Coastguard Worker 170*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C, packed)] 171*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone)] 172*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_iommu_fault { 173*bb4ee6a4SAndroid Build Coastguard Worker pub reason: u8, 174*bb4ee6a4SAndroid Build Coastguard Worker pub reserved: [u8; 3usize], 175*bb4ee6a4SAndroid Build Coastguard Worker pub flags: Le32, 176*bb4ee6a4SAndroid Build Coastguard Worker pub endpoint: Le32, 177*bb4ee6a4SAndroid Build Coastguard Worker pub reserved2: [u8; 4usize], 178*bb4ee6a4SAndroid Build Coastguard Worker pub address: Le64, 179*bb4ee6a4SAndroid Build Coastguard Worker } 180