gic.hh (12184:3aabca509b7a) gic.hh (13014:a4f71c3dc602)
1/*
2 * Copyright (c) 2015-2017 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

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

39 */
40
41#ifndef __ARCH_ARM_KVM_GIC_HH__
42#define __ARCH_ARM_KVM_GIC_HH__
43
44#include "arch/arm/system.hh"
45#include "cpu/kvm/device.hh"
46#include "cpu/kvm/vm.hh"
1/*
2 * Copyright (c) 2015-2017 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

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

39 */
40
41#ifndef __ARCH_ARM_KVM_GIC_HH__
42#define __ARCH_ARM_KVM_GIC_HH__
43
44#include "arch/arm/system.hh"
45#include "cpu/kvm/device.hh"
46#include "cpu/kvm/vm.hh"
47#include "dev/arm/gic_pl390.hh"
47#include "dev/arm/gic_v2.hh"
48#include "dev/platform.hh"
49
50/**
51 * KVM in-kernel GIC abstraction
52 *
53 * This class defines a high-level interface to the KVM in-kernel GIC
54 * model. It exposes an API that is similar to that of
55 * software-emulated GIC models in gem5.

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

163
164 /** Kernel interface to the GIC */
165 KvmDevice kdev;
166};
167
168
169struct MuxingKvmGicParams;
170
48#include "dev/platform.hh"
49
50/**
51 * KVM in-kernel GIC abstraction
52 *
53 * This class defines a high-level interface to the KVM in-kernel GIC
54 * model. It exposes an API that is similar to that of
55 * software-emulated GIC models in gem5.

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

163
164 /** Kernel interface to the GIC */
165 KvmDevice kdev;
166};
167
168
169struct MuxingKvmGicParams;
170
171class MuxingKvmGic : public Pl390
171class MuxingKvmGic : public GicV2
172{
173 public: // SimObject / Serializable / Drainable
174 MuxingKvmGic(const MuxingKvmGicParams *p);
175 ~MuxingKvmGic();
176
177 void startup() override;
178 DrainState drain() override;
179 void drainResume() override;
180
181 public: // PioDevice
182 Tick read(PacketPtr pkt) override;
183 Tick write(PacketPtr pkt) override;
184
172{
173 public: // SimObject / Serializable / Drainable
174 MuxingKvmGic(const MuxingKvmGicParams *p);
175 ~MuxingKvmGic();
176
177 void startup() override;
178 DrainState drain() override;
179 void drainResume() override;
180
181 public: // PioDevice
182 Tick read(PacketPtr pkt) override;
183 Tick write(PacketPtr pkt) override;
184
185 public: // Pl390
185 public: // GicV2
186 void sendInt(uint32_t num) override;
187 void clearInt(uint32_t num) override;
188
189 void sendPPInt(uint32_t num, uint32_t cpu) override;
190 void clearPPInt(uint32_t num, uint32_t cpu) override;
191
186 void sendInt(uint32_t num) override;
187 void clearInt(uint32_t num) override;
188
189 void sendPPInt(uint32_t num, uint32_t cpu) override;
190 void clearPPInt(uint32_t num, uint32_t cpu) override;
191
192 protected: // Pl390
192 protected: // GicV2
193 void updateIntState(int hint) override;
194
195 protected:
196 /** System this interrupt controller belongs to */
197 System &system;
198
199 /** Kernel GIC device */
200 KvmKernelGicV2 *kernelGic;
201
202 private:
203 bool usingKvm;
204
205 /** Multiplexing implementation */
193 void updateIntState(int hint) override;
194
195 protected:
196 /** System this interrupt controller belongs to */
197 System &system;
198
199 /** Kernel GIC device */
200 KvmKernelGicV2 *kernelGic;
201
202 private:
203 bool usingKvm;
204
205 /** Multiplexing implementation */
206 void fromPl390ToKvm();
207 void fromKvmToPl390();
206 void fromGicV2ToKvm();
207 void fromKvmToGicV2();
208
209 void copyGicState(BaseGicRegisters* from, BaseGicRegisters* to);
210
211 void copyDistRegister(BaseGicRegisters* from, BaseGicRegisters* to,
212 ContextID ctx, Addr daddr);
213 void copyCpuRegister(BaseGicRegisters* from, BaseGicRegisters* to,
214 ContextID ctx, Addr daddr);
215
216 void copyBankedDistRange(BaseGicRegisters* from, BaseGicRegisters* to,
217 Addr daddr, size_t size);
218 void clearBankedDistRange(BaseGicRegisters* to,
219 Addr daddr, size_t size);
220 void copyDistRange(BaseGicRegisters* from, BaseGicRegisters* to,
221 Addr daddr, size_t size);
222 void clearDistRange(BaseGicRegisters* to,
223 Addr daddr, size_t size);
224};
225
226#endif // __ARCH_ARM_KVM_GIC_HH__
208
209 void copyGicState(BaseGicRegisters* from, BaseGicRegisters* to);
210
211 void copyDistRegister(BaseGicRegisters* from, BaseGicRegisters* to,
212 ContextID ctx, Addr daddr);
213 void copyCpuRegister(BaseGicRegisters* from, BaseGicRegisters* to,
214 ContextID ctx, Addr daddr);
215
216 void copyBankedDistRange(BaseGicRegisters* from, BaseGicRegisters* to,
217 Addr daddr, size_t size);
218 void clearBankedDistRange(BaseGicRegisters* to,
219 Addr daddr, size_t size);
220 void copyDistRange(BaseGicRegisters* from, BaseGicRegisters* to,
221 Addr daddr, size_t size);
222 void clearDistRange(BaseGicRegisters* to,
223 Addr daddr, size_t size);
224};
225
226#endif // __ARCH_ARM_KVM_GIC_HH__