OEMGLOBAL (Windows Embedded CE 6.0)

Switch View :
ScriptFree
OEMGLOBAL (Windows Embedded CE 6.0)
1/5/2010

This structure defines all the functions that the OAL must implement for BSP migration, and all the variables that it needs to define.

Syntax


typedef struct _OEMGLOBAL {
        DWORD dwVersion;
        PFN_InitDebugSerial pfnInitDebugSerial;
        PFN_InitPlatform pfnInitPlatform;
        PFN_WriteDebugByte pfnWriteDebugByte;
        PFN_WriteDebugString pfnWriteDebugString;
        PFN_ReadDebugByte pfnReadDebugByte;
        PFN_WriteDebugLED pfnWriteDebugLED;
        PFN_CacheRangeFlush pfnCacheRangeFlush;
        PFN_InitClock pfnInitClock;
        PFN_GetRealTime pfnGetRealTime;
        PFN_SetRealTime pfnSetRealTime;
        FPN_SetAlarmTime pfnSetAlarmTime;
        PFN_QueryPerfCounter pfnQueryPerfCounter;
        PFN_QueryPerfFreq pfnQueryPerfFreq;
        PFN_GetTickCount pfnGetTickCount;
        PFN_Idle pfnIdle;
        PFN_NotifyThreadExit pfnNotifyThreadExit;
        PFN_NotifyReschedule pfnNotifyReschedule;
        PFN_NotifyIntrOccurs pfnNotifyIntrOccurs;
        PFN_UpdateReschedTime pfnUpdateReschedTime;
        DWORD dwDefaultThreadQuantum;
        PFN_PowerOff pfnPowerOff;
        PFN_GetExtensionDRAM pfnGetExtensionDRAM;
        PFN_EnumExtensionDRAM pfnEnumExtensionDRAM;
        PFN_CalcFSPages pfnCalcFSPages;
        DWORD dwMainMemoryEndAddress;
        PFN_InterruptEnable pfnInterruptEnable;
        PFN_InterruptDisable pfnInterruptDisable;
        PFN_InterruptDone pfnInterruptDone;
        PFN_InterruptMask pfnInterruptMask;
        PFN_InitCoProcRegs pfnInitCoProcRegs;
        PFN_SaveCoProcRegs pfnSaveCoProcRegs;
        PFN_RestoreCoProcRegs pfnRestoreCoProcRegs;
        DWORD cbCoProcRegSize;
        DWORD fSaveCoProcReg;
        PFN_ReadRegistry pfnReadRegistry;
        PFN_WriteRegistry pfnWriteRegistry;
        PFN_RefreshWatchDog pfnRefreshWatchDog;
        DWORD dwWatchDogPeriod;
        DWORD dwWatchDogThreadPriority;
        PFN_ProfileTimerEnable pfnProfileTimerEnable;
        PFN_ProfileTimerDisable pfnProfileTimerDisable;
        DWORD cbErrReportSize;
        PFN_Ioctl pfnOEMIoctl;
        PFN_KDIoctl pfnKDIoctl;
        PFN_IsRom pfnIsRom;
        PFN_MapW32Priority pfnMapW32Priority;
        PFN_SetMemoryAttributes pfnSetMemoryAttributes;
        PFN_IsProcessorFeaturePresent pfnIsProcessorFeaturePresent;
        PFN_HaltSystem pfnHaltSystem;
    PFN_NotifyForceCleanBoot pfnNotifyForceCleanBoot;
        PROMChain_t pROMChain;
        LPVOID pKitlInfo;
        PFNVOID pfnKITLGlobalInit;
        DBGPARAM *pdpCurSettings;
    DWORD_PTR *p__security_cookie;
    DWORD_PTR *p__security_cookie_complement;
    DWORD dwAlarmResolution;
    DWORD dwYearsRTCRollover;
    DWORD _rsvd_[8];
#if defined (x86)
        PFN_NMIHandler pfnNMIHandler;
#elif defined (ARM)
        PFN_InterruptHandler pfnInterruptHandler;
        PFNVOID pfnFIQHandler;
        DWORD dwARM1stLvlBits;
        DWORD dwARMCacheMode;
    DWORD f_V6_VIVT_ICache;
        PFN_SaveRestoreVFPCtrlRegs pfnSaveVFPCtrlRegs;
        FN_SaveRestoreVFPCtrlRegs pfnRestoreVFPCtrlRegs;
        FN_HandleVFPException pfnHandleVFPExcp;
#elif defined (MIPS)
        DWORD dwCoProcBits;
        DWORD dwOEMTLBLastIdx;
        DWORD dwArchFlagOverride;
        const BYTE *pIntrPrio;
        const BYTE *pIntrMask;
#elif defined (SHx)
        PFN_NMIHandler pfnNMIHandler;
        DWORD dwSHxIntEventCodeLength
#else
#pragma error("No CPU Defined")
#endif
} OEMGLOBAL, *POEMGLOBAL;
Members

dwVersion

Windows Embedded CE version.

pfnInitDebugSerial

Pointer to the function OEMInitDebugSerial.

pfnInitPlatform

Pointer to the function OEMInit.

pfnWriteDebugByte

Pointer to the function OEMWriteDebugByte.

pfnWriteDebugString

Pointer to the function OEMWriteDebugString.

pfnReadDebugByte

Pointer to the function OEMReadDebugByte.

pfnWriteDebugLED

Pointer to an optional function, OEMWriteDebugLED, that outputs a byte to the target device's specified LED port. If this function is implemented, it must be initialized.

pfnCacheRangeFlush

Pointer to the function OEMCacheRangeFlush.

pfnInitClock

Pointer to an optional function that initializes the clock. If this function is implemented, it must be initialized.

pfnGetRealTime

Pointer to the function OEMGetRealTime.

pfnSetRealTime

Pointer to the function OEMSetRealTime.

pfnSetAlarmTime

Pointer to the function OEMSetAlarmTime.

pfnQueryPerfCounter

Pointer to an optional function, pQueryPerformanceCounter, that retrieves the current value of the high-resolution performance counter. If this function is implemented, it must be initialized.

pfnQueryPerfFreq

Pointer to an optional function, pQueryPerformanceFrequency, that retrieves the frequency of the high-resolution performance counter. If this function is implemented, it must be initialized.

pfnGetTickCount

Pointer to the function GetTickCount.

pfnIdle

Pointer to the function OEMIdle.

pfnNotifyThreadExit

Pointer to an optional function that is called when a thread exits. If this function is implemented, it must be initialized.

pfnNotifyReschedule

Pointer to an optional function that is called when a new thread is ready to run. If this function is implemented, it must be initialized.

pfnNotifyIntrOccurs

Pointer to an optional function that is called when an interrupt occurs. If this function is implemented, it must be initialized.

pfnUpdateReschedTime

Pointer to an optional function. If this function is implemented, it must be initialized.

dwDefaultThreadQuantum

By default, this member is set to DEFAULT_THREAD_QUANTUM.

pfnPowerOff

Pointer to the function OEMPowerOff.

pfnGetExtensionDRAM

Pointer to the function OEMGetExtensionDRAM.

pfnEnumExtensionDRAM

Pointer to an optional function that returns information about extension DRAM on the device. If this function is implemented, it must be initialized.

pfnCalcFSPages

Pointer to a function that returns the amount of pages the kernel should use for the object store in a RAM-based file system. By default, it points to the function FakeCalcPage, which returns the default number of pages.

dwMainMemoryEndAddress

Specifies the next available address following the first available contiguous block of memory. This is an optional variable that is set to 0 by default.

pfnInterruptEnable

Pointer to the function OEMInterruptEnable.

pfnInterruptDisable

Pointer to the function OEMInterruptDisable.

pfnInterruptDone

Pointer to the function OEMInterruptDone.

pfnInterruptMask

Pointer to the function OEMInterruptMask.

pfnInitCoProcRegs

Pointer to an optional function that is called by the kernel when a thread is created to initialize the debug registers. If this function is implemented, it must be initialized.

pfnSaveCoProcRegs

Pointer to an optional function that is called by the kernel to save the platform-specific debug registers when a thread switch occurs. If this function is implemented, it must be initialized.

pfnRestoreCoProcRegs

Pointer to an optional function that is called by the kernel to restore the platform-specific debug registers when a thread switch occurs. If this function is implemented, it must be initialized.

cbCoProcRegSize

Specifies the size of the memory allocation, in bytes, needed for the OEM to save or restore coprocessor registers. This variable is only used if the particular platform or CPU has coprocessor registers that must be saved or restored during context switches.

fSaveCoProcReg

Specifies the flag to tell the kernel when the save/restore of coprocessor registers is performed. This variable is set to False by default.

pfnReadRegistry

Pointer to an optional function that reads a registry file into RAM from persistent storage. If this function is implemented, it must be initialized.

pfnWriteRegistry

Pointer to an optional function that is called by the operating system to transfer registry data to persistent storage. If this function is implemented, it must be initialized.

pfnRefreshWatchDog

Pointer to an optional function that is called by the kernel to refresh the hardware watchdog. If this function is implemented, it must be initialized.

dwWatchDogPeriod

Specifies the watchdog period, in milliseconds, where the hardware watchdog must be refreshed before system reset. The default value, 0, indicates that the watchdog timer does not exist.

dwWatchDogThreadPriority

Specifies the kernel watchdog thread. By default, this member is set to DEFAULT_WATCHDOG_PRIORITY.

pfnProfileTimerEnable

Pointer to an optional function that enables a profiler timer. If this function is implemented, it must be initialized.

pfnProfileTimerDisable

Pointer to an optional function that clears and disables a profiler timer. If this function is implemented, it must be initialized.

cbErrReportSize

Specifies the amount of memory for the Windows Embedded CE Error Reporting dump area. By default, this member is set to 0. cbErrReportSize was previously named cbNKDrWatsonSize.

pfnOEMIoctl

Pointer to the function OEMIoControl.

pfnKDIoctl

Pointer to an optional function that supports requests from the kernel debugger. If this function is implemented, it must be initialized.

pfnIsRom

Pointer to an optional function that determines whether a given address range falls within a valid range of ROM addresses. If this function is implemented, it must be initialized.

pfnMapW32Priority

Pointer to an optional function that is not implemented. If this function is implemented, it must be initialized.

pfnSetMemoryAttributes

Pointer to an optional function that supports changes to memory attributes. If this function is implemented, it must be initialized.

pfnIsProcessorFeaturePresent

Pointer to an optional function that retrieves information about the supported features in your system. If this function is implemented, it must be initialized.

pfnHaltSystem

Pointer to an optional function that is called when the kernel is about to halt the system. If this function is implemented, it must be initialized.

pfnNotifyForceCleanBoot

Pointer to an optional function that the kernel calls when the file system is identified as corrupted. It is called before the kernel forces a clean system boot.

pROMChain

Pointer to an optional structure that defines an XIP region. If this structure is implemented, it must be initialized.

pKitlInfo

Pointer to an optional structure that is used to pass platform-specific information from the OAL to the KITL. If this structure is implemented, it must be initialized.

pfnKITLGlobalInit

Specifies the KITL entry point. By default, this is set to KitlDllMain.

pdpCurSettings

Contains a reference to dpCurSettings, which stores a DBGPARAM structure.

p__security_cookie

Pointer to the security cookie for the compiler's /GS build flag.

p__security_cookie_complement

Pointer to the security cookie complement for the compiler's /GS build flag.

dwAlarmResolution

Specifies the alarm resolution in milliseconds.

dwYearsRTCRollover

Specifies the number of years for RTC rollover.

_rsvd_[8]

Reserved for future use.

pfnNMIHandler

Pointer to the function OEMNMIHandler. This function is used on x86 processors.

pfnInterruptHandler

Pointer to the function OEMInterruptHandler. This function is used on ARM processors.

pfnFIQHandler

Pointer to the function OEMInterruptHandlerFIQ. This function is used on ARM processors.

dwARM1stLvlBits

Specifies the extra bits to be set in the 1st level page table. This variable is applies only to ARM processors.

dwARMCacheMode

Specifies C and B bits. dwARMCacheMode is set to 0 by default. This variable applies only to ARM processors.

f_V6_VIVT_ICache

Indicates that the instruction cache is virtually indexed and virtually tagged, using address space identifiers (ASIDs). This variable applies only to ARMv6 processors.

pfnSaveVFPCtrlRegs

Pointer to an optional function that is called when the kernel needs to save the state of the extra FPU registers for the current thread. If this function is implemented, it must be initialized. This function is used on ARM processors if the CPU supports Vector Floating Point (VFP).

pfnRestoreVFPCtrlRegs

Pointer to an optional function that is called to restore the state of the extra implementation-defined VFP registers for the current thread. If this function is implemented, it must be initialized. This function is used on ARM processors if the CPU supports VFP.

pfnHandleVFPExcp

Pointer to an optional function that is called to handle a floating point exception reported by VFP hardware. If this function is implemented, it must be initialized. This function is used on ARM processors if the CPU supports VFP.

dwCoProcBits

Specifies the bits to enable the platform-specific coprocessor. By default, this is set to DEFAULT_FPU_ENABLE. This variable is used on MIPS processors.

dwOEMTLBLastIdx

Specifies the last index for the TLB, which corresponds to the size of the TLB minus 1. By default, this is set to 0. This variable is used on MIPS processors.

dwArchFlagOverride

Architecture flag override value. For MIPS, the kernel attempts to auto-detect all architecture flags if you set this value to MIPS_FLAG_NO_OVERRIDE, which is the default value.

pIntrPrio

Pointer to an optional array that provides the MIPS and SHx kernel with information about which nested interrupts are masked while the current interrupt is being handled. If pIntrPrio is implemented, it must be initialized.

pIntrMask

Pointer to an optional array that provides the MIPS and SHx kernel with information about which nested interrupts are masked while the current interrupt is being handled. If pIntrMask is implemented, it must be initialized.

pfnNMIHandler

Pointer to the function OEMNMIHandler. This function is used on SHx processors.

dwSHxIntEventCodeLength

Specifies interrupt event code length for SHx processors. By default, this is set to SH4_INTEVT_LENGTH.

Remarks

The OEMGLOBAL structure is defined in Public\Common\Oak\Inc\Oemglobal.h.

The initial values for the structure are defined in Private\Winceos\Coreos\Nk\Oemmain\OEMglobal.c, which is built into OEMMain.lib and OEMMain_StaticKITL.lib. The OAL should link to OEMMain.lib when the KITL is built as a DLL, or to OEMMain_StaticKITL.lib if the KITL is linked into Oalkitl.exe. The two libraries are identical except for differences in the initialization of pfnKITLGlobalInit.

The mandatory functions in OEMGLOBAL are initialized. As a result, when the OAL links with OEMMain.lib or OEMMain_StaticKITL.lib, the OAL must provide the implementation.

To set the paging pool size, implement the IOCTL_HAL_GET_POOL_PARAMETERS I/O control code, which the kernel calls during boot to query the paging pool's size. Or, you can use the FIXUPVAR values. For more information about the paging pool, see Paging Pool.

Requirements

Headeroemglobal.h
LibraryOEMMain.lib or OEMMain_StaticKITL.lib
Windows Embedded CEWindows Embedded CE 6.0
See Also

Reference

BSP Data Structures
IOCTL_HAL_GET_POOL_PARAMETERS

Other Resources

Paging Pool
BSP Migration Reference