Difference between revisions of "Unit PlatformARM"
(7 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
---- | ---- | ||
− | '''Ultibo Platform | + | '''Ultibo Platform Interface unit for ARM''' |
− | + | ||
− | + | ||
=== Constants === | === Constants === | ||
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 317: | 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 441: | 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 490: | 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 555: | 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 561: | 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) |
|- | |- | ||
|} | |} | ||
Line 567: | Line 631: | ||
|- | |- | ||
| <code>ARMTagsAddress:PtrUInt = ARMTAGS_INITIAL;</code> | | <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 573: | 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) |
|- | |- | ||
|} | |} | ||
Line 580: | Line 644: | ||
| <code>ARMSecureBoot:LongWord = 1;</code> | | <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) | | 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 | ||
|- | |- | ||
|} | |} | ||
Line 755: | 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 821: | Line 892: | ||
<pre style="border: 0; padding-bottom:0px;">procedure ARMParseBootTags;</pre> | <pre style="border: 0; padding-bottom:0px;">procedure ARMParseBootTags;</pre> | ||
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Extract some information from the ARM boot tag list and use it to load the memory manager, some other information is stored in variables for future use</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Extract some information from the ARM boot tag list and use it to load the memory manager, some other information is stored in variables for future use</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 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;"> | <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;" |
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