Difference between revisions of "Unit PlatformARM"

From Ultibo.org
Jump to: navigation, search
Line 191: Line 191:
 
----
 
----
  
''To be documented''
+
 
 +
'''ARM specific variables'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>ARMInitialized:Boolean;</code>
 +
| style="width: 65%;"|
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>ARMBootMode: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>ARMBootVectors: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>ARMWaitHandler:TARMWait;</code>
 +
| style="width: 65%;"|
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>ARMLongWaitHandler:TARMLongWait;</code>
 +
| style="width: 65%;"|
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>ARMShortWaitHandler:TARMShortWait;</code>
 +
| style="width: 65%;"|
 +
|-
 +
|}
 +
 +
'''Blink handlers'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>ARMSlowBlinkHandler:TARMSlowBlink;</code>
 +
| style="width: 65%;"|
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>ARMFastBlinkHandler:TARMFastBlink;</code>
 +
| style="width: 65%;"|
 +
|-
 +
|}
 +
<br />
  
 
=== Function declarations ===
 
=== Function declarations ===

Revision as of 02:53, 5 January 2017

Return to Unit Reference


Description


Ultibo Platform interface unit for ARM

To be documented

Constants



[Expand]
ARM mode constants ARM_MODE_*


[Expand]
ARM interrupt disable constants ARM_I_*


[Expand]
ARM thumb and jazelle constants ARM_*_BIT


[Expand]
ARM abort constants ARM_A_*


[Expand]
ARM boot tag constants ATAG_*


[Expand]
ARM machine type constants ARM_MACHINE_*


Type definitions


To be documented

Public variables



ARM specific variables

ARMInitialized:Boolean;
ARMBootMode: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
ARMBootVectors: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

ARMWaitHandler:TARMWait;
ARMLongWaitHandler:TARMLongWait;
ARMShortWaitHandler:TARMShortWait;

Blink handlers

ARMSlowBlinkHandler:TARMSlowBlink;
ARMFastBlinkHandler:TARMFastBlink;


Function declarations



Initialization functions

[Expand]
procedure ARMInit;
Description: To be documented


ARM platform functions

[Expand]
procedure ARMParseBootTags;
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


[Expand]
procedure ARMParseCommandLine;
Description: Setup argc, argv and cmdline and process known command line options


[Expand]
procedure ARMParseEnvironment;
Description: Setup envp and process known environment options


[Expand]
function ARMGetSP:PtrUInt; assembler; nostackframe;
Description: Get the current stack pointer (SP)


[Expand]
function ARMGetPC:PtrUInt; assembler; nostackframe;
Description: Get the current program counter (PC)


[Expand]
function ARMGetIRQ:Boolean; assembler; nostackframe;
Description: Get Interrupts (IRQ) state


[Expand]
procedure ARMEnableIRQ; assembler; nostackframe;
Description: Enable Interrupts (IRQ) unconditionally


[Expand]
procedure ARMDisableIRQ; assembler; nostackframe;
Description: Disable Interrupts (IRQ) unconditionally


[Expand]
function ARMSaveIRQ:TIRQMask; assembler; nostackframe;
Description: Disable Interrupts (IRQ) and return the previous state


[Expand]
function ARMRestoreIRQ(IRQMask:TIRQMask):TIRQMask; assembler; nostackframe;
Description: Restore Interrupts (IRQ) to a previous state


[Expand]
function ARMGetFIQ:Boolean; assembler; nostackframe;
Description: Get Fast Interrupts (FIQ) state


[Expand]
procedure ARMEnableFIQ; assembler; nostackframe;
Description: Enable Fast Interrupts (FIQ) unconditionally


[Expand]
procedure ARMDisableFIQ; assembler; nostackframe;
Description: Disable Fast Interrupts (FIQ) unconditionally


[Expand]
function ARMSaveFIQ:TFIQMask; assembler; nostackframe;
Description: Disable Fast Interrupts (FIQ) and return the previous state


[Expand]
function ARMRestoreFIQ(FIQMask:TFIQMask):TFIQMask; assembler; nostackframe;
Description: Restore Fast Interrupts (FIQ) to a previous state


[Expand]
procedure ARMEnableIRQFIQ; assembler; nostackframe;
Description: Enable Interrupts and Fast Interrupts (IRQ/FIQ) unconditionally


[Expand]
procedure ARMDisableIRQFIQ; assembler; nostackframe;
Description: Disable Interrupts and Fast Interrupts (IRQ/FIQ) unconditionally


[Expand]
function ARMSaveIRQFIQ:TIRQFIQMask; assembler; nostackframe;
Description: Disable Interrupts and Fast Interrupts (IRQ/FIQ) and return the previous state


[Expand]
function ARMRestoreIRQFIQ(IRQFIQMask:TIRQFIQMask):TIRQFIQMask; assembler; nostackframe;
Description: Restore Interrupts and Fast Interrupts (IRQ/FIQ) to a previous state


[Expand]
function ARMGetAbort:Boolean; assembler; nostackframe;
Description: Get Abort state


[Expand]
procedure ARMEnableAbort; assembler; nostackframe;
Description: Enable Aborts unconditionally


[Expand]
procedure ARMDisableAbort; assembler; nostackframe;
Description: Disable Aborts unconditionally


[Expand]
function ARMSaveAbort:TAbortMask; assembler; nostackframe;
Description: Disable Aborts and return the previous state


[Expand]
function ARMRestoreAbort(AbortMask:TAbortMask):TAbortMask; assembler; nostackframe;
Description: Restore Aborts to a previous state


ARM helper functions

[Expand]
procedure ARMWait; inline;
Description: To be documented


[Expand]
procedure ARMLongWait; inline;
Description: To be documented


[Expand]
procedure ARMShortWait; inline;
Description: To be documented


[Expand]
procedure ARMSlowBlink; inline;
Description: To be documented


[Expand]
procedure ARMFastBlink; inline;
Description: To be documented


[Expand]
function ARMModeToString(ARMMode:LongWord):String;
Description: To be documented


Return to Unit Reference