gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
i8254xGBe.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2006 The Regents of The University of Michigan
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * Authors: Ali Saidi
29  */
30 
31 /* @file
32  * Device model for Intel's 8254x line of gigabit ethernet controllers.
33  */
34 
35 #ifndef __DEV_NET_I8254XGBE_HH__
36 #define __DEV_NET_I8254XGBE_HH__
37 
38 #include <deque>
39 #include <string>
40 
41 #include "base/cp_annotate.hh"
42 #include "base/inet.hh"
43 #include "debug/EthernetDesc.hh"
44 #include "debug/EthernetIntr.hh"
45 #include "dev/net/etherdevice.hh"
46 #include "dev/net/etherint.hh"
47 #include "dev/net/etherpkt.hh"
49 #include "dev/net/pktfifo.hh"
50 #include "dev/pci/device.hh"
51 #include "params/IGbE.hh"
52 #include "sim/eventq.hh"
53 
54 class IGbEInt;
55 
56 class IGbE : public EtherDevice
57 {
58  private:
60  CPA *cpa;
61 
62  // device registers
64 
65  // eeprom data, status and control bits
67  uint8_t eeOpcode, eeAddr;
69 
70  // packet fifos
73 
74  // Packet that we are currently putting into the txFifo
76 
77  // Should to Rx/Tx State machine tick?
78  bool inTick;
79  bool rxTick;
80  bool txTick;
81  bool txFifoTick;
82 
84 
85  // Number of bytes copied from current RX packet
86  unsigned pktOffset;
87 
88  // Delays in managaging descriptors
92 
93  // Event and function to deal with RDTR timer expiring
94  void rdtrProcess() {
96  DPRINTF(EthernetIntr,
97  "Posting RXT interrupt because RDTR timer expired\n");
99  }
100 
102 
103  // Event and function to deal with RADV timer expiring
104  void radvProcess() {
106  DPRINTF(EthernetIntr,
107  "Posting RXT interrupt because RADV timer expired\n");
109  }
110 
112 
113  // Event and function to deal with TADV timer expiring
114  void tadvProcess() {
116  DPRINTF(EthernetIntr,
117  "Posting TXDW interrupt because TADV timer expired\n");
119  }
120 
122 
123  // Event and function to deal with TIDV timer expiring
124  void tidvProcess() {
126  DPRINTF(EthernetIntr,
127  "Posting TXDW interrupt because TIDV timer expired\n");
129  }
131 
132  // Main event to tick the device
133  void tick();
135 
136 
137  uint64_t macAddr;
138 
139  void rxStateMachine();
140  void txStateMachine();
141  void txWire();
142 
148  void postInterrupt(iGbReg::IntTypes t, bool now = false);
149 
153  void chkInterrupt();
154 
157  void delayIntEvent();
158  void cpuPostInt();
159  // Event to moderate interrupts
161 
164  void cpuClearInt();
165 
166  Tick intClock() { return SimClock::Int::ns * 1024; }
167 
170  void restartClock();
171 
175  void checkDrain();
176 
177  void anBegin(std::string sm, std::string st, int flags = CPA::FL_NONE) {
178  if (cpa)
179  cpa->hwBegin((CPA::flags)flags, sys, macAddr, sm, st);
180  }
181 
182  void anQ(std::string sm, std::string q) {
183  if (cpa)
184  cpa->hwQ(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
185  }
186 
187  void anDq(std::string sm, std::string q) {
188  if (cpa)
189  cpa->hwDq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
190  }
191 
192  void anPq(std::string sm, std::string q, int num = 1) {
193  if (cpa)
194  cpa->hwPq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr, NULL, num);
195  }
196 
197  void anRq(std::string sm, std::string q, int num = 1) {
198  if (cpa)
199  cpa->hwRq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr, NULL, num);
200  }
201 
202  void anWe(std::string sm, std::string q) {
203  if (cpa)
204  cpa->hwWe(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
205  }
206 
207  void anWf(std::string sm, std::string q) {
208  if (cpa)
209  cpa->hwWf(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
210  }
211 
212 
213  template<class T>
214  class DescCache : public Serializable
215  {
216  protected:
217  virtual Addr descBase() const = 0;
218  virtual long descHead() const = 0;
219  virtual long descTail() const = 0;
220  virtual long descLen() const = 0;
221  virtual void updateHead(long h) = 0;
222  virtual void enableSm() = 0;
223  virtual void actionAfterWb() {}
224  virtual void fetchAfterWb() = 0;
225 
227  CacheType usedCache;
228  CacheType unusedCache;
229 
231  T *wbBuf;
232 
233  // Pointer to the device we cache for
235 
236  // Name of this descriptor cache
237  std::string _name;
238 
239  // How far we've cached
240  int cachePnt;
241 
242  // The size of the descriptor cache
243  int size;
244 
245  // How many descriptors we are currently fetching
247 
248  // How many descriptors we are currently writing back
249  int wbOut;
250 
251  // if the we wrote back to the end of the descriptor ring and are going
252  // to have to wrap and write more
253  bool moreToWb;
254 
255  // What the alignment is of the next descriptor writeback
257 
260 
262  Addr pciToDma(Addr a) { return igbe->pciToDma(a); }
263 
264  public:
268 
269  DescCache(IGbE *i, const std::string n, int s);
270  virtual ~DescCache();
271 
272  std::string name() { return _name; }
273 
278  void areaChanged();
279 
280  void writeback(Addr aMask);
281  void writeback1();
283 
287  void fetchDescriptors();
288  void fetchDescriptors1();
290 
293  void fetchComplete();
295 
298  void wbComplete();
300 
301  /* Return the number of descriptors left in the ring, so the device has
302  * a way to figure out if it needs to interrupt.
303  */
304  unsigned
305  descLeft() const
306  {
307  unsigned left = unusedCache.size();
308  if (cachePnt > descTail())
309  left += (descLen() - cachePnt + descTail());
310  else
311  left += (descTail() - cachePnt);
312 
313  return left;
314  }
315 
316  /* Return the number of descriptors used and not written back.
317  */
318  unsigned descUsed() const { return usedCache.size(); }
319 
320  /* Return the number of cache unused descriptors we have. */
321  unsigned descUnused() const { return unusedCache.size(); }
322 
323  /* Get into a state where the descriptor address/head/etc colud be
324  * changed */
325  void reset();
326 
327 
328  void serialize(CheckpointOut &cp) const override;
329  void unserialize(CheckpointIn &cp) override;
330 
331  virtual bool hasOutstandingEvents() {
332  return wbEvent.scheduled() || fetchEvent.scheduled();
333  }
334 
335  };
336 
337 
338  class RxDescCache : public DescCache<iGbReg::RxDesc>
339  {
340  protected:
341  Addr descBase() const override { return igbe->regs.rdba(); }
342  long descHead() const override { return igbe->regs.rdh(); }
343  long descLen() const override { return igbe->regs.rdlen() >> 4; }
344  long descTail() const override { return igbe->regs.rdt(); }
345  void updateHead(long h) override { igbe->regs.rdh(h); }
346  void enableSm() override;
347  void fetchAfterWb() override {
350  }
351 
352  bool pktDone;
353 
356 
359  unsigned bytesCopied;
360 
361  public:
362  RxDescCache(IGbE *i, std::string n, int s);
363 
371  int writePacket(EthPacketPtr packet, int pkt_offset);
372 
375  void pktComplete();
376 
380  bool packetDone();
381 
383 
384  // Event to handle issuing header and data write at the same time
385  // and only callking pktComplete() when both are completed
386  void pktSplitDone();
389 
390  bool hasOutstandingEvents() override;
391 
392  void serialize(CheckpointOut &cp) const override;
393  void unserialize(CheckpointIn &cp) override;
394  };
395  friend class RxDescCache;
396 
398 
399  class TxDescCache : public DescCache<iGbReg::TxDesc>
400  {
401  protected:
402  Addr descBase() const override { return igbe->regs.tdba(); }
403  long descHead() const override { return igbe->regs.tdh(); }
404  long descTail() const override { return igbe->regs.tdt(); }
405  long descLen() const override { return igbe->regs.tdlen() >> 4; }
406  void updateHead(long h) override { igbe->regs.tdh(h); }
407  void enableSm() override;
408  void actionAfterWb() override;
409  void fetchAfterWb() override {
412  }
413 
414 
415 
416  bool pktDone;
417  bool isTcp;
422  uint32_t descEnd;
423 
424 
425  // tso variables
426  bool useTso;
435  uint8_t tsoHeader[256];
438  int tsoPkts;
439 
440  public:
441  TxDescCache(IGbE *i, std::string n, int s);
442 
447  unsigned getPacketSize(EthPacketPtr p);
448  void getPacketData(EthPacketPtr p);
449  void processContextDesc();
450 
454  unsigned
455  descInBlock(unsigned num_desc)
456  {
457  return num_desc / igbe->cacheBlockSize() / sizeof(iGbReg::TxDesc);
458  }
459 
464  bool packetAvailable();
465 
469  bool packetWaiting() { return pktWaiting; }
470 
477  bool packetMultiDesc() { return pktMultiDesc;}
478 
481  void pktComplete();
483 
484  void headerComplete();
486 
487 
489  DPRINTF(EthernetDesc,
490  "Completion writeback Addr: %#x enabled: %d\n",
491  a, enabled);
492  completionAddress = a;
493  completionEnabled = enabled;
494  }
495 
496  bool hasOutstandingEvents() override;
497 
498  void nullCallback() {
499  DPRINTF(EthernetDesc, "Completion writeback complete\n");
500  }
502 
503  void serialize(CheckpointOut &cp) const override;
504  void unserialize(CheckpointIn &cp) override;
505  };
506 
507  friend class TxDescCache;
508 
510 
511  public:
512  typedef IGbEParams Params;
513  const Params *
514  params() const {
515  return dynamic_cast<const Params *>(_params);
516  }
517 
518  IGbE(const Params *params);
519  ~IGbE();
520  void init() override;
521 
522  Port &getPort(const std::string &if_name,
523  PortID idx=InvalidPortID) override;
524 
526 
527  Tick read(PacketPtr pkt) override;
528  Tick write(PacketPtr pkt) override;
529 
530  Tick writeConfig(PacketPtr pkt) override;
531 
532  bool ethRxPkt(EthPacketPtr packet);
533  void ethTxDone();
534 
535  void serialize(CheckpointOut &cp) const override;
536  void unserialize(CheckpointIn &cp) override;
537 
538  DrainState drain() override;
539  void drainResume() override;
540 
541 };
542 
543 class IGbEInt : public EtherInt
544 {
545  private:
547 
548  public:
549  IGbEInt(const std::string &name, IGbE *d)
550  : EtherInt(name), dev(d)
551  { }
552 
553  virtual bool recvPacket(EthPacketPtr pkt) { return dev->ethRxPkt(pkt); }
554  virtual void sendDone() { dev->ethTxDone(); }
555 };
556 
557 #endif //__DEV_NET_I8254XGBE_HH__
EventFunctionWrapper interEvent
Definition: i8254xGBe.hh:160
#define DPRINTF(x,...)
Definition: trace.hh:229
void anQ(std::string sm, std::string q)
Definition: i8254xGBe.hh:182
virtual long descHead() const =0
EventFunctionWrapper fetchDelayEvent
Definition: i8254xGBe.hh:289
EventFunctionWrapper pktHdrEvent
Definition: i8254xGBe.hh:387
friend class RxDescCache
Definition: i8254xGBe.hh:395
Ports are used to interface objects to each other.
Definition: port.hh:60
void hwDq(flags f, System *sys, uint64_t frame, std::string sm, std::string q, uint64_t qid, System *q_sys=NULL, int32_t count=1)
Definition: cp_annotate.hh:109
TxDescCache txDescCache
Definition: i8254xGBe.hh:509
long descTail() const override
Definition: i8254xGBe.hh:344
IGbEInt * etherInt
Definition: i8254xGBe.hh:59
unsigned descUnused() const
Definition: i8254xGBe.hh:321
unsigned pktOffset
Definition: i8254xGBe.hh:86
uint64_t macAddr
Definition: i8254xGBe.hh:137
void rdtrProcess()
Definition: i8254xGBe.hh:94
void txStateMachine()
Definition: i8254xGBe.cc:2133
Addr pciToDma(Addr pci_addr) const
Definition: device.hh:198
IGbEInt(const std::string &name, IGbE *d)
Definition: i8254xGBe.hh:549
Bitfield< 7 > i
const PortID InvalidPortID
Definition: types.hh:238
unsigned descInBlock(unsigned num_desc)
Return the number of dsecriptors in a cache block for threshold operations.
Definition: i8254xGBe.hh:455
DrainState
Object drain/handover states.
Definition: drain.hh:71
void chkInterrupt()
Check and see if changes to the mask register have caused an interrupt to need to be sent or perhaps ...
Definition: i8254xGBe.cc:791
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Definition: i8254xGBe.cc:143
std::string annSmWb
Definition: i8254xGBe.hh:266
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: i8254xGBe.cc:1126
EventFunctionWrapper tickEvent
Definition: i8254xGBe.hh:134
EventFunctionWrapper pktEvent
Definition: i8254xGBe.hh:382
unsigned bytesCopied
Bytes of packet that have been copied, so we know when to set EOP.
Definition: i8254xGBe.hh:359
Bitfield< 8 > a
void hwQ(flags f, System *sys, uint64_t frame, std::string sm, std::string q, uint64_t qid, System *q_sys=NULL, int32_t count=1)
Definition: cp_annotate.hh:106
friend class TxDescCache
Definition: i8254xGBe.hh:507
unsigned descLeft() const
Definition: i8254xGBe.hh:305
virtual Addr descBase() const =0
DrainState drainState() const
Return the current drain state of an object.
Definition: drain.hh:282
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: i8254xGBe.cc:1161
virtual void fetchAfterWb()=0
void restartClock()
This function is used to restart the clock so it can handle things like draining and resume in one pl...
Definition: i8254xGBe.cc:2073
virtual bool recvPacket(EthPacketPtr pkt)
Definition: i8254xGBe.hh:553
int eeOpBits
Definition: i8254xGBe.hh:66
CacheType unusedCache
Definition: i8254xGBe.hh:228
EventFunctionWrapper radvEvent
Definition: i8254xGBe.hh:111
void hwWe(flags f, System *sys, uint64_t frame, std::string sm, std::string q, uint64_t qid, System *q_sys=NULL, int32_t count=1)
Definition: cp_annotate.hh:121
Definition: cprintf.cc:42
DescCache(IGbE *i, const std::string n, int s)
Definition: i8254xGBe.cc:825
void rxStateMachine()
Definition: i8254xGBe.cc:2283
void writeback(Addr aMask)
Definition: i8254xGBe.cc:857
Addr descBase() const override
Definition: i8254xGBe.hh:402
virtual long descTail() const =0
EventFunctionWrapper wbEvent
Definition: i8254xGBe.hh:299
Tick rxWriteDelay
Definition: i8254xGBe.hh:91
std::string annSmFetch
Annotate sm.
Definition: i8254xGBe.hh:266
virtual void enableSm()=0
PacketFifo rxFifo
Definition: i8254xGBe.hh:71
void hwBegin(flags f, System *sys, uint64_t frame, std::string sm, std::string st)
Definition: cp_annotate.hh:104
Tick wbDelay
Definition: i8254xGBe.hh:89
Bitfield< 31 > n
void wbComplete()
Called by event when dma to writeback descriptors is completed.
Definition: i8254xGBe.cc:1058
void updateHead(long h) override
Definition: i8254xGBe.hh:406
void fetchAfterWb() override
Definition: i8254xGBe.hh:347
void anRq(std::string sm, std::string q, int num=1)
Definition: i8254xGBe.hh:197
void delayIntEvent()
Send an interrupt to the cpu.
Definition: i8254xGBe.cc:728
EventFunctionWrapper pktEvent
Definition: i8254xGBe.hh:482
long descHead() const override
Definition: i8254xGBe.hh:403
virtual void actionAfterWb()
Definition: i8254xGBe.hh:223
void drainResume() override
Resume execution after a successful drain.
Definition: i8254xGBe.cc:2104
void anWf(std::string sm, std::string q)
Definition: i8254xGBe.hh:207
uint8_t eeAddr
Definition: i8254xGBe.hh:67
uint8_t eeOpcode
Definition: i8254xGBe.hh:67
void updateHead(long h) override
Definition: i8254xGBe.hh:345
IGbE * dev
Definition: i8254xGBe.hh:546
void postInterrupt(iGbReg::IntTypes t, bool now=false)
Write an interrupt into the interrupt pending register and check mask and interrupt limit timer befor...
Definition: i8254xGBe.cc:695
void anWe(std::string sm, std::string q)
Definition: i8254xGBe.hh:202
bool scheduled() const
Determine if the current event is scheduled.
Definition: eventq.hh:385
Bitfield< 4 > s
unsigned descUsed() const
Definition: i8254xGBe.hh:318
long descTail() const override
Definition: i8254xGBe.hh:404
uint64_t Tick
Tick count type.
Definition: types.hh:63
bool packetWaiting()
Ask if we are still waiting for the packet to be transfered.
Definition: i8254xGBe.hh:469
bool txFifoTick
Definition: i8254xGBe.hh:81
Bitfield< 27 > q
void writeback1()
Definition: i8254xGBe.cc:911
IGbEParams Params
Definition: i8254xGBe.hh:512
bool txTick
Definition: i8254xGBe.hh:80
Bitfield< 9 > d
void checkDrain()
Check if all the draining things that need to occur have occured and handle the drain event if so...
Definition: i8254xGBe.cc:2117
std::string annUnusedDescQ
Definition: i8254xGBe.hh:266
Tick fetchDelay
Definition: i8254xGBe.hh:89
void anBegin(std::string sm, std::string st, int flags=CPA::FL_NONE)
Definition: i8254xGBe.hh:177
PacketFifo txFifo
Definition: i8254xGBe.hh:72
virtual void sendDone()
Definition: i8254xGBe.hh:554
long descLen() const override
Definition: i8254xGBe.hh:405
std::shared_ptr< EthPacketData > EthPacketPtr
Definition: etherpkt.hh:90
void hwWf(flags f, System *sys, uint64_t frame, std::string sm, std::string q, uint64_t qid, System *q_sys=NULL, int32_t count=1)
Definition: cp_annotate.hh:118
~IGbE()
Definition: i8254xGBe.cc:130
virtual bool hasOutstandingEvents()
Definition: i8254xGBe.hh:331
EventFunctionWrapper fetchEvent
Definition: i8254xGBe.hh:294
void tadvProcess()
Definition: i8254xGBe.hh:114
std::string _name
Definition: i8254xGBe.hh:237
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
Tick wbCompDelay
Definition: i8254xGBe.hh:90
CacheType usedCache
Definition: i8254xGBe.hh:227
System * sys
Definition: io_device.hh:105
EventFunctionWrapper pktDataEvent
Definition: i8254xGBe.hh:388
std::string annUsedDescQ
Definition: i8254xGBe.hh:266
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:255
void areaChanged()
If the address/len/head change when we&#39;ve got descriptors that are dirty that is very bad...
Definition: i8254xGBe.cc:847
void tick()
Definition: i8254xGBe.cc:2435
Basic support for object serialization.
Definition: serialize.hh:153
iGbReg::Regs regs
Definition: i8254xGBe.hh:63
bool rxDmaPacket
Definition: i8254xGBe.hh:83
bool enabled()
Definition: statistics.cc:546
virtual void updateHead(long h)=0
void txWire()
Definition: i8254xGBe.cc:2400
long descLen() const override
Definition: i8254xGBe.hh:343
const Params * params() const
Definition: i8254xGBe.hh:514
Tick txReadDelay
Definition: i8254xGBe.hh:91
Base Ethernet Device declaration.
DrainState drain() override
Notify an object that it needs to drain its state.
Definition: i8254xGBe.cc:2081
bool ethRxPkt(EthPacketPtr packet)
Definition: i8254xGBe.cc:2235
Tick write(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: i8254xGBe.cc:358
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: i8254xGBe.cc:136
Addr pciToDma(Addr a)
Shortcut for DMA address translation.
Definition: i8254xGBe.hh:262
RxDescCache rxDescCache
Definition: i8254xGBe.hh:397
IGbE(const Params *params)
Definition: i8254xGBe.cc:60
void hwPq(flags f, System *sys, uint64_t frame, std::string sm, std::string q, uint64_t qid, System *q_sys=NULL, int32_t count=1)
Definition: cp_annotate.hh:112
Addr descBase() const override
Definition: i8254xGBe.hh:341
EventFunctionWrapper headerEvent
Definition: i8254xGBe.hh:485
void completionWriteback(Addr a, bool enabled)
Definition: i8254xGBe.hh:488
CPA * cpa
Definition: i8254xGBe.hh:60
void fetchAfterWb() override
Definition: i8254xGBe.hh:409
std::ostream CheckpointOut
Definition: serialize.hh:68
Bitfield< 31, 28 > st
unsigned int cacheBlockSize() const
Definition: dma_device.hh:209
void anDq(std::string sm, std::string q)
Definition: i8254xGBe.hh:187
std::deque< T * > CacheType
Definition: i8254xGBe.hh:226
EventFunctionWrapper wbDelayEvent
Definition: i8254xGBe.hh:282
const SimObjectParams * _params
Cached copy of the object parameters.
Definition: sim_object.hh:110
void anPq(std::string sm, std::string q, int num=1)
Definition: i8254xGBe.hh:192
std::string name()
Definition: i8254xGBe.hh:272
std::string annUsedCacheQ
Definition: i8254xGBe.hh:266
EventFunctionWrapper tadvEvent
Definition: i8254xGBe.hh:121
long descHead() const override
Definition: i8254xGBe.hh:342
Tick ns
nanosecond
Definition: core.cc:68
EthPacketPtr txPacket
Definition: i8254xGBe.hh:75
EventFunctionWrapper tidvEvent
Definition: i8254xGBe.hh:130
const uint8_t EEPROM_SIZE
void ethTxDone()
Definition: i8254xGBe.cc:2463
void fetchDescriptors()
Fetch a chunk of descriptors into the descriptor cache.
Definition: i8254xGBe.cc:940
void fetchComplete()
Called by event when dma to read descriptors is completed.
Definition: i8254xGBe.cc:1014
int eeAddrBits
Definition: i8254xGBe.hh:66
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition: types.hh:237
void radvProcess()
Definition: i8254xGBe.hh:104
std::string annDescQ
Definition: i8254xGBe.hh:266
Tick lastInterrupt
Definition: i8254xGBe.hh:525
void cpuPostInt()
Definition: i8254xGBe.cc:735
Tick intClock()
Definition: i8254xGBe.hh:166
Bitfield< 5 > t
bool packetMultiDesc()
Ask if this packet is composed of multiple descriptors so even if we&#39;ve got data, we need to wait for...
Definition: i8254xGBe.hh:477
EventFunctionWrapper rdtrEvent
Definition: i8254xGBe.hh:101
void cpuClearInt()
Clear the interupt line to the cpu.
Definition: i8254xGBe.cc:779
virtual long descLen() const =0
uint32_t descEnd
Definition: i8254xGBe.hh:422
uint16_t flash[iGbReg::EEPROM_SIZE]
Definition: i8254xGBe.hh:68
EthPacketPtr pktPtr
The packet that is currently being dmad to memory if any.
Definition: i8254xGBe.hh:259
Bitfield< 0 > p
bool inTick
Definition: i8254xGBe.hh:78
Tick fetchCompDelay
Definition: i8254xGBe.hh:90
void hwRq(flags f, System *sys, uint64_t frame, std::string sm, std::string q, uint64_t qid, System *q_sys=NULL, int32_t count=1)
Definition: cp_annotate.hh:115
EventFunctionWrapper nullEvent
Definition: i8254xGBe.hh:501
int eeDataBits
Definition: i8254xGBe.hh:66
int splitCount
Variable to head with header/data completion events.
Definition: i8254xGBe.hh:355
std::string annUnusedCacheQ
Definition: i8254xGBe.hh:266
virtual ~DescCache()
Definition: i8254xGBe.cc:838
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: i8254xGBe.cc:170
void tidvProcess()
Definition: i8254xGBe.hh:124
bool rxTick
Definition: i8254xGBe.hh:79
void fetchDescriptors1()
Definition: i8254xGBe.cc:992
Tick writeConfig(PacketPtr pkt) override
Write to the PCI config space data that is stored locally.
Definition: i8254xGBe.cc:151
Bitfield< 1 > sm

Generated on Fri Feb 28 2020 16:27:01 for gem5 by doxygen 1.8.13