Changeset 7320 in vbox
- Timestamp:
- Mar 6, 2008 1:46:50 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DevPCNet.cpp
r7317 r7320 601 601 * @param addr physical address of the descriptor 602 602 * @param fRetIfNotOwn return immediately after reading the own flag if we don't own the descriptor 603 */ 604 DECLINLINE(void) pcnetTmdLoad(PCNetState *pData, TMD *tmd, RTGCPHYS32 addr, bool fRetIfNotOwn) 603 * @return true if we own the descriptor, false otherwise 604 */ 605 DECLINLINE(bool) pcnetTmdLoad(PCNetState *pData, TMD *tmd, RTGCPHYS32 addr, bool fRetIfNotOwn) 605 606 { 606 607 PPDMDEVINS pDevIns = PCNETSTATE_2_DEVINS(pData); … … 613 614 PDMDevHlpPhysRead(pDevIns, addr+3, &ownbyte, 1); 614 615 if (!(ownbyte & 0x80) && fRetIfNotOwn) 615 return ;616 return false; 616 617 PDMDevHlpPhysRead(pDevIns, addr, (void*)&xda[0], sizeof(xda)); 617 618 ((uint32_t *)tmd)[0] = (uint32_t)xda[0] | ((uint32_t)(xda[1] & 0x00ff) << 16); … … 624 625 PDMDevHlpPhysRead(pDevIns, addr+7, &ownbyte, 1); 625 626 if (!(ownbyte & 0x80) && fRetIfNotOwn) 626 return ;627 return false; 627 628 PDMDevHlpPhysRead(pDevIns, addr, (void*)tmd, 16); 628 629 } … … 632 633 PDMDevHlpPhysRead(pDevIns, addr+7, &ownbyte, 1); 633 634 if (!(ownbyte & 0x80) && fRetIfNotOwn) 634 return ;635 return false; 635 636 PDMDevHlpPhysRead(pDevIns, addr, (void*)&xda[0], sizeof(xda)); 636 637 ((uint32_t *)tmd)[0] = xda[2]; … … 646 647 if (!(ownbyte & 0x80)) 647 648 tmd->tmd1.own = 0; 649 650 return !!tmd->tmd1.own; 648 651 } 649 652 … … 697 700 * @param addr physical address of the descriptor 698 701 * @param fRetIfNotOwn return immediately after reading the own flag if we don't own the descriptor 699 */ 700 DECLINLINE(void) pcnetRmdLoad(PCNetState *pData, RMD *rmd, RTGCPHYS32 addr, bool fRetIfNotOwn) 702 * @return true if we own the descriptor, false otherwise 703 */ 704 DECLINLINE(int) pcnetRmdLoad(PCNetState *pData, RMD *rmd, RTGCPHYS32 addr, bool fRetIfNotOwn) 701 705 { 702 706 PPDMDEVINS pDevIns = PCNETSTATE_2_DEVINS(pData); … … 708 712 PDMDevHlpPhysRead(pDevIns, addr+3, &ownbyte, 1); 709 713 if ((!ownbyte & 0x80) && fRetIfNotOwn) 710 return ;714 return false; 711 715 PDMDevHlpPhysRead(pDevIns, addr, (void*)&rda[0], sizeof(rda)); 712 716 ((uint32_t *)rmd)[0] = (uint32_t)rda[0] | ((rda[1] & 0x00ff) << 16); … … 719 723 PDMDevHlpPhysRead(pDevIns, addr+7, &ownbyte, 1); 720 724 if ((!ownbyte & 0x80) && fRetIfNotOwn) 721 return ;725 return false; 722 726 PDMDevHlpPhysRead(pDevIns, addr, (void*)rmd, 16); 723 727 } … … 727 731 PDMDevHlpPhysRead(pDevIns, addr+7, &ownbyte, 1); 728 732 if ((!ownbyte & 0x80) && fRetIfNotOwn) 729 return ;733 return false; 730 734 PDMDevHlpPhysRead(pDevIns, addr, (void*)&rda[0], sizeof(rda)); 731 735 ((uint32_t *)rmd)[0] = rda[2]; … … 741 745 if (!(ownbyte & 0x80)) 742 746 rmd->rmd1.own = 0; 747 748 return !!rmd->rmd1.own; 743 749 } 744 750 … … 1520 1526 { 1521 1527 addr = pcnetRdraAddr(pData, i); 1522 pcnetRmdLoad(pData, &rmd, PHYSADDR(pData, addr), true);1523 1528 CSR_CRDA(pData) = CSR_CRBA(pData) = 0; 1524 1529 CSR_CRBC(pData) = CSR_CRST(pData) = 0; 1525 if (! rmd.rmd1.own)1530 if (!pcnetRmdLoad(pData, &rmd, PHYSADDR(pData, addr), true)) 1526 1531 { 1527 1532 STAM_PROFILE_ADV_STOP(&pData->CTXSUFF(StatRdtePoll), a); … … 1559 1564 i = CSR_RCVRL(pData); 1560 1565 addr = pcnetRdraAddr(pData, i); 1561 pcnetRmdLoad(pData, &rmd, PHYSADDR(pData, addr), true);1562 1566 CSR_NRDA(pData) = CSR_NRBA(pData) = 0; 1563 1567 CSR_NRBC(pData) = 0; 1564 if (! rmd.rmd1.own)1568 if (!pcnetRmdLoad(pData, &rmd, PHYSADDR(pData, addr), true)) 1565 1569 { 1566 1570 STAM_PROFILE_ADV_STOP(&pData->CTXSUFF(StatRdtePoll), a); … … 1606 1610 RTGCPHYS32 cxda = pcnetTdraAddr(pData, CSR_XMTRC(pData)); 1607 1611 1608 pcnetTmdLoad(pData, tmd, PHYSADDR(pData, cxda), true); 1609 1610 if (!tmd->tmd1.own) 1612 if (!pcnetTmdLoad(pData, tmd, PHYSADDR(pData, cxda), true)) 1611 1613 { 1612 1614 STAM_PROFILE_ADV_STOP(&pData->CTXSUFF(StatTdtePoll), a); … … 1766 1768 i = CSR_RCVRL(pData); 1767 1769 next_crda = pcnetRdraAddr(pData, i); 1768 pcnetRmdLoad(pData, &next_rmd, PHYSADDR(pData, next_crda), true);1769 1770 1770 1771 /* Check next descriptor's own bit. If we don't own it, we have 1771 1772 * to quit and write error status into the last descriptor we own. 1772 1773 */ 1773 if (! next_rmd.rmd1.own)1774 if (!pcnetRmdLoad(pData, &next_rmd, PHYSADDR(pData, next_crda), true)) 1774 1775 break; 1775 1776 … … 2130 2131 /* 2131 2132 * The typical case - a complete packet. 2132 * This can be performed with zero copy in Ring-3.2133 2133 */ 2134 2134 if (tmd.tmd1.stp && tmd.tmd1.enp) … … 4707 4707 PDMDevHlpSTAMRegisterF(pDevIns, &pData->StatXmitSkipCurrent, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "", "/Devices/PCNet%d/Xmit/Skipped", iInstance, i + 1); 4708 4708 4709 PDMDevHlpSTAMRegisterF(pDevIns, &pData->StatInterrupt, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCNet interrupt checks", "/Devices/PCNet%d/ Interrupt", iInstance);4709 PDMDevHlpSTAMRegisterF(pDevIns, &pData->StatInterrupt, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCNet interrupt checks", "/Devices/PCNet%d/UpdateIRQ", iInstance); 4710 4710 PDMDevHlpSTAMRegisterF(pDevIns, &pData->StatPollTimer, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCNet poll timer", "/Devices/PCNet%d/PollTimer", iInstance); 4711 4711 PDMDevHlpSTAMRegisterF(pDevIns, &pData->StatMIIReads, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Number of MII reads", "/Devices/PCNet%d/MIIReads", iInstance);
Note:
See TracChangeset
for help on using the changeset viewer.