📄 init.c
字号:
//
// Copyright (c) Special Computing. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//------------------------------------------------------------------------------
//
// File: init.c
//
// OALCacheGlobalsInit
//
#include <windows.h>
#include <ceddk.h>
#include <oal.h>
//
// Globals
//
UINT32 g_dwRangeLimit; // Threshold on buffer size between clean/flush line-by-line or whole DCache
extern UINT32 OALGetCacheSizeID(select);
//------------------------------------------------------------------------------
//
// Function: OALCacheGlobalsInit
//
// This function initializes globals variables which holds cache parameters.
// It must be called before any other cache/TLB function.
//
VOID OALCacheGlobalsInit()
{
UINT32 select;
UINT32 IDreg;
OALMSG(OAL_CACHE&&OAL_VERBOSE, (L"+OALCacheGlobalsInit()\r\n"));
memset( &g_oalCacheInfo, 0 , sizeof(g_oalCacheInfo) );
for (select=0;select<4;select++)
{
IDreg = OALGetCacheSizeID(select);
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L"select %d 0x%08x",select,IDreg));
if (select & 2)
(select & 1) ? OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2 Instruction \r\n")) : OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2 Data-Unified \r\n"));
else
(select & 1) ? OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1 Instruction \r\n")) : OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1 Data-Unified \r\n"));
}
g_oalCacheInfo.L1Flags =0;
g_oalCacheInfo.L1ISetsPerWay = 0x00000040; // 64
g_oalCacheInfo.L1INumWays = 0x00000004; // 4
g_oalCacheInfo.L1ILineSize = 0x00000040; // 64
g_oalCacheInfo.L1ISize = 0x00004000; // 16k
g_oalCacheInfo.L1DSetsPerWay = 0x00000040; // 64
g_oalCacheInfo.L1DNumWays = 0x00000004; // 4
g_oalCacheInfo.L1DLineSize = 0x00000040; // 64
g_oalCacheInfo.L1DSize = 0x00004000; // 16k
g_oalCacheInfo.L2Flags =1; // Unified
g_oalCacheInfo.L2ISetsPerWay = 0x00000200; // 512
g_oalCacheInfo.L2INumWays = 0x00000008; // 8
g_oalCacheInfo.L2ILineSize = 0x00000040; // 64
g_oalCacheInfo.L2ISize = 0x00040000; // 256k
g_oalCacheInfo.L2DSetsPerWay = 0x00000200; // 512
g_oalCacheInfo.L2DNumWays = 0x00000008; // 8
g_oalCacheInfo.L2DLineSize = 0x00000040; // 64
g_oalCacheInfo.L2DSize = 0x00040000; // 256k
// Compute cache range limit
g_dwRangeLimit = g_oalCacheInfo.L1DLineSize*(
g_oalCacheInfo.L1DSetsPerWay*g_oalCacheInfo.L1DNumWays +
g_oalCacheInfo.L2DSetsPerWay*g_oalCacheInfo.L2DNumWays);
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" Cache ident:\r\n"));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1Flags: 0x%08x\r\n",g_oalCacheInfo.L1Flags));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1ISetsPerWay: 0x%08x (%d)\r\n", g_oalCacheInfo.L1ISetsPerWay, g_oalCacheInfo.L1ISetsPerWay));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1INumWays: 0x%08x (%d)\r\n", g_oalCacheInfo.L1INumWays, g_oalCacheInfo.L1INumWays));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1ILineSize: 0x%08x (%d)\r\n", g_oalCacheInfo.L1ILineSize, g_oalCacheInfo.L1ILineSize));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1ISize: 0x%08x (%d)\r\n", g_oalCacheInfo.L1ISize, g_oalCacheInfo.L1ISize));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1DSetsPerWay: 0x%08x (%d)\r\n", g_oalCacheInfo.L1DSetsPerWay, g_oalCacheInfo.L1DSetsPerWay));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1DNumWays: 0x%08x (%d)\r\n", g_oalCacheInfo.L1DNumWays, g_oalCacheInfo.L1DNumWays));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1DLineSize: 0x%08x (%d)\r\n", g_oalCacheInfo.L1DLineSize, g_oalCacheInfo.L1DLineSize));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L1DSize: 0x%08x (%d)\r\n", g_oalCacheInfo.L1DSize, g_oalCacheInfo.L1DSize));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2Flags: 0x%08x\r\n",g_oalCacheInfo.L2Flags));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2ISetsPerWay: 0x%08x (%d)\r\n", g_oalCacheInfo.L1ISetsPerWay, g_oalCacheInfo.L2ISetsPerWay));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2INumWays: 0x%08x (%d)\r\n", g_oalCacheInfo.L1INumWays, g_oalCacheInfo.L2INumWays));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2ILineSize: 0x%08x (%d)\r\n", g_oalCacheInfo.L1ILineSize, g_oalCacheInfo.L2ILineSize));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2ISize: 0x%08x (%d)\r\n", g_oalCacheInfo.L1ISize, g_oalCacheInfo.L2ISize));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2DSetsPerWay: 0x%08x (%d)\r\n", g_oalCacheInfo.L1DSetsPerWay, g_oalCacheInfo.L2DSetsPerWay));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2DNumWays: 0x%08x (%d)\r\n", g_oalCacheInfo.L1DNumWays, g_oalCacheInfo.L2DNumWays));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2DLineSize: 0x%08x (%d)\r\n", g_oalCacheInfo.L1DLineSize, g_oalCacheInfo.L2DLineSize));
OALMSGS(OAL_CACHE && OAL_VERBOSE, (L" L2DSize: 0x%08x (%d)\r\n", g_oalCacheInfo.L1DSize, g_oalCacheInfo.L2DSize));
OALMSG(OAL_CACHE&&OAL_VERBOSE, (L"-OALCacheGlobalsInit\r\n"));
}
//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -