Coverage Report

Created: 2024-09-08 06:35

/src/crosvm/devices/src/virtio/iommu/protocol.rs
Line
Count
Source (jump to first uncovered line)
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::{AsBytes, FromZeroes, FromBytes} 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::AsBytes;
34
use zerocopy::FromBytes;
35
use zerocopy::FromZeroes;
36
37
pub const VIRTIO_IOMMU_F_INPUT_RANGE: u32 = 0;
38
pub const VIRTIO_IOMMU_F_DOMAIN_RANGE: u32 = 1;
39
pub const VIRTIO_IOMMU_F_MAP_UNMAP: u32 = 2;
40
pub const VIRTIO_IOMMU_F_BYPASS: u32 = 3;
41
pub const VIRTIO_IOMMU_F_PROBE: u32 = 4;
42
pub const VIRTIO_IOMMU_F_MMIO: u32 = 5;
43
pub const VIRTIO_IOMMU_T_ATTACH: u8 = 1;
44
pub const VIRTIO_IOMMU_T_DETACH: u8 = 2;
45
pub const VIRTIO_IOMMU_T_MAP: u8 = 3;
46
pub const VIRTIO_IOMMU_T_UNMAP: u8 = 4;
47
pub const VIRTIO_IOMMU_T_PROBE: u8 = 5;
48
pub const VIRTIO_IOMMU_S_OK: u8 = 0;
49
pub const VIRTIO_IOMMU_S_IOERR: u8 = 1;
50
pub const VIRTIO_IOMMU_S_UNSUPP: u8 = 2;
51
pub const VIRTIO_IOMMU_S_DEVERR: u8 = 3;
52
pub const VIRTIO_IOMMU_S_INVAL: u8 = 4;
53
pub const VIRTIO_IOMMU_S_RANGE: u8 = 5;
54
pub const VIRTIO_IOMMU_S_NOENT: u8 = 6;
55
pub const VIRTIO_IOMMU_S_FAULT: u8 = 7;
56
pub const VIRTIO_IOMMU_S_NOMEM: u8 = 8;
57
pub const VIRTIO_IOMMU_MAP_F_READ: u32 = 1;
58
pub const VIRTIO_IOMMU_MAP_F_WRITE: u32 = 2;
59
pub const VIRTIO_IOMMU_MAP_F_MMIO: u32 = 4;
60
pub const VIRTIO_IOMMU_MAP_F_MASK: u32 = 7;
61
pub const VIRTIO_IOMMU_PROBE_T_NONE: u32 = 0;
62
pub const VIRTIO_IOMMU_PROBE_T_RESV_MEM: u32 = 1;
63
pub const VIRTIO_IOMMU_PROBE_T_MASK: u32 = 4095;
64
pub const VIRTIO_IOMMU_RESV_MEM_T_RESERVED: u32 = 0;
65
pub const VIRTIO_IOMMU_RESV_MEM_T_MSI: u32 = 1;
66
pub const VIRTIO_IOMMU_FAULT_R_UNKNOWN: u32 = 0;
67
pub const VIRTIO_IOMMU_FAULT_R_DOMAIN: u32 = 1;
68
pub const VIRTIO_IOMMU_FAULT_R_MAPPING: u32 = 2;
69
pub const VIRTIO_IOMMU_FAULT_F_READ: u32 = 1;
70
pub const VIRTIO_IOMMU_FAULT_F_WRITE: u32 = 2;
71
pub const VIRTIO_IOMMU_FAULT_F_EXEC: u32 = 4;
72
pub const VIRTIO_IOMMU_FAULT_F_ADDRESS: u32 = 256;
73
74
#[repr(C, packed)]
75
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
76
pub struct virtio_iommu_range_64 {
77
    pub start: Le64,
78
    pub end: Le64,
79
}
80
81
#[repr(C, packed)]
82
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
83
pub struct virtio_iommu_range_32 {
84
    pub start: Le32,
85
    pub end: Le32,
86
}
87
88
#[repr(C, packed)]
89
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
90
pub struct virtio_iommu_config {
91
    pub page_size_mask: Le64,
92
    pub input_range: virtio_iommu_range_64,
93
    pub domain_range: virtio_iommu_range_32,
94
    pub probe_size: Le32,
95
}
96
97
#[repr(C, packed)]
98
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
99
pub struct virtio_iommu_req_head {
100
    pub type_: u8,
101
    pub reserved: [u8; 3usize],
102
}
103
104
#[repr(C, packed)]
105
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
106
pub struct virtio_iommu_req_tail {
107
    pub status: u8,
108
    pub reserved: [u8; 3usize],
109
}
110
111
#[repr(C, packed)]
112
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
113
pub struct virtio_iommu_req_attach {
114
    pub domain: Le32,
115
    pub endpoint: Le32,
116
    pub reserved: [u8; 8usize],
117
}
118
119
#[repr(C, packed)]
120
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
121
pub struct virtio_iommu_req_detach {
122
    pub domain: Le32,
123
    pub endpoint: Le32,
124
    pub reserved: [u8; 8usize],
125
}
126
127
#[repr(C, packed)]
128
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
129
pub struct virtio_iommu_req_map {
130
    pub domain: Le32,
131
    pub virt_start: Le64,
132
    pub virt_end: Le64,
133
    pub phys_start: Le64,
134
    pub flags: Le32,
135
}
136
137
#[repr(C, packed)]
138
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
139
pub struct virtio_iommu_req_unmap {
140
    pub domain: Le32,
141
    pub virt_start: Le64,
142
    pub virt_end: Le64,
143
    pub reserved: [u8; 4usize],
144
}
145
146
#[repr(C, packed)]
147
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
148
pub struct virtio_iommu_probe_property {
149
    pub type_: Le16,
150
    pub length: Le16,
151
}
152
153
#[repr(C, packed)]
154
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
155
pub struct virtio_iommu_probe_resv_mem {
156
    pub head: virtio_iommu_probe_property,
157
    pub subtype: u8,
158
    pub reserved: [u8; 3usize],
159
    pub start: Le64,
160
    pub end: Le64,
161
}
162
163
#[repr(C, packed)]
164
0
#[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
165
pub struct virtio_iommu_req_probe {
166
    pub endpoint: Le32,
167
    pub reserved: [u64; 8usize],
168
}
169
170
#[repr(C, packed)]
171
#[derive(Debug, Default, Copy, Clone)]
172
pub struct virtio_iommu_fault {
173
    pub reason: u8,
174
    pub reserved: [u8; 3usize],
175
    pub flags: Le32,
176
    pub endpoint: Le32,
177
    pub reserved2: [u8; 4usize],
178
    pub address: Le64,
179
}