Difference between revisions of "Unit PlatformQEMUVPB"

From Ultibo.org
Jump to: navigation, search
 
(6 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
----
 
----
  
'''Ultibo Platform interface unit for QEMU VersatilePB'''
+
'''Ultibo Platform Interface unit for QEMU VersatilePB'''
 
+
''To be documented''
+
  
 
=== Constants ===
 
=== Constants ===
Line 19: Line 17:
 
|-
 
|-
 
| <code>QEMUVPB_STARTUP_ADDRESS = $00010000;</code>
 
| <code>QEMUVPB_STARTUP_ADDRESS = $00010000;</code>
| Address of StartupHandler on Reset
+
| Address of StartupHandler on Reset (Obtain from linker)
 
|-
 
|-
 
|}
 
|}
Line 93: Line 91:
 
| <code>QEMUVPB_KERNEL_NAME = 'kernel64.bin';</code>
 
| <code>QEMUVPB_KERNEL_NAME = 'kernel64.bin';</code>
 
| &nbsp;
 
| &nbsp;
 +
|-
 +
| <code>QEMUVPB_KERNEL_CONFIG = '';</code>
 +
| Not available as a file
 +
|-
 +
| <code>QEMUVPB_KERNEL_COMMAND = '';</code>
 +
| Not available as a file
 +
|-
 +
| <code>QEMUVPB_FIRMWARE_FILES = '';</code>
 +
| Not available as a file
 +
|-
 +
| <code>QEMUVPB_DTB_FILES = '';</code>
 +
| Not available as a file
 
|-
 
|-
 
|}
 
|}
Line 342: Line 352:
 
|-
 
|-
 
| <code>PL110_CLCD_CONTROL_BGR = (1 shl 8);</code>
 
| <code>PL110_CLCD_CONTROL_BGR = (1 shl 8);</code>
| RGB of BGR format selection (0 = RGB normal output/1 = BGR red and blue swapped.)
+
| RGB or BGR format selection (0 = RGB normal output/1 = BGR red and blue swapped.)
 
|-
 
|-
 
| <code>PL110_CLCD_CONTROL_BEBO = (1 shl 9);</code>
 
| <code>PL110_CLCD_CONTROL_BEBO = (1 shl 9);</code>
Line 614: Line 624:
 
{| 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>InterruptEntries:array[0..(VERSATILEPB_IRQ_COUNT - 1)] of TInterruptEntry;</code>
+
| <code>InterruptEntries:array[0..(VERSATILEPB_IRQ_COUNT - 1)] of PInterruptEntry;</code>
 
| style="width: 40%;"|
 
| style="width: 40%;"|
 
|-
 
|-
Line 638: Line 648:
 
{| 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>FIQEnabled:LongWord;</code>
+
| <code>FIQEnabled:array[0..1] of LongWord;</code>
| style="width: 40%;"|The single IRQ number to Enable as FIQ instead (See: TPL190InterruptRegisters)
+
| style="width: 40%;"|2 groups of FIQs to Enable/Disable (See: TPL190InterruptRegisters)
 
|-
 
|-
 
|}
 
|}
Line 1,075: Line 1,085:
 
! Note
 
! Note
 
| Not intended to be called directly by applications, use FramebufferDeviceCommit instead.
 
| Not intended to be called directly by applications, use FramebufferDeviceCommit instead.
|-
 
|}
 
</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 QEMUVPBFramebufferDeviceSetProperties(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceSetProperties API for PL110 Framebuffer</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
! Note
 
| Not intended to be called directly by applications, use FramebufferDeviceSetProperties instead.
 
 
|-
 
|-
 
|}
 
|}

Latest revision as of 05:40, 7 April 2023

Return to Unit Reference


Description


Ultibo Platform Interface unit for QEMU VersatilePB

Constants



[Expand]
QEMUVPB specific constants QEMUVPB_*


[Expand]
QEMUVPB page table QEMUVPB_PAGE_TABLE_*


[Expand]
QEMUVPB vector table QEMUVPB_VECTOR_TABLE_*


[Expand]
QEMUVPB CPU count QEMUVPB_CPU_*


[Expand]
QEMUVPB SWI QEMUVPB_SWI_*


[Expand]
QEMUVPB kernel name QEMUVPB_KERNEL_*


[Expand]
PL110 specific constants PL110_*


[Expand]
PL110 mode PL110_MODE_*


[Expand]
PL110 register offset PL110_CLCD_*


[Expand]
PL110 CLCD timing0 PL110_CLCD_TIMING0_*


[Expand]
PL110 CLCD timing1 PL110_CLCD_TIMING1_*


[Expand]
PL110 CLCD timing2 PL110_CLCD_TIMING2_*


[Expand]
PL110 CLCD timing3 PL110_CLCD_TIMING3_*


[Expand]
PL110 CLCD control PL110_CLCD_CONTROL_*


[Expand]
PL110 control PL110_CONTROL_*


[Expand]
PL110 timing0 PL110_TIMING0_*


[Expand]
PL110 timing1 PL110_TIMING1_*


[Expand]
PL110 timing2 PL110_TIMING2_*


Type definitions



PL110 CLCD registers

[Expand]

PPL110CLCDRegisters = ^TPL110CLCDRegisters;

TPL110CLCDRegisters = record

PL110 framebuffer

[Expand]

PPL110Framebuffer = ^TPL110Framebuffer;

TPL110Framebuffer = record


Public variables



QEMUVPB specific Ultibo variables

QEMUVPBInitialized:Boolean;

Clock variables

ClockGetLast:LongWord; Value of 24MHz Counter on last ClockGetCount or ClockGetTotal call
ClockGetBase:Int64; Base value for 64-bit clock, incremented each time the 24MHz Counter rolls over (Only accurate if ClockGetCount/ClockGetTotal is called at least once per 178 seconds)
ClockGetLock:THandle = INVALID_HANDLE_VALUE; Lock handle for creating 64-bit clock from a 32-bit register
ClockGetTimer:THandle = INVALID_HANDLE_VALUE; Timer handle for ensuring clock is read periodically to maintain accurracy

Timer variables

Timer0Registers:PSP804TimerRegisters; Use Timer0 for Clock
Timer2Registers:PSP804TimerRegisters; Use Timer2 for Scheduler

Interrupt variables

PrimaryInterruptRegisters:PPL190InterruptRegisters;
SecondaryInterruptRegisters:PVersatilePBInterruptRegisters;
InterruptEntries:array[0..(VERSATILEPB_IRQ_COUNT - 1)] of PInterruptEntry;

System call

SystemCallEntries:array[0..QEMUVPB_SWI_COUNT - 1] of TSystemCallEntry;

IRQ/FIQ

IRQEnabled:array[0..1] of LongWord; 2 groups of IRQs to Enable/Disable (See: TPL190InterruptRegisters)
FIQEnabled:array[0..1] of LongWord; 2 groups of FIQs to Enable/Disable (See: TPL190InterruptRegisters)


Function declarations



Initialization functions

[Expand]
procedure QEMUVPBInit;
Description: To be documented


QEMUVPB platform functions

[Expand]
procedure QEMUVPBBoardInit;
Description: To be documented


[Expand]
procedure QEMUVPBMemoryInit;
Description: To be documented


[Expand]
procedure QEMUVPBClockInit;
Description: To be documented


[Expand]
procedure QEMUVPBPowerInit;
Description: To be documented


[Expand]
procedure QEMUVPBInterruptInit;
Description: To be documented


[Expand]
procedure QEMUVPBPeripheralInit;
Description: To be documented


[Expand]
procedure QEMUVPBFramebufferInit;
Description: To be documented


[Expand]
procedure QEMUVPBPageTableInit;
Description: Initialize the Hardware Page Tables before enabling the MMU


[Expand]
function QEMUVPBRequestExIRQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Description: Request registration of the supplied handler to the specified IRQ number


[Expand]
function QEMUVPBReleaseExIRQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Description: Request deregistration of the supplied handler from the specified IRQ number


[Expand]
function QEMUVPBRequestExFIQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Description: Request registration of the supplied handler to the specified FIQ number


[Expand]
function QEMUVPBReleaseExFIQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Description: Request deregistration of the supplied handler from the specified FIQ number


[Expand]
function QEMUVPBRegisterInterrupt(Number,Mask,Priority,Flags:LongWord; Handler:TSharedInterruptHandler; Parameter:Pointer):LongWord;
Description: Request registration of the supplied handler to the specified interrupt number (Where Applicable)


[Expand]
function QEMUVPBDeregisterInterrupt(Number,Mask,Priority,Flags:LongWord; Handler:TSharedInterruptHandler; Parameter:Pointer):LongWord;
Description: Request deregistration of the supplied handler from the specified interrupt number (Where Applicable)


[Expand]
function QEMUVPBRegisterSystemCallEx(CPUID,Number:LongWord; Handler:TSystemCallHandler; HandlerEx:TSystemCallExHandler):LongWord;
Description: Request registration of the supplied extended handler to the specified System Call number


[Expand]
function QEMUVPBDeregisterSystemCallEx(CPUID,Number:LongWord; Handler:TSystemCallHandler; HandlerEx:TSystemCallExHandler):LongWord;
Description: Request deregistration of the supplied extended handler from the specified System Call number


[Expand]
function QEMUVPBGetInterruptEntry(Number,Instance:LongWord; var Interrupt:TInterruptEntry):LongWord;
Description: Get the interrupt entry for the specified interrupt number and instance


[Expand]
function QEMUVPBGetSystemCallEntry(Number:LongWord):TSystemCallEntry;
Description: Get the system call entry for the specified system call number


[Expand]
function QEMUVPBSystemRestart(Delay:LongWord):LongWord;
Description: To be documented


[Expand]
function QEMUVPBSystemShutdown(Delay:LongWord):LongWord;
Description: To be documented


[Expand]
function QEMUVPBClockGetCount:LongWord;
Description: Gets the current system clock count (32 least significant bits of total)


[Expand]
function QEMUVPBClockGetTotal:Int64;
Description: Gets the total system clock count


[Expand]
procedure QEMUVPBClockGetTimer(Data:Pointer);
Description: Timer procedure to ensure ClockGetTotal is called at least once per rollover interval


QEMUVPB thread functions

[Expand]
procedure QEMUVPBSchedulerInit;
Description: Initialize the scheduler interrupt on the boot CPU


QEMUVPB clock functions

[Expand]
procedure QEMUVPBClockInterrupt(Parameter:Pointer);
Description: Interrupt handler function for the clock interrupt


[Expand]
procedure QEMUVPBClockUpdate(Cycles:LongWord; var Last:LongWord);
Description: Setup a clock interrupt to trigger after the specified number of clock cycles


QEMUVPB scheduler functions

[Expand]
function QEMUVPBSchedulerInterrupt(CPUID:LongWord; Thread:TThreadHandle; Parameter:Pointer):TThreadHandle;
Description: Interrupt handler function for the scheduler interrupt


[Expand]
procedure QEMUVPBSchedulerUpdate(Cycles:LongWord; var Last:LongWord);
Description: Setup a scheduler interrupt to trigger after the specified number of clock cycles


[Expand]
procedure QEMUVPBSchedulerSystemCall(Request:PSystemCallRequest);
Description: System Call handler for the scheduler


QEMUVPB framebuffer functions

[Expand]
function QEMUVPBFramebufferDeviceAllocate(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: Implementation of FramebufferDeviceAllocate API for PL110 Framebuffer


[Expand]
function QEMUVPBFramebufferDeviceRelease(Framebuffer:PFramebufferDevice):LongWord;
Description: Implementation of FramebufferDeviceRelease API for PL110 Framebuffer


[Expand]
function QEMUVPBFramebufferDeviceBlank(Framebuffer:PFramebufferDevice; Blank:Boolean):LongWord;
Description: Implementation of FramebufferDevicBlank API for PL110 Framebuffer


[Expand]
function QEMUVPBFramebufferDeviceCommit(Framebuffer:PFramebufferDevice; Address:PtrUInt; Size,Flags:LongWord):LongWord;
Description: Implementation of FramebufferDeviceCommit API for PL110 Framebuffer


QEMUVPB helper functions

[Expand]
procedure QEMUVPBBootBlink; assembler; nostackframe;
Description: Output characters to UART0 without dependency on any other RTL setup


[Expand]
procedure QEMUVPBBootOutput(Value:LongWord);
Description: Output characters to UART0 without dependency on any other RTL setup


[Expand]
procedure QEMUVPBBootConsoleStart;
Description: To be documented


[Expand]
procedure QEMUVPBBootConsoleWrite(const Value:String);
Description: To be documented


[Expand]
procedure QEMUVPBBootConsoleWriteEx(const Value:String; X,Y:LongWord);
Description: To be documented


[Expand]
function QEMUVPBBootConsoleGetX:LongWord;
Description: To be documented


[Expand]
function QEMUVPBBootConsoleGetY:LongWord;
Description: To be documented


Return to Unit Reference