Unit PlatformAARCH64
Return to Unit Reference
Description
Ultibo Platform Interface unit for AARCH64 (ARM64)
Constants
 ATAG_*  ATAG_NONE = $00000000;
 | 
|
 ATAG_CORE = $54410001;
 | 
|
 ATAG_MEM = $54410002;
 | 
|
 ATAG_VIDEOTEXT = $54410003;
 | 
|
 ATAG_RAMDISK = $54410004;
 | 
|
 ATAG_INITRD = $54410005;
 | 
Deprecated | 
 ATAG_INITRD2 = $54420005;
 | 
|
 ATAG_SERIAL = $54410006;
 | 
|
 ATAG_REVISION = $54410007;
 | 
|
 ATAG_VIDEOLFB = $54410008;
 | 
|
 ATAG_CMDLINE = $54410009;
 | 
|
 ARMTAGS_INITIAL = $FFFFFFFF;
 | 
|
 DTB_*  DTB_SIGNATURE = $d00dfeed;
 | 
See: https://github.com/devicetree-org/devicetree-specification/releases/download/v0.3/devicetree-specification-v0.3.pdf | 
 ARM_MACHINE_*  ARM_MACHINE_VERSATILE_PB = $00000183;
 | 
|
 ARM_MACHINE_BCM2708 = $00000C42;
 | 
|
 ARM_MACHINE_BCM2709 = $00000C42;
 | 
BCM2709 uses the same Machine Type as BCM2708 | 
 ARM_MACHINE_BCM2710 = $00000C42;
 | 
BCM2710 uses the same Machine Type as BCM2708 | 
 ARM_MACHINE_BCM2711 = $00000C42;
 | 
BCM2711 uses the same Machine Type as BCM2708 | 
Type definitions
ARM boot tag header
PARMTagHeader = ^TARMTagHeader;
TARMTagHeader = record
| Note: ARM Boot Tag Structure Definitions | |
 Size:LongWord;
 | 
Size of tag, in words (32bit), including the header | 
 Tag:LongWord;
 | 
One of the ATAG_* values from above | 
ARM tag core
PARMTagCore = ^TARMTagCore;
TARMTagCore = record
| Note: Core parameters (ATAG_CORE) | |
 Flags:LongWord;
 | 
Bit 0 = read-only | 
 PageSize:LongWord;
 | 
Systems page size (usually 4k) | 
 RootDev:LongWord;
 | 
Root device number | 
ARM tag memory
PARMTagMemory = ^TARMTagMemory;
TARMTagMemory = record
| Note: Description of memory region (ATAG_MEM) | |
 Size:LongWord;
 | 
|
 Start:LongWord;
 | 
|
ARM tag video text
PARMTagVideoText = ^TARMTagVideoText;
TARMTagVideoText = record
| Note: Description of VGA text type displays (ATAG_VIDEOTEXT) | |
 X:Byte;
 | 
Width of display | 
 Y:Byte;
 | 
Height of display | 
 Video_page:Word;
 | 
|
 Video_mode:Byte;
 | 
|
 Video_cols:Byte;
 | 
|
 Video_ega_bx:Word;
 | 
|
 Video_lines:Byte;
 | 
|
 Video_isvga:Byte;
 | 
|
 Video_points:Word;
 | 
|
ARM tag ramdisk
PARMTagRamdisk = ^TARMTagRamdisk;
TARMTagRamdisk = record
| Note: Description of how the ramdisk will be used by the kernel (ATAG_RAMDISK) | |
 Flags:LongWord;
 | 
Bit 0 = load, Bit 1 = prompt | 
 Size:LongWord;
 | 
Decompressed ramdisk size in _kilo_ bytes | 
 Start:LongWord;
 | 
Starting block of floppy-based RAM disk image | 
ARM tag initialize ramdisk
PARMTagInitRd2 = ^TARMTagInitRd2;
TARMTagInitRd2 = record
| Note: Description of the physical location of the compressed ramdisk image (ATAG_INITRD2) | |
 Start:LongWord;
 | 
Physical start address | 
 Size:LongWord;
 | 
Size of compressed ramdisk image in bytes | 
ARM tag serial
PARMTagSerial = ^TARMTagSerial;
TARMTagSerial = record
| Note: Board serial number (ATAG_SERIAL) | |
 Low:LongWord;
 | 
|
 High:LongWord;
 | 
|
ARM tag revision
PARMTagRevision = ^TARMTagRevision;
TARMTagRevision = record
| Note: Board revision (ATAG_REVISION) | |
 Revision:LongWord;
 | 
|
ARM tag video framebuffer
PARMTagVideoFB = ^TARMTagVideoFB;
TARMTagVideoFB = record
| Note: Description of the parameters for a linear framebuffer type display (ATAG_VIDEOLFB) | |
 Lfb_width:Word;
 | 
|
 Lfb_height:Word;
 | 
|
 Lfb_depth:Word;
 | 
|
 Lfb_linelength:Word;
 | 
|
 Lfb_base:LongWord;
 | 
|
 Lfb_size:LongWord;
 | 
|
 Red_size:Byte;
 | 
|
 Red_pos:Byte;
 | 
|
 Green_size:Byte;
 | 
|
 Green_pos:Byte;
 | 
|
 Blue_size:Byte;
 | 
|
 Blue_pos:Byte;
 | 
|
 Rsvd_size:Byte;
 | 
|
 Rsvd_pos:Byte;
 | 
|
ARM tag command
PARMTagCommand = ^TARMTagCommand;
TARMTagCommand = record
| Note: Commandline for the kernel (ATAG_CMDLINE) | |
 Cmdline:array[0..0] of AnsiChar;
 | 
This is the minimum size | 
ARM boot tag
PARMTag = ^TARMTag;
TARMTag = record
| Note: Format of ARM Boot Tag | |
 Header:TARMTagHeader;
 | 
|
 case Integer of
 | 
|
 0:(Core:TARMTagCore);
 | 
|
 1:(Memory:TARMTagMemory);
 | 
|
 2:(VideoText:TARMTagVideoText);
 | 
|
 3:(Ramdisk:TARMTagRamdisk);
 | 
|
 4:(InitRd2:TARMTagInitRd2);
 | 
|
 5:(Serial:TARMTagSerial);
 | 
|
 6:(Revision:TARMTagRevision);
 | 
|
 7:(VideoFB:TARMTagVideoFB);
 | 
|
 8:(Command:TARMTagCommand)
 | 
|
Device tree blob header
PDTBHeader = ^TDTBHeader;
TDTBHeader = packed record
 Magic:LongWord;
 | 
The value 0xd00dfeed (big-endian) | 
 TotalSize:LongWord;
 | 
The total size in bytes of the devicetree data structure (big-endian) | 
 StructureOffset:LongWord;
 | 
The offset in bytes of the structure block from the beginning of the header (big-endian) | 
 StringsOffset:LongWord;
 | 
The offset in bytes of the strings block from the beginning of the header (big-endian) | 
 ReservationOffset:LongWord;
 | 
The offset in bytes of the memory reservation block from the beginning of the header (big-endian) | 
 Version:LongWord;
 | 
The version of the devicetree data structure (big-endian) | 
 CompatibleVersion:LongWord;
 | 
The lowest version of the devicetree data structure with which the version used is backwards compatible (big-endian) | 
 BootCPUID:LongWord;
 | 
The physical ID of the system’s boot CPU (big-endian) | 
 StringsSize:LongWord;
 | 
The length in bytes of the strings block section of the devicetree blob (big-endian) | 
 StructureSize:LongWord;
 | 
The length in bytes of the structure block section of the devicetree blob (big-endian) | 
AARCH64 wait
 TAARCH64Wait = procedure;
 | 
AARCH64 long wait
 TAARCH64LongWait = procedure;
 | 
AARCH64 short wait
 TAARCH64ShortWait = procedure;
 | 
AARCH64 slow blink
 TAARCH64SlowBlink = procedure;
 | 
AARCH64 fast blink
 TAARCH64FastBlink = procedure;
 | 
Public variables
AARCH64 specific variables
 AARCH64Initialized:Boolean;
 | 
 AARCH64BootMode:LongWord = 0;
 | 
The ARM Mode that the processor was in at boot time (Set by Startup) | 
 AARCH64BootVectors:LongWord = 0;
 | 
The Vector Base Address that was current at boot time (Set by Startup) | 
 AARCH64TagsAddress:PtrUInt = ARMTAGS_INITIAL
 | 
Pointer to the ARM TAGS provided by the bootloader at startup (Set by Startup) | 
 AARCH64MachineType:LongWord = 0;
 | 
ARM Machine Type provided by the bootloader at startup (Set by Startup) | 
 AARCH64SecureBoot:LongWord = 1;
 | 
If 1 then startup will attempt to switch back to secure world during boot process (If supported by the AARCH64 boot stub) | 
 AARCH64EmulatorMode: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
 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 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;
 | 
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
 AARCH64WaitHandler:TAARCH64Wait;
 | 
 AARCH64LongWaitHandler:TAARCH64LongWait;
 | 
 AARCH64ShortWaitHandler:TAARCH64ShortWait;
 | 
Blink handlers
 AARCH64SlowBlinkHandler:TAARCH64SlowBlink;
 | 
 AARCH64FastBlinkHandler:TAARCH64FastBlink;
 | 
Function declarations
Initialization functions
procedure AARCH64Init;
| Note | None documented | 
|---|
AARCH64 platform functions
procedure AARCH64ParseBootTags;
| Note | None documented | 
|---|
function ExtractCommandLine(Value:PAnsiChar):Boolean;
| Note | None documented | 
|---|
function ExtractMemoryBlock(Address,Size:LongWord):Boolean;
| Note | None documented | 
|---|
function ExtractInitialRamdisk(Address,Size:LongWord):Boolean;
| Note | None documented | 
|---|
procedure AARCH64ParseCommandLine;
| Note | None documented | 
|---|
procedure AARCH64ParseEnvironment;
| Note | None documented | 
|---|
function AARCH64GetSP:PtrUInt; assembler; nostackframe;
| Note | None documented | 
|---|
function AARCH64GetPC:PtrUInt; assembler; nostackframe;
| Note | None documented | 
|---|
function AARCH64GetIRQ:Boolean; assembler; nostackframe;
| Return | True is enabled, False if disabled (Returned in R0). | 
|---|
procedure AARCH64EnableIRQ; assembler; nostackframe;
| Note | None documented | 
|---|
procedure AARCH64DisableIRQ; assembler; nostackframe;
| Note | None documented | 
|---|
function AARCH64SaveIRQ:TIRQMask; assembler; nostackframe;
| Return | IRQ state when called (Returned in R0) | 
|---|
function AARCH64RestoreIRQ(IRQMask:TIRQMask):TIRQMask; assembler; nostackframe;
| IRQMask | IRQ state to restore (Passed in R0) | 
|---|---|
| Return | IRQ state when called (Returned in R0) | 
function AARCH64GetFIQ:Boolean; assembler; nostackframe;
| Return | True is enabled, False if disabled (Returned in R0). | 
|---|
procedure AARCH64EnableFIQ; assembler; nostackframe;
| Note | None documented | 
|---|
procedure AARCH64DisableFIQ; assembler; nostackframe;
| Note | None documented | 
|---|
function AARCH64SaveFIQ:TFIQMask; assembler; nostackframe;
| Return | FIQ state when called (Returned in R0) | 
|---|
function AARCH64RestoreFIQ(FIQMask:TFIQMask):TFIQMask; assembler; nostackframe;
| FIQMask | FIQ state to restore (Passed in R0) | 
|---|---|
| Return | FIQ state when called (Returned in R0) | 
procedure AARCH64EnableIRQFIQ; assembler; nostackframe;
| Note | None documented | 
|---|
procedure AARCH64DisableIRQFIQ; assembler; nostackframe;
| Note | None documented | 
|---|
function AARCH64SaveIRQFIQ:TIRQFIQMask; assembler; nostackframe;
| Return | IRQ/FIQ state when called (Returned in R0) | 
|---|
function AARCH64RestoreIRQFIQ(IRQFIQMask:TIRQFIQMask):TIRQFIQMask; assembler; nostackframe;
| IRQFIQMask | IRQ/FIQ state to restore (Passed in R0) | 
|---|---|
| Return | IRQ/FIQ state when called (Returned in R0) | 
function AARCH64GetAbort:Boolean; assembler; nostackframe;
| Return | True is enabled, False if disabled (Returned in R0). | 
|---|
procedure AARCH64EnableAbort; assembler; nostackframe;
| Note | None documented | 
|---|
procedure AARCH64DisableAbort; assembler; nostackframe;
| Note | None documented | 
|---|
function AARCH64SaveAbort:TAbortMask; assembler; nostackframe;
| Return | Abort state when called (Returned in R0) | 
|---|
function AARCH64RestoreAbort(AbortMask:TAbortMask):TAbortMask; assembler; nostackframe;
| AbortMask | Abort state to restore (Passed in R0) | 
|---|---|
| Return | Abort state when called (Returned in R0) | 
AARCH64 helper functions
procedure AARCH64Wait; inline;
| Note | None documented | 
|---|
procedure AARCH64LongWait; inline;
| Note | None documented | 
|---|
procedure AARCH64ShortWait; inline;
| Note | None documented | 
|---|
procedure AARCH64SlowBlink; inline;
| Note | None documented | 
|---|
procedure AARCH64FastBlink; inline;
| Note | None documented | 
|---|
function AARCH64ModeToString(AARCH64Mode:LongWord):String;
| Note | None documented | 
|---|
Return to Unit Reference