Difference between revisions of "Unit PlatformAARCH64"
From Ultibo.org
Line 85: | Line 85: | ||
---- | ---- | ||
− | '' | + | |
+ | '''AARCH64 specific variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>AARCH64Initialized:Boolean;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>AARCH64BootMode:LongWord = 0;</code> | ||
+ | | style="width: 65%;"|The ARM Mode that the processor was in at boot time (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>AARCH64BootVectors:LongWord = 0;</code> | ||
+ | | style="width: 65%;"|The Vector Base Address that was current at boot time (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMTagsAddress:LongWord = ARMTAGS_INITIAL;</code> | ||
+ | | style="width: 65%;"|Pointer to the ARM TAGS provided by the bootloader at startup (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMMachineType:LongWord = 0;</code> | ||
+ | | style="width: 65%;"|ARM Machine Type provided by the bootloader at startup (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''ARM tags variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>ARMTagsCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag none variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagNoneCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM NONE Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag core variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagCoreCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM CORE Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagCoreFlags:LongWord;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagCorePageSize:LongWord;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagCoreRootDevice:LongWord;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag memory variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagMemoryCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM MEM Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagMemorySize:LongWord;</code> | ||
+ | | style="width: 65%;"|Size of the last block reported by ARM Tags | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagMemoryStart:LongWord;</code> | ||
+ | | style="width: 65%;"|Start of the last block reported by ARM Tags | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagMemoryLength:LongWord;</code> | ||
+ | | style="width: 65%;"|Adjusted Size of the last block reported by ARM Tags | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagMemoryAddress:LongWord;</code> | ||
+ | | style="width: 65%;"|Adjusted Address of the last block reported by ARM Tags | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag video text variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagVideoTextCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM VIDEOTEXT Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag ramdisk variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagRamdiskCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM RAMDISK Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag Init RD2 variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagInitRd2Count:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM INITRD2 Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag serial variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagSerialCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM SERIAL Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagSerialNoLow:LongWord;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagSerialNoHigh:LongWord;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag revision variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagRevisionCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM REVISION Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagRevisionNo:LongWord;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag video FB variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagVideoFBCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM VIDEOLFB Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Tag command variables''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagCmdCount:LongWord;</code> | ||
+ | | style="width: 65%;"|Number of ARM CMDLINE Tags found during parse | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagCommandSize:LongWord;</code> | ||
+ | | style="width: 65%;"|Length of the command line in characters (Including null terminator) | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagCommandCount:LongInt;</code> | ||
+ | | style="width: 65%;"|Count of parameters (space delimited) in the command line | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TagCommandAddress:PChar;</code> | ||
+ | | style="width: 65%;"|Pointer to the start of the command line | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Wait handlers''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>AARCH64WaitHandler:TAARCH64Wait;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>AARCH64LongWaitHandler:TAARCH64LongWait;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>AARCH64ShortWaitHandler:TAARCH64ShortWait;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Blink handlers''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>AARCH64SlowBlinkHandler:TAARCH64SlowBlink;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>AARCH64FastBlinkHandler:TAARCH64FastBlink;</code> | ||
+ | | style="width: 65%;"| | ||
+ | |- | ||
+ | |} | ||
+ | <br /> | ||
=== Function declarations === | === Function declarations === |
Revision as of 02:56, 5 January 2017
Return to Unit Reference
Description
Ultibo Platform interface unit for AARCH64 (ARM64)
To be documented
Constants
ARM boot tag constants
ATAG_*
ATAG_NONE = $00000000;
|
|
ATAG_CORE = $54410001;
|
|
ATAG_MEM = $54410002;
|
|
ATAG_VIDEOTEXT = $54410003;
|
|
ATAG_RAMDISK = $54410004;
|
|
ATAG_INITRD2 = $54410005;
|
|
ATAG_SERIAL = $54410006;
|
|
ATAG_REVISION = $54410007;
|
|
ATAG_VIDEOLFB = $54410008;
|
|
ATAG_CMDLINE = $54410009;
|
|
ARMTAGS_INITIAL = $FFFFFFFF;
|
ARM machine type constants
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 |
Type definitions
To be documented
Public variables
AARCH64 specific variables
AARCH64Initialized:Boolean;
|
AARCH64BootMode:LongWord = 0;
|
The ARM Mode that the processor was in at boot time (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss |
AARCH64BootVectors:LongWord = 0;
|
The Vector Base Address that was current at boot time (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss |
ARMTagsAddress:LongWord = ARMTAGS_INITIAL;
|
Pointer to the ARM TAGS provided by the bootloader at startup (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss |
ARMMachineType:LongWord = 0;
|
ARM Machine Type provided by the bootloader at startup (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss |
ARM tags variables
ARMTagsCount:LongWord;
|
Number of ARM Tags found during parse |
Tag none variables
TagNoneCount:LongWord;
|
Number of ARM NONE Tags found during parse |
Tag core variables
TagCoreCount:LongWord;
|
Number of ARM CORE Tags found during parse |
TagCoreFlags:LongWord;
|
TagCorePageSize:LongWord;
|
TagCoreRootDevice:LongWord;
|
Tag memory variables
TagMemoryCount:LongWord;
|
Number of ARM MEM Tags found during parse |
TagMemorySize:LongWord;
|
Size of the last block reported by ARM Tags |
TagMemoryStart:LongWord;
|
Start of the last block reported by ARM Tags |
TagMemoryLength:LongWord;
|
Adjusted Size of the last block reported by ARM Tags |
TagMemoryAddress:LongWord;
|
Adjusted Address of the last block reported by ARM Tags |
Tag video text variables
TagVideoTextCount:LongWord;
|
Number of ARM VIDEOTEXT Tags found during parse |
Tag ramdisk variables
TagRamdiskCount:LongWord;
|
Number of ARM RAMDISK Tags found during parse |
Tag Init RD2 variables
TagInitRd2Count:LongWord;
|
Number of ARM INITRD2 Tags found during parse |
Tag serial variables
TagSerialCount:LongWord;
|
Number of ARM SERIAL Tags found during parse |
TagSerialNoLow:LongWord;
|
TagSerialNoHigh:LongWord;
|
Tag revision variables
TagRevisionCount:LongWord;
|
Number of ARM REVISION Tags found during parse |
TagRevisionNo:LongWord;
|
Tag video FB variables
TagVideoFBCount:LongWord;
|
Number of ARM VIDEOLFB Tags found during parse |
Tag command variables
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:PChar;
|
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;
Description: To be documented
Note | None documented |
---|
AARCH64 platform functions
procedure AARCH64ParseBootTags;
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
Note | None documented |
---|
procedure AARCH64ParseCommandLine;
Description: Setup argc, argv and cmdline and process known command line options
Note | None documented |
---|
procedure AARCH64ParseEnvironment;
Description: Setup envp and process known environment options
Note | None documented |
---|
function AARCH64GetSP:PtrUInt; assembler; nostackframe;
Description: Get the current stack pointer (SP)
Note | None documented |
---|
function AARCH64GetPC:PtrUInt; assembler; nostackframe;
Description: Get the current program counter (PC)
Note | None documented |
---|
function AARCH64GetIRQ:Boolean; assembler; nostackframe;
Description: Get Interrupts (IRQ) state
Return | True is enabled, False if disabled (Returned in R0) |
---|
procedure AARCH64EnableIRQ; assembler; nostackframe;
Description: Enable Interrupts (IRQ) unconditionally
Note | None documented |
---|
procedure AARCH64DisableIRQ; assembler; nostackframe;
Description: Disable Interrupts (IRQ) unconditionally
Note | None documented |
---|
function AARCH64SaveIRQ:TIRQMask; assembler; nostackframe;
Description: Disable Interrupts (IRQ) and return the previous state
Return | IRQ state when called (Returned in R0) |
---|
function AARCH64RestoreIRQ(IRQMask:TIRQMask):TIRQMask; assembler; nostackframe;
Description: Restore Interrupts (IRQ) to a previous state
IRQMask | IRQ state to restore (Passed in R0) |
---|---|
Return | IRQ state when called (Returned in R0) |
function AARCH64GetFIQ:Boolean; assembler; nostackframe;
Description: Get Fast Interrupts (FIQ) state
Return | True is enabled, False if disabled (Returned in R0) |
---|
procedure AARCH64EnableFIQ; assembler; nostackframe;
Description: Enable Fast Interrupts (FIQ) unconditionally
Note | None documented |
---|
procedure AARCH64DisableFIQ; assembler; nostackframe;
Description: Disable Fast Interrupts (FIQ) unconditionally
Note | None documented |
---|
function AARCH64SaveFIQ:TFIQMask; assembler; nostackframe;
Description: Disable Fast Interrupts (FIQ) and return the previous state
Return | FIQ state when called (Returned in R0) |
---|
function AARCH64RestoreFIQ(FIQMask:TFIQMask):TFIQMask; assembler; nostackframe;
Description: Restore Fast Interrupts (FIQ) to a previous state
FIQMask | FIQ state to restore (Passed in R0) |
---|---|
Return | FIQ state when called (Returned in R0) |
procedure AARCH64EnableIRQFIQ; assembler; nostackframe;
Description: Enable Interrupts and Fast Interrupts (IRQ/FIQ) unconditionally
Note | None documented |
---|
procedure AARCH64DisableIRQFIQ; assembler; nostackframe;
Description: Disable Interrupts and Fast Interrupts (IRQ/FIQ) unconditionally
Note | None documented |
---|
function AARCH64SaveIRQFIQ:TIRQFIQMask; assembler; nostackframe;
Description: Disable Interrupts and Fast Interrupts (IRQ/FIQ) and return the previous state
Return | IRQ/FIQ state when called (Returned in R0) |
---|
function AARCH64RestoreIRQFIQ(IRQFIQMask:TIRQFIQMask):TIRQFIQMask; assembler; nostackframe;
Description: Restore Interrupts and Fast Interrupts (IRQ/FIQ) to a previous state
IRQFIQMask | IRQ/FIQ state to restore (Passed in R0) |
---|---|
Return | IRQ/FIQ state when called (Returned in R0) |
function AARCH64GetAbort:Boolean; assembler; nostackframe;
Description: Get Abort state
Return | True is enabled, False if disabled (Returned in R0) |
---|
procedure AARCH64EnableAbort; assembler; nostackframe;
Description: Enable Aborts unconditionally
Note | None documented |
---|
procedure AARCH64DisableAbort; assembler; nostackframe;
Description: Disable Aborts unconditionally
Note | None documented |
---|
function AARCH64SaveAbort:TAbortMask; assembler; nostackframe;
Description: Disable Aborts and return the previous state
Return | Abort state when called (Returned in R0) |
---|
function AARCH64RestoreAbort(AbortMask:TAbortMask):TAbortMask; assembler; nostackframe;
Description: Restore Aborts to a previous state
AbortMask | Abort state to restore (Passed in R0) |
---|---|
Return | bort state when called (Returned in R0) |
AARCH64 helper functions
procedure AARCH64Wait; inline;
Description: To be documented
Note | None documented |
---|
procedure AARCH64LongWait; inline;
Description: To be documented
Note | None documented |
---|
procedure AARCH64ShortWait; inline;
Description: To be documented
Note | None documented |
---|
procedure AARCH64SlowBlink; inline;
Description: To be documented
Note | None documented |
---|
procedure AARCH64FastBlink; inline;
Description: To be documented
Note | None documented |
---|
function AARCH64ModeToString(AARCH64Mode:LongWord):String;
Description: To be documented
Note | None documented |
---|
Return to Unit Reference