xref: /aosp_15_r20/external/crosvm/hypervisor/tests/kvm/aarch64.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 // 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