Return to Unit Reference
Description
Ultibo Platform Interface unit for ARM
Constants
[Expand]
ARM mode ARM_MODE_*
Bits 4..0 in the ARM program status register
|
See: A2.2 Processor Modes of the ARM Architecture Reference Manual and also A2.5.7 The mode bits
|
See also: B1.3.1 ARM processor modes of the ARM Architecture Reference Manual (ARMv7-A and ARMv7-R edition)
|
|
ARM_MODE_USR = $10;
|
Normal User Mode
|
ARM_MODE_FIQ = $11;
|
FIQ Processing Fast Interrupts Mode
|
ARM_MODE_IRQ = $12;
|
IRQ Processing Standard Interrupts Mode
|
ARM_MODE_SVC = $13;
|
Supervisor Processing Software Interrupts Mode
|
ARM_MODE_MON = $16;
|
Secure Monitor Mode (For Secure/Non Secure Switching)
|
ARM_MODE_MON = $16;
|
Secure Monitor Mode (For Secure/Non Secure Switching)
|
ARM_MODE_ABT = $17;
|
Abort Processing memory Faults Mode
|
ARM_MODE_HYP = $1A;
|
Hypervisor Mode
|
ARM_MODE_UND = $1B;
|
Undefined Processing Undefined Instructions Mode
|
ARM_MODE_SYS = $1F;
|
System Running Priviledged Operating System Tasks Mode
|
|
ARM_MODE_BITS = $0000001F;
|
Mask of the mode bits in the program status register
|
[Expand]
ARM interrupt disable ARM_I_*
Bits 7 and 6 in the ARM program status register
|
See: A2.5.6 "The interrupt disable bits" of the ARM Architecture Reference Manual
|
|
ARM_I_BIT = $00000080;
|
IRQs disabled when set to 1
|
ARM_F_BIT = $00000040;
|
FIQs disabled when set to 1
|
[Expand]
ARM thumb and jazelle ARM_*_BIT
Bits 24 and 5 in the ARM program status register
|
See: A2.5.8 "The T and J bits" of the ARM Architecture Reference Manual
|
|
ARM_T_BIT = $00000020;
|
Thumb mode enabled when set to 1
|
ARM_J_BIT = $01000000;
|
Jazelle mode enabled when set to 1
|
[Expand]
ARM abort ARM_A_*
Bit 8 in the ARM program status register
|
|
ARM_A_BIT = $00000100;
|
Data Abort masked when set to 1
|
[Expand]
ARM boot tag 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;
|
|
[Expand]
Device tree blob DTB_*
[Expand]
ARM machine type 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
[Expand]
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
[Expand]
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
[Expand]
PARMTagMemory = ^TARMTagMemory;
TARMTagMemory = record
Note: Description of memory region (ATAG_MEM)
|
Size:LongWord;
|
|
Start:LongWord;
|
|
ARM tag video text
[Expand]
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
[Expand]
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
|
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;
|
|
ARM tag serial
[Expand]
PARMTagSerial = ^TARMTagSerial;
TARMTagSerial = record
Note: Board serial number (ATAG_SERIAL)
|
Low:LongWord;
|
|
High:LongWord;
|
|
ARM tag revision
[Expand]
PARMTagRevision = ^TARMTagRevision;
TARMTagRevision = record
Note: Board revision (ATAG_REVISION)
|
Revision:LongWord;
|
|
ARM tag video framebuffer
[Expand]
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
[Expand]
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
[Expand]
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
[Expand]
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)
|
ARM wait
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
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
|
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
|
TagSerialNoHigh:LongWord;
|
|
Tag revision
TagRevisionCount:LongWord;
|
Number of ARM REVISION Tags found during parse
|
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
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]
function ExtractCommandLine(Value:PAnsiChar):Boolean;
Description: To be documented
[Expand]
function ExtractMemoryBlock(Address,Size:LongWord):Boolean;
Description: To be documented
[Expand]
function ExtractInitialRamdisk(Address,Size:LongWord):Boolean;
Description: To be documented
[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
Return
|
True is enabled, False if disabled (Returned in R0).
|
[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
Return
|
IRQ state when called (Returned in R0)
|
[Expand]
function ARMRestoreIRQ(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)
|
[Expand]
function ARMGetFIQ:Boolean; assembler; nostackframe;
Description: Get Fast Interrupts (FIQ) state
Return
|
True is enabled, False if disabled (Returned in R0).
|
[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
Return
|
FIQ state when called (Returned in R0)
|
[Expand]
function ARMRestoreFIQ(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)
|
[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
Return
|
IRQ/FIQ state when called (Returned in R0)
|
[Expand]
function ARMRestoreIRQFIQ(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)
|
[Expand]
function ARMGetAbort:Boolean; assembler; nostackframe;
Description: Get Abort state
Return
|
True is enabled, False if disabled (Returned in R0).
|
[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
Return
|
Abort state when called (Returned in R0)
|
[Expand]
function ARMRestoreAbort(AbortMask:TAbortMask):TAbortMask; assembler; nostackframe;
Description: Restore Aborts to a previous state
AbortMask
|
Abort state to restore (Passed in R0)
|
Return
|
Abort state when called (Returned in R0)
|
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