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