i8254xgbe_defs.hh
来自「M5,一个功能强大的多处理器系统模拟器.很多针对处理器架构,性能的研究都使用它作」· HH 代码 · 共 682 行 · 第 1/2 页
HH
682 行
MDIC mdic; struct ICR : public Reg<uint32_t> { // 0x00C0 ICR Register using Reg<uint32_t>::operator=; ADD_FIELD32(txdw,0,1) // tx descr witten back ADD_FIELD32(txqe,1,1) // tx queue empty ADD_FIELD32(lsc,2,1) // link status change ADD_FIELD32(rxseq,3,1) // rcv sequence error ADD_FIELD32(rxdmt0,4,1) // rcv descriptor min thresh ADD_FIELD32(rsvd1,5,1) // reserved ADD_FIELD32(rxo,6,1) // receive overrunn ADD_FIELD32(rxt0,7,1) // receiver timer interrupt ADD_FIELD32(mdac,9,1) // mdi/o access complete ADD_FIELD32(rxcfg,10,1) // recv /c/ ordered sets ADD_FIELD32(phyint,12,1) // phy interrupt ADD_FIELD32(gpi1,13,1) // gpi int 1 ADD_FIELD32(gpi2,14,1) // gpi int 2 ADD_FIELD32(txdlow,15,1) // transmit desc low thresh ADD_FIELD32(srpd,16,1) // small receive packet detected ADD_FIELD32(ack,17,1); // receive ack frame ADD_FIELD32(int_assert, 31,1); // interrupt caused a system interrupt }; ICR icr; uint32_t imr; // register that contains the current interrupt mask struct ITR : public Reg<uint32_t> { // 0x00C4 ITR Register using Reg<uint32_t>::operator=; ADD_FIELD32(interval, 0,16); // minimum inter-interrutp inteval // specified in 256ns interrupts }; ITR itr; // When CTRL_EXT.IAME and the ICR.INT_ASSERT is 1 an ICR read or write // causes the IAM register contents to be written into the IMC // automatically clearing all interrupts that have a bit in the IAM set uint32_t iam; struct RCTL : public Reg<uint32_t> { // 0x0100 RCTL Register using Reg<uint32_t>::operator=; ADD_FIELD32(rst,0,1); // Reset ADD_FIELD32(en,1,1); // Enable ADD_FIELD32(sbp,2,1); // Store bad packets ADD_FIELD32(upe,3,1); // Unicast Promiscuous enabled ADD_FIELD32(mpe,4,1); // Multicast promiscuous enabled ADD_FIELD32(lpe,5,1); // long packet reception enabled ADD_FIELD32(lbm,6,2); // ADD_FIELD32(rdmts,8,2); // ADD_FIELD32(mo,12,2); // ADD_FIELD32(mdr,14,1); // ADD_FIELD32(bam,15,1); // ADD_FIELD32(bsize,16,2); // ADD_FIELD32(vfe,18,1); // ADD_FIELD32(cfien,19,1); // ADD_FIELD32(cfi,20,1); // ADD_FIELD32(dpf,22,1); // discard pause frames ADD_FIELD32(pmcf,23,1); // pass mac control frames ADD_FIELD32(bsex,25,1); // buffer size extension ADD_FIELD32(secrc,26,1); // strip ethernet crc from incoming packet int descSize() { switch(bsize()) { case 0: return bsex() == 0 ? 2048 : -1; case 1: return bsex() == 0 ? 1024 : 16384; case 2: return bsex() == 0 ? 512 : 8192; case 3: return bsex() == 0 ? 256 : 4096; default: return -1; } } }; RCTL rctl; struct FCTTV : public Reg<uint32_t> { // 0x0170 FCTTV using Reg<uint32_t>::operator=; ADD_FIELD32(ttv,0,16); // Transmit Timer Value }; FCTTV fcttv; struct TCTL : public Reg<uint32_t> { // 0x0400 TCTL Register using Reg<uint32_t>::operator=; ADD_FIELD32(rst,0,1); // Reset ADD_FIELD32(en,1,1); // Enable ADD_FIELD32(bce,2,1); // busy check enable ADD_FIELD32(psp,3,1); // pad short packets ADD_FIELD32(ct,4,8); // collision threshold ADD_FIELD32(cold,12,10); // collision distance ADD_FIELD32(swxoff,22,1); // software xoff transmission ADD_FIELD32(pbe,23,1); // packet burst enable ADD_FIELD32(rtlc,24,1); // retransmit late collisions ADD_FIELD32(nrtu,25,1); // on underrun no TX ADD_FIELD32(mulr,26,1); // multiple request }; TCTL tctl; struct PBA : public Reg<uint32_t> { // 0x1000 PBA Register using Reg<uint32_t>::operator=; ADD_FIELD32(rxa,0,16); ADD_FIELD32(txa,16,16); }; PBA pba; struct FCRTL : public Reg<uint32_t> { // 0x2160 FCRTL Register using Reg<uint32_t>::operator=; ADD_FIELD32(rtl,3,28); // make this bigger than the spec so we can have // a larger buffer ADD_FIELD32(xone, 31,1); }; FCRTL fcrtl; struct FCRTH : public Reg<uint32_t> { // 0x2168 FCRTL Register using Reg<uint32_t>::operator=; ADD_FIELD32(rth,3,13); // make this bigger than the spec so we can have //a larger buffer ADD_FIELD32(xfce, 31,1); }; FCRTH fcrth; struct RDBA : public Reg<uint64_t> { // 0x2800 RDBA Register using Reg<uint64_t>::operator=; ADD_FIELD64(rdbal,0,32); // base address of rx descriptor ring ADD_FIELD64(rdbah,32,32); // base address of rx descriptor ring }; RDBA rdba; struct RDLEN : public Reg<uint32_t> { // 0x2808 RDLEN Register using Reg<uint32_t>::operator=; ADD_FIELD32(len,7,13); // number of bytes in the descriptor buffer }; RDLEN rdlen; struct RDH : public Reg<uint32_t> { // 0x2810 RDH Register using Reg<uint32_t>::operator=; ADD_FIELD32(rdh,0,16); // head of the descriptor ring }; RDH rdh; struct RDT : public Reg<uint32_t> { // 0x2818 RDT Register using Reg<uint32_t>::operator=; ADD_FIELD32(rdt,0,16); // tail of the descriptor ring }; RDT rdt; struct RDTR : public Reg<uint32_t> { // 0x2820 RDTR Register using Reg<uint32_t>::operator=; ADD_FIELD32(delay,0,16); // receive delay timer ADD_FIELD32(fpd, 31,1); // flush partial descriptor block ?? }; RDTR rdtr; struct RXDCTL : public Reg<uint32_t> { // 0x2828 RXDCTL Register using Reg<uint32_t>::operator=; ADD_FIELD32(pthresh,0,6); // prefetch threshold, less that this // consider prefetch ADD_FIELD32(hthresh,8,6); // number of descriptors in host mem to // consider prefetch ADD_FIELD32(wthresh,16,6); // writeback threshold ADD_FIELD32(gran,24,1); // granularity 0 = desc, 1 = cacheline }; RXDCTL rxdctl; struct RADV : public Reg<uint32_t> { // 0x282C RADV Register using Reg<uint32_t>::operator=; ADD_FIELD32(idv,0,16); // absolute interrupt delay }; RADV radv; struct RSRPD : public Reg<uint32_t> { // 0x2C00 RSRPD Register using Reg<uint32_t>::operator=; ADD_FIELD32(idv,0,12); // size to interrutp on small packets }; RSRPD rsrpd; struct TDBA : public Reg<uint64_t> { // 0x3800 TDBAL Register using Reg<uint64_t>::operator=; ADD_FIELD64(tdbal,0,32); // base address of transmit descriptor ring ADD_FIELD64(tdbah,32,32); // base address of transmit descriptor ring }; TDBA tdba; struct TDLEN : public Reg<uint32_t> { // 0x3808 TDLEN Register using Reg<uint32_t>::operator=; ADD_FIELD32(len,7,13); // number of bytes in the descriptor buffer }; TDLEN tdlen; struct TDH : public Reg<uint32_t> { // 0x3810 TDH Register using Reg<uint32_t>::operator=; ADD_FIELD32(tdh,0,16); // head of the descriptor ring }; TDH tdh; struct TDT : public Reg<uint32_t> { // 0x3818 TDT Register using Reg<uint32_t>::operator=; ADD_FIELD32(tdt,0,16); // tail of the descriptor ring }; TDT tdt; struct TIDV : public Reg<uint32_t> { // 0x3820 TIDV Register using Reg<uint32_t>::operator=; ADD_FIELD32(idv,0,16); // interrupt delay }; TIDV tidv; struct TXDCTL : public Reg<uint32_t> { // 0x3828 TXDCTL Register using Reg<uint32_t>::operator=; ADD_FIELD32(pthresh, 0,6); // if number of descriptors control has is // below this number, a prefetch is considered ADD_FIELD32(hthresh,8,8); // number of valid descriptors is host memory // before a prefetch is considered ADD_FIELD32(wthresh,16,6); // number of descriptors to keep until // writeback is considered ADD_FIELD32(gran, 24,1); // granulatiry of above values (0 = cacheline, // 1 == desscriptor) ADD_FIELD32(lwthresh,25,7); // xmit descriptor low thresh, interrupt // below this level }; TXDCTL txdctl; struct TADV : public Reg<uint32_t> { // 0x382C TADV Register using Reg<uint32_t>::operator=; ADD_FIELD32(idv,0,16); // absolute interrupt delay }; TADV tadv; struct RXCSUM : public Reg<uint32_t> { // 0x5000 RXCSUM Register using Reg<uint32_t>::operator=; ADD_FIELD32(pcss,0,8); ADD_FIELD32(ipofld,8,1); ADD_FIELD32(tuofld,9,1); }; RXCSUM rxcsum; struct MANC : public Reg<uint32_t> { // 0x5820 MANC Register using Reg<uint32_t>::operator=; ADD_FIELD32(smbus,0,1); // SMBus enabled ##### ADD_FIELD32(asf,1,1); // ASF enabled ##### ADD_FIELD32(ronforce,2,1); // reset of force ADD_FIELD32(rsvd,3,5); // reserved ADD_FIELD32(rmcp1,8,1); // rcmp1 filtering ADD_FIELD32(rmcp2,9,1); // rcmp2 filtering ADD_FIELD32(ipv4,10,1); // enable ipv4 ADD_FIELD32(ipv6,11,1); // enable ipv6 ADD_FIELD32(snap,12,1); // accept snap ADD_FIELD32(arp,13,1); // filter arp ##### ADD_FIELD32(neighbor,14,1); // neighbor discovery ADD_FIELD32(arp_resp,15,1); // arp response ADD_FIELD32(tcorst,16,1); // tco reset happened ADD_FIELD32(rcvtco,17,1); // receive tco enabled ###### ADD_FIELD32(blkphyrst,18,1);// block phy resets ######## ADD_FIELD32(rcvall,19,1); // receive all ADD_FIELD32(macaddrfltr,20,1); // mac address filtering ###### ADD_FIELD32(mng2host,21,1); // mng2 host packets ####### ADD_FIELD32(ipaddrfltr,22,1); // ip address filtering ADD_FIELD32(xsumfilter,23,1); // checksum filtering ADD_FIELD32(brfilter,24,1); // broadcast filtering ADD_FIELD32(smbreq,25,1); // smb request ADD_FIELD32(smbgnt,26,1); // smb grant ADD_FIELD32(smbclkin,27,1); // smbclkin ADD_FIELD32(smbdatain,28,1); // smbdatain ADD_FIELD32(smbdataout,29,1); // smb data out ADD_FIELD32(smbclkout,30,1); // smb clock out }; MANC manc; void serialize(std::ostream &os) { paramOut(os, "ctrl", ctrl._data); paramOut(os, "sts", sts._data); paramOut(os, "eecd", eecd._data); paramOut(os, "eerd", eerd._data); paramOut(os, "ctrl_ext", ctrl_ext._data); paramOut(os, "mdic", mdic._data); paramOut(os, "icr", icr._data); SERIALIZE_SCALAR(imr); paramOut(os, "itr", itr._data); SERIALIZE_SCALAR(iam); paramOut(os, "rctl", rctl._data); paramOut(os, "fcttv", fcttv._data); paramOut(os, "tctl", tctl._data); paramOut(os, "pba", pba._data); paramOut(os, "fcrtl", fcrtl._data); paramOut(os, "fcrth", fcrth._data); paramOut(os, "rdba", rdba._data); paramOut(os, "rdlen", rdlen._data); paramOut(os, "rdh", rdh._data); paramOut(os, "rdt", rdt._data); paramOut(os, "rdtr", rdtr._data); paramOut(os, "rxdctl", rxdctl._data); paramOut(os, "radv", radv._data); paramOut(os, "rsrpd", rsrpd._data); paramOut(os, "tdba", tdba._data); paramOut(os, "tdlen", tdlen._data); paramOut(os, "tdh", tdh._data); paramOut(os, "tdt", tdt._data); paramOut(os, "tidv", tidv._data); paramOut(os, "txdctl", txdctl._data); paramOut(os, "tadv", tadv._data); paramOut(os, "rxcsum", rxcsum._data); paramOut(os, "manc", manc._data); } void unserialize(Checkpoint *cp, const std::string §ion) { paramIn(cp, section, "ctrl", ctrl._data); paramIn(cp, section, "sts", sts._data); paramIn(cp, section, "eecd", eecd._data); paramIn(cp, section, "eerd", eerd._data); paramIn(cp, section, "ctrl_ext", ctrl_ext._data); paramIn(cp, section, "mdic", mdic._data); paramIn(cp, section, "icr", icr._data); UNSERIALIZE_SCALAR(imr); paramIn(cp, section, "itr", itr._data); UNSERIALIZE_SCALAR(iam); paramIn(cp, section, "rctl", rctl._data); paramIn(cp, section, "fcttv", fcttv._data); paramIn(cp, section, "tctl", tctl._data); paramIn(cp, section, "pba", pba._data); paramIn(cp, section, "fcrtl", fcrtl._data); paramIn(cp, section, "fcrth", fcrth._data); paramIn(cp, section, "rdba", rdba._data); paramIn(cp, section, "rdlen", rdlen._data); paramIn(cp, section, "rdh", rdh._data); paramIn(cp, section, "rdt", rdt._data); paramIn(cp, section, "rdtr", rdtr._data); paramIn(cp, section, "rxdctl", rxdctl._data); paramIn(cp, section, "radv", radv._data); paramIn(cp, section, "rsrpd", rsrpd._data); paramIn(cp, section, "tdba", tdba._data); paramIn(cp, section, "tdlen", tdlen._data); paramIn(cp, section, "tdh", tdh._data); paramIn(cp, section, "tdt", tdt._data); paramIn(cp, section, "tidv", tidv._data); paramIn(cp, section, "txdctl", txdctl._data); paramIn(cp, section, "tadv", tadv._data); paramIn(cp, section, "rxcsum", rxcsum._data); paramIn(cp, section, "manc", manc._data); }};} // iGbReg namespace
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?