• Ben Avison's avatar
    Support temporary mapping of IO above 4GB using supersections · 96913c1f
    Ben Avison authored
    Add a new reason code, OS_Memory 22, equivalent to OS_Memory 14, but
    accepting a 64-bit physical address in r1/r2. Current ARM architectures can
    only express 40-bit or 32-bit physical addresses in their page tables
    (depending on whether they feature the LPAE extension or not) so unlike
    OS_Memory 14, OS_Memory 22 can return an error if an invalid physical
    address has been supplied. OS_Memory 15 should still be used to release a
    temporary mapping, whether you claimed it using OS_Memory 14 or OS_Memory 22.
    
    The logical memory map has had to change to accommodate supersection mapping
    of the physical access window, which needs to be 16MB wide and aligned to a
    16MB boundary. This results in there being 16MB less logical address space
    available for dynamic areas on all platforms (sorry) and there is now a 1MB
    hole spare in the system address range (above IO).
    
    The internal function RISCOS_AccessPhysicalAddress has been changed to
    accept a 64-bit physical address. This function has been a candidate for
    adding to the kernel entry points from the HAL for a long time - enough that
    it features in the original HAL documentation - but has not been so added
    (at least not yet) so there are no API compatibility issues there.
    
    Requires RiscOS/Sources/Programmer/HdrSrc!2
    96913c1f
ChangeDyn 250 KB