Difference between revisions of "Unit PlatformARM"
(13 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
---- | ---- | ||
− | '''Ultibo Platform | + | '''Ultibo Platform Interface unit for ARM''' |
− | + | ||
− | + | ||
=== Constants === | === Constants === | ||
Line 39: | Line 37: | ||
|- | |- | ||
| <code>ARM_MODE_MON = $16;</code> | | <code>ARM_MODE_MON = $16;</code> | ||
− | | Secure Monitor Mode (For Secure / Non Secure Switching) | + | | Secure Monitor Mode (For Secure/Non Secure Switching) |
|- | |- | ||
| <code>ARM_MODE_MON = $16;</code> | | <code>ARM_MODE_MON = $16;</code> | ||
− | | Secure Monitor Mode (For Secure / Non Secure Switching) | + | | Secure Monitor Mode (For Secure/Non Secure Switching) |
|- | |- | ||
| <code>ARM_MODE_ABT = $17;</code> | | <code>ARM_MODE_ABT = $17;</code> | ||
Line 139: | Line 137: | ||
| | | | ||
|- | |- | ||
− | | <code> | + | | <code>ATAG_INITRD = $54410005;</code> |
+ | | Deprecated | ||
+ | |- | ||
+ | | <code>ATAG_INITRD2 = $54420005;</code> | ||
| | | | ||
|- | |- | ||
Line 162: | Line 163: | ||
</div></div> | </div></div> | ||
<br /> | <br /> | ||
+ | <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;">'''Device tree blob''' <code> DTB_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>DTB_SIGNATURE = $d00dfeed;</code> | ||
+ | | style="width: 50%;"|See: https://github.com/devicetree-org/devicetree-specification/releases/download/v0.3/devicetree-specification-v0.3.pdf | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <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;">'''ARM machine type''' <code> ARM_MACHINE_* </code></div> | <div style="font-size: 14px; padding-left: 12px;">'''ARM machine type''' <code> ARM_MACHINE_* </code></div> | ||
Line 178: | Line 190: | ||
| <code>ARM_MACHINE_BCM2710 = $00000C42;</code> | | <code>ARM_MACHINE_BCM2710 = $00000C42;</code> | ||
| BCM2710 uses the same Machine Type as BCM2708 | | BCM2710 uses the same Machine Type as BCM2708 | ||
+ | |- | ||
+ | | <code>ARM_MACHINE_BCM2711 = $00000C42;</code> | ||
+ | | BCM2711 uses the same Machine Type as BCM2708 | ||
|- | |- | ||
|} | |} | ||
Line 314: | Line 329: | ||
</div></div> | </div></div> | ||
− | ''' | + | '''Tag initialize RD''' |
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagInitRdCount:LongWord;</code> | ||
+ | | style="width: 40%;"|Number of ARM INITRD Tags found during parse (Deprecated) | ||
+ | |- | ||
+ | |} | ||
− | + | '''Tag initialize RD2''' | |
− | + | ||
− | + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | |
− | + | ||
− | {| class="wikitable" style="font-size: 14px; | + | |
|- | |- | ||
− | | | + | | <code>TagInitRd2Count:LongWord;</code> |
+ | | style="width: 40%;"|Number of ARM INITRD2 Tags found during parse | ||
|- | |- | ||
− | | | + | |} |
− | | | + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
|- | |- | ||
− | | <code> | + | | <code>TagInitRd2Start:LongWord;</code> |
− | | | + | | style="width: 40%;"| |
|- | |- | ||
|} | |} | ||
− | < | + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
+ | |- | ||
+ | | <code>TagInitRd2Size:LongWord;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
'''ARM tag serial''' | '''ARM tag serial''' | ||
Line 438: | Line 463: | ||
|colspan="2"|Note: Commandline for the kernel (ATAG_CMDLINE) | |colspan="2"|Note: Commandline for the kernel (ATAG_CMDLINE) | ||
|- | |- | ||
− | | <code>Cmdline:array[0..0] of | + | | <code>Cmdline:array[0..0] of AnsiChar;</code> |
| This is the minimum size | | This is the minimum size | ||
|- | |- | ||
Line 487: | Line 512: | ||
| <code>8:(Command:TARMTagCommand)</code> | | <code>8:(Command:TARMTagCommand)</code> | ||
| | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Device tree blob header''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PDTBHeader = ^TDTBHeader;</code> | ||
+ | |||
+ | <code>TDTBHeader = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>Magic:LongWord;</code> | ||
+ | | The value 0xd00dfeed (big-endian) | ||
+ | |- | ||
+ | | <code>TotalSize:LongWord;</code> | ||
+ | | The total size in bytes of the devicetree data structure (big-endian) | ||
+ | |- | ||
+ | | <code>StructureOffset:LongWord;</code> | ||
+ | | The offset in bytes of the structure block from the beginning of the header (big-endian) | ||
+ | |- | ||
+ | | <code>StringsOffset:LongWord;</code> | ||
+ | | The offset in bytes of the strings block from the beginning of the header (big-endian) | ||
+ | |- | ||
+ | | <code>ReservationOffset:LongWord;</code> | ||
+ | | The offset in bytes of the memory reservation block from the beginning of the header (big-endian) | ||
+ | |- | ||
+ | | <code>Version:LongWord;</code> | ||
+ | | The version of the devicetree data structure (big-endian) | ||
+ | |- | ||
+ | | <code>CompatibleVersion:LongWord;</code> | ||
+ | | The lowest version of the devicetree data structure with which the version used is backwards compatible (big-endian) | ||
+ | |- | ||
+ | | <code>BootCPUID:LongWord;</code> | ||
+ | | The physical ID of the system’s boot CPU (big-endian) | ||
+ | |- | ||
+ | | <code>StringsSize:LongWord;</code> | ||
+ | | The length in bytes of the strings block section of the devicetree blob (big-endian) | ||
+ | |- | ||
+ | | <code>StructureSize:LongWord;</code> | ||
+ | | The length in bytes of the structure block section of the devicetree blob (big-endian) | ||
|- | |- | ||
|} | |} | ||
Line 552: | Line 619: | ||
|- | |- | ||
| <code>ARMBootMode:LongWord = 0;</code> | | <code>ARMBootMode:LongWord = 0;</code> | ||
− | | style="width: 40%;"|The ARM Mode that the processor was in at boot time (Set by Startup) | + | | style="width: 40%;"|The ARM Mode that the processor was in at boot time (Set by Startup) |
|- | |- | ||
|} | |} | ||
Line 558: | Line 625: | ||
|- | |- | ||
| <code>ARMBootVectors:LongWord = 0;</code> | | <code>ARMBootVectors:LongWord = 0;</code> | ||
− | | style="width: 40%;"|The Vector Base Address that was current at boot time (Set by Startup) | + | | style="width: 40%;"|The Vector Base Address that was current at boot time (Set by Startup) |
|- | |- | ||
|} | |} | ||
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
|- | |- | ||
− | | <code>ARMTagsAddress: | + | | <code>ARMTagsAddress:PtrUInt = ARMTAGS_INITIAL;</code> |
− | | style="width: 40%;"|Pointer to the ARM TAGS provided by the bootloader at startup (Set by Startup) | + | | style="width: 40%;"|Pointer to the ARM TAGS provided by the bootloader at startup (Set by Startup) |
|- | |- | ||
|} | |} | ||
Line 570: | Line 637: | ||
|- | |- | ||
| <code>ARMMachineType:LongWord = 0;</code> | | <code>ARMMachineType:LongWord = 0;</code> | ||
− | | style="width: 40%;"|ARM Machine Type provided by the bootloader at startup (Set by Startup) | + | | style="width: 40%;"|ARM Machine Type provided by the bootloader at startup (Set by Startup) |
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMSecureBoot:LongWord = 1;</code> | ||
+ | | style="width: 40%;"|If 1 then startup will attempt to switch back to secure world during boot process (If supported by the ARM boot stub) | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMEmulatorMode:LongWord = 0;</code> | ||
+ | | style="width: 40%;"|If 1 then startup detected that the machine is running in an emulator (If applicable) | ||
+ | Note: These variables must be initialized to remain in .data or else they are rewritten to zero with .bss | ||
|- | |- | ||
|} | |} | ||
− | '''ARM tags | + | '''ARM tags''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 592: | Line 672: | ||
|} | |} | ||
− | '''Tag core | + | '''Tag core''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 619: | Line 699: | ||
|} | |} | ||
− | '''Tag memory | + | '''Tag memory''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 635: | Line 715: | ||
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
|- | |- | ||
− | | <code>TagMemoryStart: | + | | <code>TagMemoryStart:PtrUInt;</code> |
| style="width: 40%;"|Start of the last block reported by ARM Tags | | style="width: 40%;"|Start of the last block reported by ARM Tags | ||
|- | |- | ||
Line 647: | Line 727: | ||
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
|- | |- | ||
− | | <code>TagMemoryAddress: | + | | <code>TagMemoryAddress:PtrUInt;</code> |
| style="width: 40%;"|Adjusted Address of the last block reported by ARM Tags | | style="width: 40%;"|Adjusted Address of the last block reported by ARM Tags | ||
|- | |- | ||
|} | |} | ||
− | '''Tag video text | + | '''Tag video text''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 661: | Line 741: | ||
|} | |} | ||
− | '''Tag ramdisk | + | '''Tag ramdisk''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 670: | Line 750: | ||
|} | |} | ||
− | '''Tag | + | '''Tag initialize RD2''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 679: | Line 759: | ||
|} | |} | ||
− | '''Tag serial | + | '''Tag serial''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 700: | Line 780: | ||
|} | |} | ||
− | '''Tag revision | + | '''Tag revision''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 715: | Line 795: | ||
|} | |} | ||
− | '''Tag video | + | '''Tag video framebuffer''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 724: | Line 804: | ||
|} | |} | ||
− | '''Tag command | + | '''Tag command''' |
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
Line 746: | Line 826: | ||
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
|- | |- | ||
− | | <code>TagCommandAddress: | + | | <code>TagCommandAddress:PAnsiChar;</code> |
| style="width: 40%;"|Pointer to the start of the command line | | style="width: 40%;"|Pointer to the start of the command line | ||
|- | |- | ||
Line 800: | Line 880: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 815: | Line 895: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! '''Note''' | + | ! Note |
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <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 ExtractCommandLine(Value:PAnsiChar):Boolean;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <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 ExtractMemoryBlock(Address,Size:LongWord):Boolean;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <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 ExtractInitialRamdisk(Address,Size:LongWord):Boolean;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
| None documented | | None documented | ||
|- | |- | ||
Line 827: | Line 943: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 839: | Line 955: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 851: | Line 967: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 863: | Line 979: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 875: | Line 991: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Return |
− | | True is enabled, False if disabled (Returned in R0) | + | | True is enabled, False if disabled (Returned in R0). |
|- | |- | ||
|} | |} | ||
Line 887: | Line 1,003: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 899: | Line 1,015: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 911: | Line 1,027: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Return |
| IRQ state when called (Returned in R0) | | IRQ state when called (Returned in R0) | ||
|- | |- | ||
Line 923: | Line 1,039: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! IRQMask |
| IRQ state to restore (Passed in R0) | | IRQ state to restore (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! Return |
| IRQ state when called (Returned in R0) | | IRQ state when called (Returned in R0) | ||
|- | |- | ||
Line 938: | Line 1,054: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Return |
− | | True is enabled, False if disabled (Returned in R0) | + | | True is enabled, False if disabled (Returned in R0). |
|- | |- | ||
|} | |} | ||
Line 950: | Line 1,066: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 962: | Line 1,078: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 974: | Line 1,090: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Return |
| FIQ state when called (Returned in R0) | | FIQ state when called (Returned in R0) | ||
|- | |- | ||
Line 986: | Line 1,102: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! FIQMask |
| FIQ state to restore (Passed in R0) | | FIQ state to restore (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! Return |
| FIQ state when called (Returned in R0) | | FIQ state when called (Returned in R0) | ||
|- | |- | ||
Line 1,001: | Line 1,117: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,013: | Line 1,129: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,025: | Line 1,141: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Return |
| IRQ/FIQ state when called (Returned in R0) | | IRQ/FIQ state when called (Returned in R0) | ||
|- | |- | ||
Line 1,037: | Line 1,153: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! IRQFIQMask |
| IRQ/FIQ state to restore (Passed in R0) | | IRQ/FIQ state to restore (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! Return |
| IRQ/FIQ state when called (Returned in R0) | | IRQ/FIQ state when called (Returned in R0) | ||
|- | |- | ||
Line 1,052: | Line 1,168: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Return |
− | | True is enabled, False if disabled (Returned in R0) | + | | True is enabled, False if disabled (Returned in R0). |
|- | |- | ||
|} | |} | ||
Line 1,064: | Line 1,180: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,076: | Line 1,192: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,088: | Line 1,204: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Return |
| Abort state when called (Returned in R0) | | Abort state when called (Returned in R0) | ||
|- | |- | ||
Line 1,100: | Line 1,216: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! AbortMask |
| Abort state to restore (Passed in R0) | | Abort state to restore (Passed in R0) | ||
|- | |- | ||
− | ! | + | ! Return |
| Abort state when called (Returned in R0) | | Abort state when called (Returned in R0) | ||
|- | |- | ||
Line 1,118: | Line 1,234: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,130: | Line 1,246: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,142: | Line 1,258: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,154: | Line 1,270: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,166: | Line 1,282: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,178: | Line 1,294: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- |
Latest revision as of 06:17, 6 September 2024
Return to Unit Reference
Contents
[hide]Description
Ultibo Platform Interface unit for ARM
Constants
ARM_MODE_*
ARM_I_*
ARM_*_BIT
ARM_A_*
ATAG_*
DTB_*
ARM_MACHINE_*
Type definitions
ARM boot tag header
ARM tag core
ARM tag memory
ARM tag video text
ARM tag ramdisk
Tag initialize RD
TagInitRdCount:LongWord;
|
Number of ARM INITRD Tags found during parse (Deprecated) |
Tag initialize RD2
TagInitRd2Count:LongWord;
|
Number of ARM INITRD2 Tags found during parse |
TagInitRd2Start:LongWord;
|
TagInitRd2Size:LongWord;
|
ARM tag serial
ARM tag revision
ARM tag video framebuffer
ARM tag command
ARM boot tag
Device tree blob header
ARM wait
TARMWait = procedure;
|
ARM long wait
TARMLongWait = procedure;
|
ARM short wait
TARMShortWait = procedure;
|
ARM slow blink
TARMSlowBlink = procedure;
|
ARM fast blink
TARMFastBlink = procedure;
|
Public variables
ARM specific variables
ARMInitialized:Boolean;
|
ARMBootMode:LongWord = 0;
|
The ARM Mode that the processor was in at boot time (Set by Startup) |
ARMBootVectors:LongWord = 0;
|
The Vector Base Address that was current at boot time (Set by Startup) |
ARMTagsAddress:PtrUInt = ARMTAGS_INITIAL;
|
Pointer to the ARM TAGS provided by the bootloader at startup (Set by Startup) |
ARMMachineType:LongWord = 0;
|
ARM Machine Type provided by the bootloader at startup (Set by Startup) |
ARMSecureBoot:LongWord = 1;
|
If 1 then startup will attempt to switch back to secure world during boot process (If supported by the ARM boot stub) |
ARMEmulatorMode:LongWord = 0;
|
If 1 then startup detected that the machine is running in an emulator (If applicable)
Note: These variables must be initialized to remain in .data or else they are rewritten to zero with .bss |
ARM tags
ARMTagsCount:LongWord;
|
Number of ARM Tags found during parse |
Tag none variables
TagNoneCount:LongWord;
|
Number of ARM NONE Tags found during parse |
Tag core
TagCoreCount:LongWord;
|
Number of ARM CORE Tags found during parse |
TagCoreFlags:LongWord;
|
TagCorePageSize:LongWord;
|
TagCoreRootDevice:LongWord;
|
Tag memory
TagMemoryCount:LongWord;
|
Number of ARM MEM Tags found during parse |
TagMemorySize:LongWord;
|
Size of the last block reported by ARM Tags |
TagMemoryStart:PtrUInt;
|
Start of the last block reported by ARM Tags |
TagMemoryLength:LongWord;
|
Adjusted Size of the last block reported by ARM Tags |
TagMemoryAddress:PtrUInt;
|
Adjusted Address of the last block reported by ARM Tags |
Tag video text
TagVideoTextCount:LongWord;
|
Number of ARM VIDEOTEXT Tags found during parse |
Tag ramdisk
TagRamdiskCount:LongWord;
|
Number of ARM RAMDISK Tags found during parse |
Tag initialize RD2
TagInitRd2Count:LongWord;
|
Number of ARM INITRD2 Tags found during parse |
Tag serial
TagSerialCount:LongWord;
|
Number of ARM SERIAL Tags found during parse |
TagSerialNoLow:LongWord;
|
TagSerialNoHigh:LongWord;
|
Tag revision
TagRevisionCount:LongWord;
|
Number of ARM REVISION Tags found during parse |
TagRevisionNo:LongWord;
|
Tag video framebuffer
TagVideoFBCount:LongWord;
|
Number of ARM VIDEOLFB Tags found during parse |
Tag command
TagCmdCount:LongWord;
|
Number of ARM CMDLINE Tags found during parse |
TagCommandSize:LongWord;
|
Length of the command line in characters (Including null terminator) |
TagCommandCount:LongInt;
|
Count of parameters (space delimited) in the command line |
TagCommandAddress:PAnsiChar;
|
Pointer to the start of the command line |
Wait handlers
ARMWaitHandler:TARMWait;
|
ARMLongWaitHandler:TARMLongWait;
|
ARMShortWaitHandler:TARMShortWait;
|
Blink handlers
ARMSlowBlinkHandler:TARMSlowBlink;
|
ARMFastBlinkHandler:TARMFastBlink;
|
Function declarations
Initialization functions
ARM platform functions
procedure ARMParseBootTags;
function ExtractInitialRamdisk(Address,Size:LongWord):Boolean;
procedure ARMParseCommandLine;
procedure ARMParseEnvironment;
function ARMGetSP:PtrUInt; assembler; nostackframe;
function ARMGetPC:PtrUInt; assembler; nostackframe;
function ARMGetIRQ:Boolean; assembler; nostackframe;
procedure ARMEnableIRQ; assembler; nostackframe;
procedure ARMDisableIRQ; assembler; nostackframe;
function ARMSaveIRQ:TIRQMask; assembler; nostackframe;
function ARMRestoreIRQ(IRQMask:TIRQMask):TIRQMask; assembler; nostackframe;
function ARMGetFIQ:Boolean; assembler; nostackframe;
procedure ARMEnableFIQ; assembler; nostackframe;
procedure ARMDisableFIQ; assembler; nostackframe;
function ARMSaveFIQ:TFIQMask; assembler; nostackframe;
function ARMRestoreFIQ(FIQMask:TFIQMask):TFIQMask; assembler; nostackframe;
procedure ARMEnableIRQFIQ; assembler; nostackframe;
procedure ARMDisableIRQFIQ; assembler; nostackframe;
function ARMSaveIRQFIQ:TIRQFIQMask; assembler; nostackframe;
function ARMRestoreIRQFIQ(IRQFIQMask:TIRQFIQMask):TIRQFIQMask; assembler; nostackframe;
procedure ARMEnableAbort; assembler; nostackframe;
procedure ARMDisableAbort; assembler; nostackframe;
function ARMSaveAbort:TAbortMask; assembler; nostackframe;
function ARMRestoreAbort(AbortMask:TAbortMask):TAbortMask; assembler; nostackframe;
ARM helper functions
Return to Unit Reference