Cache模式來存取。
CPU可用的快取模式為下列幾種
Memory Type and Mnemonic | Encoding in MTRR |
Uncacheable (UC) | 00H |
Write Combining (WC) | 01H |
Reserved | 02H |
Reserved | 03H |
Write-through (WT) | 04H |
Write-protected (WP) | 05H |
Write-back (WB) | 06H |
Reserved | 07H-FFH |
可藉由讀取CPUID判斷此CPU支不支援MTRR
CPUID Function 0x00000001, EDX
bit 12 - MTRR supported
MTRRCap - MTRR Capabilities
0x000000FEbit 0-7 (VCNT) - Variable range register 的數量
bit 8 (FIX) - 是否支援Fixed range register
bit 10 (WC) - 是否支援Write Combining的cache type
bit 11 (SMRR) - 是否支援SMRR
MTRR 可以分為兩種,Fixed range register 與Variable range register,1MB記憶體以下位置的
cache 是由Fixed range register來控制,1MB以上就由Variable range register控制,剩下未被
指定的記憶體區塊就由 MTRRdefType (0x000002FF) 的bit0-7 來決定。
MTRRdefType - MTRR Default Memory Type
0x000002FFbit 0-7 (Type) - 未被MTRR指定的Memory cache type
bit 10 (FE) - Enable Fixed MTRR
bit 11 (E) - Enable MTRR
1MB以下的記憶體由Fixed Range MTRR控制,可分為一組64k、兩組16k和八組4k,每組中可指
定八段range。
MtrrVar_64K
0x00000250MtrrVar_16K
0x00000258, 0x00000259MtrrVar_4K
0x00000268 - 0x0000026Fbit 0-3 (Type) - Memory cache type
1MB以上的記憶體可用Variable Range MTRR來控制,由Base與Mask成對組成,並可以指定長
度,其支援的數量可由MTRRCap的VCNT讀出
MtrrVarBase
0x00000200, 0x00000202, ...bit 0-7 (Type) - 指定range的Memory cache type
bit 12-MAXPHYADDR (PhysBase) - 後面補上3個0,即為base address
MAXPHYADDR為CPU的定址能力,可從CPUID Function 0x80000008讀出
MtrrVarMask
0x00000201, 0x00000203, ...bit 11 (V) - 此組MTRR是否有效
bit 12-MAXPHYADDR (PhysMask) - 後面補上3個0,再取2的補數,即為MTRR長度
Address_Within_Range & PhysMask == PhysBase & PhysMask
沒有留言:
張貼留言