Changeset 810 in vbox
- Timestamp:
- Feb 9, 2007 2:24:48 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 18486
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DevPCNet.cpp
r808 r810 589 589 /** 590 590 * Load transmit message descriptor 591 * Make sure we read the own flag first. 591 592 */ 592 593 DECLINLINE(void) pcnetTmdLoad(PCNetState *pData, TMD *tmd, RTGCPHYS addr) 593 594 { 594 595 PPDMDEVINS pDevIns = PCNETSTATE_2_DEVINS(pData); 596 uint8_t ownbyte; 597 595 598 if (!BCR_SWSTYLE(pData)) 596 599 { 597 600 uint16_t xda[4]; 601 602 PDMDevHlpPhysRead(pDevIns, addr+3, &ownbyte, 1); 598 603 PDMDevHlpPhysRead(pDevIns, addr, (void*)&xda[0], sizeof(xda)); 599 604 ((uint32_t *)tmd)[0] = (uint32_t)xda[0] | ((uint32_t)(xda[1] & 0x00ff) << 16); … … 603 608 } 604 609 else if (BCR_SWSTYLE(pData) != 3) 610 { 611 PDMDevHlpPhysRead(pDevIns, addr+7, &ownbyte, 1); 605 612 PDMDevHlpPhysRead(pDevIns, addr, (void*)tmd, 16); 613 } 606 614 else 607 615 { 608 616 uint32_t xda[4]; 617 PDMDevHlpPhysRead(pDevIns, addr+7, &ownbyte, 1); 609 618 PDMDevHlpPhysRead(pDevIns, addr, (void*)&xda[0], sizeof(xda)); 610 619 ((uint32_t *)tmd)[0] = xda[2]; … … 613 622 ((uint32_t *)tmd)[3] = xda[3]; 614 623 } 624 /* Double check the own bit; guest drivers might be buggy and lock prefixes in the recompiler are ignored by other threads. */ 625 #ifdef DEBUG 626 if (tmd->tmd1.own == 0 && (ownbyte & 0x80)) 627 Log(("pcnetTmdLoad: own bit flipped while reading!!\n")); 628 #endif 629 if (ownbyte & 0x80) 630 tmd->tmd1.own = 1; 615 631 } 616 632 … … 663 679 { 664 680 PPDMDEVINS pDevIns = PCNETSTATE_2_DEVINS(pData); 681 uint8_t ownbyte; 682 665 683 if (!BCR_SWSTYLE(pData)) 666 684 { 667 685 uint16_t rda[4]; 686 PDMDevHlpPhysRead(pDevIns, addr+3, &ownbyte, 1); 668 687 PDMDevHlpPhysRead(pDevIns, addr, (void*)&rda[0], sizeof(rda)); 669 688 ((uint32_t *)rmd)[0] = (uint32_t)rda[0] | ((rda[1] & 0x00ff) << 16); … … 673 692 } 674 693 else if (BCR_SWSTYLE(pData) != 3) 694 { 695 PDMDevHlpPhysRead(pDevIns, addr+7, &ownbyte, 1); 675 696 PDMDevHlpPhysRead(pDevIns, addr, (void*)rmd, 16); 697 } 676 698 else 677 699 { 678 700 uint32_t rda[4]; 701 PDMDevHlpPhysRead(pDevIns, addr+7, &ownbyte, 1); 679 702 PDMDevHlpPhysRead(pDevIns, addr, (void*)&rda[0], sizeof(rda)); 680 703 ((uint32_t *)rmd)[0] = rda[2]; … … 683 706 ((uint32_t *)rmd)[3] = rda[3]; 684 707 } 708 /* Double check the own bit; guest drivers might be buggy and lock prefixes in the recompiler are ignored by other threads. */ 709 #ifdef DEBUG 710 if (rmd->rmd1.own == 0 && (ownbyte & 0x80)) 711 Log(("pcnetTmdLoad: own bit flipped while reading!!\n")); 712 #endif 713 if (ownbyte & 0x80) 714 rmd->rmd1.own = 1; 685 715 } 686 716
Note:
See TracChangeset
for help on using the changeset viewer.