Add Service_PagesUnsafe64 & PagesSafe64
Jeffrey Lee authored
These use a page block with a 64bit address fields (matching OS_Memory
64). The page list(s) contain the full list of pages involved in the
operation, unlike the 32bit PagesUnsafe / PagesSafe calls, which only
list pages which have 32bit addresses. The kernel issues the service
calls in the following order:

1. Service_PagesUnsafe64
2. Service_PagesUnsafe
3. Service_PagesSafe
4. Service_PagesSafe64

Since only one PagesUnsafe operation can occur at a time, a program
which supports both service calls can safely ignore the PagesUnsafe /
PagesSafe calls if a PagesUnsafe64 operation is in progress (the
PagesUnsafe call will only list a subset of the pages from the
PagesUnsafe64 call). The 32bit PagesUnsafe / PagesSafe calls will be
skipped if no 32bit pages are being replaced.

The addition of these calls means that NeedsSpecificPages DAs (and PMPs)
can now request pages which have large physical addresses.

Note that the page replacement logic now has the restriction that pages
which have 32bit physical addresses can only be replaced by other pages
which have 32bit physical addresses. This is necessary to ensure that
users of the old 32bit APIs see the page replacement take place. However
it does mean that programs will be unable to claim pages of low RAM
which are in use if there are not enough free low RAM pages in the free
pool.

A future optimisation would be to update the service calls so that they
don't list required pages which are in the free pool; if all the
required pages are in the free pool this would allow the service calls
(and FIQ claiming) to be skipped completely.
15a7d5ee
Name Last commit Last update
..
AMBControl Support RAM banks with high physical addresses
PMF Ensure IIC bus list is fully initialised
vdu Support RAM banks with high physical addresses
ARM600 Support RAM banks with high physical addresses
ARMops Initial long descriptor support
Arthur2 Fix OS_EvaluateExpression
Arthur3 Fix OS_EvaluateExpression
ArthurSWIs Increase number of vectors supported by the kernel to 96.
CPUFeatures Revise comments - it's multiprocessing extensions, not virtualisation
ChangeDyn Add Service_PagesUnsafe64 & PagesSafe64
Convrsions Fix abort after translating error
Exceptions Implement support for cacheable pagetables
ExtraSWIs Remove some obsolete definitions for clarity
GetAll Initial long descriptor support
HAL Add MaxCamEntry32 & CPUFlag_HighRAM
HeapMan Add support for HeapReason_GetSkewAligned
HeapSort Avoid unnecesssary remainder calculations
Kernel Initial long descriptor support
LibKern Initial long descriptor support
LongDesc Add Service_PagesUnsafe64 & PagesSafe64
MOSDict Import from cleaned 360 CD
MemInfo Update OS_Memory 19 to understand non-DMAable memory
MemMap2 Add Service_PagesUnsafe64 & PagesSafe64
Middle Support RAM banks with high physical addresses
ModHand Special case extension of aligned RMA claims
MoreComms
MoreSWIs
MsgCode
NewIRQs
NewReset
Oscli
SWINaming
ShortDesc
Super1
SysComms
TickEvents
UnSqueeze
Utility
VMSAv6
VMSAv6Long
VMSAv6Short