Changeset 60689 in vbox
- Timestamp:
- Apr 25, 2016 1:43:42 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
include/VBox/vmm/apic.h (modified) (3 diffs)
-
src/VBox/VMM/VMMAll/APICAll.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMR3/APIC.cpp (modified) (19 diffs)
-
src/VBox/VMM/include/APICInternal.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/apic.h
r60646 r60689 256 256 struct 257 257 { 258 uint 32_t u24Reserved0 : 24;259 uint 32_t u8LogicalApicId : 8;258 uint8_t u8Reserved0[3]; 259 uint8_t u8LogicalApicId; 260 260 uint32_t u32Reserved0[3]; 261 261 } u; … … 530 530 } XAPICPAGE; 531 531 /** Pointer to a XAPICPAGE struct. */ 532 typedef volatileXAPICPAGE *PXAPICPAGE;532 typedef XAPICPAGE *PXAPICPAGE; 533 533 /** Pointer to a const XAPICPAGE struct. */ 534 typedef const volatileXAPICPAGE *PCXAPICPAGE;534 typedef const XAPICPAGE *PCXAPICPAGE; 535 535 AssertCompileSize(XAPICPAGE, 4096); 536 536 AssertCompileMemberOffset(XAPICPAGE, id, XAPIC_OFF_ID); … … 871 871 } X2APICPAGE; 872 872 /** Pointer to a X2APICPAGE struct. */ 873 typedef volatileX2APICPAGE *PX2APICPAGE;873 typedef X2APICPAGE *PX2APICPAGE; 874 874 /** Pointer to a const X2APICPAGE struct. */ 875 typedef const volatileX2APICPAGE *PCX2APICPAGE;875 typedef const X2APICPAGE *PCX2APICPAGE; 876 876 AssertCompileSize(X2APICPAGE, 4096); 877 877 AssertCompileSize(X2APICPAGE, sizeof(XAPICPAGE)); -
trunk/src/VBox/VMM/VMMAll/APICAll.cpp
r60655 r60689 2481 2481 */ 2482 2482 apicSetVectorInPib(&pApicCpu->ApicPibLevel, uVector); 2483 uint32_t const fAlreadySet = apicSetNotificationBitInPib( (PAPICPIB)&pApicCpu->ApicPibLevel);2483 uint32_t const fAlreadySet = apicSetNotificationBitInPib(&pApicCpu->ApicPibLevel); 2484 2484 if (!fAlreadySet) 2485 2485 APICSetInterruptFF(pVCpu, PDMAPICIRQ_HARDWARE); -
trunk/src/VBox/VMM/VMMR3/APIC.cpp
r60655 r60689 174 174 * and AMD spec 16.3.2 "APIC Registers". 175 175 */ 176 memset((void *)&pXApicPage->irr, 0, sizeof(pXApicPage->irr)); 177 memset((void *)&pXApicPage->isr, 0, sizeof(pXApicPage->isr)); 178 memset((void *)&pXApicPage->tmr, 0, sizeof(pXApicPage->tmr)); 179 memset((void *)&pXApicPage->icr_hi, 0, sizeof(pXApicPage->icr_hi)); 180 memset((void *)&pXApicPage->icr_lo, 0, sizeof(pXApicPage->icr_lo)); 181 memset((void *)&pXApicPage->ldr, 0, sizeof(pXApicPage->ldr)); 182 memset((void *)&pXApicPage->tpr, 0, sizeof(pXApicPage->tpr)); 183 memset((void *)&pXApicPage->timer_icr, 0, sizeof(pXApicPage->timer_icr)); 184 memset((void *)&pXApicPage->timer_ccr, 0, sizeof(pXApicPage->timer_ccr)); 185 memset((void *)&pXApicPage->timer_dcr, 0, sizeof(pXApicPage->timer_dcr)); 176 RT_ZERO(pXApicPage->irr); 177 RT_ZERO(pXApicPage->irr); 178 RT_ZERO(pXApicPage->isr); 179 RT_ZERO(pXApicPage->tmr); 180 RT_ZERO(pXApicPage->icr_hi); 181 RT_ZERO(pXApicPage->icr_lo); 182 RT_ZERO(pXApicPage->ldr); 183 RT_ZERO(pXApicPage->tpr); 184 RT_ZERO(pXApicPage->timer_icr); 185 RT_ZERO(pXApicPage->timer_ccr); 186 RT_ZERO(pXApicPage->timer_dcr); 186 187 187 188 pXApicPage->dfr.u.u4Model = XAPICDESTFORMAT_FLAT; … … 190 191 /** @todo CMCI. */ 191 192 192 memset((void *)&pXApicPage->lvt_timer, 0, sizeof(pXApicPage->lvt_timer));193 RT_ZERO(pXApicPage->lvt_timer); 193 194 pXApicPage->lvt_timer.u.u1Mask = 1; 194 195 195 196 #if XAPIC_HARDWARE_VERSION == XAPIC_HARDWARE_VERSION_P4 196 memset((void *)&pXApicPage->lvt_thermal, 0, sizeof(pXApicPage->lvt_thermal));197 RT_ZERO(pXApicPage->lvt_thermal); 197 198 pXApicPage->lvt_thermal.u.u1Mask = 1; 198 199 #endif 199 200 200 memset((void *)&pXApicPage->lvt_perf, 0, sizeof(pXApicPage->lvt_perf));201 RT_ZERO(pXApicPage->lvt_perf); 201 202 pXApicPage->lvt_perf.u.u1Mask = 1; 202 203 203 memset((void *)&pXApicPage->lvt_lint0, 0, sizeof(pXApicPage->lvt_lint0));204 RT_ZERO(pXApicPage->lvt_lint0); 204 205 pXApicPage->lvt_lint0.u.u1Mask = 1; 205 206 206 memset((void *)&pXApicPage->lvt_lint1, 0, sizeof(pXApicPage->lvt_lint1));207 RT_ZERO(pXApicPage->lvt_lint1); 207 208 pXApicPage->lvt_lint1.u.u1Mask = 1; 208 209 209 memset((void *)&pXApicPage->lvt_error, 0, sizeof(pXApicPage->lvt_error));210 RT_ZERO(pXApicPage->lvt_error); 210 211 pXApicPage->lvt_error.u.u1Mask = 1; 211 212 212 memset((void *)&pXApicPage->svr, 0, sizeof(pXApicPage->svr));213 RT_ZERO(pXApicPage->svr); 213 214 pXApicPage->svr.u.u8SpuriousVector = 0xff; 214 215 215 216 /* The self-IPI register is reset to 0. See Intel spec. 10.12.5.1 "x2APIC States" */ 216 217 PX2APICPAGE pX2ApicPage = VMCPU_TO_X2APICPAGE(pVCpu); 217 memset((void *)&pX2ApicPage->self_ipi, 0, sizeof(pX2ApicPage->self_ipi));218 RT_ZERO(pX2ApicPage->self_ipi); 218 219 219 220 /* Clear the pending-interrupt bitmaps. */ 220 221 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu); 221 memset((void *)&pApicCpu->ApicPibLevel, 0, sizeof(APICPIB));222 memset((void *)pApicCpu->pvApicPibR3, 0,sizeof(APICPIB));222 RT_BZERO(&pApicCpu->ApicPibLevel, sizeof(APICPIB)); 223 RT_BZERO(pApicCpu->pvApicPibR3, sizeof(APICPIB)); 223 224 } 224 225 … … 347 348 pHlp->pfnPrintf(pHlp, "\n"); 348 349 349 size_t cPending = 0;350 uint32_t cPending = 0; 350 351 pHlp->pfnPrintf(pHlp, " Pending:\n"); 351 352 pHlp->pfnPrintf(pHlp, " "); … … 654 655 LogRel(("APIC%u: uHintedTimerShift = %#RU64\n", pVCpu->idCpu, pApicCpu->uHintedTimerShift)); 655 656 657 PCXAPICPAGE pXApicPage = VMCPU_TO_CXAPICPAGE(pVCpu); 658 LogRel(("APIC%u: uTimerICR = %#RX32\n", pVCpu->idCpu, pXApicPage->timer_icr.u32InitialCount)); 659 LogRel(("APIC%u: uTimerCCR = %#RX32\n", pVCpu->idCpu, pXApicPage->timer_ccr.u32CurrentCount)); 660 656 661 /* The PIBs. */ 657 662 LogRel(("APIC%u: Edge PIB : %.*Rhxs\n", pVCpu->idCpu, sizeof(APICPIB), pApicCpu->pvApicPibR3)); … … 720 725 721 726 /** 727 * Worker for loading per-VCPU APIC data for legacy (old) saved-states. 728 * 729 * @returns VBox status code. 730 * @param pVM The cross context VM structure. 731 * @param pVCpu The cross context virtual CPU structure. 732 * @param pSSM The SSM handle. 733 * @param uVersion Data layout version. 734 */ 735 static int apicR3LoadLegacyVCpuData(PVM pVM, PVMCPU pVCpu, PSSMHANDLE pSSM, uint32_t uVersion) 736 { 737 AssertReturn(uVersion <= APIC_SAVED_STATE_VERSION_VBOX_50, VERR_NOT_SUPPORTED); 738 739 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu); 740 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); 741 742 uint32_t uApicBaseLo; 743 int rc = SSMR3GetU32(pSSM, &uApicBaseLo); 744 AssertRCReturn(rc, rc); 745 pApicCpu->uApicBaseMsr = uApicBaseLo; 746 747 switch (uVersion) 748 { 749 case APIC_SAVED_STATE_VERSION_ANCIENT: 750 { 751 uint8_t uPhysApicId; 752 SSMR3GetU8(pSSM, &pXApicPage->id.u8ApicId); 753 SSMR3GetU8(pSSM, &uPhysApicId); NOREF(uPhysApicId); /* PhysId == pVCpu->idCpu */ 754 break; 755 } 756 757 case APIC_SAVED_STATE_VERSION_VBOX_50: 758 case APIC_SAVED_STATE_VERSION_VBOX_30: 759 { 760 uint32_t uApicId, uPhysApicId, uArbId; 761 SSMR3GetU32(pSSM, &uApicId); pXApicPage->id.u8ApicId = uApicId; 762 SSMR3GetU32(pSSM, &uPhysApicId); NOREF(uPhysApicId); /* PhysId == pVCpu->idCpu */ 763 SSMR3GetU32(pSSM, &uArbId); NOREF(uArbId); /* ArbID is & was unused. */ 764 break; 765 } 766 767 default: 768 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 769 } 770 771 uint32_t u32Tpr; 772 SSMR3GetU32(pSSM, &u32Tpr); 773 pXApicPage->tpr.u8Tpr = XAPIC_TPR_GET_TPR_FROM_U32(u32Tpr); 774 775 SSMR3GetU32(pSSM, &pXApicPage->svr.all.u32Svr); 776 SSMR3GetU8(pSSM, &pXApicPage->ldr.u.u8LogicalApicId); 777 778 uint8_t uDfr; 779 SSMR3GetU8(pSSM, &uDfr); 780 pXApicPage->dfr.u.u4Model = uDfr >> 4; 781 782 AssertCompile(RT_ELEMENTS(pXApicPage->isr.u) == 8); 783 AssertCompile(RT_ELEMENTS(pXApicPage->tmr.u) == 8); 784 AssertCompile(RT_ELEMENTS(pXApicPage->irr.u) == 8); 785 for (size_t i = 0; i < 8; i++) 786 { 787 SSMR3GetU32(pSSM, &pXApicPage->isr.u[i].u32Reg); 788 SSMR3GetU32(pSSM, &pXApicPage->tmr.u[i].u32Reg); 789 SSMR3GetU32(pSSM, &pXApicPage->irr.u[i].u32Reg); 790 } 791 792 SSMR3GetU32(pSSM, &pXApicPage->lvt_timer.all.u32LvtTimer); 793 SSMR3GetU32(pSSM, &pXApicPage->lvt_thermal.all.u32LvtThermal); 794 SSMR3GetU32(pSSM, &pXApicPage->lvt_perf.all.u32LvtPerf); 795 SSMR3GetU32(pSSM, &pXApicPage->lvt_lint0.all.u32LvtLint0); 796 SSMR3GetU32(pSSM, &pXApicPage->lvt_lint1.all.u32LvtLint1); 797 SSMR3GetU32(pSSM, &pXApicPage->lvt_error.all.u32LvtError); 798 799 SSMR3GetU32(pSSM, &pXApicPage->esr.all.u32Errors); 800 SSMR3GetU32(pSSM, &pXApicPage->icr_lo.all.u32IcrLo); 801 SSMR3GetU32(pSSM, &pXApicPage->icr_hi.all.u32IcrHi); 802 803 uint32_t u32TimerShift; 804 SSMR3GetU32(pSSM, &pXApicPage->timer_dcr.all.u32DivideValue); 805 SSMR3GetU32(pSSM, &u32TimerShift); 806 uint8_t const uTimerShift = apicGetTimerShift(pXApicPage); 807 AssertMsgReturn(u32TimerShift == uTimerShift, ("Timer shift invalid! Saved-state contains %u, expected %u\n", u32TimerShift, 808 uTimerShift), VERR_INVALID_STATE); 809 810 SSMR3GetU32(pSSM, &pXApicPage->timer_icr.u32InitialCount); 811 SSMR3GetU64(pSSM, &pApicCpu->u64TimerInitial); 812 uint64_t uNextTS; 813 rc = SSMR3GetU64(pSSM, &uNextTS); AssertRCReturn(rc, rc); 814 if (uNextTS >= pApicCpu->u64TimerInitial + ((pXApicPage->timer_icr.u32InitialCount + 1) << uTimerShift)) 815 pXApicPage->timer_ccr.u32CurrentCount = pXApicPage->timer_icr.u32InitialCount; 816 817 rc = TMR3TimerLoad(pApicCpu->pTimerR3, pSSM); 818 AssertRCReturn(rc, rc); 819 Assert(pApicCpu->uHintedTimerInitialCount == 0); 820 Assert(pApicCpu->uHintedTimerShift == 0); 821 if (TMTimerIsActive(pApicCpu->pTimerR3)) 822 { 823 uint32_t const uInitialCount = pXApicPage->timer_icr.u32InitialCount; 824 apicHintTimerFreq(pApicCpu, uInitialCount, uTimerShift); 825 } 826 827 return rc; 828 } 829 830 831 /** 722 832 * @copydoc FNSSMDEVLIVEEXEC 723 833 */ … … 773 883 774 884 /* Save the timer. */ 885 SSMR3PutU64(pSSM, pApicCpu->u64TimerInitial); 775 886 TMR3TimerSave(pApicCpu->pTimerR3, pSSM); 776 SSMR3PutU64(pSSM, pApicCpu->u64TimerInitial);777 887 778 888 #ifdef DEBUG_ramshankar … … 793 903 PVM pVM = PDMDevHlpGetVM(pDevIns); 794 904 PAPIC pApic = VM_TO_APIC(pVM); 905 795 906 AssertReturn(pVM, VERR_INVALID_VM_HANDLE); 796 797 LogFlow(("APIC: apicR3LoadExec: uVersion=%u uPass=%u\n", uVersion, uPass)); 907 AssertReturn(uPass == SSM_PASS_FINAL, VERR_WRONG_ORDER); 908 909 LogFlow(("APIC: apicR3LoadExec: uVersion=%u uPass=%#x\n", uVersion, uPass)); 798 910 799 911 /* Weed out invalid versions. */ … … 803 915 && uVersion != APIC_SAVED_STATE_VERSION_ANCIENT) 804 916 { 917 LogRel(("APIC: apicR3LoadExec: Invalid/unrecognized saved-state version %u (%#x)\n", uVersion, uVersion)); 805 918 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 806 919 } 807 920 921 int rc = VINF_SUCCESS; 808 922 if (uVersion > APIC_SAVED_STATE_VERSION_VBOX_30) 809 923 { 810 int rc2= apicR3LoadVMData(pVM, pSSM);811 AssertRCReturn(rc 2, rc2);924 rc = apicR3LoadVMData(pVM, pSSM); 925 AssertRCReturn(rc, rc); 812 926 813 927 if (uVersion == APIC_SAVED_STATE_VERSION) … … 815 929 } 816 930 817 if (uPass != SSM_PASS_FINAL)818 return VINF_SUCCESS;819 820 int rc = VINF_SUCCESS;821 931 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 822 932 { … … 832 942 /* Load the APIC page. */ 833 943 if (XAPIC_IN_X2APIC_MODE(pVCpu)) 834 SSMR3GetStruct(pSSM, (void *)pApicCpu->pvApicPageR3, &g_aX2ApicPageFields[0]);944 SSMR3GetStruct(pSSM, pApicCpu->pvApicPageR3, &g_aX2ApicPageFields[0]); 835 945 else 836 SSMR3GetStruct(pSSM, (void *)pApicCpu->pvApicPageR3, &g_aXApicPageFields[0]);946 SSMR3GetStruct(pSSM, pApicCpu->pvApicPageR3, &g_aXApicPageFields[0]); 837 947 838 948 /* Load the PIBs. */ 839 SSMR3GetStruct(pSSM, (void *)pApicCpu->pvApicPibR3, &g_aApicPibFields[0]);840 SSMR3GetStruct(pSSM, (void *)&pApicCpu->ApicPibLevel, &g_aApicPibFields[0]);949 SSMR3GetStruct(pSSM, pApicCpu->pvApicPibR3, &g_aApicPibFields[0]); 950 SSMR3GetStruct(pSSM, &pApicCpu->ApicPibLevel, &g_aApicPibFields[0]); 841 951 842 952 /* Load the timer. */ 953 rc = SSMR3GetU64(pSSM, &pApicCpu->u64TimerInitial); AssertRCReturn(rc, rc); 843 954 rc = TMR3TimerLoad(pApicCpu->pTimerR3, pSSM); AssertRCReturn(rc, rc); 844 rc = SSMR3GetU64(pSSM, &pApicCpu->u64TimerInitial); AssertRCReturn(rc, rc);845 955 Assert(pApicCpu->uHintedTimerShift == 0); 846 956 Assert(pApicCpu->uHintedTimerInitialCount == 0); … … 852 962 apicHintTimerFreq(pApicCpu, uInitialCount, uTimerShift); 853 963 } 854 855 #ifdef DEBUG_ramshankar856 apicR3DumpState(pVCpu, "Loaded state:");857 #endif858 964 } 859 965 else 860 966 { 861 /** @todo load & translate old per-VCPU data to new APIC code. */ 862 uint32_t uApicBaseMsrLo; 863 SSMR3GetU32(pSSM, &uApicBaseMsrLo); 864 pApicCpu->uApicBaseMsr = uApicBaseMsrLo; 967 rc = apicR3LoadLegacyVCpuData(pVM, pVCpu, pSSM, uVersion); 968 AssertRCReturn(rc, rc); 865 969 } 970 971 #ifdef DEBUG_ramshankar 972 char szLoadedState[128]; 973 RTStrPrintf(szLoadedState, sizeof(szLoadedState), "Loaded state (version %u):", uVersion); 974 apicR3DumpState(pVCpu, &szLoadedState[0]); 975 #endif 866 976 } 867 977 … … 1009 1119 size_t const cPages = pApic->cbApicPib >> PAGE_SHIFT; 1010 1120 if (cPages == 1) 1011 SUPR3PageFreeEx( (void *)pApic->pvApicPibR3, cPages);1121 SUPR3PageFreeEx(pApic->pvApicPibR3, cPages); 1012 1122 else 1013 SUPR3ContFree( (void *)pApic->pvApicPibR3, cPages);1123 SUPR3ContFree(pApic->pvApicPibR3, cPages); 1014 1124 pApic->pvApicPibR3 = NIL_RTR3PTR; 1015 1125 pApic->pvApicPibR0 = NIL_RTR0PTR; … … 1029 1139 if (pApicCpu->pvApicPageR3 != NIL_RTR3PTR) 1030 1140 { 1031 SUPR3PageFreeEx( (void *)pApicCpu->pvApicPageR3, 1 /* cPages */);1141 SUPR3PageFreeEx(pApicCpu->pvApicPageR3, 1 /* cPages */); 1032 1142 pApicCpu->pvApicPageR3 = NIL_RTR3PTR; 1033 1143 pApicCpu->pvApicPageR0 = NIL_RTR0PTR; … … 1068 1178 RT_ZERO(SupApicPib); 1069 1179 SupApicPib.Phys = NIL_RTHCPHYS; 1070 int rc = SUPR3PageAllocEx(1 /* cPages */, 0 /* fFlags */, (void **)&pApic->pvApicPibR3, &pApic->pvApicPibR0, &SupApicPib);1180 int rc = SUPR3PageAllocEx(1 /* cPages */, 0 /* fFlags */, &pApic->pvApicPibR3, &pApic->pvApicPibR0, &SupApicPib); 1071 1181 if (RT_SUCCESS(rc)) 1072 1182 { … … 1089 1199 1090 1200 /* Initialize the PIB. */ 1091 memset((void *)pApic->pvApicPibR3, 0, pApic->cbApicPib);1201 RT_BZERO(pApic->pvApicPibR3, pApic->cbApicPib); 1092 1202 1093 1203 /* Map the PIB into GC. */ … … 1095 1205 { 1096 1206 pApic->pvApicPibRC = NIL_RTRCPTR; 1097 int rc = MMR3HyperMapHCPhys(pVM, (void *)pApic->pvApicPibR3, NIL_RTR0PTR, pApic->HCPhysApicPib, pApic->cbApicPib,1207 int rc = MMR3HyperMapHCPhys(pVM, pApic->pvApicPibR3, NIL_RTR0PTR, pApic->HCPhysApicPib, pApic->cbApicPib, 1098 1208 "APIC PIB", (PRTGCPTR)&pApic->pvApicPibRC); 1099 1209 if (RT_FAILURE(rc)) … … 1126 1236 AssertCompile(sizeof(XAPICPAGE) == PAGE_SIZE); 1127 1237 pApicCpu->cbApicPage = sizeof(XAPICPAGE); 1128 int rc = SUPR3PageAllocEx(1 /* cPages */, 0 /* fFlags */, (void **)&pApicCpu->pvApicPageR3, &pApicCpu->pvApicPageR0,1238 int rc = SUPR3PageAllocEx(1 /* cPages */, 0 /* fFlags */, &pApicCpu->pvApicPageR3, &pApicCpu->pvApicPageR0, 1129 1239 &SupApicPage); 1130 1240 if (RT_SUCCESS(rc)) … … 1137 1247 if (fNeedsGCMapping) 1138 1248 { 1139 rc = MMR3HyperMapHCPhys(pVM, (void *)pApicCpu->pvApicPageR3, NIL_RTR0PTR, pApicCpu->HCPhysApicPage,1249 rc = MMR3HyperMapHCPhys(pVM, pApicCpu->pvApicPageR3, NIL_RTR0PTR, pApicCpu->HCPhysApicPage, 1140 1250 pApicCpu->cbApicPage, "APIC", (PRTGCPTR)&pApicCpu->pvApicPageRC); 1141 1251 if (RT_FAILURE(rc)) … … 1158 1268 1159 1269 /* Initialize the virtual-APIC state. */ 1160 memset((void *)pApicCpu->pvApicPageR3, 0, pApicCpu->cbApicPage);1270 RT_BZERO(pApicCpu->pvApicPageR3, pApicCpu->cbApicPage); 1161 1271 APICR3Reset(pVCpu, true /* fResetApicBaseMsr */); 1162 1272 -
trunk/src/VBox/VMM/include/APICInternal.h
r60652 r60689 109 109 /** TPR - Task-priority subclass. */ 110 110 #define XAPIC_TPR_TP_SUBCLASS UINT32_C(0x0f) 111 /** TPR - Get the task-priority class. */111 /** TPR - Gets the task-priority class. */ 112 112 #define XAPIC_TPR_GET_TP(a_Tpr) ((a_Tpr) & XAPIC_TPR_TP) 113 /** TPR - Get the task-priority subclass. */113 /** TPR - Gets the task-priority subclass. */ 114 114 #define XAPIC_TPR_GET_TP_SUBCLASS(a_Tpr) ((a_Tpr) & XAPIC_TPR_TP_SUBCLASS) 115 /** TPR - Gets the TPR from its 32-bit register. */ 116 #define XAPIC_TPR_GET_TPR_FROM_U32(a_32Tpr) (((a_32Tpr) >> 24) & XAPIC_TPR) 115 117 116 118 /** PPR - Valid bits. */ … … 450 452 RTR0MEMOBJ hMapObjApicPibR0; 451 453 /** The APIC PIB virtual address - R0 ptr. */ 452 R0PTRTYPE(vo latile void *)pvApicPibR0;454 R0PTRTYPE(void *) pvApicPibR0; 453 455 /** The APIC PIB virtual address - R3 ptr. */ 454 R3PTRTYPE(vo latile void *)pvApicPibR3;456 R3PTRTYPE(void *) pvApicPibR3; 455 457 /** The APIC PIB virtual address - RC ptr. */ 456 RCPTRTYPE(vo latile void *)pvApicPibRC;458 RCPTRTYPE(void *) pvApicPibRC; 457 459 /** Alignment padding. */ 458 460 RTRCPTR RCPtrAlignment1; … … 500 502 RTR0MEMOBJ hMapObjApicPageR0; 501 503 /** The APIC page virtual address - R0 ptr. */ 502 R0PTRTYPE(vo latile void *)pvApicPageR0;504 R0PTRTYPE(void *) pvApicPageR0; 503 505 /** The APIC page virtual address - R3 ptr. */ 504 R3PTRTYPE(vo latile void *)pvApicPageR3;506 R3PTRTYPE(void *) pvApicPageR3; 505 507 /** The APIC page virtual address - RC ptr. */ 506 RCPTRTYPE(vo latile void *)pvApicPageRC;508 RCPTRTYPE(void *) pvApicPageRC; 507 509 /** Alignment padding. */ 508 510 RTRCPTR RCPtrAlignment0; … … 524 526 RTHCPHYS HCPhysApicPib; 525 527 /** The APIC PIB virtual address - R0 ptr. */ 526 R0PTRTYPE(vo latile void *)pvApicPibR0;528 R0PTRTYPE(void *) pvApicPibR0; 527 529 /** The APIC PIB virtual address - R3 ptr. */ 528 R3PTRTYPE(vo latile void *)pvApicPibR3;530 R3PTRTYPE(void *) pvApicPibR3; 529 531 /** The APIC PIB virtual address - RC ptr. */ 530 RCPTRTYPE(vo latile void *)pvApicPibRC;532 RCPTRTYPE(void *) pvApicPibRC; 531 533 /** Alignment padding. */ 532 534 RTRCPTR RCPtrAlignment1; 533 535 /** The APIC PIB for level-sensitive interrupts. */ 534 volatile APICPIBApicPibLevel;536 APICPIB ApicPibLevel; 535 537 /** @} */ 536 538
Note:
See TracChangeset
for help on using the changeset viewer.

