//------------------------------------------------------------------------------ // // OEMSetMemoryAttributes // // OEM function to change memory attributes that isn't supported by kernel. // Current implementaion only supports PAGE_WRITECOMBINE. // //------------------------------------------------------------------------------ BOOL OEMSetMemoryAttributes ( LPVOID pVirtAddr, // Virtual address of region LPVOID pPhysAddrShifted,// PhysicalAddress >> 8 (to support up to 40 bit address) DWORD cbSize, // Size of the region DWORD dwAttributes // attributes to be set ) { if (PAGE_WRITECOMBINE != dwAttributes) { DEBUGMSG (OAL_ERROR, (L"OEMSetMemoryAttributes: Only PAGE_WRITECOMBINE is supported\r\n")); return FALSE; } return NKVirtualSetAttributes (pVirtAddr, cbSize, 0x4, // on ARMv6, this value means Shared-Device. On ARMv4, Non-cacheable & bufferable 0xC, // Mask of all cache related bits &dwAttributes); }
//------------------------------------------------------------------------------ // // OEMSetMemoryAttributes // // OEM function to change memory attributes that isn't supported by kernel. // Current implementaion only supports PAGE_WRITECOMBINE. // // This function first try to use PAT, and then try MTRR if PAT isn't available. // //------------------------------------------------------------------------------ BOOL OEMSetMemoryAttributes ( LPVOID pVirtAddr, // Virtual address of region LPVOID pPhysAddrShifted,// PhysicalAddress >> 8 (to support up to 40 bit address) DWORD cbSize, // Size of the region DWORD dwAttributes // attributes to be set ) { if (PAGE_WRITECOMBINE != dwAttributes) { DEBUGMSG (1, (L"OEMSetMemoryAttributes: Only PAGE_WRITECOMBINE is supported\r\n")); return FALSE; } return NKVirtualSetAttributes (pVirtAddr, cbSize, 0x4, // not cacheable, but bufferable 0xC, // Mask of all cache related bits &dwAttributes); }