Difference between revisions of "Unit PlatformARMv7"

From Ultibo.org
Jump to: navigation, search
 
(6 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
----
 
----
  
'''Ultibo Platform interface unit for ARMv7'''
+
'''Ultibo Platform Interface unit for ARMv7'''
  
 
The ARMv7 does not support the SWP/SWPB instructions for syncronisation (Lock/Mutex/Semaphore etc) unless enabled.
 
The ARMv7 does not support the SWP/SWPB instructions for syncronisation (Lock/Mutex/Semaphore etc) unless enabled.
Line 2,179: Line 2,179:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,194: Line 2,194:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,206: Line 2,206:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,218: Line 2,218:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,230: Line 2,230:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,242: Line 2,242:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,254: Line 2,254:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 2,266: Line 2,266:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,278: Line 2,278:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,290: Line 2,290:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,302: Line 2,302:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,314: Line 2,314:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,326: Line 2,326:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,338: Line 2,338:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,350: Line 2,350:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,362: Line 2,362:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,374: Line 2,374:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,386: Line 2,386:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,398: Line 2,398:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,410: Line 2,410:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,422: Line 2,422:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,434: Line 2,434:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,446: Line 2,446:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,458: Line 2,458:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,470: Line 2,470:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,477: Line 2,477:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7Halt; assembler; nostackframe; public name'_haltproc';</pre>
+
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7Halt; assembler; nostackframe; public name '_haltproc';</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' The purpose of the Wait For Interrupt operation is to put the processor in to a low power state</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' The purpose of the Wait For Interrupt operation is to put the processor in to a low power state</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See Standby mode on page A8-810 of the ARMv7 Architecture Reference Manual
 
| See Standby mode on page A8-810 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,494: Line 2,494:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See Standby mode on page A8-810 of the ARMv7 Architecture Reference Manual
 
| See Standby mode on page A8-810 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,506: Line 2,506:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See Page A8-316 of the ARMv7 Architecture Reference Manual
 
| See Page A8-316 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,518: Line 2,518:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See Page A8-808 of the ARMv7 Architecture Reference Manual
 
| See Page A8-808 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,530: Line 2,530:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See Standby mode on page A8-810 of the ARMv7 Architecture Reference Manual
 
| See Standby mode on page A8-810 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,542: Line 2,542:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page A8-90 of the ARMv7 Architecture Reference Manual
 
| See page A8-90 of the ARMv7 Architecture Reference Manual
 
Note that this is also available in the FPC RTL as ReadBarrier/WriteBarrier See: \source\rtl\arm\arm.inc
 
Note that this is also available in the FPC RTL as ReadBarrier/WriteBarrier See: \source\rtl\arm\arm.inc
Line 2,556: Line 2,556:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page A8-92 of the ARMv7 Architecture Reference Manual
 
| See page A8-92 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,568: Line 2,568:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page A8-102 of the ARMv7 Architecture Reference Manual
 
| See page A8-102 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,580: Line 2,580:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-138 of the ARMv7 Architecture Reference Manual
 
| See page B3-138 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,592: Line 2,592:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-138 of the ARMv7 Architecture Reference Manual
 
| See page B3-138 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,604: Line 2,604:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-138 of the ARMv7 Architecture Reference Manual
 
| See page B3-138 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,616: Line 2,616:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,628: Line 2,628:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,640: Line 2,640:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,652: Line 2,652:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,664: Line 2,664:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,676: Line 2,676:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,683: Line 2,683:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7CleanDataCacheRange(Address,Size:LongWord); assembler; nostackframe;</pre>
+
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7CleanDataCacheRange(Address:PtrUInt; Size:LongWord);</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a clean data cache by MVA to PoC operation</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a clean data cache by MVA to PoC operation</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,695: Line 2,695:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7InvalidateDataCacheRange(Address,Size:LongWord); assembler; nostackframe;</pre>
+
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7InvalidateDataCacheRange(Address:PtrUInt; Size:LongWord);</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform an invalidate data cache by MVA to PoC operation</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform an invalidate data cache by MVA to PoC operation</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,707: Line 2,707:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7CleanAndInvalidateDataCacheRange(Address,Size:LongWord); assembler; nostackframe;</pre>
+
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7CleanAndInvalidateDataCacheRange(Address:PtrUInt; Size:LongWord);</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a clean and invalidate data cache by MVA to PoC operation</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a clean and invalidate data cache by MVA to PoC operation</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,719: Line 2,719:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7InvalidateInstructionCacheRange(Address,Size:LongWord); assembler; nostackframe;</pre>
+
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7InvalidateInstructionCacheRange(Address:PtrUInt; Size:LongWord);</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform an invalidate instruction caches by MVA to PoU operation</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform an invalidate instruction caches by MVA to PoU operation</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,736: Line 2,736:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''SetWay'''
+
! SetWay
 
| Set/Way/Level will be passed in r0
 
| Set/Way/Level will be passed in r0
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,751: Line 2,751:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''SetWay'''
+
! SetWay
 
| Set/Way/Level will be passed in r0
 
| Set/Way/Level will be passed in r0
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,766: Line 2,766:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''SetWay'''
+
! SetWay
 
| Set/Way/Level will be passed in r0
 
| Set/Way/Level will be passed in r0
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,781: Line 2,781:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page A8-102 of the ARMv7 Architecture Reference Manual
 
| See page A8-102 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,793: Line 2,793:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
| See page B3-127 of the ARMv7 Architecture Reference Manual
 
|-
 
|-
Line 2,800: Line 2,800:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7ContextSwitch(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;</pre>
+
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7ContextSwitch(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a context switch from one thread to another as a result of a thread yielding, sleeping or waiting</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a context switch from one thread to another as a result of a thread yielding, sleeping or waiting</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''OldStack'''
+
! OldStack
 
| The address to save the stack pointer to for the current thread (Passed in r0)
 
| The address to save the stack pointer to for the current thread (Passed in r0)
 
|-
 
|-
! '''NewStack'''
+
! NewStack
 
| The address to restore the stack pointer from for the new thread (Passed in r1)
 
| The address to restore the stack pointer from for the new thread (Passed in r1)
 
|-
 
|-
! '''NewThread'''
+
! NewThread
 
| The handle of the new thread to switch to (Passed in r2)
 
| The handle of the new thread to switch to (Passed in r2)
 
|-
 
|-
! '''Note'''
+
! Note
 
| At the point of the actual context switch (str sp/ldr sp) the thread stacks will look like this:
 
| At the point of the actual context switch (str sp/ldr sp) the thread stacks will look like this:
 
<br />(See: ARMv7ThreadSetupStack for additional information)
 
<br />(See: ARMv7ThreadSetupStack for additional information)
Line 2,884: Line 2,884:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7ContextSwitchIRQ(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;</pre>
+
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7ContextSwitchIRQ(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a context switch from one thread to another as a result of an interrupt request (IRQ)</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a context switch from one thread to another as a result of an interrupt request (IRQ)</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''OldStack'''
+
! OldStack
 
| The address to save the stack pointer to for the current thread (Passed in r0)
 
| The address to save the stack pointer to for the current thread (Passed in r0)
 
|-
 
|-
! '''NewStack'''
+
! NewStack
 
| The address to restore the stack pointer from for the new thread (Passed in r1)
 
| The address to restore the stack pointer from for the new thread (Passed in r1)
 
|-
 
|-
! '''NewThread'''
+
! NewThread
 
| The handle of the new thread to switch to (Passed in r2)
 
| The handle of the new thread to switch to (Passed in r2)
 
|-
 
|-
! '''Note'''
+
! Note
 
| At the point of the actual context switch (str sp/ldr sp) the thread stacks will look like this:
 
| At the point of the actual context switch (str sp/ldr sp) the thread stacks will look like this:
 
<br />(See: ARMv7ThreadSetupStack for additional information)
 
<br />(See: ARMv7ThreadSetupStack for additional information)
Line 2,962: Line 2,962:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''OldStack'''
+
! OldStack
 
| The address to save the stack pointer to for the current thread (Passed in r0)
 
| The address to save the stack pointer to for the current thread (Passed in r0)
 
|-
 
|-
! '''NewStack'''
+
! NewStack
 
| The address to restore the stack pointer from for the new thread (Passed in r1)
 
| The address to restore the stack pointer from for the new thread (Passed in r1)
 
|-
 
|-
! '''NewThread'''
+
! NewThread
 
| The handle of the new thread to switch to (Passed in r2)
 
| The handle of the new thread to switch to (Passed in r2)
 
|-
 
|-
! '''Note'''
+
! Note
 
| At the point of the actual context switch (str sp/ldr sp) the thread stacks will look like this:
 
| At the point of the actual context switch (str sp/ldr sp) the thread stacks will look like this:
 
<br />(See: ARMv7ThreadSetupStack for additional information)
 
<br />(See: ARMv7ThreadSetupStack for additional information)
Line 3,035: Line 3,035:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''OldStack'''
+
! OldStack
 
| The address to save the stack pointer to for the current thread (Passed in r0)
 
| The address to save the stack pointer to for the current thread (Passed in r0)
 
|-
 
|-
! '''NewStack'''
+
! NewStack
 
| The address to restore the stack pointer from for the new thread (Passed in r1)
 
| The address to restore the stack pointer from for the new thread (Passed in r1)
 
|-
 
|-
! '''NewThread'''
+
! NewThread
 
| The handle of the new thread to switch to (Passed in r2)
 
| The handle of the new thread to switch to (Passed in r2)
 
|-
 
|-
! '''Note'''
+
! Note
 
| At the point of the actual context switch (str sp/ldr sp) the thread stacks will look like this:
 
| At the point of the actual context switch (str sp/ldr sp) the thread stacks will look like this:
 
<br />(See: ARMv7ThreadSetupStack for additional information)
 
<br />(See: ARMv7ThreadSetupStack for additional information)
Line 3,108: Line 3,108:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,120: Line 3,120:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,132: Line 3,132:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,144: Line 3,144:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,156: Line 3,156:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,168: Line 3,168:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,180: Line 3,180:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,192: Line 3,192:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,199: Line 3,199:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">function ARMv7PageTableGetEntry(Address:PtrUInt):TPageTableEntry;</pre>
+
<pre style="border: 0; padding-bottom:0px;">procedure ARMv7PageTableGetEntry(Address:PtrUInt; var Entry:TPageTableEntry);</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get and Decode the entry in the Page Table that corresponds to the supplied virtual address</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get and Decode the entry in the Page Table that corresponds to the supplied virtual address</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,216: Line 3,216:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,228: Line 3,228:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,240: Line 3,240:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,252: Line 3,252:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| ARM arm states that CLZ is supported for ARMv5 and above
 
| ARM arm states that CLZ is supported for ARMv5 and above
 
|-
 
|-
Line 3,264: Line 3,264:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| ARM arm states that CLZ is supported for ARMv5 and above
 
| ARM arm states that CLZ is supported for ARMv5 and above
 
|-
 
|-
Line 3,279: Line 3,279:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,291: Line 3,291:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Spin'''
+
! Spin
 
| Pointer to the Spin entry to lock (Passed in R0)
 
| Pointer to the Spin entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,306: Line 3,306:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Spin'''
+
! Spin
 
| Pointer to the Spin entry to lock (Passed in R0)
 
| Pointer to the Spin entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,321: Line 3,321:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Spin'''
+
! Spin
 
| Pointer to the Spin entry to lock (Passed in R0)
 
| Pointer to the Spin entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,336: Line 3,336:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Spin'''
+
! Spin
 
| Pointer to the Spin entry to lock (Passed in R0)
 
| Pointer to the Spin entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,351: Line 3,351:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Spin'''
+
! Spin
 
| Pointer to the Spin entry to lock (Passed in R0)
 
| Pointer to the Spin entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,366: Line 3,366:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Spin'''
+
! Spin
 
| Pointer to the Spin entry to lock (Passed in R0)
 
| Pointer to the Spin entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,381: Line 3,381:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Spin'''
+
! Spin
 
| Pointer to the Spin entry to lock (Passed in R0)
 
| Pointer to the Spin entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,396: Line 3,396:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Spin'''
+
! Spin
 
| Pointer to the Spin entry to lock (Passed in R0)
 
| Pointer to the Spin entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,411: Line 3,411:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| True if the mask would enable IRQ on restore, False if it would not
 
| True if the mask would enable IRQ on restore, False if it would not
 
|-
 
|-
Line 3,423: Line 3,423:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| True if the mask would enable FIQ on restore, False if it would not
 
| True if the mask would enable FIQ on restore, False if it would not
 
|-
 
|-
Line 3,435: Line 3,435:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,447: Line 3,447:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,459: Line 3,459:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Mutex'''
+
! Mutex
 
| Pointer to the Mutex entry to lock (Passed in R0)
 
| Pointer to the Mutex entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,474: Line 3,474:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Mutex'''
+
! Mutex
 
| Pointer to the Mutex entry to lock (Passed in R0)
 
| Pointer to the Mutex entry to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
| ERROR_SUCCESS if completed or another error code on failure (Returned in R0)
 
|-
 
|-
Line 3,489: Line 3,489:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Mutex'''
+
! Mutex
 
| Pointer to the Mutex entry to try to lock (Passed in R0)
 
| Pointer to the Mutex entry to try to lock (Passed in R0)
 
|-
 
|-
! '''Return'''
+
! Return
| ERROR_SUCCESS if completed, ERROR_LOCKED if already locked or another error code on failure (Returned in R0)
+
| ERROR_SUCCESS if completed, ERROR_LOCKED if already locked or another error code on failure (Returned in R0).
 
|-
 
|-
 
|}
 
|}
Line 3,504: Line 3,504:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,516: Line 3,516:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,528: Line 3,528:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''StackBase'''
+
! StackBase
 
| Pointer to the base (highest address) of the allocated stack (as returned by ThreadAllocateStack
 
| Pointer to the base (highest address) of the allocated stack (as returned by ThreadAllocateStack
 
|-
 
|-
! '''StartProc'''
+
! StartProc
 
| The procedure the thread will start executing when resumed
 
| The procedure the thread will start executing when resumed
 
|-
 
|-
! '''ReturnProc'''
+
! ReturnProc
 
| The procedure the thread will return to on exit
 
| The procedure the thread will return to on exit
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to the starting address of the stack, which will be the Stack Pointer on the first context switch
 
| Pointer to the starting address of the stack, which will be the Stack Pointer on the first context switch
 
|-
 
|-
! '''Note'''
+
! Note
 
| At the point of a context switch the thread stack will look like this:
 
| At the point of a context switch the thread stack will look like this:
 
<br />(Base "Highest Address" of Stack)
 
<br />(Base "Highest Address" of Stack)
Line 3,620: Line 3,620:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,635: Line 3,635:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,650: Line 3,650:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,665: Line 3,665:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,677: Line 3,677:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This routine is registered as the vector for undefined instruction exception in the vector table loaded during startup
 
| This routine is registered as the vector for undefined instruction exception in the vector table loaded during startup
 
|-
 
|-
Line 3,689: Line 3,689:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This routine is registered as the vector for SWI requests in the vector table loaded during startup. When the processor executes an SVC it switches to SWI mode, stores the address of the next instruction in the SWI mode link register (lr_svc) and saves the current program status register into the SWI mode saved program status register (spsr_svc).
 
| This routine is registered as the vector for SWI requests in the vector table loaded during startup. When the processor executes an SVC it switches to SWI mode, stores the address of the next instruction in the SWI mode link register (lr_svc) and saves the current program status register into the SWI mode saved program status register (spsr_svc).
 
<br />The SWI handler first saves the SWI mode lr and spsr (which represent the location and state to return to) onto the SYS mode stack using the srsdb (Store Return State Decrement Before) instruction.
 
<br />The SWI handler first saves the SWI mode lr and spsr (which represent the location and state to return to) onto the SYS mode stack using the srsdb (Store Return State Decrement Before) instruction.
Line 3,717: Line 3,717:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This routine is registered as the vector for prefetch abort exception in the vector table loaded during startup
 
| This routine is registered as the vector for prefetch abort exception in the vector table loaded during startup
 
|-
 
|-
Line 3,729: Line 3,729:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This routine is registered as the vector for data abort exception in the vector table loaded during startup
 
| This routine is registered as the vector for data abort exception in the vector table loaded during startup
 
|-
 
|-
Line 3,741: Line 3,741:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,753: Line 3,753:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This routine is registered as the vector for IRQ requests in the vector table loaded during startup.
 
| This routine is registered as the vector for IRQ requests in the vector table loaded during startup.
 
<br />At the end of each instruction the processor checks the IRQ line and if triggered it will lookup the vector in the vector table and jump to the routine listed.
 
<br />At the end of each instruction the processor checks the IRQ line and if triggered it will lookup the vector in the vector table and jump to the routine listed.
Line 3,776: Line 3,776:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This routine is registered as the vector for FIQ requests in the vector table loaded during startup.
 
| This routine is registered as the vector for FIQ requests in the vector table loaded during startup.
 
<br />At the end of each instruction the processor checks the FIQ line and if triggered it will lookup the vector in the vector table and jump to the routine listed.
 
<br />At the end of each instruction the processor checks the FIQ line and if triggered it will lookup the vector in the vector table and jump to the routine listed.
Line 3,804: Line 3,804:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,816: Line 3,816:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,828: Line 3,828:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,840: Line 3,840:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,852: Line 3,852:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,864: Line 3,864:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,876: Line 3,876:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,888: Line 3,888:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,900: Line 3,900:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,912: Line 3,912:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,924: Line 3,924:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 3,936: Line 3,936:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,948: Line 3,948:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
Caller must call ARMv7InvalidateTLB after changes if MMU is enabled
 
Caller must call ARMv7InvalidateTLB after changes if MMU is enabled
Line 3,961: Line 3,961:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,973: Line 3,973:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Large Page Table descriptors must begin on a 16 longword (64 byte) boundary and be repeated for 16 consecutive longwords
 
| Large Page Table descriptors must begin on a 16 longword (64 byte) boundary and be repeated for 16 consecutive longwords
 
See page ???
 
See page ???
Line 3,987: Line 3,987:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 3,999: Line 3,999:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
Caller must call ARMv7InvalidateTLB after changes if MMU is enabled
 
Caller must call ARMv7InvalidateTLB after changes if MMU is enabled
Line 4,012: Line 4,012:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
|-
 
|-
Line 4,024: Line 4,024:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See page ???
 
| See page ???
 
Caller must call ARMv7InvalidateTLB after changes if MMU is enabled
 
Caller must call ARMv7InvalidateTLB after changes if MMU is enabled
Line 4,037: Line 4,037:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Supersection Page Table descriptors must begin on a 16 longword (64 byte) boundary and be repeated for 16 consecutive longwords
 
| Supersection Page Table descriptors must begin on a 16 longword (64 byte) boundary and be repeated for 16 consecutive longwords
 
See page ???
 
See page ???

Latest revision as of 01:34, 22 April 2022

Return to Unit Reference


Description


Ultibo Platform Interface unit for ARMv7

The ARMv7 does not support the SWP/SWPB instructions for syncronisation (Lock/Mutex/Semaphore etc) unless enabled.

On ARMv7 Unaligned memory access is always enabled.

On ARMv7 the Extended Page Table format is always enabled.

For usage of barriers (DMB/DSB/ISB) after cache maintenance operations see: ARM.Reference_Manual_1.pdf - Appendix G Barrier Litmus Tests

Constants



[Expand]
ARMv7 page tables shift ARMV7_PAGE_TABLES_*


[Expand]
ARMv7 CP15 C0 main Id ARMV7_CP15_C0_MAINID_*


[Expand]
ARMv7 CP15 C0 multiprocessor affinity ARMV7_CP15_C0_MPID_*


[Expand]
ARMv7 CP15 C0 cache size Id ARMV7_CP15_C0_CCSID_*


[Expand]
ARMv7 CP15 C0 cache level Id ARMV7_CP15_C0_CLID_*


[Expand]
ARMv7 CP15 C0 cache size selection ARMV7_CP15_C0_CSSEL_*


[Expand]
ARMv7 CP15 C1 control ARMV7_CP15_C1_*


[Expand]
ARMv7 CP15 C1 auxiliary control ARMV7_CP15_C1_AUX_*


[Expand]
ARMv7 CP15 C1 coprocessor access control ARMV7_CP15_C1_CP*


[Expand]
ARMv7 CP15 C1 secure configuration ARMV7_CP15_C1_SCR_*


[Expand]
ARMv7 CP15 C2 translation table base ARMV7_CP15_C2_TTBR_*


[Expand]
ARMv7 CP15 C3 domain access control ARMV7_CP15_C3_DOMAIN*


[Expand]
ARMv7 CP15 C10 primary region remap ARMV7_CP15_C10_PRRR_*


[Expand]
ARMv7 CP15 C10 normal memory remap ARMV7_CP15_C10_NMRR_*


[Expand]
ARMv7 CP15 C14 generic timer control ARMV7_CP15_C14_CNT_CTL_*


[Expand]
ARMv7 CP15 C14 generic timer ARMV7_CP15_C14_*


[Expand]
ARMv7 floating-point exception ARMV7_FPEXC_*


[Expand]
ARMv7 level one descriptor type ARMV7_L1D_TYPE_*


[Expand]
ARMv7 level one descriptor flag ARMV7_L1D_FLAG_*


[Expand]
ARMv7 level one descriptor mask ARMV7_L1D_*_MASK


[Expand]
ARMv7 level one descriptor TEX value ARMV7_L1D_TEX*


[Expand]
ARMv7 level one descriptor AP value ARMV7_L1D_AP*


[Expand]
ARMv7 level one descriptor permission value ARMV7_L1D_ACCESS_*


[Expand]
ARMv7 level one descriptor cache value ARMV7_L1D_CACHE_*


[Expand]
ARMv7 level one descriptor cacheable memory value ARMV7_L1D_CACHE_CACHEABLE_*


[Expand]
ARMv7 level one descriptor cache TEX remap value ARMV7_L1D_CACHE_REMAP_*


[Expand]
ARMv7 level two descriptor type ARMV7_L2D_TYPE_*


[Expand]
ARMv7 level two descriptor flag ARMV7_L2D_FLAG_*


[Expand]
ARMv7 level two descriptor mask ARMV7_L2D_*_MASK


[Expand]
ARMv7 level two descriptor large TEX value ARMV7_L2D_LARGE_TEX*


[Expand]
ARMv7 level two descriptor small TEX value ARMV7_L2D_SMALL_TEX*


[Expand]
ARMv7 level two descriptor AP value ARMV7_L2D_AP*


[Expand]
ARMv7 level two descriptor permission value ARMV7_L2D_ACCESS_*


[Expand]
ARMv7 level two descriptor large cache value ARMV7_L2D_LARGE_CACHE_*


[Expand]
ARMv7 level two descriptor large cacheable memory value ARMV7_L2D_LARGE_CACHE_CACHEABLE_*


[Expand]
ARMv7 level two descriptor large cache TEX remap value ARMV7_L2D_LARGE_CACHE_REMAP_*


[Expand]
ARMv7 level two descriptor small cache value ARMV7_L2D_SMALL_CACHE_*


[Expand]
ARMv7 level two descriptor small cacheable memory value ARMV7_L2D_SMALL_CACHE_CACHEABLE_*


[Expand]
ARMv7 level two descriptor small cache TEX remap value ARMV7_L2D_SMALL_CACHE_REMAP_*


[Expand]
ARMv7 specific constants ARMV7_*


Type definitions



ARMv7 page table initialization

TARMv7PageTableInit = procedure;

ARMv7 dispatch IRQ

TARMv7DispatchIRQ = function(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;

ARMv7 dispatch FIQ

TARMv7DispatchFIQ = function(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;

ARMv7 dispatch SWI

TARMv7DispatchSWI = function(CPUID:LongWord; Thread:TThreadHandle; Request:PSystemCallRequest):TThreadHandle;


Public variables



ARMv7 specific variables

ARMv7Initialized:Boolean;

Page table handlers

ARMv7PageTableInitHandler:TARMv7PageTableInit;

IRQ handlers

ARMv7DispatchIRQHandler:TARMv7DispatchIRQ;

FIQ handlers

ARMv7DispatchFIQHandler:TARMv7DispatchFIQ;

SWI handlers

ARMv7DispatchSWIHandler:TARMv7DispatchSWI;


Function declarations



Initialization functions

[Expand]
procedure ARMv7Init;
Description: To be documented


ARMv7 platform functions

[Expand]
procedure ARMv7CPUInit; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7FPUInit; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7MMUInit;
Description: To be documented


[Expand]
procedure ARMv7CacheInit; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7TimerInit(Frequency:LongWord); assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7PageTableInit;
Description: Initialize the Hardware Page Tables before enabling the MMU


[Expand]
procedure ARMv7SystemCall(Number:LongWord; Param1,Param2,Param3:PtrUInt);
Description: To be documented


[Expand]
function ARMv7CPUGetMode:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7CPUGetState:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7CPUGetCurrent:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7CPUGetMainID:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7CPUGetMultiprocessorID:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7CPUGetModel:LongWord;
Description: To be documented


[Expand]
function ARMv7CPUGetRevision:LongWord;
Description: To be documented


[Expand]
function ARMv7CPUGetDescription:String;
Description: To be documented


[Expand]
function ARMv7FPUGetState:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7L1CacheGetType:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7L1DataCacheGetSize:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7L1DataCacheGetLineSize:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7L1InstructionCacheGetSize:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7L1InstructionCacheGetLineSize:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7L2CacheGetType:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7L2CacheGetSize:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7L2CacheGetLineSize:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7Halt; assembler; nostackframe; public name '_haltproc';
Description: The purpose of the Wait For Interrupt operation is to put the processor in to a low power state


[Expand]
procedure ARMv7Pause; assembler; nostackframe;
Description: The purpose of the Wait For Interrupt operation is to put the processor in to a low power state


[Expand]
procedure ARMv7SendEvent; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7WaitForEvent; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7WaitForInterrupt; assembler; nostackframe;
Description: The purpose of the Wait For Interrupt operation is to put the processor in to a low power state


[Expand]
procedure ARMv7DataMemoryBarrier; assembler; nostackframe;
Description: Perform a data memory barrier operation using the c7 (Cache Operations) register of system control coprocessor CP15


[Expand]
procedure ARMv7DataSynchronizationBarrier; assembler; nostackframe;
Description: Perform a data synchronization barrier operation


[Expand]
procedure ARMv7InstructionMemoryBarrier; assembler; nostackframe;
Description: Perform a instruction synchronization barrier operation


[Expand]
procedure ARMv7InvalidateTLB; assembler; nostackframe;
Description: Perform an invalidate entire TLB operation using the c8 (TLB Operations) register of system control coprocessor CP15


[Expand]
procedure ARMv7InvalidateDataTLB; assembler; nostackframe;
Description: Perform an invalidate data TLB (Unlocked/Data) operation using the c8 (TLB Operations) register of system control coprocessor CP15


[Expand]
procedure ARMv7InvalidateInstructionTLB; assembler; nostackframe;
Description: Perform an invalidate instruction TLB (Unlocked/Instruction) operation using the c8 (TLB Operations) register of system control coprocessor CP15


[Expand]
procedure ARMv7InvalidateCache; assembler; nostackframe;
Description: Perform an invalidate both caches operation using the c7 (Cache Operations) register of system control coprocessor CP15


[Expand]
procedure ARMv7CleanDataCache; assembler; nostackframe;
Description: Perform a clean entire data cache operation


[Expand]
procedure ARMv7InvalidateDataCache; assembler; nostackframe;
Description: Perform an invalidate entire data cache operation


[Expand]
procedure ARMv7InvalidateL1DataCache; assembler; nostackframe;
Description: Perform an invalidate entire L1 data cache operation


[Expand]
procedure ARMv7CleanAndInvalidateDataCache; assembler; nostackframe;
Description: Perform a clean and invalidate entire data cache operation


[Expand]
procedure ARMv7InvalidateInstructionCache; assembler; nostackframe;
Description: Perform an invalidate entire instruction cache operation using the c7 (Cache Operations) register of system control coprocessor CP15


[Expand]
procedure ARMv7CleanDataCacheRange(Address:PtrUInt; Size:LongWord);
Description: Perform a clean data cache by MVA to PoC operation


[Expand]
procedure ARMv7InvalidateDataCacheRange(Address:PtrUInt; Size:LongWord);
Description: Perform an invalidate data cache by MVA to PoC operation


[Expand]
procedure ARMv7CleanAndInvalidateDataCacheRange(Address:PtrUInt; Size:LongWord);
Description: Perform a clean and invalidate data cache by MVA to PoC operation


[Expand]
procedure ARMv7InvalidateInstructionCacheRange(Address:PtrUInt; Size:LongWord);
Description: Perform an invalidate instruction caches by MVA to PoU operation


[Expand]
procedure ARMv7CleanDataCacheSetWay(SetWay:LongWord); assembler; nostackframe;
Description: Perform a clean data cache line by set/way operation


[Expand]
procedure ARMv7InvalidateDataCacheSetWay(SetWay:LongWord); assembler; nostackframe;
Description: Perform an invalidate data cache line by set/way operation


[Expand]
procedure ARMv7CleanAndInvalidateDataCacheSetWay(SetWay:LongWord); assembler; nostackframe;
Description: Perform a clean and invalidate data cache line by set/way operation


[Expand]
procedure ARMv7FlushPrefetchBuffer; assembler; nostackframe;
Description: Perform an Instruction Synchronization Barrier operation


[Expand]
procedure ARMv7FlushBranchTargetCache; assembler; nostackframe;
Description: Perform a Flush Entire Branch Target Cache operation


[Expand]
procedure ARMv7ContextSwitch(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;
Description: Perform a context switch from one thread to another as a result of a thread yielding, sleeping or waiting


[Expand]
procedure ARMv7ContextSwitchIRQ(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;
Description: Perform a context switch from one thread to another as a result of an interrupt request (IRQ)


[Expand]
procedure ARMv7ContextSwitchFIQ(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;
Description: Perform a context switch from one thread to another as a result of a fast interrupt request (FIQ)


[Expand]
procedure ARMv7ContextSwitchSWI(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe; 
Description: Perform a context switch from one thread to another as a result of a software interrupt (SWI)


[Expand]
function ARMv7InterlockedOr(var Target:LongInt; Value:LongInt):LongInt; assembler; nostackframe;
Description: Perform an atomic OR operation using LDREX/STREX


[Expand]
function ARMv7InterlockedXor(var Target:LongInt; Value:LongInt):LongInt; assembler; nostackframe;
Description: Perform an atomic XOR operation using LDREX/STREX


[Expand]
function ARMv7InterlockedAnd(var Target:LongInt; Value:LongInt):LongInt; assembler; nostackframe;
Description: Perform an atomic AND operation using LDREX/STREX


[Expand]
function ARMv7InterlockedDecrement(var Target:LongInt):LongInt; assembler; nostackframe;
Description: Perform an atomic decrement operation using LDREX/STREX


[Expand]
function ARMv7InterlockedIncrement(var Target:LongInt):LongInt; assembler; nostackframe;
Description: Perform an atomic increment operation using LDREX/STREX


[Expand]
function ARMv7InterlockedExchange(var Target:LongInt; Source:LongInt):LongInt; assembler; nostackframe;
Description: Perform an atomic exchange operation using LDREX/STREX


[Expand]
function ARMv7InterlockedAddExchange(var Target:LongInt; Source:LongInt):LongInt; assembler; nostackframe;
Description: Perform an atomic add and exchange operation using LDREX/STREX


[Expand]
function ARMv7InterlockedCompareExchange(var Target:LongInt; Source,Compare:LongInt):LongInt; assembler; nostackframe;
Description: Perform an atomic compare and exchange operation using LDREX/STREX


[Expand]
procedure ARMv7PageTableGetEntry(Address:PtrUInt; var Entry:TPageTableEntry);
Description: Get and Decode the entry in the Page Table that corresponds to the supplied virtual address


[Expand]
function ARMv7PageTableSetEntry(const Entry:TPageTableEntry):LongWord;
Description: Encode and Set an entry in the Page Table that corresponds to the supplied virtual address


[Expand]
function ARMv7VectorTableGetEntry(Number:LongWord):PtrUInt;
Description: Return the address of the specified vector table entry number


[Expand]
function ARMv7VectorTableSetEntry(Number:LongWord; Address:PtrUInt):LongWord;
Description: Set the supplied address as the value of the specified vector table entry number


[Expand]
function ARMv7FirstBitSet(Value:LongWord):LongWord; assembler; nostackframe; 
Description: To be documented


[Expand]
function ARMv7CountLeadingZeros(Value:LongWord):LongWord; assembler; nostackframe;
Description: Equivalent of the GCC Builtin function __builtin_clz


ARMv7 thread functions

[Expand]
procedure ARMv7PrimaryInit; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7SpinLock(Spin:PSpinEntry):LongWord; assembler; nostackframe;
Description: Lock an existing Spin entry


[Expand]
function ARMv7SpinUnlock(Spin:PSpinEntry):LongWord; assembler; nostackframe;
Description: Unlock an existing Spin entry


[Expand]
function ARMv7SpinLockIRQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
Description: Lock an existing Spin entry, disable IRQ and save the previous IRQ state


[Expand]
function ARMv7SpinUnlockIRQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
Description: Unlock an existing Spin entry and restore the previous IRQ state


[Expand]
function ARMv7SpinLockFIQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
Description: Lock an existing Spin entry, disable FIQ and save the previous FIQ state


[Expand]
function ARMv7SpinUnlockFIQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
Description: Unlock an existing Spin entry and restore the previous FIQ state


[Expand]
function ARMv7SpinLockIRQFIQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
Description: Lock an existing Spin entry, disable IRQ and FIQ and save the previous IRQ/FIQ state


[Expand]
function ARMv7SpinUnlockIRQFIQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
Description: Unlock an existing Spin entry and restore the previous IRQ/FIQ state


[Expand]
function ARMv7SpinCheckIRQ(Spin:PSpinEntry):Boolean;
Description: To be documented


[Expand]
function ARMv7SpinCheckFIQ(Spin:PSpinEntry):Boolean;
Description: To be documented


[Expand]
function ARMv7SpinExchangeIRQ(Spin1,Spin2:PSpinEntry):LongWord;
Description: To be documented


[Expand]
function ARMv7SpinExchangeFIQ(Spin1,Spin2:PSpinEntry):LongWord;
Description: To be documented


[Expand]
function ARMv7MutexLock(Mutex:PMutexEntry):LongWord; assembler; nostackframe;
Description: Lock an existing Mutex entry


[Expand]
function ARMv7MutexUnlock(Mutex:PMutexEntry):LongWord; assembler; nostackframe;
Description: Unlock an existing Mutex entry


[Expand]
function ARMv7MutexTryLock(Mutex:PMutexEntry):LongWord; assembler; nostackframe;
Description: Try to lock an existing Mutex entry


[Expand]
function ARMv7ThreadGetCurrent:TThreadHandle; assembler; nostackframe;
Description: Get the current thread Id from the c13 (Thread and process ID) register of system control coprocessor CP15


[Expand]
function ARMv7ThreadSetCurrent(Thread:TThreadHandle):LongWord; assembler; nostackframe;
Description: Set the current thread Id in the c13 (Thread and process ID) register of system control coprocessor CP15


[Expand]
function ARMv7ThreadSetupStack(StackBase:Pointer; StartProc:TThreadStart; ReturnProc:TThreadEnd; Parameter:Pointer):Pointer;
Description: Set up the context record and arguments on the stack for a new thread


ARMv7 IRQ functions

[Expand]
function ARMv7DispatchIRQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle; inline;
Description: To be documented


ARMv7 FIQ functions

[Expand]
function ARMv7DispatchFIQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle; inline;
Description: To be documented


ARMv7 SWI functions

[Expand]
function ARMv7DispatchSWI(CPUID:LongWord; Thread:TThreadHandle; Request:PSystemCallRequest):TThreadHandle; inline;
Description: To be documented


ARMv7 interrupt functions

[Expand]
procedure ARMv7ResetHandler; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7UndefinedInstructionHandler; assembler; nostackframe;
Description: Handle an undefined instruction exception


[Expand]
procedure ARMv7SoftwareInterruptHandler; assembler; nostackframe;
Description: Handle a software interrupt (SWI) from a system call (SVC)


[Expand]
procedure ARMv7PrefetchAbortHandler; assembler; nostackframe;
Description: Handle a prefetch abort exception


[Expand]
procedure ARMv7DataAbortHandler; assembler; nostackframe;
Description: Handle a data abort exception


[Expand]
procedure ARMv7ReservedHandler; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7IRQHandler; assembler; nostackframe;
Description: Handle an interrupt request IRQ from an interrupt source


[Expand]
procedure ARMv7FIQHandler; assembler; nostackframe;
Description: Handle a fast interrupt request FIQ from an interrupt source


ARMv7 helper functions

[Expand]
function ARMv7GetFPEXC:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7GetFPSCR:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7StartMMU; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7GetTimerState(Timer:LongWord):LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMv7SetTimerState(Timer,State:LongWord); assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7GetTimerCount(Timer:LongWord):Int64; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7GetTimerValue(Timer:LongWord):LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMV7SetTimerValue(Timer,Value:LongWord); assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7GetTimerCompare(Timer:LongWord):Int64; assembler; nostackframe;
Description: To be documented


[Expand]
procedure ARMV7SetTimerCompare(Timer,High,Low:LongWord); assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7GetTimerFrequency:LongWord; assembler; nostackframe;
Description: To be documented


[Expand]
function ARMv7GetPageTableCoarse(Address:PtrUInt):LongWord;
Description: Get the descriptor for a Coarse Page Table entry (1MB)


[Expand]
function ARMv7SetPageTableCoarse(Address,CoarseAddress:PtrUInt; Flags:Word):Boolean;
Description: Set the descriptor for a Coarse Page Table entry (1MB)


[Expand]
function ARMv7GetPageTableLarge(Address:PtrUInt):LongWord;
Description: Get the descriptor for a Large Page Table entry (64KB)


[Expand]
function ARMv7SetPageTableLarge(Address,PhysicalAddress:PtrUInt; Flags:Word):Boolean;
Description: Set the descriptor for a Large Page Table entry (64KB)


[Expand]
function ARMv7GetPageTableSmall(Address:PtrUInt):LongWord;
Description: Get the descriptor for a Small Page Table entry (4KB)


[Expand]
function ARMv7SetPageTableSmall(Address,PhysicalAddress:PtrUInt; Flags:Word):Boolean;
Description: Set the descriptor for a Small Page Table entry (4KB)


[Expand]
function ARMv7GetPageTableSection(Address:PtrUInt):LongWord;
Description: Get the descriptor for a Page Table Section (1MB) or Supersection (16MB)


[Expand]
function ARMv7SetPageTableSection(Address,PhysicalAddress:PtrUInt; Flags:LongWord):Boolean;
Description: Set the descriptor for a Page Table Section (1MB)


[Expand]
function ARMv7SetPageTableSupersection(Address,PhysicalAddress:PtrUInt; Flags:LongWord):Boolean;
Description: Set the descriptor for a Page Table Supersection (16MB)


Return to Unit Reference