intdev.hh (13892:0182a0601f66) intdev.hh (14291:722551795497)
1/*
2 * Copyright (c) 2012 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

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

45
46#include <cassert>
47#include <list>
48#include <string>
49
50#include "arch/x86/intmessage.hh"
51#include "arch/x86/x86_traits.hh"
52#include "mem/mport.hh"
1/*
2 * Copyright (c) 2012 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

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

45
46#include <cassert>
47#include <list>
48#include <string>
49
50#include "arch/x86/intmessage.hh"
51#include "arch/x86/x86_traits.hh"
52#include "mem/mport.hh"
53#include "params/X86IntLine.hh"
54#include "params/X86IntSinkPin.hh"
55#include "params/X86IntSourcePin.hh"
56#include "sim/sim_object.hh"
57
58namespace X86ISA {
59
60typedef std::list<int> ApicList;
61
62class IntDevice
63{

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

116 {
117 }
118
119 virtual ~IntDevice()
120 {}
121
122 virtual void init();
123
53#include "sim/sim_object.hh"
54
55namespace X86ISA {
56
57typedef std::list<int> ApicList;
58
59class IntDevice
60{

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

113 {
114 }
115
116 virtual ~IntDevice()
117 {}
118
119 virtual void init();
120
124 virtual void
125 signalInterrupt(int line)
126 {
127 panic("signalInterrupt not implemented.\n");
128 }
129
130 virtual void
131 raiseInterruptPin(int number)
132 {
133 panic("raiseInterruptPin not implemented.\n");
134 }
135
136 virtual void
137 lowerInterruptPin(int number)
138 {
139 panic("lowerInterruptPin not implemented.\n");
140 }
141
142 virtual Tick
143 recvMessage(PacketPtr pkt)
144 {
145 panic("recvMessage not implemented.\n");
146 return 0;
147 }
148
149 virtual Tick

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

155
156 virtual AddrRangeList
157 getIntAddrRange() const
158 {
159 panic("intAddrRange not implemented.\n");
160 }
161};
162
121 virtual Tick
122 recvMessage(PacketPtr pkt)
123 {
124 panic("recvMessage not implemented.\n");
125 return 0;
126 }
127
128 virtual Tick

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

134
135 virtual AddrRangeList
136 getIntAddrRange() const
137 {
138 panic("intAddrRange not implemented.\n");
139 }
140};
141
163class IntSinkPin : public SimObject
164{
165 public:
166 IntDevice * device;
167 int number;
168
169 typedef X86IntSinkPinParams Params;
170
171 const Params *
172 params() const
173 {
174 return dynamic_cast<const Params *>(_params);
175 }
176
177 IntSinkPin(Params *p) : SimObject(p),
178 device(dynamic_cast<IntDevice *>(p->device)), number(p->number)
179 {
180 assert(device);
181 }
182};
183
184class IntSourcePin : public SimObject
185{
186 protected:
187 std::vector<IntSinkPin *> sinks;
188
189 public:
190 typedef X86IntSourcePinParams Params;
191
192 const Params *
193 params() const
194 {
195 return dynamic_cast<const Params *>(_params);
196 }
197
198 void
199 addSink(IntSinkPin *sink)
200 {
201 sinks.push_back(sink);
202 }
203
204 void
205 raise()
206 {
207 for (int i = 0; i < sinks.size(); i++) {
208 const IntSinkPin &pin = *sinks[i];
209 pin.device->raiseInterruptPin(pin.number);
210 }
211 }
212
213 void
214 lower()
215 {
216 for (int i = 0; i < sinks.size(); i++) {
217 const IntSinkPin &pin = *sinks[i];
218 pin.device->lowerInterruptPin(pin.number);
219 }
220 }
221
222 IntSourcePin(Params *p) : SimObject(p)
223 {}
224};
225
226class IntLine : public SimObject
227{
228 protected:
229 IntSourcePin *source;
230 IntSinkPin *sink;
231
232 public:
233 typedef X86IntLineParams Params;
234
235 const Params *
236 params() const
237 {
238 return dynamic_cast<const Params *>(_params);
239 }
240
241 IntLine(Params *p) : SimObject(p), source(p->source), sink(p->sink)
242 {
243 source->addSink(sink);
244 }
245};
246
247} // namespace X86ISA
248
249#endif //__DEV_X86_INTDEV_HH__
142} // namespace X86ISA
143
144#endif //__DEV_X86_INTDEV_HH__