- Timestamp:
- Sep 30, 2009 11:39:55 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 53054
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMInternal.h
r23455 r23457 642 642 uint32_t fSomethingElse0 : 1; 643 643 /** The Page ID. 644 * @todo Merge with HCPhysY once we've liberated HCPhysY of its stuff .645 * TheHCPhysY will then be 100% static. */644 * @todo Merge with HCPhysY once we've liberated HCPhysY of its stuff? The 645 * HCPhysY will then be 100% static. */ 646 646 uint32_t idPageY : 28; 647 647 /** The page type (PGMPAGETYPE). */ … … 695 695 #define PGM_PAGE_INIT(pPage, _HCPhys, _idPage, _uType, _uState) \ 696 696 do { \ 697 (pPage)->HCPhysY = (_HCPhys); \ 697 RTHCPHYS SetHCPhysTmp = (_HCPhys); \ 698 AssertFatal(!(SetHCPhysTmp & ~UINT64_C(0x0000fffffffff000))); \ 699 (pPage)->HCPhysY = (SetHCPhysTmp); \ 698 700 (pPage)->u2StateY = (_uState); \ 699 701 (pPage)->fWrittenToY = 0; \ … … 760 762 * @param pPage Pointer to the physical guest page tracking structure. 761 763 */ 762 #define PGM_PAGE_GET_HCPHYS(pPage) ( (pPage)->HCPhysY & UINT64_C(0x0000fffffffff000) ) 764 #ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS 765 # define PGM_PAGE_GET_HCPHYS(pPage) ( (pPage)->HCPhysY & UINT64_C(0x0000fffffffff000) ) 766 #else 767 # define PGM_PAGE_GET_HCPHYS(pPage) ( (pPage)->HCPhysY ) 768 #endif 763 769 764 770 /** … … 767 773 * @param _HCPhys The new host physical address. 768 774 */ 775 #ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS 769 776 #define PGM_PAGE_SET_HCPHYS(pPage, _HCPhys) \ 770 do { (pPage)->HCPhysY = (((pPage)->HCPhysY) & UINT64_C(0xffff000000000fff)) \ 771 | ((_HCPhys) & UINT64_C(0x0000fffffffff000)); } while (0) 777 do { \ 778 RTHCPHYS SetHCPhysTmp = (_HCPhys); \ 779 AssertFatal(!(SetHCPhysTmp & ~UINT64_C(0x0000fffffffff000))); \ 780 (pPage)->HCPhysY = (((pPage)->HCPhysY) & UINT64_C(0xffff000000000fff)) \ 781 | SetHCPhysTmp; \ 782 } while (0) 783 #else 784 # define PGM_PAGE_SET_HCPHYS(pPage, _HCPhys) \ 785 do { \ 786 RTHCPHYS SetHCPhysTmp = (_HCPhys); \ 787 AssertFatal(!(SetHCPhysTmp & ~UINT64_C(0x0000fffffffff000))); \ 788 (pPage)->HCPhysY = SetHCPhysTmp; \ 789 } while (0) 790 #endif 772 791 773 792 /** … … 776 795 * @param pPage Pointer to the physical guest page tracking structure. 777 796 */ 778 #define PGM_PAGE_GET_PAGEID(pPage) ( (pPage)->idPageY ) 779 /* later: 780 #define PGM_PAGE_GET_PAGEID(pPage) ( ((uint32_t)(pPage)->HCPhysY >> (48 - 12)) 797 #ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS 798 # define PGM_PAGE_GET_PAGEID(pPage) ( ((uint32_t)(pPage)->HCPhysY >> (48 - 12)) 781 799 | ((uint32_t)(pPage)->HCPhysY & 0xfff) ) 782 */ 800 #else 801 # define PGM_PAGE_GET_PAGEID(pPage) ( (pPage)->idPageY ) 802 #endif 803 783 804 /** 784 805 * Sets the Page ID. 785 806 * @param pPage Pointer to the physical guest page tracking structure. 786 807 */ 787 #define PGM_PAGE_SET_PAGEID(pPage, _idPage) do { (pPage)->idPageY = (_idPage); } while (0) 788 /* later: 789 #define PGM_PAGE_SET_PAGEID(pPage, _idPage) do { (pPage)->HCPhysY = (((pPage)->HCPhysY) & UINT64_C(0x0000fffffffff000)) \ 790 | ((_idPage) & 0xfff) \ 791 | (((_idPage) & 0x0ffff000) << (48-12)); } while (0) 792 */ 808 #ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS 809 # define PGM_PAGE_SET_PAGEID(pPage, _idPage) \ 810 do { \ 811 (pPage)->HCPhysY = (((pPage)->HCPhysY) & UINT64_C(0x0000fffffffff000)) \ 812 | ((_idPage) & 0xfff) \ 813 | (((_idPage) & 0x0ffff000) << (48-12)); \ 814 } while (0) 815 #else 816 # define PGM_PAGE_SET_PAGEID(pPage, _idPage) \ 817 do { \ 818 (pPage)->idPageY = (_idPage); \ 819 } while (0) 820 #endif 793 821 794 822 /** … … 797 825 * @param pPage Pointer to the physical guest page tracking structure. 798 826 */ 799 #define PGM_PAGE_GET_CHUNKID(pPage) ( (pPage)->idPageY >> GMM_CHUNKID_SHIFT ) 800 /* later: 801 #if GMM_CHUNKID_SHIFT == 12 802 # define PGM_PAGE_GET_CHUNKID(pPage) ( (uint32_t)((pPage)->HCPhysY >> 48) ) 803 #elif GMM_CHUNKID_SHIFT > 12 804 # define PGM_PAGE_GET_CHUNKID(pPage) ( (uint32_t)((pPage)->HCPhysY >> (48 + (GMM_CHUNKID_SHIFT - 12)) ) 805 #elif GMM_CHUNKID_SHIFT < 12 806 # define PGM_PAGE_GET_CHUNKID(pPage) ( ( (uint32_t)((pPage)->HCPhysY >> 48) << (12 - GMM_CHUNKID_SHIFT) ) \ 807 | ( (uint32_t)((pPage)->HCPhysY & 0xfff) >> GMM_CHUNKID_SHIFT ) ) 827 #ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS 828 # if GMM_CHUNKID_SHIFT == 12 829 # define PGM_PAGE_GET_CHUNKID(pPage) ( (uint32_t)((pPage)->HCPhysY >> 48) ) 830 # elif GMM_CHUNKID_SHIFT > 12 831 # define PGM_PAGE_GET_CHUNKID(pPage) ( (uint32_t)((pPage)->HCPhysY >> (48 + (GMM_CHUNKID_SHIFT - 12)) ) 832 # elif GMM_CHUNKID_SHIFT < 12 833 # define PGM_PAGE_GET_CHUNKID(pPage) ( ( (uint32_t)((pPage)->HCPhysY >> 48) << (12 - GMM_CHUNKID_SHIFT) ) \ 834 # else 835 # error "GMM_CHUNKID_SHIFT isn't defined or something." 836 # endif 808 837 #else 809 # error "GMM_CHUNKID_SHIFT isn't defined or something." 810 #endif 811 */ 838 # define PGM_PAGE_GET_CHUNKID(pPage) ( (pPage)->idPageY >> GMM_CHUNKID_SHIFT ) 839 #endif 812 840 813 841 /** … … 816 844 * @param pPage Pointer to the physical guest page tracking structure. 817 845 */ 818 #define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage) ( (pPage)->idPageY & GMM_PAGEID_IDX_MASK ) 819 /* later: 820 #if GMM_CHUNKID_SHIFT <= 12 821 # define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage) ( (uint32_t)((pPage)->HCPhysY & GMM_PAGEID_IDX_MASK) ) 846 #ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS 847 # if GMM_CHUNKID_SHIFT <= 12 848 # define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage) ( (uint32_t)((pPage)->HCPhysY & GMM_PAGEID_IDX_MASK) ) 849 # else 850 # define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage) ( (uint32_t)((pPage)->HCPhysY & 0xfff) \ 851 | ( (uint32_t)((pPage)->HCPhysY >> 48) & (RT_BIT_32(GMM_CHUNKID_SHIFT - 12) - 1) ) ) 852 # endif 822 853 #else 823 # define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage) ( (uint32_t)((pPage)->HCPhysY & 0xfff) \ 824 | ( (uint32_t)((pPage)->HCPhysY >> 48) & (RT_BIT_32(GMM_CHUNKID_SHIFT - 12) - 1) ) ) 825 #endif 826 */ 854 # define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage) ( (pPage)->idPageY & GMM_PAGEID_IDX_MASK ) 855 #endif 827 856 828 857 -
trunk/src/VBox/VMM/PGMPhys.cpp
r23453 r23457 1600 1600 { 1601 1601 PGM_PAGE_INIT(&pNew->RamRange.aPages[iPage], 1602 paPages[iPage].Phys & X86_PTE_PAE_PG_MASK, NIL_GMM_PAGEID,1602 paPages[iPage].Phys, NIL_GMM_PAGEID, 1603 1603 PGMPAGETYPE_MMIO2, PGM_PAGE_STATE_ALLOCATED); 1604 1604 } … … 1881 1881 VMMR3DECL(int) PGMR3PhysMMIO2Unmap(PVM pVM, PPDMDEVINS pDevIns, uint32_t iRegion, RTGCPHYS GCPhys) 1882 1882 { 1883 bool fInformREM = false;1884 RTGCPHYS GCPhysRangeREM;1885 RTGCPHYS cbRangeREM;1886 1887 1883 /* 1888 1884 * Validate input … … 1909 1905 pgmLock(pVM); 1910 1906 1907 RTGCPHYS GCPhysRangeREM; 1908 RTGCPHYS cbRangeREM; 1909 bool fInformREM; 1911 1910 if (pCur->fOverlapping) 1912 1911 { … … 1930 1929 pPageDst++; 1931 1930 } 1931 1932 GCPhysRangeREM = NIL_RTGCPHYS; /* shuts up gcc */ 1933 cbRangeREM = RTGCPHYS_MAX; /* ditto */ 1934 fInformREM = false; 1932 1935 } 1933 1936 else
Note:
See TracChangeset
for help on using the changeset viewer.