Modify OEMAddressTable and KITL Drivers (Compact 7)
3/12/2014
The Windows Embedded Compact 7 kernel supports a new option for OEMAddressTable that disables the uncached static mapping (from 0xA0000000 to 0xBFFFFFFF) and makes available more kernel virtual memory space. You can enable this address table option for any ARM-based or x86-based platform; the Windows Embedded Compact PC-based platform (CEPC) uses the new OEMAddressTable model by default. For any platforms that use a KITL driver that predates Windows Embedded Compact 7, there are two possible solutions:
- For any ARM-based or x86-based platform. Modify your KITL driver so it uses the direct memory access (DMA) buffer passed from KITL without doing a cached-address to uncached-address conversion. The KITL driver must use the OALVAtoPA function to obtain the physical address of the DMA buffer. It must act as if the kernel virtual memory is not static mapped for either cached or uncached memory. We recommend this solution because any KITL driver modified in this way will work in Windows Embedded Compact 7, whether or not your platform uses the new OEMAddressTable option.
- For CEPC only. Disable the new OEMAddressTable option by modifying the %_WINCEROOT%\platform\cepc\src\oal\oalexe\sources file so that it links to oal_startup_x86.lib instead of oal_startup_x86_newtable.lib. This solution is a workaround; if your platform is modified later to use the new OEMAddressTable option, you must implement the first solution.
If your KITL driver acts as if there is no uncached static mapping, and it always uses OALxxxToyyy functions for address translation, your driver will work with either OEMAddressTable option. It works because the OALCAtoUA and OALPAtoUA functions in Windows Embedded Compact 7 return the same address passed from KITL to ensure backward compatibility.
See Also
Concepts
Other Resources
OALCAtoUA
OALPAtoUA
OALVAtoPA
OEMAddressTable
OEMDeviceTable