gem5 v24.0.0.0
Loading...
Searching...
No Matches
i8254xGBe_defs.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 * Register and structure descriptions for Intel's 8254x line of gigabit ethernet controllers.
31 */
32#include "base/bitfield.hh"
33#include "base/compiler.hh"
34
35namespace gem5
36{
37
38namespace igbreg
39{
40
41// Registers used by the Intel GbE NIC
42const uint32_t REG_CTRL = 0x00000;
43const uint32_t REG_STATUS = 0x00008;
44const uint32_t REG_EECD = 0x00010;
45const uint32_t REG_EERD = 0x00014;
46const uint32_t REG_CTRL_EXT = 0x00018;
47const uint32_t REG_MDIC = 0x00020;
48const uint32_t REG_FCAL = 0x00028;
49const uint32_t REG_FCAH = 0x0002C;
50const uint32_t REG_FCT = 0x00030;
51const uint32_t REG_VET = 0x00038;
52const uint32_t REG_PBA = 0x01000;
53const uint32_t REG_ICR = 0x000C0;
54const uint32_t REG_ITR = 0x000C4;
55const uint32_t REG_ICS = 0x000C8;
56const uint32_t REG_IMS = 0x000D0;
57const uint32_t REG_IMC = 0x000D8;
58const uint32_t REG_IAM = 0x000E0;
59const uint32_t REG_RCTL = 0x00100;
60const uint32_t REG_FCTTV = 0x00170;
61const uint32_t REG_TIPG = 0x00410;
62const uint32_t REG_AIFS = 0x00458;
63const uint32_t REG_LEDCTL = 0x00e00;
64const uint32_t REG_EICR = 0x01580;
65const uint32_t REG_IVAR0 = 0x01700;
66const uint32_t REG_FCRTL = 0x02160;
67const uint32_t REG_FCRTH = 0x02168;
68const uint32_t REG_RDBAL = 0x02800;
69const uint32_t REG_RDBAH = 0x02804;
70const uint32_t REG_RDLEN = 0x02808;
71const uint32_t REG_SRRCTL = 0x0280C;
72const uint32_t REG_RDH = 0x02810;
73const uint32_t REG_RDT = 0x02818;
74const uint32_t REG_RDTR = 0x02820;
75const uint32_t REG_RXDCTL = 0x02828;
76const uint32_t REG_RADV = 0x0282C;
77const uint32_t REG_TCTL = 0x00400;
78const uint32_t REG_TDBAL = 0x03800;
79const uint32_t REG_TDBAH = 0x03804;
80const uint32_t REG_TDLEN = 0x03808;
81const uint32_t REG_TDH = 0x03810;
82const uint32_t REG_TXDCA_CTL = 0x03814;
83const uint32_t REG_TDT = 0x03818;
84const uint32_t REG_TIDV = 0x03820;
85const uint32_t REG_TXDCTL = 0x03828;
86const uint32_t REG_TADV = 0x0382C;
87const uint32_t REG_TDWBAL = 0x03838;
88const uint32_t REG_TDWBAH = 0x0383C;
89const uint32_t REG_CRCERRS = 0x04000;
90const uint32_t REG_RXCSUM = 0x05000;
91const uint32_t REG_RLPML = 0x05004;
92const uint32_t REG_RFCTL = 0x05008;
93const uint32_t REG_MTA = 0x05200;
94const uint32_t REG_RAL = 0x05400;
95const uint32_t REG_RAH = 0x05404;
96const uint32_t REG_VFTA = 0x05600;
97
98const uint32_t REG_WUC = 0x05800;
99const uint32_t REG_WUFC = 0x05808;
100const uint32_t REG_WUS = 0x05810;
101const uint32_t REG_MANC = 0x05820;
102const uint32_t REG_SWSM = 0x05B50;
103const uint32_t REG_FWSM = 0x05B54;
104const uint32_t REG_SWFWSYNC = 0x05B5C;
105
106const uint8_t EEPROM_READ_OPCODE_SPI = 0x03;
107const uint8_t EEPROM_RDSR_OPCODE_SPI = 0x05;
108const uint8_t EEPROM_SIZE = 64;
109const uint16_t EEPROM_CSUM = 0xBABA;
110
111const uint8_t VLAN_FILTER_TABLE_SIZE = 128;
112const uint8_t RCV_ADDRESS_TABLE_SIZE = 24;
113const uint8_t MULTICAST_TABLE_SIZE = 128;
114const uint32_t STATS_REGS_SIZE = 0x228;
115
116
117// Registers in that are accessed in the PHY
118const uint8_t PHY_PSTATUS = 0x1;
119const uint8_t PHY_PID = 0x2;
120const uint8_t PHY_EPID = 0x3;
121const uint8_t PHY_GSTATUS = 10;
122const uint8_t PHY_EPSTATUS = 15;
123const uint8_t PHY_AGC = 18;
124
125// Receive Descriptor Status Flags
126const uint16_t RXDS_DYNINT = 0x800;
127const uint16_t RXDS_UDPV = 0x400;
128const uint16_t RXDS_CRCV = 0x100;
129const uint16_t RXDS_PIF = 0x080;
130const uint16_t RXDS_IPCS = 0x040;
131const uint16_t RXDS_TCPCS = 0x020;
132const uint16_t RXDS_UDPCS = 0x010;
133const uint16_t RXDS_VP = 0x008;
134const uint16_t RXDS_IXSM = 0x004;
135const uint16_t RXDS_EOP = 0x002;
136const uint16_t RXDS_DD = 0x001;
137
138// Receive Descriptor Error Flags
139const uint8_t RXDE_RXE = 0x80;
140const uint8_t RXDE_IPE = 0x40;
141const uint8_t RXDE_TCPE = 0x20;
142const uint8_t RXDE_SEQ = 0x04;
143const uint8_t RXDE_SE = 0x02;
144const uint8_t RXDE_CE = 0x01;
145
146// Receive Descriptor Extended Error Flags
147const uint16_t RXDEE_HBO = 0x008;
148const uint16_t RXDEE_CE = 0x010;
149const uint16_t RXDEE_LE = 0x020;
150const uint16_t RXDEE_PE = 0x080;
151const uint16_t RXDEE_OSE = 0x100;
152const uint16_t RXDEE_USE = 0x200;
153const uint16_t RXDEE_TCPE = 0x400;
154const uint16_t RXDEE_IPE = 0x800;
155
156
157// Receive Descriptor Types
158const uint8_t RXDT_LEGACY = 0x00;
159const uint8_t RXDT_ADV_ONEBUF = 0x01;
160const uint8_t RXDT_ADV_SPLIT_A = 0x05;
161
162// Receive Descriptor Packet Types
163const uint16_t RXDP_IPV4 = 0x001;
164const uint16_t RXDP_IPV4E = 0x002;
165const uint16_t RXDP_IPV6 = 0x004;
166const uint16_t RXDP_IPV6E = 0x008;
167const uint16_t RXDP_TCP = 0x010;
168const uint16_t RXDP_UDP = 0x020;
169const uint16_t RXDP_SCTP = 0x040;
170const uint16_t RXDP_NFS = 0x080;
171
172// Interrupt types
174{
175 IT_NONE = 0x00000, //dummy value
176 IT_TXDW = 0x00001,
177 IT_TXQE = 0x00002,
178 IT_LSC = 0x00004,
179 IT_RXSEQ = 0x00008,
180 IT_RXDMT = 0x00010,
181 IT_RXO = 0x00040,
182 IT_RXT = 0x00080,
183 IT_MADC = 0x00200,
184 IT_RXCFG = 0x00400,
185 IT_GPI0 = 0x02000,
186 IT_GPI1 = 0x04000,
187 IT_TXDLOW = 0x08000,
188 IT_SRPD = 0x10000,
189 IT_ACK = 0x20000
191
192// Receive Descriptor struct
193struct RxDesc
194{
195 union
196 {
197 struct
198 {
200 uint16_t len;
201 uint16_t csum;
202 uint8_t status;
203 uint8_t errors;
204 uint16_t vlan;
206 struct
207 {
211 struct
212 {
213 uint16_t rss_type:4;
214 uint16_t pkt_type:12;
215 uint16_t __reserved1:5;
216 uint16_t header_len:10;
217 uint16_t sph:1;
218 union
219 {
220 struct
221 {
222 uint16_t id;
223 uint16_t csum;
224 };
225 uint32_t rss_hash;
226 };
227 uint32_t status:20;
228 uint32_t errors:12;
229 uint16_t pkt_len;
230 uint16_t vlan_tag;
232 };
233};
234
235struct TxDesc
236{
237 uint64_t d1;
238 uint64_t d2;
239};
240
241namespace txd_op
242{
243
244const uint8_t TXD_CNXT = 0x0;
245const uint8_t TXD_DATA = 0x1;
246const uint8_t TXD_ADVCNXT = 0x2;
247const uint8_t TXD_ADVDATA = 0x3;
248
249inline bool isLegacy(TxDesc *d) { return !bits(d->d2, 29); }
250inline uint8_t getType(TxDesc *d) { return bits(d->d2, 23, 20); }
251inline bool isType(TxDesc *d, uint8_t type) { return getType(d) == type; }
252inline bool
253isTypes(TxDesc *d, uint8_t t1, uint8_t t2)
254{
255 return isType(d, t1) || isType(d, t2);
256}
257inline bool
259{
261}
262inline bool
264{
265 return !isLegacy(d) && isTypes(d,TXD_CNXT, TXD_ADVCNXT);
266}
267inline bool
269{
270 return !isLegacy(d) && isTypes(d, TXD_DATA, TXD_ADVDATA);
271}
272
273inline Addr
275{
276 assert(isLegacy(d) || isData(d));
277 return d->d1;
278}
279inline Addr
281{
282 if (isLegacy(d))
283 return bits(d->d2, 15, 0);
284 else
285 return bits(d->d2, 19, 0);
286}
287inline void setDd(TxDesc *d) { replaceBits(d->d2, 35, 32, 1ULL); }
288
289inline bool
291{
292 return bits(d->d2, 31, 31) && (getType(d) == TXD_DATA || isLegacy(d));
293}
294inline bool
296{
297 assert(isLegacy(d) || isData(d));
298 return bits(d->d2, 30);
299}
300inline bool rs(TxDesc *d) { return bits(d->d2, 27); }
301inline bool
303{
304 assert(isLegacy(d) || isData(d));
305 return isLegacy(d) && bits(d->d2, 26);
306}
307inline bool
309{
310 if (isTypes(d, TXD_CNXT, TXD_DATA))
311 return bits(d->d2, 26);
312 if (isType(d, TXD_ADVDATA))
313 return bits(d->d2, 31);
314 return false;
315}
316
317inline bool
319{
320 assert(isLegacy(d) || isData(d));
321 return bits(d->d2, 25);
322}
323inline bool
325{
326 assert(isLegacy(d) || isData(d));
327 return bits(d->d2, 24);
328}
329inline bool
331{
332 assert(isContext(d));
333 return bits(d->d2, 25);
334}
335inline bool
337{
338 assert(isContext(d));
339 return bits(d->d2, 24);
340}
341
342inline uint8_t
344{
345 assert(isLegacy(d));
346 return bits(d->d2, 23, 16);
347}
348inline uint8_t
350{
351 assert(isLegacy(d));
352 return bits(d->d2, 47, 40);
353}
354
355inline bool ixsm(TxDesc *d) { return isData(d) && bits(d->d2, 40, 40); }
356inline bool txsm(TxDesc *d) { return isData(d) && bits(d->d2, 41, 41); }
357
358inline int
360{
361 assert(isContext(d));
362 return bits(d->d1, 63, 48);
363}
364inline int
366{
367 assert(isContext(d));
368 return bits(d->d1, 47, 40);
369}
370inline int
372{
373 assert(isContext(d));
374 return bits(d->d1, 39, 32);
375}
376inline int
378{
379 assert(isContext(d));
380 return bits(d->d1, 31, 16);
381}
382inline int
384{
385 assert(isContext(d));
386 return bits(d->d1, 15, 8);
387}
388inline int
390{
391 assert(isContext(d));
392 return bits(d->d1, 7, 0);
393}
394inline int
396{
397 assert(isContext(d));
398 return bits(d->d2, 63, 48);
399}
400inline int
402{
403 assert(isContext(d));
404 if (!isAdvDesc(d))
405 return bits(d->d2, 47, 40);
406 return bits(d->d2, 47, 40) + bits(d->d1, 8, 0) + bits(d->d1, 15, 9);
407}
408
409inline int
411{
412 assert(isType(d, TXD_ADVDATA));
413 return bits(d->d2, 63, 46);
414}
415inline int
417{
418 assert(isContext(d));
419 return bits(d->d2, 24, 31);
420}
421
422} // namespace txd_op
423
424
425#define ADD_FIELD32(NAME, OFFSET, BITS) \
426 inline uint32_t NAME() { return bits(_data, OFFSET+BITS-1, OFFSET); } \
427 inline void NAME(uint32_t d) { replaceBits(_data, OFFSET+BITS-1, OFFSET,d); }
428
429#define ADD_FIELD64(NAME, OFFSET, BITS) \
430 inline uint64_t NAME() { return bits(_data, OFFSET+BITS-1, OFFSET); } \
431 inline void NAME(uint64_t d) { replaceBits(_data, OFFSET+BITS-1, OFFSET,d); }
432
433struct Regs : public Serializable
434{
435 template<class T>
436 struct Reg
437 {
439 T operator()() { return _data; }
440 const Reg<T> &operator=(T d) { _data = d; return *this;}
441 bool operator==(T d) { return d == _data; }
442 void operator()(T d) { _data = d; }
443 Reg() { _data = 0; }
444 void serialize(CheckpointOut &cp) const
445 {
447 }
452 };
453
454 struct CTRL : public Reg<uint32_t>
455 {
456 // 0x0000 CTRL Register
457 using Reg<uint32_t>::operator=;
458 ADD_FIELD32(fd, 0, 1); // full duplex
459 ADD_FIELD32(bem, 1, 1); // big endian mode
460 ADD_FIELD32(pcipr, 2, 1); // PCI priority
461 ADD_FIELD32(lrst, 3, 1); // link reset
462 ADD_FIELD32(tme, 4, 1); // test mode enable
463 ADD_FIELD32(asde, 5, 1); // Auto-speed detection
464 ADD_FIELD32(slu, 6, 1); // Set link up
465 ADD_FIELD32(ilos, 7, 1); // invert los-of-signal
466 ADD_FIELD32(speed, 8, 2); // speed selection bits
467 ADD_FIELD32(be32, 10, 1); // big endian mode 32
468 ADD_FIELD32(frcspd, 11, 1); // force speed
469 ADD_FIELD32(frcdpx, 12, 1); // force duplex
470 ADD_FIELD32(duden, 13, 1); // dock/undock enable
471 ADD_FIELD32(dudpol, 14, 1); // dock/undock polarity
472 ADD_FIELD32(fphyrst, 15, 1); // force phy reset
473 ADD_FIELD32(extlen, 16, 1); // external link status enable
474 ADD_FIELD32(rsvd, 17, 1); // reserved
475 ADD_FIELD32(sdp0d, 18, 1); // software controlled pin data
476 ADD_FIELD32(sdp1d, 19, 1); // software controlled pin data
477 ADD_FIELD32(sdp2d, 20, 1); // software controlled pin data
478 ADD_FIELD32(sdp3d, 21, 1); // software controlled pin data
479 ADD_FIELD32(sdp0i, 22, 1); // software controlled pin dir
480 ADD_FIELD32(sdp1i, 23, 1); // software controlled pin dir
481 ADD_FIELD32(sdp2i, 24, 1); // software controlled pin dir
482 ADD_FIELD32(sdp3i, 25, 1); // software controlled pin dir
483 ADD_FIELD32(rst, 26, 1); // reset
484 ADD_FIELD32(rfce, 27, 1); // receive flow control enable
485 ADD_FIELD32(tfce, 28, 1); // transmit flow control enable
486 ADD_FIELD32(rte, 29, 1); // routing tag enable
487 ADD_FIELD32(vme, 30, 1); // vlan enable
488 ADD_FIELD32(phyrst, 31, 1); // phy reset
489 };
491
492 struct STATUS : public Reg<uint32_t>
493 {
494 // 0x0008 STATUS Register
495 using Reg<uint32_t>::operator=;
496 ADD_FIELD32(fd, 0, 1); // full duplex
497 ADD_FIELD32(lu, 1, 1); // link up
498 ADD_FIELD32(func, 2, 2); // function id
499 ADD_FIELD32(txoff, 4, 1); // transmission paused
500 ADD_FIELD32(tbimode, 5, 1); // tbi mode
501 ADD_FIELD32(speed, 6, 2); // link speed
502 ADD_FIELD32(asdv, 8, 2); // auto speed detection value
503 ADD_FIELD32(mtxckok, 10, 1); // mtx clock running ok
504 ADD_FIELD32(pci66, 11, 1); // In 66Mhz pci slot
505 ADD_FIELD32(bus64, 12, 1); // in 64 bit slot
506 ADD_FIELD32(pcix, 13, 1); // Pci mode
507 ADD_FIELD32(pcixspd, 14, 2); // pci x speed
508 };
510
511 struct EECD : public Reg<uint32_t>
512 {
513 // 0x0010 EECD Register
514 using Reg<uint32_t>::operator=;
515 ADD_FIELD32(sk, 0, 1); // clack input to the eeprom
516 ADD_FIELD32(cs, 1, 1); // chip select to eeprom
517 ADD_FIELD32(din, 2, 1); // data input to eeprom
518 ADD_FIELD32(dout, 3, 1); // data output bit
519 ADD_FIELD32(fwe, 4, 2); // flash write enable
520 ADD_FIELD32(ee_req, 6, 1); // request eeprom access
521 ADD_FIELD32(ee_gnt, 7, 1); // grant eeprom access
522 ADD_FIELD32(ee_pres, 8, 1); // eeprom present
523 ADD_FIELD32(ee_size, 9, 1); // eeprom size
524 ADD_FIELD32(ee_sz1, 10, 1); // eeprom size
525 ADD_FIELD32(rsvd, 11, 2); // reserved
526 ADD_FIELD32(ee_type, 13, 1); // type of eeprom
527 } ;
529
530 struct EERD : public Reg<uint32_t>
531 {
532 // 0x0014 EERD Register
533 using Reg<uint32_t>::operator=;
534 ADD_FIELD32(start, 0, 1); // start read
535 ADD_FIELD32(done, 1, 1); // done read
536 ADD_FIELD32(addr, 2, 14); // address
537 ADD_FIELD32(data, 16, 16); // data
538 };
540
541 struct CTRL_EXT : public Reg<uint32_t>
542 {
543 // 0x0018 CTRL_EXT Register
544 using Reg<uint32_t>::operator=;
545 ADD_FIELD32(gpi_en, 0, 4); // enable interrupts from gpio
546 ADD_FIELD32(phyint, 5, 1); // reads the phy internal int status
547 ADD_FIELD32(sdp2_data, 6, 1); // data from gpio sdp
548 ADD_FIELD32(spd3_data, 7, 1); // data frmo gpio sdp
549 ADD_FIELD32(spd2_iodir, 10, 1); // direction of sdp2
550 ADD_FIELD32(spd3_iodir, 11, 1); // direction of sdp2
551 ADD_FIELD32(asdchk, 12, 1); // initiate auto-speed-detection
552 ADD_FIELD32(eerst, 13, 1); // reset the eeprom
553 ADD_FIELD32(spd_byps, 15, 1); // bypass speed select
554 ADD_FIELD32(ro_dis, 17, 1); // disable relaxed memory ordering
555 ADD_FIELD32(vreg, 21, 1); // power down the voltage regulator
556 ADD_FIELD32(link_mode, 22, 2); // interface to talk to the link
557 ADD_FIELD32(iame, 27, 1); // interrupt acknowledge auto-mask ??
558 ADD_FIELD32(drv_loaded, 28, 1); // driver is loaded and incharge of
559 // device
560 ADD_FIELD32(timer_clr, 29, 1); // clear interrupt timers after IMS
561 // clear ??
562 };
564
565 struct MDIC : public Reg<uint32_t>
566 {
567 // 0x0020 MDIC Register
568 using Reg<uint32_t>::operator=;
569 ADD_FIELD32(data, 0, 16); // data
570 ADD_FIELD32(regadd, 16, 5); // register address
571 ADD_FIELD32(phyadd, 21, 5); // phy addresses
572 ADD_FIELD32(op, 26, 2); // opcode
573 ADD_FIELD32(r, 28, 1); // ready
574 ADD_FIELD32(i, 29, 1); // interrupt
575 ADD_FIELD32(e, 30, 1); // error
576 };
578
579 struct ICR : public Reg<uint32_t>
580 {
581 // 0x00C0 ICR Register
582 using Reg<uint32_t>::operator=;
583 ADD_FIELD32(txdw, 0, 1) // tx descr witten back
584 ADD_FIELD32(txqe, 1, 1) // tx queue empty
585 ADD_FIELD32(lsc, 2, 1) // link status change
586 ADD_FIELD32(rxseq, 3, 1) // rcv sequence error
587 ADD_FIELD32(rxdmt0, 4, 1) // rcv descriptor min thresh
588 ADD_FIELD32(rsvd1, 5, 1) // reserved
589 ADD_FIELD32(rxo, 6, 1) // receive overrunn
590 ADD_FIELD32(rxt0, 7, 1) // receiver timer interrupt
591 ADD_FIELD32(mdac, 9, 1) // mdi/o access complete
592 ADD_FIELD32(rxcfg, 10, 1) // recv /c/ ordered sets
593 ADD_FIELD32(phyint, 12, 1) // phy interrupt
594 ADD_FIELD32(gpi1, 13, 1) // gpi int 1
595 ADD_FIELD32(gpi2, 14, 1) // gpi int 2
596 ADD_FIELD32(txdlow, 15, 1) // transmit desc low thresh
597 ADD_FIELD32(srpd, 16, 1) // small receive packet detected
598 ADD_FIELD32(ack, 17, 1); // receive ack frame
599 ADD_FIELD32(int_assert, 31, 1); // interrupt caused a system interrupt
600 };
602
603 uint32_t imr; // register that contains the current interrupt mask
604
605 struct ITR : public Reg<uint32_t>
606 {
607 // 0x00C4 ITR Register
608 using Reg<uint32_t>::operator=;
609 ADD_FIELD32(interval, 0, 16); // minimum inter-interrutp inteval
610 // specified in 256ns interrupts
611 };
613
614 // When CTRL_EXT.IAME and the ICR.INT_ASSERT is 1 an ICR read or write
615 // causes the IAM register contents to be written into the IMC
616 // automatically clearing all interrupts that have a bit in the IAM set
617 uint32_t iam;
618
619 struct RCTL : public Reg<uint32_t>
620 {
621 // 0x0100 RCTL Register
622 using Reg<uint32_t>::operator=;
623 ADD_FIELD32(rst, 0, 1); // Reset
624 ADD_FIELD32(en, 1, 1); // Enable
625 ADD_FIELD32(sbp, 2, 1); // Store bad packets
626 ADD_FIELD32(upe, 3, 1); // Unicast Promiscuous enabled
627 ADD_FIELD32(mpe, 4, 1); // Multicast promiscuous enabled
628 ADD_FIELD32(lpe, 5, 1); // long packet reception enabled
629 ADD_FIELD32(lbm, 6, 2); //
630 ADD_FIELD32(rdmts, 8, 2); //
631 ADD_FIELD32(mo, 12, 2); //
632 ADD_FIELD32(mdr, 14, 1); //
633 ADD_FIELD32(bam, 15, 1); //
634 ADD_FIELD32(bsize, 16, 2); //
635 ADD_FIELD32(vfe, 18, 1); //
636 ADD_FIELD32(cfien, 19, 1); //
637 ADD_FIELD32(cfi, 20, 1); //
638 ADD_FIELD32(dpf, 22, 1); // discard pause frames
639 ADD_FIELD32(pmcf, 23, 1); // pass mac control frames
640 ADD_FIELD32(bsex, 25, 1); // buffer size extension
641 ADD_FIELD32(secrc, 26, 1); // strip ethernet crc from incoming packet
642 unsigned descSize()
643 {
644 switch(bsize()) {
645 case 0: return bsex() == 0 ? 2048 : 0;
646 case 1: return bsex() == 0 ? 1024 : 16384;
647 case 2: return bsex() == 0 ? 512 : 8192;
648 case 3: return bsex() == 0 ? 256 : 4096;
649 default:
650 return 0;
651 }
652 }
653 };
655
656 struct FCTTV : public Reg<uint32_t>
657 {
658 // 0x0170 FCTTV
659 using Reg<uint32_t>::operator=;
660 ADD_FIELD32(ttv, 0, 16); // Transmit Timer Value
661 };
663
664 struct TCTL : public Reg<uint32_t>
665 {
666 // 0x0400 TCTL Register
667 using Reg<uint32_t>::operator=;
668 ADD_FIELD32(rst, 0, 1); // Reset
669 ADD_FIELD32(en, 1, 1); // Enable
670 ADD_FIELD32(bce, 2, 1); // busy check enable
671 ADD_FIELD32(psp, 3, 1); // pad short packets
672 ADD_FIELD32(ct, 4, 8); // collision threshold
673 ADD_FIELD32(cold, 12, 10); // collision distance
674 ADD_FIELD32(swxoff, 22, 1); // software xoff transmission
675 ADD_FIELD32(pbe, 23, 1); // packet burst enable
676 ADD_FIELD32(rtlc, 24, 1); // retransmit late collisions
677 ADD_FIELD32(nrtu, 25, 1); // on underrun no TX
678 ADD_FIELD32(mulr, 26, 1); // multiple request
679 };
681
682 struct PBA : public Reg<uint32_t>
683 {
684 // 0x1000 PBA Register
685 using Reg<uint32_t>::operator=;
686 ADD_FIELD32(rxa, 0, 16);
687 ADD_FIELD32(txa, 16, 16);
688 };
690
691 struct FCRTL : public Reg<uint32_t>
692 {
693 // 0x2160 FCRTL Register
694 using Reg<uint32_t>::operator=;
695 ADD_FIELD32(rtl, 3, 28); // make this bigger than the spec so we can
696 // have a larger buffer
697 ADD_FIELD32(xone, 31, 1);
698 };
700
701 struct FCRTH : public Reg<uint32_t>
702 {
703 // 0x2168 FCRTL Register
704 using Reg<uint32_t>::operator=;
705 ADD_FIELD32(rth, 3, 13); // make this bigger than the spec so we can
706 // have a larger buffer
707 ADD_FIELD32(xfce, 31, 1);
708 };
710
711 struct RDBA : public Reg<uint64_t>
712 {
713 // 0x2800 RDBA Register
714 using Reg<uint64_t>::operator=;
715 ADD_FIELD64(rdbal, 0, 32); // base address of rx descriptor ring
716 ADD_FIELD64(rdbah, 32, 32); // base address of rx descriptor ring
717 };
719
720 struct RDLEN : public Reg<uint32_t>
721 {
722 // 0x2808 RDLEN Register
723 using Reg<uint32_t>::operator=;
724 ADD_FIELD32(len, 7, 13); // number of bytes in the descriptor buffer
725 };
727
728 struct SRRCTL : public Reg<uint32_t>
729 {
730 // 0x280C SRRCTL Register
731 using Reg<uint32_t>::operator=;
732 ADD_FIELD32(pktlen, 0, 8);
733 ADD_FIELD32(hdrlen, 8, 8); // guess based on header, not documented
734 ADD_FIELD32(desctype, 25, 3); // type of descriptor 000 legacy,
735 // 001 adv, 101 hdr split
736 unsigned bufLen() { return pktlen() << 10; }
737 unsigned hdrLen() { return hdrlen() << 6; }
738 };
740
741 struct RDH : public Reg<uint32_t>
742 {
743 // 0x2810 RDH Register
744 using Reg<uint32_t>::operator=;
745 ADD_FIELD32(rdh, 0, 16); // head of the descriptor ring
746 };
748
749 struct RDT : public Reg<uint32_t>
750 {
751 // 0x2818 RDT Register
752 using Reg<uint32_t>::operator=;
753 ADD_FIELD32(rdt, 0, 16); // tail of the descriptor ring
754 };
756
757 struct RDTR : public Reg<uint32_t>
758 {
759 // 0x2820 RDTR Register
760 using Reg<uint32_t>::operator=;
761 ADD_FIELD32(delay, 0, 16); // receive delay timer
762 ADD_FIELD32(fpd, 31, 1); // flush partial descriptor block ??
763 };
765
766 struct RXDCTL : public Reg<uint32_t>
767 {
768 // 0x2828 RXDCTL Register
769 using Reg<uint32_t>::operator=;
770 ADD_FIELD32(pthresh, 0, 6); // prefetch threshold, less that this
771 // consider prefetch
772 ADD_FIELD32(hthresh, 8, 6); // number of descriptors in host mem to
773 // consider prefetch
774 ADD_FIELD32(wthresh, 16, 6); // writeback threshold
775 ADD_FIELD32(gran, 24, 1); // granularity 0 = desc, 1 = cacheline
776 };
778
779 struct RADV : public Reg<uint32_t>
780 {
781 // 0x282C RADV Register
782 using Reg<uint32_t>::operator=;
783 ADD_FIELD32(idv, 0, 16); // absolute interrupt delay
784 };
786
787 struct RSRPD : public Reg<uint32_t>
788 {
789 // 0x2C00 RSRPD Register
790 using Reg<uint32_t>::operator=;
791 ADD_FIELD32(idv, 0, 12); // size to interrutp on small packets
792 };
794
795 struct TDBA : public Reg<uint64_t>
796 {
797 // 0x3800 TDBAL Register
798 using Reg<uint64_t>::operator=;
799 ADD_FIELD64(tdbal, 0, 32); // base address of transmit descriptor ring
800 ADD_FIELD64(tdbah, 32, 32); // base address of transmit descriptor ring
801 };
803
804 struct TDLEN : public Reg<uint32_t>
805 {
806 // 0x3808 TDLEN Register
807 using Reg<uint32_t>::operator=;
808 ADD_FIELD32(len, 7, 13); // number of bytes in the descriptor buffer
809 };
811
812 struct TDH : public Reg<uint32_t>
813 {
814 // 0x3810 TDH Register
815 using Reg<uint32_t>::operator=;
816 ADD_FIELD32(tdh, 0, 16); // head of the descriptor ring
817 };
819
820 struct TXDCA_CTL : public Reg<uint32_t>
821 {
822 // 0x3814 TXDCA_CTL Register
823 using Reg<uint32_t>::operator=;
824 ADD_FIELD32(cpu_mask, 0, 5);
825 ADD_FIELD32(enabled, 5, 1);
826 ADD_FIELD32(relax_ordering, 6, 1);
827 };
829
830 struct TDT : public Reg<uint32_t>
831 {
832 // 0x3818 TDT Register
833 using Reg<uint32_t>::operator=;
834 ADD_FIELD32(tdt, 0, 16); // tail of the descriptor ring
835 };
837
838 struct TIDV : public Reg<uint32_t>
839 {
840 // 0x3820 TIDV Register
841 using Reg<uint32_t>::operator=;
842 ADD_FIELD32(idv, 0, 16); // interrupt delay
843 };
845
846 struct TXDCTL : public Reg<uint32_t>
847 {
848 // 0x3828 TXDCTL Register
849 using Reg<uint32_t>::operator=;
850 ADD_FIELD32(pthresh, 0, 6); // if number of descriptors control has is
851 // below this number, a prefetch is
852 //considered
853 ADD_FIELD32(hthresh, 8, 8); // number of valid descriptors is host
854 // memory before a prefetch is considered
855 ADD_FIELD32(wthresh, 16, 6);// number of descriptors to keep until
856 // writeback is considered
857 ADD_FIELD32(gran, 24, 1); // granulatiry of above values
858 // (0 = cacheline, 1 == desscriptor)
859 ADD_FIELD32(lwthresh, 25, 7); // xmit descriptor low thresh, interrupt
860 // below this level
861 };
863
864 struct TADV : public Reg<uint32_t>
865 {
866 // 0x382C TADV Register
867 using Reg<uint32_t>::operator=;
868 ADD_FIELD32(idv, 0, 16); // absolute interrupt delay
869 };
871 uint64_t tdwba;
872
873 struct RXCSUM : public Reg<uint32_t>
874 {
875 // 0x5000 RXCSUM Register
876 using Reg<uint32_t>::operator=;
877 ADD_FIELD32(pcss, 0, 8);
878 ADD_FIELD32(ipofld, 8, 1);
879 ADD_FIELD32(tuofld, 9, 1);
880 ADD_FIELD32(pcsd, 13, 1);
881 };
883
884 uint32_t rlpml; // 0x5004 RLPML probably maximum accepted packet size
885
886 struct RFCTL : public Reg<uint32_t>
887 {
888 // 0x5008 RFCTL Register
889 using Reg<uint32_t>::operator=;
890 ADD_FIELD32(iscsi_dis, 0, 1);
891 ADD_FIELD32(iscsi_dwc, 1, 5);
892 ADD_FIELD32(nfsw_dis, 6, 1);
893 ADD_FIELD32(nfsr_dis, 7, 1);
894 ADD_FIELD32(nfs_ver, 8, 2);
895 ADD_FIELD32(ipv6_dis, 10, 1);
896 ADD_FIELD32(ipv6xsum_dis, 11, 1);
897 ADD_FIELD32(ackdis, 13, 1);
898 ADD_FIELD32(ipfrsp_dis, 14, 1);
899 ADD_FIELD32(exsten, 15, 1);
900 };
902
903 struct MANC : public Reg<uint32_t>
904 {
905 // 0x5820 MANC Register
906 using Reg<uint32_t>::operator=;
907 ADD_FIELD32(smbus, 0, 1); // SMBus enabled #####
908 ADD_FIELD32(asf, 1, 1); // ASF enabled #####
909 ADD_FIELD32(ronforce, 2, 1); // reset of force
910 ADD_FIELD32(rsvd, 3, 5); // reserved
911 ADD_FIELD32(rmcp1, 8, 1); // rcmp1 filtering
912 ADD_FIELD32(rmcp2, 9, 1); // rcmp2 filtering
913 ADD_FIELD32(ipv4, 10, 1); // enable ipv4
914 ADD_FIELD32(ipv6, 11, 1); // enable ipv6
915 ADD_FIELD32(snap, 12, 1); // accept snap
916 ADD_FIELD32(arp, 13, 1); // filter arp #####
917 ADD_FIELD32(neighbor, 14, 1); // neighbor discovery
918 ADD_FIELD32(arp_resp, 15, 1); // arp response
919 ADD_FIELD32(tcorst, 16, 1); // tco reset happened
920 ADD_FIELD32(rcvtco, 17, 1); // receive tco enabled ######
921 ADD_FIELD32(blkphyrst, 18, 1);// block phy resets ########
922 ADD_FIELD32(rcvall, 19, 1); // receive all
923 ADD_FIELD32(macaddrfltr, 20, 1); // mac address filtering ######
924 ADD_FIELD32(mng2host, 21, 1); // mng2 host packets #######
925 ADD_FIELD32(ipaddrfltr, 22, 1); // ip address filtering
926 ADD_FIELD32(xsumfilter, 23, 1); // checksum filtering
927 ADD_FIELD32(brfilter, 24, 1); // broadcast filtering
928 ADD_FIELD32(smbreq, 25, 1); // smb request
929 ADD_FIELD32(smbgnt, 26, 1); // smb grant
930 ADD_FIELD32(smbclkin, 27, 1); // smbclkin
931 ADD_FIELD32(smbdatain, 28, 1); // smbdatain
932 ADD_FIELD32(smbdataout, 29, 1); // smb data out
933 ADD_FIELD32(smbclkout, 30, 1); // smb clock out
934 };
936
937 struct SWSM : public Reg<uint32_t>
938 {
939 // 0x5B50 SWSM register
940 using Reg<uint32_t>::operator=;
941 ADD_FIELD32(smbi, 0, 1); // Semaphone bit
942 ADD_FIELD32(swesmbi, 1, 1); // Software eeporm semaphore
943 ADD_FIELD32(wmng, 2, 1); // Wake MNG clock
945 };
947
948 struct FWSM : public Reg<uint32_t>
949 {
950 // 0x5B54 FWSM register
951 using Reg<uint32_t>::operator=;
952 ADD_FIELD32(eep_fw_semaphore, 0, 1);
953 ADD_FIELD32(fw_mode, 1, 3);
954 ADD_FIELD32(ide, 4, 1);
955 ADD_FIELD32(sol, 5, 1);
956 ADD_FIELD32(eep_roload, 6, 1);
958 ADD_FIELD32(fw_val_bit, 15, 1);
959 ADD_FIELD32(reset_cnt, 16, 3);
960 ADD_FIELD32(ext_err_ind, 19, 6);
961 ADD_FIELD32(reserved2, 25, 7);
962 };
964
965 uint32_t sw_fw_sync;
966
967 void serialize(CheckpointOut &cp) const override
968 {
969 paramOut(cp, "ctrl", ctrl._data);
970 paramOut(cp, "sts", sts._data);
971 paramOut(cp, "eecd", eecd._data);
972 paramOut(cp, "eerd", eerd._data);
973 paramOut(cp, "ctrl_ext", ctrl_ext._data);
974 paramOut(cp, "mdic", mdic._data);
975 paramOut(cp, "icr", icr._data);
977 paramOut(cp, "itr", itr._data);
979 paramOut(cp, "rctl", rctl._data);
980 paramOut(cp, "fcttv", fcttv._data);
981 paramOut(cp, "tctl", tctl._data);
982 paramOut(cp, "pba", pba._data);
983 paramOut(cp, "fcrtl", fcrtl._data);
984 paramOut(cp, "fcrth", fcrth._data);
985 paramOut(cp, "rdba", rdba._data);
986 paramOut(cp, "rdlen", rdlen._data);
987 paramOut(cp, "srrctl", srrctl._data);
988 paramOut(cp, "rdh", rdh._data);
989 paramOut(cp, "rdt", rdt._data);
990 paramOut(cp, "rdtr", rdtr._data);
991 paramOut(cp, "rxdctl", rxdctl._data);
992 paramOut(cp, "radv", radv._data);
993 paramOut(cp, "rsrpd", rsrpd._data);
994 paramOut(cp, "tdba", tdba._data);
995 paramOut(cp, "tdlen", tdlen._data);
996 paramOut(cp, "tdh", tdh._data);
997 paramOut(cp, "txdca_ctl", txdca_ctl._data);
998 paramOut(cp, "tdt", tdt._data);
999 paramOut(cp, "tidv", tidv._data);
1000 paramOut(cp, "txdctl", txdctl._data);
1001 paramOut(cp, "tadv", tadv._data);
1002 //paramOut(cp, "tdwba", tdwba._data);
1004 paramOut(cp, "rxcsum", rxcsum._data);
1006 paramOut(cp, "rfctl", rfctl._data);
1007 paramOut(cp, "manc", manc._data);
1008 paramOut(cp, "swsm", swsm._data);
1009 paramOut(cp, "fwsm", fwsm._data);
1011 }
1012
1013 void unserialize(CheckpointIn &cp) override
1014 {
1015 paramIn(cp, "ctrl", ctrl._data);
1016 paramIn(cp, "sts", sts._data);
1017 paramIn(cp, "eecd", eecd._data);
1018 paramIn(cp, "eerd", eerd._data);
1019 paramIn(cp, "ctrl_ext", ctrl_ext._data);
1020 paramIn(cp, "mdic", mdic._data);
1021 paramIn(cp, "icr", icr._data);
1023 paramIn(cp, "itr", itr._data);
1025 paramIn(cp, "rctl", rctl._data);
1026 paramIn(cp, "fcttv", fcttv._data);
1027 paramIn(cp, "tctl", tctl._data);
1028 paramIn(cp, "pba", pba._data);
1029 paramIn(cp, "fcrtl", fcrtl._data);
1030 paramIn(cp, "fcrth", fcrth._data);
1031 paramIn(cp, "rdba", rdba._data);
1032 paramIn(cp, "rdlen", rdlen._data);
1033 paramIn(cp, "srrctl", srrctl._data);
1034 paramIn(cp, "rdh", rdh._data);
1035 paramIn(cp, "rdt", rdt._data);
1036 paramIn(cp, "rdtr", rdtr._data);
1037 paramIn(cp, "rxdctl", rxdctl._data);
1038 paramIn(cp, "radv", radv._data);
1039 paramIn(cp, "rsrpd", rsrpd._data);
1040 paramIn(cp, "tdba", tdba._data);
1041 paramIn(cp, "tdlen", tdlen._data);
1042 paramIn(cp, "tdh", tdh._data);
1043 paramIn(cp, "txdca_ctl", txdca_ctl._data);
1044 paramIn(cp, "tdt", tdt._data);
1045 paramIn(cp, "tidv", tidv._data);
1046 paramIn(cp, "txdctl", txdctl._data);
1047 paramIn(cp, "tadv", tadv._data);
1049 //paramIn(cp, "tdwba", tdwba._data);
1050 paramIn(cp, "rxcsum", rxcsum._data);
1052 paramIn(cp, "rfctl", rfctl._data);
1053 paramIn(cp, "manc", manc._data);
1054 paramIn(cp, "swsm", swsm._data);
1055 paramIn(cp, "fwsm", fwsm._data);
1057 }
1058};
1059
1060} // namespace igbreg
1061} // namespace gem5
const char data[]
Basic support for object serialization.
Definition serialize.hh:170
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition bitfield.hh:79
constexpr void replaceBits(T &val, unsigned first, unsigned last, B bit_val)
A convenience function to replace bits first to last of val with bit_val in place.
Definition bitfield.hh:216
uint16_t len
Definition helpers.cc:83
#define ADD_FIELD32(NAME, OFFSET, BITS)
Bitfield< 14, 12 > fd
Definition types.hh:150
Bitfield< 2 > t2
Bitfield< 15 > ide
Bitfield< 7 > i
Definition misc_types.hh:67
Bitfield< 9, 8 > rs
Bitfield< 9 > e
Definition misc_types.hh:65
Bitfield< 29, 28 > rsvd
Bitfield< 1 > t1
Bitfield< 27 > rxo
Bitfield< 9 > d
Definition misc_types.hh:64
Bitfield< 27, 24 > tme
Bitfield< 0 > vme
Definition misc.hh:655
Bitfield< 4 > op
Definition types.hh:83
Bitfield< 3 > addr
Definition types.hh:84
Addr getLen(TxDesc *d)
const uint8_t TXD_ADVCNXT
const uint8_t TXD_ADVDATA
bool isTypes(TxDesc *d, uint8_t t1, uint8_t t2)
bool isContext(TxDesc *d)
bool isData(TxDesc *d)
void setDd(TxDesc *d)
Addr getBuf(TxDesc *d)
uint8_t getCso(TxDesc *d)
int getTsoLen(TxDesc *d)
uint8_t getCss(TxDesc *d)
bool isType(TxDesc *d, uint8_t type)
bool isAdvDesc(TxDesc *d)
uint8_t getType(TxDesc *d)
bool isLegacy(TxDesc *d)
const uint32_t REG_FWSM
const uint32_t REG_FCRTL
const uint8_t RCV_ADDRESS_TABLE_SIZE
const uint16_t RXDS_EOP
const uint32_t REG_TADV
const uint8_t RXDE_SE
const uint32_t REG_CTRL_EXT
const uint32_t REG_CRCERRS
const uint32_t REG_VET
const uint8_t PHY_EPID
const uint16_t RXDS_UDPCS
const uint32_t REG_MTA
const uint32_t REG_RDBAH
const uint16_t RXDEE_HBO
const uint32_t REG_ITR
const uint32_t REG_WUFC
const uint32_t STATS_REGS_SIZE
const uint32_t REG_RDTR
const uint32_t REG_AIFS
const uint32_t REG_RAH
const uint32_t REG_TXDCTL
const uint32_t REG_TDWBAL
const uint16_t RXDS_CRCV
const uint8_t PHY_PSTATUS
const uint32_t REG_RXDCTL
const uint32_t REG_RXCSUM
const uint16_t RXDS_TCPCS
const uint16_t RXDP_IPV6
const uint32_t REG_EECD
const uint16_t RXDP_IPV4E
const uint32_t REG_CTRL
const uint32_t REG_TCTL
const uint32_t REG_TDBAL
const uint8_t EEPROM_SIZE
const uint32_t REG_SWFWSYNC
const uint8_t VLAN_FILTER_TABLE_SIZE
const uint32_t REG_RDLEN
const uint8_t RXDE_TCPE
const uint32_t REG_MANC
const uint16_t RXDEE_USE
const uint16_t RXDP_NFS
const uint32_t REG_FCAL
const uint32_t REG_IAM
const uint32_t REG_RDH
const uint32_t REG_TIDV
const uint32_t REG_FCRTH
const uint8_t RXDT_ADV_SPLIT_A
const uint16_t RXDEE_PE
const uint16_t RXDS_IPCS
const uint16_t RXDEE_TCPE
const uint32_t REG_TIPG
const uint16_t RXDS_DYNINT
const uint32_t REG_RFCTL
const uint16_t RXDS_IXSM
const uint32_t REG_ICR
const uint32_t REG_WUC
const uint8_t EEPROM_READ_OPCODE_SPI
const uint8_t PHY_EPSTATUS
const uint32_t REG_TDH
const uint32_t REG_FCAH
const uint8_t MULTICAST_TABLE_SIZE
const uint16_t RXDEE_CE
const uint16_t RXDP_UDP
const uint32_t REG_PBA
const uint8_t PHY_AGC
const uint32_t REG_EICR
const uint32_t REG_RADV
const uint32_t REG_STATUS
const uint16_t RXDS_UDPV
const uint32_t REG_RAL
const uint32_t REG_SWSM
const uint8_t RXDT_ADV_ONEBUF
const uint32_t REG_TDBAH
const uint32_t REG_IVAR0
const uint32_t REG_IMS
const uint32_t REG_RDT
const uint32_t REG_LEDCTL
const uint32_t REG_RLPML
const uint32_t REG_RDBAL
const uint8_t RXDE_SEQ
const uint32_t REG_TXDCA_CTL
const uint8_t RXDE_CE
const uint32_t REG_TDLEN
const uint8_t PHY_PID
const uint32_t REG_SRRCTL
const uint32_t REG_ICS
const uint32_t REG_VFTA
const uint16_t EEPROM_CSUM
const uint16_t RXDS_VP
const uint8_t RXDT_LEGACY
const uint32_t REG_EERD
const uint16_t RXDS_DD
const uint32_t REG_MDIC
const uint16_t RXDP_IPV4
const uint8_t EEPROM_RDSR_OPCODE_SPI
const uint32_t REG_FCT
const uint16_t RXDEE_OSE
const uint16_t RXDP_IPV6E
const uint32_t REG_TDWBAH
const uint16_t RXDP_TCP
const uint8_t RXDE_RXE
const uint32_t REG_RCTL
const uint32_t REG_FCTTV
const uint32_t REG_WUS
const uint8_t PHY_GSTATUS
const uint16_t RXDS_PIF
const uint32_t REG_TDT
const uint16_t RXDP_SCTP
const uint16_t RXDEE_LE
const uint16_t RXDEE_IPE
const uint8_t RXDE_IPE
const uint32_t REG_IMC
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
std::ostream CheckpointOut
Definition serialize.hh:66
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147
void paramOut(CheckpointOut &cp, const std::string &name, ExtMachInst const &machInst)
Definition types.cc:40
void paramIn(CheckpointIn &cp, const std::string &name, ExtMachInst &machInst)
Definition types.cc:72
reserved
Definition pcireg.h:54
#define UNSERIALIZE_SCALAR(scalar)
Definition serialize.hh:575
#define SERIALIZE_SCALAR(scalar)
Definition serialize.hh:568
ADD_FIELD32(spd_byps, 15, 1)
ADD_FIELD32(spd3_data, 7, 1)
ADD_FIELD32(spd2_iodir, 10, 1)
ADD_FIELD32(spd3_iodir, 11, 1)
ADD_FIELD32(timer_clr, 29, 1)
ADD_FIELD32(drv_loaded, 28, 1)
ADD_FIELD32(link_mode, 22, 2)
ADD_FIELD32(sdp2_data, 6, 1)
ADD_FIELD32(sdp0d, 18, 1)
ADD_FIELD32(sdp3d, 21, 1)
ADD_FIELD32(sdp3i, 25, 1)
ADD_FIELD32(duden, 13, 1)
ADD_FIELD32(sdp2d, 20, 1)
ADD_FIELD32(phyrst, 31, 1)
ADD_FIELD32(dudpol, 14, 1)
ADD_FIELD32(sdp1d, 19, 1)
ADD_FIELD32(extlen, 16, 1)
ADD_FIELD32(sdp1i, 23, 1)
ADD_FIELD32(frcspd, 11, 1)
ADD_FIELD32(fphyrst, 15, 1)
ADD_FIELD32(frcdpx, 12, 1)
ADD_FIELD32(sdp2i, 24, 1)
ADD_FIELD32(sdp0i, 22, 1)
ADD_FIELD32(ee_size, 9, 1)
ADD_FIELD32(ee_gnt, 7, 1)
ADD_FIELD32(ee_req, 6, 1)
ADD_FIELD32(ee_sz1, 10, 1)
ADD_FIELD32(ee_pres, 8, 1)
ADD_FIELD32(ee_type, 13, 1)
ADD_FIELD32(data, 16, 16)
ADD_FIELD32(reserved2, 25, 7)
ADD_FIELD32(eep_roload, 6, 1)
ADD_FIELD32(reserved, 7, 8)
ADD_FIELD32(fw_mode, 1, 3)
ADD_FIELD32(ext_err_ind, 19, 6)
ADD_FIELD32(fw_val_bit, 15, 1)
ADD_FIELD32(eep_fw_semaphore, 0, 1)
ADD_FIELD32(reset_cnt, 16, 3)
ADD_FIELD32(interval, 0, 16)
ADD_FIELD32(xsumfilter, 23, 1)
ADD_FIELD32(macaddrfltr, 20, 1)
ADD_FIELD32(rcvtco, 17, 1)
ADD_FIELD32(blkphyrst, 18, 1)
ADD_FIELD32(smbgnt, 26, 1)
ADD_FIELD32(neighbor, 14, 1)
ADD_FIELD32(brfilter, 24, 1)
ADD_FIELD32(ronforce, 2, 1)
ADD_FIELD32(tcorst, 16, 1)
ADD_FIELD32(smbclkout, 30, 1)
ADD_FIELD32(smbclkin, 27, 1)
ADD_FIELD32(smbdataout, 29, 1)
ADD_FIELD32(ipaddrfltr, 22, 1)
ADD_FIELD32(smbdatain, 28, 1)
ADD_FIELD32(arp_resp, 15, 1)
ADD_FIELD32(rcvall, 19, 1)
ADD_FIELD32(smbreq, 25, 1)
ADD_FIELD32(mng2host, 21, 1)
ADD_FIELD32(phyadd, 21, 5)
ADD_FIELD32(regadd, 16, 5)
ADD_FIELD32(txa, 16, 16)
ADD_FIELD32(secrc, 26, 1)
ADD_FIELD32(cfien, 19, 1)
ADD_FIELD32(bsize, 16, 2)
ADD_FIELD64(rdbah, 32, 32)
ADD_FIELD64(rdbal, 0, 32)
ADD_FIELD32(delay, 0, 16)
ADD_FIELD32(ipfrsp_dis, 14, 1)
ADD_FIELD32(ipv6_dis, 10, 1)
ADD_FIELD32(iscsi_dwc, 1, 5)
ADD_FIELD32(exsten, 15, 1)
ADD_FIELD32(nfs_ver, 8, 2)
ADD_FIELD32(ackdis, 13, 1)
ADD_FIELD32(iscsi_dis, 0, 1)
ADD_FIELD32(ipv6xsum_dis, 11, 1)
ADD_FIELD32(nfsr_dis, 7, 1)
ADD_FIELD32(nfsw_dis, 6, 1)
ADD_FIELD32(pthresh, 0, 6)
ADD_FIELD32(wthresh, 16, 6)
ADD_FIELD32(hthresh, 8, 6)
void unserialize(CheckpointIn &cp)
void serialize(CheckpointOut &cp) const
const Reg< T > & operator=(T d)
ADD_FIELD32(desctype, 25, 3)
ADD_FIELD32(tbimode, 5, 1)
ADD_FIELD32(mtxckok, 10, 1)
ADD_FIELD32(pcixspd, 14, 2)
ADD_FIELD32(swesmbi, 1, 1)
ADD_FIELD32(reserved, 3, 29)
ADD_FIELD32(cold, 12, 10)
ADD_FIELD32(swxoff, 22, 1)
ADD_FIELD64(tdbah, 32, 32)
ADD_FIELD64(tdbal, 0, 32)
ADD_FIELD32(relax_ordering, 6, 1)
ADD_FIELD32(lwthresh, 25, 7)
ADD_FIELD32(pthresh, 0, 6)
ADD_FIELD32(hthresh, 8, 8)
ADD_FIELD32(wthresh, 16, 6)
void unserialize(CheckpointIn &cp) override
Unserialize an object.
void serialize(CheckpointOut &cp) const override
Serialize an object.
struct gem5::igbreg::RxDesc::@340::@342 legacy
struct gem5::igbreg::RxDesc::@340::@344 adv_wb
struct gem5::igbreg::RxDesc::@340::@343 adv_read

Generated on Tue Jun 18 2024 16:24:03 for gem5 by doxygen 1.11.0