gem5  v20.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 
29 /* @file
30  * Device model for Intel's 8254x line of gigabit ethernet controllers.
31  */
32 
33 #ifndef __DEV_NET_I8254XGBE_HH__
34 #define __DEV_NET_I8254XGBE_HH__
35 
36 #include <deque>
37 #include <string>
38 
39 #include "base/cp_annotate.hh"
40 #include "base/inet.hh"
41 #include "debug/EthernetDesc.hh"
42 #include "debug/EthernetIntr.hh"
43 #include "dev/net/etherdevice.hh"
44 #include "dev/net/etherint.hh"
45 #include "dev/net/etherpkt.hh"
47 #include "dev/net/pktfifo.hh"
48 #include "dev/pci/device.hh"
49 #include "params/IGbE.hh"
50 #include "sim/eventq.hh"
51 
52 class IGbEInt;
53 
54 class IGbE : public EtherDevice
55 {
56  private:
58  CPA *cpa;
59 
60  // device registers
62 
63  // eeprom data, status and control bits
65  uint8_t eeOpcode, eeAddr;
67 
68  // packet fifos
71 
72  // Packet that we are currently putting into the txFifo
74 
75  // Should to Rx/Tx State machine tick?
76  bool inTick;
77  bool rxTick;
78  bool txTick;
79  bool txFifoTick;
80 
82 
83  // Number of bytes copied from current RX packet
84  unsigned pktOffset;
85 
86  // Delays in managaging descriptors
90 
91  // Event and function to deal with RDTR timer expiring
92  void rdtrProcess() {
94  DPRINTF(EthernetIntr,
95  "Posting RXT interrupt because RDTR timer expired\n");
97  }
98 
100 
101  // Event and function to deal with RADV timer expiring
102  void radvProcess() {
104  DPRINTF(EthernetIntr,
105  "Posting RXT interrupt because RADV timer expired\n");
107  }
108 
110 
111  // Event and function to deal with TADV timer expiring
112  void tadvProcess() {
114  DPRINTF(EthernetIntr,
115  "Posting TXDW interrupt because TADV timer expired\n");
117  }
118 
120 
121  // Event and function to deal with TIDV timer expiring
122  void tidvProcess() {
124  DPRINTF(EthernetIntr,
125  "Posting TXDW interrupt because TIDV timer expired\n");
127  }
129 
130  // Main event to tick the device
131  void tick();
133 
134 
135  uint64_t macAddr;
136 
137  void rxStateMachine();
138  void txStateMachine();
139  void txWire();
140 
146  void postInterrupt(iGbReg::IntTypes t, bool now = false);
147 
151  void chkInterrupt();
152 
155  void delayIntEvent();
156  void cpuPostInt();
157  // Event to moderate interrupts
159 
162  void cpuClearInt();
163 
164  Tick intClock() { return SimClock::Int::ns * 1024; }
165 
168  void restartClock();
169 
173  void checkDrain();
174 
175  void anBegin(std::string sm, std::string st, int flags = CPA::FL_NONE) {
176  if (cpa)
177  cpa->hwBegin((CPA::flags)flags, sys, macAddr, sm, st);
178  }
179 
180  void anQ(std::string sm, std::string q) {
181  if (cpa)
182  cpa->hwQ(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
183  }
184 
185  void anDq(std::string sm, std::string q) {
186  if (cpa)
187  cpa->hwDq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
188  }
189 
190  void anPq(std::string sm, std::string q, int num = 1) {
191  if (cpa)
192  cpa->hwPq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr, NULL, num);
193  }
194 
195  void anRq(std::string sm, std::string q, int num = 1) {
196  if (cpa)
197  cpa->hwRq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr, NULL, num);
198  }
199 
200  void anWe(std::string sm, std::string q) {
201  if (cpa)
202  cpa->hwWe(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
203  }
204 
205  void anWf(std::string sm, std::string q) {
206  if (cpa)
207  cpa->hwWf(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
208  }
209 
210 
211  template<class T>
212  class DescCache : public Serializable
213  {
214  protected:
215  virtual Addr descBase() const = 0;
216  virtual long descHead() const = 0;
217  virtual long descTail() const = 0;
218  virtual long descLen() const = 0;
219  virtual void updateHead(long h) = 0;
220  virtual void enableSm() = 0;
221  virtual void actionAfterWb() {}
222  virtual void fetchAfterWb() = 0;
223 
225  CacheType usedCache;
226  CacheType unusedCache;
227 
229  T *wbBuf;
230 
231  // Pointer to the device we cache for
233 
234  // Name of this descriptor cache
235  std::string _name;
236 
237  // How far we've cached
238  int cachePnt;
239 
240  // The size of the descriptor cache
241  int size;
242 
243  // How many descriptors we are currently fetching
245 
246  // How many descriptors we are currently writing back
247  int wbOut;
248 
249  // if the we wrote back to the end of the descriptor ring and are going
250  // to have to wrap and write more
251  bool moreToWb;
252 
253  // What the alignment is of the next descriptor writeback
255 
258 
260  Addr pciToDma(Addr a) { return igbe->pciToDma(a); }
261 
262  public:
266 
267  DescCache(IGbE *i, const std::string n, int s);
268  virtual ~DescCache();
269 
270  std::string name() { return _name; }
271 
276  void areaChanged();
277 
278  void writeback(Addr aMask);
279  void writeback1();
281 
285  void fetchDescriptors();
286  void fetchDescriptors1();
288 
291  void fetchComplete();
293 
296  void wbComplete();
298 
299  /* Return the number of descriptors left in the ring, so the device has
300  * a way to figure out if it needs to interrupt.
301  */
302  unsigned
303  descLeft() const
304  {
305  unsigned left = unusedCache.size();
306  if (cachePnt > descTail())
307  left += (descLen() - cachePnt + descTail());
308  else
309  left += (descTail() - cachePnt);
310 
311  return left;
312  }
313 
314  /* Return the number of descriptors used and not written back.
315  */
316  unsigned descUsed() const { return usedCache.size(); }
317 
318  /* Return the number of cache unused descriptors we have. */
319  unsigned descUnused() const { return unusedCache.size(); }
320 
321  /* Get into a state where the descriptor address/head/etc colud be
322  * changed */
323  void reset();
324 
325 
326  void serialize(CheckpointOut &cp) const override;
327  void unserialize(CheckpointIn &cp) override;
328 
329  virtual bool hasOutstandingEvents() {
330  return wbEvent.scheduled() || fetchEvent.scheduled();
331  }
332 
333  };
334 
335 
336  class RxDescCache : public DescCache<iGbReg::RxDesc>
337  {
338  protected:
339  Addr descBase() const override { return igbe->regs.rdba(); }
340  long descHead() const override { return igbe->regs.rdh(); }
341  long descLen() const override { return igbe->regs.rdlen() >> 4; }
342  long descTail() const override { return igbe->regs.rdt(); }
343  void updateHead(long h) override { igbe->regs.rdh(h); }
344  void enableSm() override;
345  void fetchAfterWb() override {
348  }
349 
350  bool pktDone;
351 
354 
357  unsigned bytesCopied;
358 
359  public:
360  RxDescCache(IGbE *i, std::string n, int s);
361 
369  int writePacket(EthPacketPtr packet, int pkt_offset);
370 
373  void pktComplete();
374 
378  bool packetDone();
379 
381 
382  // Event to handle issuing header and data write at the same time
383  // and only callking pktComplete() when both are completed
384  void pktSplitDone();
387 
388  bool hasOutstandingEvents() override;
389 
390  void serialize(CheckpointOut &cp) const override;
391  void unserialize(CheckpointIn &cp) override;
392  };
393  friend class RxDescCache;
394 
396 
397  class TxDescCache : public DescCache<iGbReg::TxDesc>
398  {
399  protected:
400  Addr descBase() const override { return igbe->regs.tdba(); }
401  long descHead() const override { return igbe->regs.tdh(); }
402  long descTail() const override { return igbe->regs.tdt(); }
403  long descLen() const override { return igbe->regs.tdlen() >> 4; }
404  void updateHead(long h) override { igbe->regs.tdh(h); }
405  void enableSm() override;
406  void actionAfterWb() override;
407  void fetchAfterWb() override {
410  }
411 
412 
413 
414  bool pktDone;
415  bool isTcp;
420  uint32_t descEnd;
421 
422 
423  // tso variables
424  bool useTso;
433  uint8_t tsoHeader[256];
436  int tsoPkts;
437 
438  public:
439  TxDescCache(IGbE *i, std::string n, int s);
440 
445  unsigned getPacketSize(EthPacketPtr p);
446  void getPacketData(EthPacketPtr p);
447  void processContextDesc();
448 
452  unsigned
453  descInBlock(unsigned num_desc)
454  {
455  return num_desc / igbe->cacheBlockSize() / sizeof(iGbReg::TxDesc);
456  }
457 
462  bool packetAvailable();
463 
467  bool packetWaiting() { return pktWaiting; }
468 
475  bool packetMultiDesc() { return pktMultiDesc;}
476 
479  void pktComplete();
481 
482  void headerComplete();
484 
485 
487  DPRINTF(EthernetDesc,
488  "Completion writeback Addr: %#x enabled: %d\n",
489  a, enabled);
490  completionAddress = a;
491  completionEnabled = enabled;
492  }
493 
494  bool hasOutstandingEvents() override;
495 
496  void nullCallback() {
497  DPRINTF(EthernetDesc, "Completion writeback complete\n");
498  }
500 
501  void serialize(CheckpointOut &cp) const override;
502  void unserialize(CheckpointIn &cp) override;
503  };
504 
505  friend class TxDescCache;
506 
508 
509  public:
510  typedef IGbEParams Params;
511  const Params *
512  params() const {
513  return dynamic_cast<const Params *>(_params);
514  }
515 
516  IGbE(const Params *params);
517  ~IGbE();
518  void init() override;
519 
520  Port &getPort(const std::string &if_name,
521  PortID idx=InvalidPortID) override;
522 
524 
525  Tick read(PacketPtr pkt) override;
526  Tick write(PacketPtr pkt) override;
527 
528  Tick writeConfig(PacketPtr pkt) override;
529 
530  bool ethRxPkt(EthPacketPtr packet);
531  void ethTxDone();
532 
533  void serialize(CheckpointOut &cp) const override;
534  void unserialize(CheckpointIn &cp) override;
535 
536  DrainState drain() override;
537  void drainResume() override;
538 
539 };
540 
541 class IGbEInt : public EtherInt
542 {
543  private:
545 
546  public:
547  IGbEInt(const std::string &name, IGbE *d)
548  : EtherInt(name), dev(d)
549  { }
550 
551  virtual bool recvPacket(EthPacketPtr pkt) { return dev->ethRxPkt(pkt); }
552  virtual void sendDone() { dev->ethTxDone(); }
553 };
554 
555 #endif //__DEV_NET_I8254XGBE_HH__
EventFunctionWrapper interEvent
Definition: i8254xGBe.hh:158
#define DPRINTF(x,...)
Definition: trace.hh:225
void anQ(std::string sm, std::string q)
Definition: i8254xGBe.hh:180
virtual long descHead() const =0
EventFunctionWrapper fetchDelayEvent
Definition: i8254xGBe.hh:287
EventFunctionWrapper pktHdrEvent
Definition: i8254xGBe.hh:385
friend class RxDescCache
Definition: i8254xGBe.hh:393
Ports are used to interface objects to each other.
Definition: port.hh:56
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:119
TxDescCache txDescCache
Definition: i8254xGBe.hh:507
long descTail() const override
Definition: i8254xGBe.hh:342
IGbEInt * etherInt
Definition: i8254xGBe.hh:57
unsigned descUnused() const
Definition: i8254xGBe.hh:319
unsigned pktOffset
Definition: i8254xGBe.hh:84
uint64_t macAddr
Definition: i8254xGBe.hh:135
void rdtrProcess()
Definition: i8254xGBe.hh:92
void txStateMachine()
Definition: i8254xGBe.cc:2131
Addr pciToDma(Addr pci_addr) const
Definition: device.hh:194
IGbEInt(const std::string &name, IGbE *d)
Definition: i8254xGBe.hh:547
Bitfield< 7 > i
const PortID InvalidPortID
Definition: types.hh:236
unsigned descInBlock(unsigned num_desc)
Return the number of dsecriptors in a cache block for threshold operations.
Definition: i8254xGBe.hh:453
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:789
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Definition: i8254xGBe.cc:141
std::string annSmWb
Definition: i8254xGBe.hh:264
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: i8254xGBe.cc:1124
EventFunctionWrapper tickEvent
Definition: i8254xGBe.hh:132
EventFunctionWrapper pktEvent
Definition: i8254xGBe.hh:380
unsigned bytesCopied
Bytes of packet that have been copied, so we know when to set EOP.
Definition: i8254xGBe.hh:357
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:116
friend class TxDescCache
Definition: i8254xGBe.hh:505
unsigned descLeft() const
Definition: i8254xGBe.hh:303
virtual Addr descBase() const =0
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: i8254xGBe.cc:1159
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:2071
virtual bool recvPacket(EthPacketPtr pkt)
Definition: i8254xGBe.hh:551
int eeOpBits
Definition: i8254xGBe.hh:64
CacheType unusedCache
Definition: i8254xGBe.hh:226
EventFunctionWrapper radvEvent
Definition: i8254xGBe.hh:109
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:131
Definition: cprintf.cc:40
DescCache(IGbE *i, const std::string n, int s)
Definition: i8254xGBe.cc:823
void rxStateMachine()
Definition: i8254xGBe.cc:2281
void writeback(Addr aMask)
Definition: i8254xGBe.cc:855
Addr descBase() const override
Definition: i8254xGBe.hh:400
virtual long descTail() const =0
EventFunctionWrapper wbEvent
Definition: i8254xGBe.hh:297
DrainState
Object drain/handover states.
Definition: drain.hh:71
Tick rxWriteDelay
Definition: i8254xGBe.hh:89
std::string annSmFetch
Annotate sm.
Definition: i8254xGBe.hh:264
virtual void enableSm()=0
PacketFifo rxFifo
Definition: i8254xGBe.hh:69
void hwBegin(flags f, System *sys, uint64_t frame, std::string sm, std::string st)
Definition: cp_annotate.hh:114
Tick wbDelay
Definition: i8254xGBe.hh:87
Bitfield< 31 > n
void wbComplete()
Called by event when dma to writeback descriptors is completed.
Definition: i8254xGBe.cc:1056
void updateHead(long h) override
Definition: i8254xGBe.hh:404
DrainState drainState() const
Return the current drain state of an object.
Definition: drain.hh:308
void fetchAfterWb() override
Definition: i8254xGBe.hh:345
void anRq(std::string sm, std::string q, int num=1)
Definition: i8254xGBe.hh:195
void delayIntEvent()
Send an interrupt to the cpu.
Definition: i8254xGBe.cc:726
EventFunctionWrapper pktEvent
Definition: i8254xGBe.hh:480
long descHead() const override
Definition: i8254xGBe.hh:401
virtual void actionAfterWb()
Definition: i8254xGBe.hh:221
void drainResume() override
Resume execution after a successful drain.
Definition: i8254xGBe.cc:2102
void anWf(std::string sm, std::string q)
Definition: i8254xGBe.hh:205
uint8_t eeAddr
Definition: i8254xGBe.hh:65
uint8_t eeOpcode
Definition: i8254xGBe.hh:65
void updateHead(long h) override
Definition: i8254xGBe.hh:343
IGbE * dev
Definition: i8254xGBe.hh:544
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:693
void anWe(std::string sm, std::string q)
Definition: i8254xGBe.hh:200
Bitfield< 4 > s
unsigned descUsed() const
Definition: i8254xGBe.hh:316
long descTail() const override
Definition: i8254xGBe.hh:402
uint64_t Tick
Tick count type.
Definition: types.hh:61
bool packetWaiting()
Ask if we are still waiting for the packet to be transfered.
Definition: i8254xGBe.hh:467
bool txFifoTick
Definition: i8254xGBe.hh:79
Bitfield< 27 > q
void writeback1()
Definition: i8254xGBe.cc:909
IGbEParams Params
Definition: i8254xGBe.hh:510
bool txTick
Definition: i8254xGBe.hh:78
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:2115
std::string annUnusedDescQ
Definition: i8254xGBe.hh:264
Tick fetchDelay
Definition: i8254xGBe.hh:87
void anBegin(std::string sm, std::string st, int flags=CPA::FL_NONE)
Definition: i8254xGBe.hh:175
PacketFifo txFifo
Definition: i8254xGBe.hh:70
virtual void sendDone()
Definition: i8254xGBe.hh:552
long descLen() const override
Definition: i8254xGBe.hh:403
std::shared_ptr< EthPacketData > EthPacketPtr
Definition: etherpkt.hh:87
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:128
~IGbE()
Definition: i8254xGBe.cc:128
virtual bool hasOutstandingEvents()
Definition: i8254xGBe.hh:329
EventFunctionWrapper fetchEvent
Definition: i8254xGBe.hh:292
void tadvProcess()
Definition: i8254xGBe.hh:112
std::string _name
Definition: i8254xGBe.hh:235
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:140
Tick wbCompDelay
Definition: i8254xGBe.hh:88
CacheType usedCache
Definition: i8254xGBe.hh:225
System * sys
Definition: io_device.hh:102
EventFunctionWrapper pktDataEvent
Definition: i8254xGBe.hh:386
std::string annUsedDescQ
Definition: i8254xGBe.hh:264
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:249
void areaChanged()
If the address/len/head change when we&#39;ve got descriptors that are dirty that is very bad...
Definition: i8254xGBe.cc:845
void tick()
Definition: i8254xGBe.cc:2433
Basic support for object serialization.
Definition: serialize.hh:166
iGbReg::Regs regs
Definition: i8254xGBe.hh:61
bool rxDmaPacket
Definition: i8254xGBe.hh:81
bool enabled()
Definition: statistics.cc:545
virtual void updateHead(long h)=0
void txWire()
Definition: i8254xGBe.cc:2398
long descLen() const override
Definition: i8254xGBe.hh:341
const Params * params() const
Definition: i8254xGBe.hh:512
Tick txReadDelay
Definition: i8254xGBe.hh:89
Base Ethernet Device declaration.
DrainState drain() override
Notify an object that it needs to drain its state.
Definition: i8254xGBe.cc:2079
bool ethRxPkt(EthPacketPtr packet)
Definition: i8254xGBe.cc:2233
Tick write(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: i8254xGBe.cc:356
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: i8254xGBe.cc:134
Addr pciToDma(Addr a)
Shortcut for DMA address translation.
Definition: i8254xGBe.hh:260
RxDescCache rxDescCache
Definition: i8254xGBe.hh:395
IGbE(const Params *params)
Definition: i8254xGBe.cc:58
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:122
Addr descBase() const override
Definition: i8254xGBe.hh:339
bool scheduled() const
Determine if the current event is scheduled.
Definition: eventq.hh:459
EventFunctionWrapper headerEvent
Definition: i8254xGBe.hh:483
void completionWriteback(Addr a, bool enabled)
Definition: i8254xGBe.hh:486
CPA * cpa
Definition: i8254xGBe.hh:58
void fetchAfterWb() override
Definition: i8254xGBe.hh:407
std::ostream CheckpointOut
Definition: serialize.hh:63
Bitfield< 31, 28 > st
unsigned int cacheBlockSize() const
Definition: dma_device.hh:205
void anDq(std::string sm, std::string q)
Definition: i8254xGBe.hh:185
std::deque< T * > CacheType
Definition: i8254xGBe.hh:224
EventFunctionWrapper wbDelayEvent
Definition: i8254xGBe.hh:280
const SimObjectParams * _params
Cached copy of the object parameters.
Definition: sim_object.hh:111
void anPq(std::string sm, std::string q, int num=1)
Definition: i8254xGBe.hh:190
std::string name()
Definition: i8254xGBe.hh:270
std::string annUsedCacheQ
Definition: i8254xGBe.hh:264
EventFunctionWrapper tadvEvent
Definition: i8254xGBe.hh:119
long descHead() const override
Definition: i8254xGBe.hh:340
Tick ns
nanosecond
Definition: core.cc:65
EthPacketPtr txPacket
Definition: i8254xGBe.hh:73
EventFunctionWrapper tidvEvent
Definition: i8254xGBe.hh:128
const uint8_t EEPROM_SIZE
void ethTxDone()
Definition: i8254xGBe.cc:2461
void fetchDescriptors()
Fetch a chunk of descriptors into the descriptor cache.
Definition: i8254xGBe.cc:938
void fetchComplete()
Called by event when dma to read descriptors is completed.
Definition: i8254xGBe.cc:1012
int eeAddrBits
Definition: i8254xGBe.hh:64
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition: types.hh:235
void radvProcess()
Definition: i8254xGBe.hh:102
std::string annDescQ
Definition: i8254xGBe.hh:264
Tick lastInterrupt
Definition: i8254xGBe.hh:523
void cpuPostInt()
Definition: i8254xGBe.cc:733
Tick intClock()
Definition: i8254xGBe.hh:164
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:475
EventFunctionWrapper rdtrEvent
Definition: i8254xGBe.hh:99
void cpuClearInt()
Clear the interupt line to the cpu.
Definition: i8254xGBe.cc:777
virtual long descLen() const =0
uint32_t descEnd
Definition: i8254xGBe.hh:420
uint16_t flash[iGbReg::EEPROM_SIZE]
Definition: i8254xGBe.hh:66
EthPacketPtr pktPtr
The packet that is currently being dmad to memory if any.
Definition: i8254xGBe.hh:257
Bitfield< 0 > p
bool inTick
Definition: i8254xGBe.hh:76
Tick fetchCompDelay
Definition: i8254xGBe.hh:88
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:125
EventFunctionWrapper nullEvent
Definition: i8254xGBe.hh:499
int eeDataBits
Definition: i8254xGBe.hh:64
int splitCount
Variable to head with header/data completion events.
Definition: i8254xGBe.hh:353
std::string annUnusedCacheQ
Definition: i8254xGBe.hh:264
virtual ~DescCache()
Definition: i8254xGBe.cc:836
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: i8254xGBe.cc:168
void tidvProcess()
Definition: i8254xGBe.hh:122
bool rxTick
Definition: i8254xGBe.hh:77
void fetchDescriptors1()
Definition: i8254xGBe.cc:990
Tick writeConfig(PacketPtr pkt) override
Write to the PCI config space data that is stored locally.
Definition: i8254xGBe.cc:149
Bitfield< 1 > sm

Generated on Thu May 28 2020 16:21:32 for gem5 by doxygen 1.8.13