Deleted Added
sdiff udiff text old ( 11178:555325cbf464 ) new ( 11461:294fe30960f0 )
full compact
1/*
2 * Copyright (c) 2015 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 30 unchanged lines hidden (view full) ---

41#define __ARCH_ARM_KVM_GIC_HH__
42
43#include "arch/arm/system.hh"
44#include "cpu/kvm/device.hh"
45#include "cpu/kvm/vm.hh"
46#include "dev/arm/base_gic.hh"
47#include "dev/platform.hh"
48
49class KvmGicParams;
50
51/**
52 * In-kernel GIC model.
53 *
54 * When using a KVM-based CPU model, it is possible to offload GIC
55 * emulation to the kernel. This reduces some overheads when the guest
56 * accesses the GIC and makes it possible to use in-kernel
57 * architected/generic timer emulation.
58 *

--- 16 unchanged lines hidden (view full) ---

75 public: // SimObject / Serializable / Drainable
76 KvmGic(const KvmGicParams *p);
77 ~KvmGic();
78
79 void startup() override { verifyMemoryMode(); }
80 void drainResume() override { verifyMemoryMode(); }
81
82 void serialize(CheckpointOut &cp) const override;
83 void unserialize(CheckpointIn &cp) override;
84
85 public: // PioDevice
86 AddrRangeList getAddrRanges() const { return addrRanges; }
87 Tick read(PacketPtr pkt) override;
88 Tick write(PacketPtr pkt) override;
89
90 public: // BaseGic
91 void sendInt(uint32_t num) override;

--- 8 unchanged lines hidden (view full) ---

100 *
101 * This method only really exists to warn users that try to switch
102 * to a simulate CPU. There is no fool proof method to detect
103 * simulated CPUs, but checking that we're in atomic mode and
104 * bypassing caches should be robust enough.
105 */
106 void verifyMemoryMode() const;
107
108 /**
109 * Update the kernel's VGIC interrupt state
110 *
111 * @param type Interrupt type (KVM_ARM_IRQ_TYPE_PPI/KVM_ARM_IRQ_TYPE_SPI)
112 * @param vcpu CPU id within KVM (ignored for SPIs)
113 * @param irq Interrupt number
114 * @param high True to signal an interrupt, false to clear it.
115 */
116 void setIntState(uint8_t type, uint8_t vcpu, uint16_t irq, bool high);
117
118 /** System this interrupt controller belongs to */
119 System &system;
120 /** VM for this system */
121 KvmVM &vm;
122 /** Kernel interface to the GIC */
123 KvmDevice kdev;
124
125 /** Address range for the distributor interface */
126 const AddrRange distRange;
127 /** Address range for the CPU interfaces */
128 const AddrRange cpuRange;
129 /** Union of all memory */
130 const AddrRangeList addrRanges;
131};
132
133#endif // __ARCH_ARM_KVM_GIC_HH__