Difference between revisions of "Unit PlatformARMv8"
(14 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
---- | ---- | ||
− | '''Ultibo Platform | + | '''Ultibo Platform Interface unit for ARMv8''' |
The ARMv8 does not support the SWP/SWPB instructions for syncronisation (Lock/Mutex/Semaphore etc) unless enabled. | The ARMv8 does not support the SWP/SWPB instructions for syncronisation (Lock/Mutex/Semaphore etc) unless enabled. | ||
Line 22: | Line 22: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 page | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 page tables shift''' <code> ARMV8_PAGE_TABLES_* </code></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;" | ||
Line 33: | Line 33: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 main | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 main Id''' <code> ARMV8_CP15_C0_MAINID_* </code></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;" | ||
Line 99: | Line 99: | ||
|- | |- | ||
|colspan="2"| | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|''Cortex A5 to Cortext A17 are ARMv7 part numbers, included here to allow ARMv7 code on ARMv8 in 32bit mode'' | ||
+ | |- | ||
+ | | <code>ARMV8_CP15_C0_MAINID_PARTNUMBER_CORTEX_A5 = ($C05 shl 4);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ARMV8_CP15_C0_MAINID_PARTNUMBER_CORTEX_A7 = ($C07 shl 4);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ARMV8_CP15_C0_MAINID_PARTNUMBER_CORTEX_A8 = ($C08 shl 4);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ARMV8_CP15_C0_MAINID_PARTNUMBER_CORTEX_A9 = ($C09 shl 4);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ARMV8_CP15_C0_MAINID_PARTNUMBER_CORTEX_A15 = ($C0F shl 4);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ARMV8_CP15_C0_MAINID_PARTNUMBER_CORTEX_A17 = ($C0E shl 4);</code> | ||
+ | | | ||
|- | |- | ||
| <code>ARMV8_CP15_C0_MAINID_PARTNUMBER_CORTEX_A53 = ($D03 shl 4);</code> | | <code>ARMV8_CP15_C0_MAINID_PARTNUMBER_CORTEX_A53 = ($D03 shl 4);</code> | ||
Line 113: | Line 133: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 multiprocessor affinity | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 multiprocessor affinity''' <code> ARMV8_CP15_C0_MPID_* </code></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;" | ||
Line 136: | Line 156: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 cache size | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 cache size Id''' <code> ARMV8_CP15_C0_CCSID_* </code></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;" | ||
Line 173: | Line 193: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 cache level | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 cache level Id''' <code> ARMV8_CP15_C0_CLID_* </code></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;" | ||
Line 328: | Line 348: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 cache size selection | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C0 cache size selection''' <code> ARMV8_CP15_C0_CSSEL_* </code></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;" | ||
Line 363: | Line 383: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C1 control | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C1 control''' <code> ARMV8_CP15_C1_* </code></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;" | ||
Line 431: | Line 451: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C1 auxiliary control | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C1 auxiliary control''' <code> ARMV8_CP15_C1_AUX_* </code></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;" | ||
Line 474: | Line 494: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C1 coprocessor access control | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C1 coprocessor access control''' <code> ARMV8_CP15_C1_CP* </code></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;" | ||
Line 644: | Line 664: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C1 secure configuration | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C1 secure configuration''' <code> ARMV8_CP15_C1_SCR_* </code></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;" | ||
Line 682: | Line 702: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C2 translation table base | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C2 translation table base''' <code> ARMV8_CP15_C2_TTBR_* </code></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;" | ||
Line 690: | Line 710: | ||
|- | |- | ||
| <code>ARMV8_CP15_C2_TTBR_NOS = (1 shl 5);</code> | | <code>ARMV8_CP15_C2_TTBR_NOS = (1 shl 5);</code> | ||
− | | Not Outer Shareable bit (0 Outer Shareable / 1 Inner Shareable) | + | | Not Outer Shareable bit (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C2_TTBR_RGN_OUTER_NONCACHED = (0 shl 3);</code> | | <code>ARMV8_CP15_C2_TTBR_RGN_OUTER_NONCACHED = (0 shl 3);</code> | ||
Line 708: | Line 728: | ||
|- | |- | ||
| <code>ARMV8_CP15_C2_TTBR_S = (1 shl 1);</code> | | <code>ARMV8_CP15_C2_TTBR_S = (1 shl 1);</code> | ||
− | | Shareable bit (0 Non Shareable / 1 Shareable) | + | | Shareable bit (0 Non Shareable/1 Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C2_TTBR_C_INNER_CACHED = (1 shl 0);</code> | | <code>ARMV8_CP15_C2_TTBR_C_INNER_CACHED = (1 shl 0);</code> | ||
− | | Cacheable bit (0 Inner Non Cacheable / 1 Inner Cacheable) (ARMv8-A base only) | + | | Cacheable bit (0 Inner Non Cacheable/1 Inner Cacheable) (ARMv8-A base only) |
|- | |- | ||
| <code>ARMV8_CP15_C2_TTBR_IRGN_INNER_NONCACHED = (0 shl 6) or (0 shl 0);</code> | | <code>ARMV8_CP15_C2_TTBR_IRGN_INNER_NONCACHED = (0 shl 6) or (0 shl 0);</code> | ||
Line 729: | Line 749: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C3 domain access control | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C3 domain access control''' <code> ARMV8_CP15_C3_DOMAIN* </code></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;" | ||
Line 911: | Line 931: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C10 primary region remap | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C10 primary region remap''' <code> ARMV8_CP15_C10_PRRR_* </code></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;" | ||
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NOS7 = (1 shl 31);</code> | | <code>ARMV8_CP15_C10_PRRR_NOS7 = (1 shl 31);</code> | ||
− | | Outer Shareable property mapping for memory attributes 7, if the region is mapped as Normal Shareable (0 Outer Shareable / 1 Inner Shareable) | + | | Outer Shareable property mapping for memory attributes 7, if the region is mapped as Normal Shareable (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NOS6 = (1 shl 30);</code> | | <code>ARMV8_CP15_C10_PRRR_NOS6 = (1 shl 30);</code> | ||
− | | Outer Shareable property mapping for memory attributes 6, if the region is mapped as Normal Shareable (0 Outer Shareable / 1 Inner Shareable) | + | | Outer Shareable property mapping for memory attributes 6, if the region is mapped as Normal Shareable (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NOS5 = (1 shl 29);</code> | | <code>ARMV8_CP15_C10_PRRR_NOS5 = (1 shl 29);</code> | ||
− | | Outer Shareable property mapping for memory attributes 5, if the region is mapped as Normal Shareable (0 Outer Shareable / 1 Inner Shareable) | + | | Outer Shareable property mapping for memory attributes 5, if the region is mapped as Normal Shareable (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NOS4 = (1 shl 28);</code> | | <code>ARMV8_CP15_C10_PRRR_NOS4 = (1 shl 28);</code> | ||
− | | Outer Shareable property mapping for memory attributes 4, if the region is mapped as Normal Shareable (0 Outer Shareable / 1 Inner Shareable) | + | | Outer Shareable property mapping for memory attributes 4, if the region is mapped as Normal Shareable (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NOS3 = (1 shl 27);</code> | | <code>ARMV8_CP15_C10_PRRR_NOS3 = (1 shl 27);</code> | ||
− | | Outer Shareable property mapping for memory attributes 3, if the region is mapped as Normal Shareable (0 Outer Shareable / 1 Inner Shareable) | + | | Outer Shareable property mapping for memory attributes 3, if the region is mapped as Normal Shareable (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NOS2 = (1 shl 26);</code> | | <code>ARMV8_CP15_C10_PRRR_NOS2 = (1 shl 26);</code> | ||
− | | Outer Shareable property mapping for memory attributes 2, if the region is mapped as Normal Shareable (0 Outer Shareable / 1 Inner Shareable) | + | | Outer Shareable property mapping for memory attributes 2, if the region is mapped as Normal Shareable (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NOS1 = (1 shl 25);</code> | | <code>ARMV8_CP15_C10_PRRR_NOS1 = (1 shl 25);</code> | ||
− | | Outer Shareable property mapping for memory attributes 1, if the region is mapped as Normal Shareable (0 Outer Shareable / 1 Inner Shareable) | + | | Outer Shareable property mapping for memory attributes 1, if the region is mapped as Normal Shareable (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NOS0 = (1 shl 24);</code> | | <code>ARMV8_CP15_C10_PRRR_NOS0 = (1 shl 24);</code> | ||
− | | Outer Shareable property mapping for memory attributes 0, if the region is mapped as Normal Shareable (0 Outer Shareable / 1 Inner Shareable) | + | | Outer Shareable property mapping for memory attributes 0, if the region is mapped as Normal Shareable (0 Outer Shareable/1 Inner Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NS1 = (1 shl 19);</code> | | <code>ARMV8_CP15_C10_PRRR_NS1 = (1 shl 19);</code> | ||
− | | Mapping of S = 1 attribute for Normal memory (0 Not Sharable / 1 Shareable) | + | | Mapping of S = 1 attribute for Normal memory (0 Not Sharable/1 Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_NS0 = (1 shl 18);</code> | | <code>ARMV8_CP15_C10_PRRR_NS0 = (1 shl 18);</code> | ||
− | | Mapping of S = 0 attribute for Normal memory (0 Not Sharable / 1 Shareable) | + | | Mapping of S = 0 attribute for Normal memory (0 Not Sharable/1 Shareable) |
|- | |- | ||
| <code>ARMV8_CP15_C10_PRRR_DS1 = (1 shl 17);</code> | | <code>ARMV8_CP15_C10_PRRR_DS1 = (1 shl 17);</code> | ||
Line 1,062: | Line 1,082: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C10 normal memory remap | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C10 normal memory remap''' <code> ARMV8_CP15_C10_NMRR_* </code></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;" | ||
Line 1,282: | Line 1,302: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C14 generic timer control | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C14 generic timer control''' <code> ARMV8_CP15_C14_CNT_CTL_* </code></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;" | ||
Line 1,299: | Line 1,319: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C14 generic timer | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 CP15 C14 generic timer''' <code> ARMV8_CP15_C14_* </code></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;" | ||
Line 1,316: | Line 1,336: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 floating-point exception | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 floating-point exception''' <code> ARMV8_FPEXC_* </code></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;" | ||
Line 1,330: | Line 1,350: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor type | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor type''' <code> ARMV8_L1D_TYPE_* </code></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;" | ||
Line 1,355: | Line 1,375: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor flag | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor flag''' <code> ARMV8_L1D_FLAG_* </code></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;" | ||
Line 1,398: | Line 1,418: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor mask | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor mask''' <code> ARMV8_L1D_*_MASK </code></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;" | ||
Line 1,428: | Line 1,448: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor TEX value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor TEX value''' <code> ARMV8_L1D_TEX* </code></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;" | ||
Line 1,461: | Line 1,481: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor AP value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor AP value''' <code> ARMV8_L1D_AP* </code></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;" | ||
Line 1,485: | Line 1,505: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor permission value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor permission value''' <code> ARMV8_L1D_ACCESS_* </code></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;" | ||
Line 1,510: | Line 1,530: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor cache value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor cache value''' <code> ARMV8_L1D_CACHE_* </code></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;" | ||
Line 1,543: | Line 1,563: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor cacheable memory value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor cacheable memory value''' <code> ARMV8_L1D_CACHE_CACHEABLE_* </code></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;" | ||
Line 1,581: | Line 1,601: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor cache TEX remap value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level one descriptor cache TEX remap value''' <code> ARMV8_L1D_CACHE_REMAP_* </code></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;" | ||
Line 1,619: | Line 1,639: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor type | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor type''' <code> ARMV8_L2D_TYPE_* </code></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;" | ||
Line 1,639: | Line 1,659: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor flag | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor flag''' <code> ARMV8_L2D_FLAG_* </code></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;" | ||
Line 1,673: | Line 1,693: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor mask | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor mask''' <code> ARMV8_L2D_*_MASK </code></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;" | ||
Line 1,700: | Line 1,720: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor large TEX value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor large TEX value''' <code> ARMV8_L2D_LARGE_TEX* </code></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;" | ||
Line 1,733: | Line 1,753: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor small TEX value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor small TEX value''' <code> ARMV8_L2D_SMALL_TEX* </code></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;" | ||
Line 1,766: | Line 1,786: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor AP value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor AP value''' <code> ARMV8_L2D_AP* </code></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;" | ||
Line 1,790: | Line 1,810: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor permission value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor permission value''' <code> ARMV8_L2D_ACCESS_* </code></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;" | ||
Line 1,815: | Line 1,835: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor large cache value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor large cache value''' <code> ARMV8_L2D_LARGE_CACHE_* </code></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;" | ||
Line 1,848: | Line 1,868: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor large cacheable memory value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor large cacheable memory value''' <code> ARMV8_L2D_LARGE_CACHE_CACHEABLE_* </code></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;" | ||
Line 1,888: | Line 1,908: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor large cache TEX remap value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor large cache TEX remap value''' <code> ARMV8_L2D_LARGE_CACHE_REMAP_* </code></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;" | ||
Line 1,926: | Line 1,946: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor small cache value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor small cache value''' <code> ARMV8_L2D_SMALL_CACHE_* </code></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;" | ||
Line 1,959: | Line 1,979: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor small cacheable memory value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor small cacheable memory value''' <code> ARMV8_L2D_SMALL_CACHE_CACHEABLE_* </code></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;" | ||
Line 1,981: | Line 2,001: | ||
| Outer Normal Write Back (Shared if S bit set) | | Outer Normal Write Back (Shared if S bit set) | ||
|- | |- | ||
− | + | |colspan="2"| | |
− | | | + | |
|- | |- | ||
| <code>ARMV8_L2D_SMALL_CACHE_CACHEABLE_INNER_NONCACHED = ARMV8_L2D_SMALL_TEX4;</code> | | <code>ARMV8_L2D_SMALL_CACHE_CACHEABLE_INNER_NONCACHED = ARMV8_L2D_SMALL_TEX4;</code> | ||
Line 2,000: | Line 2,019: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor small cache TEX remap value | + | <div style="font-size: 14px; padding-left: 12px;">'''ARMv8 level two descriptor small cache TEX remap value''' <code> ARMV8_L2D_SMALL_CACHE_REMAP_* </code></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;" | ||
Line 2,052: | Line 2,071: | ||
---- | ---- | ||
− | '' | + | |
+ | '''ARMv8 page table initialization''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TARMv8PageTableInit = procedure;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''ARMv8 dispatch IRQ''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TARMv8DispatchIRQ = function(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''ARMv8 dispatch FIQ''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TARMv8DispatchFIQ = function(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''ARMv8 dispatch SWI''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TARMv8DispatchSWI = function(CPUID:LongWord; Thread:TThreadHandle; Request:PSystemCallRequest):TThreadHandle;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | <br /> | ||
=== Public variables === | === Public variables === | ||
---- | ---- | ||
− | '' | + | |
+ | '''ARMv8 specific variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMv8Initialized:Boolean;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Page table handlers''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMv8PageTableInitHandler:TARMv8PageTableInit;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''IRQ handlers''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMv8DispatchIRQHandler:TARMv8DispatchIRQ;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''FIQ handlers''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMv8DispatchFIQHandler:TARMv8DispatchFIQ;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''SWI handlers''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMv8DispatchSWIHandler:TARMv8DispatchSWI;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | <br /> | ||
=== Function declarations === | === Function declarations === | ||
Line 2,071: | Line 2,171: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,086: | Line 2,186: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,098: | Line 2,198: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,110: | Line 2,210: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,122: | Line 2,222: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,134: | Line 2,234: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,146: | Line 2,246: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,158: | Line 2,258: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,170: | Line 2,270: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,182: | Line 2,282: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,194: | Line 2,294: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,206: | Line 2,306: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,218: | Line 2,318: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,230: | Line 2,330: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,242: | Line 2,342: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,254: | Line 2,354: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,266: | Line 2,366: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,278: | Line 2,378: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,290: | Line 2,390: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,302: | Line 2,402: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,314: | Line 2,414: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,326: | Line 2,426: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,338: | Line 2,438: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,350: | Line 2,450: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,362: | Line 2,462: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 2,369: | Line 2,469: | ||
<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 ARMv8Halt; assembler; nostackframe; public name'_haltproc';</pre> | + | <pre style="border: 0; padding-bottom:0px;">procedure ARMv8Halt; 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 |
| 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,386: | Line 2,486: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,398: | Line 2,498: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See Page A8-316 of the ARMv7 Architecture Reference Manual | | See Page A8-316 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,410: | Line 2,510: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See Page A8-808 of the ARMv7 Architecture Reference Manual | | See Page A8-808 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,422: | Line 2,522: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,434: | Line 2,534: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,448: | Line 2,548: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page A8-92 of the ARMv7 Architecture Reference Manual | | See page A8-92 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,460: | Line 2,560: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page A8-102 of the ARMv7 Architecture Reference Manual | | See page A8-102 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,472: | Line 2,572: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-138 of the ARMv7 Architecture Reference Manual | | See page B3-138 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,484: | Line 2,584: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-138 of the ARMv7 Architecture Reference Manual | | See page B3-138 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,496: | Line 2,596: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-138 of the ARMv7 Architecture Reference Manual | | See page B3-138 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,508: | Line 2,608: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,520: | Line 2,620: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,532: | Line 2,632: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,544: | Line 2,644: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,556: | Line 2,656: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,568: | Line 2,668: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,587: | Line 2,675: | ||
<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 ARMv8InvalidateDataCacheRange(Address | + | <pre style="border: 0; padding-bottom:0px;">procedure ARMv8InvalidateDataCacheRange(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 |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,599: | Line 2,687: | ||
<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 ARMv8CleanAndInvalidateDataCacheRange(Address | + | <pre style="border: 0; padding-bottom:0px;">procedure ARMv8CleanAndInvalidateDataCacheRange(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 |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,611: | Line 2,699: | ||
<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 ARMv8InvalidateInstructionCacheRange(Address | + | <pre style="border: 0; padding-bottom:0px;">procedure ARMv8InvalidateInstructionCacheRange(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 |
| 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,716: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! SetWay |
| Set/Way/Level will be passed in r0 | | Set/Way/Level will be passed in r0 | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,643: | Line 2,731: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! SetWay |
| Set/Way/Level will be passed in r0 | | Set/Way/Level will be passed in r0 | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,658: | Line 2,746: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! SetWay |
| Set/Way/Level will be passed in r0 | | Set/Way/Level will be passed in r0 | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,673: | Line 2,761: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page A8-102 of the ARMv7 Architecture Reference Manual | | See page A8-102 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,685: | Line 2,773: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page B3-127 of the ARMv7 Architecture Reference Manual | | See page B3-127 of the ARMv7 Architecture Reference Manual | ||
|- | |- | ||
Line 2,692: | Line 2,780: | ||
<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 ARMv8ContextSwitch(OldStack,NewStack:Pointer; NewThread:TThreadHandle); | + | <pre style="border: 0; padding-bottom:0px;">procedure ARMv8ContextSwitch(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 |
| 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 |
| 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 |
| 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 |
− | | 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: ARMv8ThreadSetupStack for additional information) | <br />(See: ARMv8ThreadSetupStack for additional information) | ||
<br /> | <br /> | ||
Line 2,776: | Line 2,864: | ||
<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 ARMv8ContextSwitchIRQ(OldStack,NewStack:Pointer; NewThread:TThreadHandle); | + | <pre style="border: 0; padding-bottom:0px;">procedure ARMv8ContextSwitchIRQ(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 |
| 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 |
| 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 |
| 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 |
− | | 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: ARMv8ThreadSetupStack for additional information) | <br />(See: ARMv8ThreadSetupStack for additional information) | ||
<br /> | <br /> | ||
Line 2,854: | Line 2,942: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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 |
| 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 |
| 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 |
− | | 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: ARMv8ThreadSetupStack for additional information) | <br />(See: ARMv8ThreadSetupStack for additional information) | ||
<br /> | <br /> | ||
Line 2,927: | Line 3,015: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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 |
| 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 |
| 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 |
− | | 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: ARMv8ThreadSetupStack for additional information) | <br />(See: ARMv8ThreadSetupStack for additional information) | ||
<br /> | <br /> | ||
Line 3,001: | Line 3,089: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,013: | Line 3,101: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,025: | Line 3,113: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,037: | Line 3,125: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,049: | Line 3,137: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,061: | Line 3,149: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,073: | Line 3,161: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,085: | Line 3,173: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,092: | Line 3,180: | ||
<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;"> | + | <pre style="border: 0; padding-bottom:0px;">procedure ARMv8PageTableGetEntry(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 |
| None documented | | None documented | ||
|- | |- | ||
Line 3,109: | Line 3,197: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,121: | Line 3,209: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,133: | Line 3,221: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,145: | Line 3,233: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,157: | Line 3,245: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,172: | Line 3,260: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,184: | Line 3,272: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Spin |
| Pointer to the Spin entry to lock (Passed in R0) | | Pointer to the Spin entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,199: | Line 3,287: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Spin |
| Pointer to the Spin entry to lock (Passed in R0) | | Pointer to the Spin entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,214: | Line 3,302: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Spin |
| Pointer to the Spin entry to lock (Passed in R0) | | Pointer to the Spin entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,229: | Line 3,317: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Spin |
| Pointer to the Spin entry to lock (Passed in R0) | | Pointer to the Spin entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,244: | Line 3,332: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Spin |
| Pointer to the Spin entry to lock (Passed in R0) | | Pointer to the Spin entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,259: | Line 3,347: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Spin |
| Pointer to the Spin entry to lock (Passed in R0) | | Pointer to the Spin entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,274: | Line 3,362: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Spin |
| Pointer to the Spin entry to lock (Passed in R0) | | Pointer to the Spin entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,289: | Line 3,377: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Spin |
| Pointer to the Spin entry to lock (Passed in R0) | | Pointer to the Spin entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,304: | Line 3,392: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,316: | Line 3,404: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,328: | Line 3,416: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,340: | Line 3,428: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,352: | Line 3,440: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Mutex |
| Pointer to the Mutex entry to lock (Passed in R0) | | Pointer to the Mutex entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,367: | Line 3,455: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Mutex |
| Pointer to the Mutex entry to lock (Passed in R0) | | Pointer to the Mutex entry to lock (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! 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,382: | Line 3,470: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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'' |
− | | 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,393: | Line 3,481: | ||
<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 ARMv8ThreadGetCurrent:TThreadHandle; assembler; nostackframe;</pre> | <pre style="border: 0; padding-bottom:0px;">function ARMv8ThreadGetCurrent:TThreadHandle; assembler; nostackframe;</pre> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current thread | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current thread Id from the c13 (Thread and process ID) register of system control coprocessor CP15</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 |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,405: | Line 3,493: | ||
<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 ARMv8ThreadSetCurrent(Thread:TThreadHandle):LongWord; assembler; nostackframe;</pre> | <pre style="border: 0; padding-bottom:0px;">function ARMv8ThreadSetCurrent(Thread:TThreadHandle):LongWord; assembler; nostackframe;</pre> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current thread | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current thread Id in the c13 (Thread and process ID) register of system control coprocessor CP15</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 |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,421: | Line 3,509: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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 |
| The procedure the thread will start executing when resumed | | The procedure the thread will start executing when resumed | ||
|- | |- | ||
− | ! | + | ! ReturnProc |
| The procedure the thread will return to on exit | | The procedure the thread will return to on exit | ||
|- | |- | ||
− | ! | + | ! 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 |
| 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,513: | Line 3,601: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,528: | Line 3,616: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,543: | Line 3,631: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,558: | Line 3,646: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,570: | Line 3,658: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,582: | Line 3,670: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,610: | Line 3,698: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,622: | Line 3,710: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,634: | Line 3,722: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,646: | Line 3,734: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,669: | Line 3,757: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! 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,697: | Line 3,785: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,709: | Line 3,797: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,721: | Line 3,809: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,733: | Line 3,821: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,745: | Line 3,833: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,757: | Line 3,845: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,769: | Line 3,857: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,781: | Line 3,869: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,793: | Line 3,881: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,805: | Line 3,893: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,817: | Line 3,905: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 3,829: | Line 3,917: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,841: | Line 3,929: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | ||
Line 3,854: | Line 3,942: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,866: | Line 3,954: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! PageTable |
| 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 | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | ||
Line 3,882: | Line 3,970: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,894: | Line 3,982: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | ||
Line 3,907: | Line 3,995: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
|- | |- | ||
Line 3,919: | Line 4,007: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | ||
Line 3,932: | Line 4,020: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! PageTable |
| 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 | ||
|- | |- | ||
− | ! | + | ! Note |
| See page ??? | | See page ??? | ||
Caller must call ARMv8InvalidateTLB after changes if MMU is enabled | Caller must call ARMv8InvalidateTLB after changes if MMU is enabled |
Latest revision as of 01:31, 22 April 2022
Return to Unit Reference
Contents
[hide]Description
Ultibo Platform Interface unit for ARMv8
The ARMv8 does not support the SWP/SWPB instructions for syncronisation (Lock/Mutex/Semaphore etc) unless enabled.
On ARMv8 Unaligned memory access is always enabled.
On ARMv8 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
Note: This unit currently only supports ARMv8 in Aarch32 mode, support for Aarch64 mode will be added in future.
Constants
ARMV8_PAGE_TABLES_*
ARMV8_CP15_C0_MAINID_*
ARMV8_CP15_C0_MPID_*
ARMV8_CP15_C0_CCSID_*
ARMV8_CP15_C0_CLID_*
ARMV8_CP15_C0_CSSEL_*
ARMV8_CP15_C1_*
ARMV8_CP15_C1_AUX_*
ARMV8_CP15_C1_CP*
ARMV8_CP15_C1_SCR_*
ARMV8_CP15_C2_TTBR_*
ARMV8_CP15_C3_DOMAIN*
ARMV8_CP15_C10_PRRR_*
ARMV8_CP15_C10_NMRR_*
ARMV8_CP15_C14_CNT_CTL_*
ARMV8_CP15_C14_*
ARMV8_FPEXC_*
ARMV8_L1D_TYPE_*
ARMV8_L1D_FLAG_*
ARMV8_L1D_*_MASK
ARMV8_L1D_TEX*
ARMV8_L1D_AP*
ARMV8_L1D_ACCESS_*
ARMV8_L1D_CACHE_*
ARMV8_L1D_CACHE_CACHEABLE_*
ARMV8_L1D_CACHE_REMAP_*
ARMV8_L2D_TYPE_*
ARMV8_L2D_FLAG_*
ARMV8_L2D_*_MASK
ARMV8_L2D_LARGE_TEX*
ARMV8_L2D_SMALL_TEX*
ARMV8_L2D_AP*
ARMV8_L2D_ACCESS_*
ARMV8_L2D_LARGE_CACHE_*
ARMV8_L2D_LARGE_CACHE_CACHEABLE_*
ARMV8_L2D_LARGE_CACHE_REMAP_*
ARMV8_L2D_SMALL_CACHE_*
ARMV8_L2D_SMALL_CACHE_CACHEABLE_*
ARMV8_L2D_SMALL_CACHE_REMAP_*
ARMV8_*
Type definitions
ARMv8 page table initialization
TARMv8PageTableInit = procedure;
|
ARMv8 dispatch IRQ
TARMv8DispatchIRQ = function(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
|
ARMv8 dispatch FIQ
TARMv8DispatchFIQ = function(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
|
ARMv8 dispatch SWI
TARMv8DispatchSWI = function(CPUID:LongWord; Thread:TThreadHandle; Request:PSystemCallRequest):TThreadHandle;
|
Public variables
ARMv8 specific variables
ARMv8Initialized:Boolean;
|
Page table handlers
ARMv8PageTableInitHandler:TARMv8PageTableInit;
|
IRQ handlers
ARMv8DispatchIRQHandler:TARMv8DispatchIRQ;
|
FIQ handlers
ARMv8DispatchFIQHandler:TARMv8DispatchFIQ;
|
SWI handlers
ARMv8DispatchSWIHandler:TARMv8DispatchSWI;
|
Function declarations
Initialization functions
ARMv8 platform functions
procedure ARMv8TimerInit(Frequency:LongWord); assembler; nostackframe;
procedure ARMv8PageTableInit;
procedure ARMv8SystemCall(Number:LongWord; Param1,Param2,Param3:PtrUInt); assembler; nostackframe;
function ARMv8CPUGetCurrent:LongWord; assembler; nostackframe;
function ARMv8CPUGetMainID:LongWord; assembler; nostackframe;
function ARMv8CPUGetMultiprocessorID:LongWord; assembler; nostackframe;
function ARMv8L1CacheGetType:LongWord; assembler; nostackframe;
function ARMv8L1DataCacheGetSize:LongWord; assembler; nostackframe;
function ARMv8L1DataCacheGetLineSize:LongWord; assembler; nostackframe;
function ARMv8L1InstructionCacheGetSize:LongWord; assembler; nostackframe;
function ARMv8L1InstructionCacheGetLineSize:LongWord; assembler; nostackframe;
function ARMv8L2CacheGetType:LongWord; assembler; nostackframe;
function ARMv8L2CacheGetSize:LongWord; assembler; nostackframe;
function ARMv8L2CacheGetLineSize:LongWord; assembler; nostackframe;
procedure ARMv8Halt; assembler; nostackframe; public name '_haltproc';
procedure ARMv8Pause; assembler; nostackframe;
procedure ARMv8WaitForInterrupt; assembler; nostackframe;
procedure ARMv8DataMemoryBarrier; assembler; nostackframe;
procedure ARMv8DataSynchronizationBarrier; assembler; nostackframe;
procedure ARMv8InstructionMemoryBarrier; assembler; nostackframe;
procedure ARMv8InvalidateTLB; assembler; nostackframe;
procedure ARMv8InvalidateDataTLB; assembler; nostackframe;
procedure ARMv8InvalidateInstructionTLB; assembler; nostackframe;
procedure ARMv8InvalidateCache; assembler; nostackframe;
procedure ARMv8CleanDataCache; assembler; nostackframe;
procedure ARMv8InvalidateDataCache; assembler; nostackframe;
procedure ARMv8InvalidateL1DataCache; assembler; nostackframe;
procedure ARMv8CleanAndInvalidateDataCache; assembler; nostackframe;
procedure ARMv8InvalidateInstructionCache; assembler; nostackframe;
procedure ARMv8InvalidateDataCacheRange(Address:PtrUInt; Size:LongWord);
procedure ARMv8CleanAndInvalidateDataCacheRange(Address:PtrUInt; Size:LongWord);
procedure ARMv8InvalidateInstructionCacheRange(Address:PtrUInt; Size:LongWord);
procedure ARMv8CleanDataCacheSetWay(SetWay:LongWord); assembler; nostackframe;
procedure ARMv8InvalidateDataCacheSetWay(SetWay:LongWord); assembler; nostackframe;
procedure ARMv8CleanAndInvalidateDataCacheSetWay(SetWay:LongWord); assembler; nostackframe;
procedure ARMv8FlushPrefetchBuffer; assembler; nostackframe;
procedure ARMv8FlushBranchTargetCache; assembler; nostackframe;
procedure ARMv8ContextSwitch(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;
procedure ARMv8ContextSwitchIRQ(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;
procedure ARMv8ContextSwitchFIQ(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;
procedure ARMv8ContextSwitchSWI(OldStack,NewStack:Pointer; NewThread:TThreadHandle); assembler; nostackframe;
function ARMv8InterlockedOr(var Target:LongInt; Value:LongInt):LongInt; assembler; nostackframe;
function ARMv8InterlockedXor(var Target:LongInt; Value:LongInt):LongInt; assembler; nostackframe;
function ARMv8InterlockedAnd(var Target:LongInt; Value:LongInt):LongInt; assembler; nostackframe;
function ARMv8InterlockedDecrement(var Target:LongInt):LongInt; assembler; nostackframe;
function ARMv8InterlockedIncrement(var Target:LongInt):LongInt; assembler; nostackframe;
function ARMv8InterlockedExchange(var Target:LongInt; Source:LongInt):LongInt; assembler; nostackframe;
function ARMv8InterlockedAddExchange(var Target:LongInt; Source:LongInt):LongInt; assembler; nostackframe;
function ARMv8InterlockedCompareExchange(var Target:LongInt; Source,Compare:LongInt):LongInt; assembler; nostackframe;
procedure ARMv8PageTableGetEntry(Address:PtrUInt; var Entry:TPageTableEntry);
function ARMv8PageTableSetEntry(const Entry:TPageTableEntry):LongWord;
function ARMv8VectorTableGetEntry(Number:LongWord):PtrUInt;
function ARMv8VectorTableSetEntry(Number:LongWord; Address:PtrUInt):LongWord;
function ARMv8FirstBitSet(Value:LongWord):LongWord; assembler; nostackframe;
function ARMv8CountLeadingZeros(Value:LongWord):LongWord; assembler; nostackframe;
ARMv8 thread functions
function ARMv8SpinLock(Spin:PSpinEntry):LongWord; assembler; nostackframe;
function ARMv8SpinUnlock(Spin:PSpinEntry):LongWord; assembler; nostackframe;
function ARMv8SpinLockIRQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
function ARMv8SpinUnlockIRQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
function ARMv8SpinLockFIQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
function ARMv8SpinUnlockFIQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
function ARMv8SpinLockIRQFIQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
function ARMv8SpinUnlockIRQFIQ(Spin:PSpinEntry):LongWord; assembler; nostackframe;
function ARMv8SpinExchangeIRQ(Spin1,Spin2:PSpinEntry):LongWord;
function ARMv8SpinExchangeFIQ(Spin1,Spin2:PSpinEntry):LongWord;
function ARMv8MutexLock(Mutex:PMutexEntry):LongWord; assembler; nostackframe;
function ARMv8MutexUnlock(Mutex:PMutexEntry):LongWord; assembler; nostackframe;
function ARMv8MutexTryLock(Mutex:PMutexEntry):LongWord; assembler; nostackframe;
function ARMv8ThreadGetCurrent:TThreadHandle; assembler; nostackframe;
function ARMv8ThreadSetCurrent(Thread:TThreadHandle):LongWord; assembler; nostackframe;
function ARMv8ThreadSetupStack(StackBase:Pointer; StartProc:TThreadStart; ReturnProc:TThreadEnd; Parameter:Pointer):Pointer;
ARMv8 IRQ functions
function ARMv8DispatchIRQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle; inline;
ARMv8 FIQ functions
function ARMv8DispatchFIQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle; inline;
ARMv8 SWI functions
function ARMv8DispatchSWI(CPUID:LongWord; Thread:TThreadHandle; Request:PSystemCallRequest):TThreadHandle; inline;
ARMv8 interrupt functions
procedure ARMv8UndefinedInstructionHandler; assembler; nostackframe;
procedure ARMv8SoftwareInterruptHandler; assembler; nostackframe;
procedure ARMv8PrefetchAbortHandler; assembler; nostackframe;
procedure ARMv8DataAbortHandler; assembler; nostackframe;
procedure ARMv8IRQHandler; assembler; nostackframe;
procedure ARMv8FIQHandler; assembler; nostackframe;
ARMv8 helper functions
function ARMv8GetTimerState(Timer:LongWord):LongWord; assembler; nostackframe;
procedure ARMv8SetTimerState(Timer,State:LongWord); assembler; nostackframe;
function ARMv8GetTimerCount(Timer:LongWord):Int64; assembler; nostackframe;
function ARMv8GetTimerValue(Timer:LongWord):LongWord; assembler; nostackframe;
procedure ARMV8SetTimerValue(Timer,Value:LongWord); assembler; nostackframe;
function ARMv8GetTimerCompare(Timer:LongWord):Int64; assembler; nostackframe;
procedure ARMV8SetTimerCompare(Timer,High,Low:LongWord); assembler; nostackframe;
function ARMv8GetTimerFrequency:LongWord; assembler; nostackframe;
function ARMv8GetPageTableCoarse(Address:PtrUInt):LongWord;
function ARMv8SetPageTableCoarse(Address,CoarseAddress:PtrUInt; Flags:Word):Boolean;
function ARMv8GetPageTableLarge(Address:PtrUInt):LongWord;
function ARMv8SetPageTableLarge(Address,PhysicalAddress:PtrUInt; Flags:Word):Boolean;
function ARMv8GetPageTableSmall(Address:PtrUInt):LongWord;
function ARMv8SetPageTableSmall(Address,PhysicalAddress:PtrUInt; Flags:Word):Boolean;
function ARMv8GetPageTableSection(Address:PtrUInt):LongWord;
function ARMv8SetPageTableSection(Address,PhysicalAddress:PtrUInt; Flags:LongWord):Boolean;
function ARMv8SetPageTableSupersection(Address,PhysicalAddress:PtrUInt; Flags:LongWord):Boolean;
Return to Unit Reference