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 // Copyright 2022 The ChromiumOS Authors
6*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
7*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
8*bb4ee6a4SAndroid Build Coastguard Worker use hypervisor::kvm::*;
9*bb4ee6a4SAndroid Build Coastguard Worker use hypervisor::*;
10*bb4ee6a4SAndroid Build Coastguard Worker use vm_memory::GuestAddress;
11*bb4ee6a4SAndroid Build Coastguard Worker use vm_memory::GuestMemory;
12*bb4ee6a4SAndroid Build Coastguard Worker
13*bb4ee6a4SAndroid Build Coastguard Worker #[test]
set_gsi_routing()14*bb4ee6a4SAndroid Build Coastguard Worker fn set_gsi_routing() {
15*bb4ee6a4SAndroid Build Coastguard Worker let kvm = Kvm::new().unwrap();
16*bb4ee6a4SAndroid Build Coastguard Worker let gm = GuestMemory::new(&[(GuestAddress(0), 0x10000)]).unwrap();
17*bb4ee6a4SAndroid Build Coastguard Worker let vm = KvmVm::new(&kvm, gm, Default::default()).unwrap();
18*bb4ee6a4SAndroid Build Coastguard Worker vm.create_irq_chip().unwrap();
19*bb4ee6a4SAndroid Build Coastguard Worker vm.set_gsi_routing(&[]).unwrap();
20*bb4ee6a4SAndroid Build Coastguard Worker vm.set_gsi_routing(&[IrqRoute {
21*bb4ee6a4SAndroid Build Coastguard Worker gsi: 1,
22*bb4ee6a4SAndroid Build Coastguard Worker source: IrqSource::Irqchip {
23*bb4ee6a4SAndroid Build Coastguard Worker chip: IrqSourceChip::Gic,
24*bb4ee6a4SAndroid Build Coastguard Worker pin: 3,
25*bb4ee6a4SAndroid Build Coastguard Worker },
26*bb4ee6a4SAndroid Build Coastguard Worker }])
27*bb4ee6a4SAndroid Build Coastguard Worker .unwrap();
28*bb4ee6a4SAndroid Build Coastguard Worker vm.set_gsi_routing(&[IrqRoute {
29*bb4ee6a4SAndroid Build Coastguard Worker gsi: 1,
30*bb4ee6a4SAndroid Build Coastguard Worker source: IrqSource::Msi {
31*bb4ee6a4SAndroid Build Coastguard Worker address: 0xf000000,
32*bb4ee6a4SAndroid Build Coastguard Worker data: 0xa0,
33*bb4ee6a4SAndroid Build Coastguard Worker },
34*bb4ee6a4SAndroid Build Coastguard Worker }])
35*bb4ee6a4SAndroid Build Coastguard Worker .unwrap();
36*bb4ee6a4SAndroid Build Coastguard Worker vm.set_gsi_routing(&[
37*bb4ee6a4SAndroid Build Coastguard Worker IrqRoute {
38*bb4ee6a4SAndroid Build Coastguard Worker gsi: 1,
39*bb4ee6a4SAndroid Build Coastguard Worker source: IrqSource::Irqchip {
40*bb4ee6a4SAndroid Build Coastguard Worker chip: IrqSourceChip::Gic,
41*bb4ee6a4SAndroid Build Coastguard Worker pin: 3,
42*bb4ee6a4SAndroid Build Coastguard Worker },
43*bb4ee6a4SAndroid Build Coastguard Worker },
44*bb4ee6a4SAndroid Build Coastguard Worker IrqRoute {
45*bb4ee6a4SAndroid Build Coastguard Worker gsi: 2,
46*bb4ee6a4SAndroid Build Coastguard Worker source: IrqSource::Msi {
47*bb4ee6a4SAndroid Build Coastguard Worker address: 0xf000000,
48*bb4ee6a4SAndroid Build Coastguard Worker data: 0xa0,
49*bb4ee6a4SAndroid Build Coastguard Worker },
50*bb4ee6a4SAndroid Build Coastguard Worker },
51*bb4ee6a4SAndroid Build Coastguard Worker ])
52*bb4ee6a4SAndroid Build Coastguard Worker .unwrap();
53*bb4ee6a4SAndroid Build Coastguard Worker }
54