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__ |