Lines Matching refs:vnic

117         .desc("maximum vnic distance")
122 .desc("total vnic distance")
126 .desc("number of vnic distance measurements")
131 .desc("average vnic distance")
159 panic("Trying to access a vnic that doesn't exist %d > %d\n",
173 VirtualReg &vnic = virtualRegs[index];
176 uint64_t rxdone = vnic.RxDone;
181 regs.RxData = vnic.RxData;
186 uint64_t txdone = vnic.TxDone;
190 regs.TxData = vnic.TxData;
197 int vnic = rxFifo.begin()->priv;
198 if (vnic != -1 && virtualRegs[vnic].rxPacketOffset > 0)
199 head = vnic;
229 panic("invalid register: cpu=%d vnic=%d da=%#x pa=%#x size=%d",
235 "cpu=%d vnic=%d da=%#x pa=%#x size=%d",
239 "cpu=%d vnic=%d da=%#x pa=%#x size=%d",
258 "read %s: cpu=%d vnic=%d da=%#x pa=%#x size=%d val=%#x\n",
320 "cpu=%d vnic=%d da=%#x pa=%#x size=%d",
325 "cpu=%d vnic=%d da=%#x pa=%#x size=%d",
328 VirtualReg &vnic = virtualRegs[index];
331 "write %s vnic %d: cpu=%d val=%#x da=%#x pa=%#x size=%d\n",
357 if (Regs::get_RxDone_Busy(vnic.RxDone))
361 vnic.rxUnique = rxUnique++;
362 vnic.RxDone = Regs::RxDone_Busy;
363 vnic.RxData = pkt->getLE<uint64_t>();
371 DPRINTF(EthernetPIO, "write RxData vnic %d (rxunique %d): "
373 index, vnic.rxUnique, vaddr, paddr);
375 vnic.RxData = Regs::set_RxData_Addr(vnic.RxData, paddr);
378 DPRINTF(EthernetPIO, "write RxData vnic %d (rxunique %d)\n",
379 index, vnic.rxUnique);
382 if (vnic.rxIndex == rxFifo.end()) {
397 if (Regs::get_TxDone_Busy(vnic.TxDone))
401 vnic.txUnique = txUnique++;
402 vnic.TxDone = Regs::TxDone_Busy;
409 DPRINTF(EthernetPIO, "write TxData vnic %d (txunique %d): "
411 index, vnic.txUnique, vaddr, paddr);
413 vnic.TxData = Regs::set_TxData_Addr(vnic.TxData, paddr);
416 DPRINTF(EthernetPIO, "write TxData vnic %d (txunique %d)\n",
417 index, vnic.txUnique);
721 VirtualReg *vnic = NULL;
739 panic("no active vnic while in state %s", RxStateStrings[rxState]);
744 vnic = &virtualRegs[rxActive];
746 "processing rxState=%s for vnic %d (rxunique %d)\n",
747 RxStateStrings[rxState], rxActive, vnic->rxUnique);
773 "vnic %d %s (rxunique %d), packet %d, slack %d\n",
779 DPRINTF(EthernetSM, "vnic %d unmapped (rxunique %d)\n",
788 vnic = &virtualRegs[rxActive];
790 if (vnic->rxIndex == rxFifo.end())
791 panic("continuing vnic without packet\n");
794 "continue processing for vnic %d (rxunique %d)\n",
795 rxActive, vnic->rxUnique);
799 int vnic_distance = rxFifo.countPacketsBefore(vnic->rxIndex);
822 vnic = &virtualRegs[rxActive];
825 "processing new packet for vnic %d (rxunique %d)\n",
826 rxActive, vnic->rxUnique);
829 vnic->rxIndex = rxFifoPtr++;
830 vnic->rxIndex->priv = rxActive;
831 vnic->rxPacketOffset = 0;
832 vnic->rxPacketBytes = vnic->rxIndex->packet->length;
833 assert(vnic->rxPacketBytes);
836 vnic->rxDoneData = 0;
838 IpPtr ip(vnic->rxIndex->packet);
841 vnic->rxDoneData |= Regs::RxDone_IpPacket;
845 vnic->rxDoneData |= Regs::RxDone_IpError;
854 vnic->rxDoneData |= Regs::RxDone_TcpPacket;
858 vnic->rxDoneData |= Regs::RxDone_TcpError;
861 vnic->rxDoneData |= Regs::RxDone_UdpPacket;
865 vnic->rxDoneData |= Regs::RxDone_UdpError;
877 rxDmaAddr = pciToDma(Regs::get_RxData_Addr(vnic->RxData));
878 rxDmaLen = min<unsigned>(Regs::get_RxData_Len(vnic->RxData),
879 vnic->rxPacketBytes);
887 !Regs::get_RxData_NoDelay(vnic->RxData) && rxLow) {
891 rxDmaData = vnic->rxIndex->packet->data + vnic->rxPacketOffset;
906 vnic->RxDone = vnic->rxDoneData;
907 vnic->RxDone |= Regs::RxDone_Complete;
910 if (vnic->rxPacketBytes == rxDmaLen) {
911 if (vnic->rxPacketOffset)
915 vnic->RxDone = Regs::set_RxDone_CopyLen(vnic->RxDone, rxDmaLen);
918 "rxKick: packet complete on vnic %d (rxunique %d)\n",
919 rxActive, vnic->rxUnique);
920 rxFifo.remove(vnic->rxIndex);
921 vnic->rxIndex = rxFifo.end();
924 if (!vnic->rxPacketOffset)
927 vnic->rxPacketBytes -= rxDmaLen;
928 vnic->rxPacketOffset += rxDmaLen;
929 vnic->RxDone |= Regs::RxDone_More;
930 vnic->RxDone = Regs::set_RxDone_CopyLen(vnic->RxDone,
931 vnic->rxPacketBytes);
933 "rxKick: packet not complete on vnic %d (rxunique %d): "
935 rxActive, vnic->rxUnique, vnic->rxPacketBytes);
1037 VirtualReg *vnic;
1052 vnic = &virtualRegs[txList.front()];
1056 assert(Regs::get_TxDone_Busy(vnic->TxDone));
1064 Regs::get_TxData_Len(vnic->TxData)) {
1076 txDmaAddr = pciToDma(Regs::get_TxData_Addr(vnic->TxData));
1077 txDmaLen = Regs::get_TxData_Len(vnic->TxData);
1089 vnic->TxDone = txDmaLen | Regs::TxDone_Complete;
1092 if ((vnic->TxData & Regs::TxData_More)) {
1100 if ((vnic->TxData & Regs::TxData_Checksum)) {
1305 const VirtualReg *vnic = &virtualRegs[i];
1307 std::string reg = csprintf("vnic%d", i);
1308 paramOut(cp, reg + ".RxData", vnic->RxData);
1309 paramOut(cp, reg + ".RxDone", vnic->RxDone);
1310 paramOut(cp, reg + ".TxData", vnic->TxData);
1311 paramOut(cp, reg + ".TxDone", vnic->TxDone);
1313 bool rxPacketExists = vnic->rxIndex != rxFifo.end();
1318 while (i != vnic->rxIndex) {
1325 paramOut(cp, reg + ".rxPacketOffset", vnic->rxPacketOffset);
1326 paramOut(cp, reg + ".rxPacketBytes", vnic->rxPacketBytes);
1328 paramOut(cp, reg + ".rxDoneData", vnic->rxDoneData);
1485 VirtualReg *vnic = &virtualRegs[i];
1486 std::string reg = csprintf("vnic%d", i);
1488 paramIn(cp, reg + ".RxData", vnic->RxData);
1489 paramIn(cp, reg + ".RxDone", vnic->RxDone);
1490 paramIn(cp, reg + ".TxData", vnic->TxData);
1491 paramIn(cp, reg + ".TxDone", vnic->TxDone);
1493 vnic->rxUnique = rxUnique++;
1494 vnic->txUnique = txUnique++;
1501 vnic->rxIndex = rxFifo.begin();
1503 ++vnic->rxIndex;
1506 vnic->rxPacketOffset);
1507 paramIn(cp, reg + ".rxPacketBytes", vnic->rxPacketBytes);
1509 vnic->rxIndex = rxFifo.end();
1511 paramIn(cp, reg + ".rxDoneData", vnic->rxDoneData);