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 &section)    {        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 + -
显示快捷键?