xref: /aosp_15_r20/external/crosvm/devices/src/virtio/iommu/protocol.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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