Difference between revisions of "Unit PlatformQEMUVPB"

From Ultibo.org
Jump to: navigation, search
Line 656: Line 656:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 671: Line 671:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 683: Line 683:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 695: Line 695:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 707: Line 707:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 719: Line 719:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 731: Line 731:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 743: Line 743:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 755: Line 755:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| See ??????
 
| See ??????
 
|-
 
|-
Line 767: Line 767:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''CPUID'''
+
! CPUID
 
| CPU to route IRQ to
 
| CPU to route IRQ to
 
|-
 
|-
! '''Number'''
+
! Number
 
| IRQ number to register
 
| IRQ number to register
 
|-
 
|-
! '''Handler'''
+
! Handler
 
| Interrupt handler function to register
 
| Interrupt handler function to register
 
|-
 
|-
! '''HandlerEx'''
+
! HandlerEx
 
| Extended Interrupt handler function to register
 
| Extended Interrupt handler function to register
 
|-
 
|-
! '''Note'''
+
! Note
 
| Only one of Handler or HandlerEx can be specified
 
| Only one of Handler or HandlerEx can be specified
 
|-
 
|-
Line 791: Line 791:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''CPUID'''
+
! CPUID
 
| CPU to route IRQ to
 
| CPU to route IRQ to
 
|-
 
|-
! '''Number'''
+
! Number
 
| IRQ number to deregister
 
| IRQ number to deregister
 
|-
 
|-
! '''Handler'''
+
! Handler
 
| Interrupt handler function to deregister
 
| Interrupt handler function to deregister
 
|-
 
|-
! '''HandlerEx'''
+
! HandlerEx
 
| Extended Interrupt handler function to deregister
 
| Extended Interrupt handler function to deregister
 
|-
 
|-
! '''Note'''
+
! Note
 
| Only one of Handler or HandlerEx can be specified
 
| Only one of Handler or HandlerEx can be specified
 
|-
 
|-
Line 815: Line 815:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''CPUID'''
+
! CPUID
 
| CPU to route FIQ to
 
| CPU to route FIQ to
 
|-
 
|-
! '''Number'''
+
! Number
 
| FIQ number to register
 
| FIQ number to register
 
|-
 
|-
! '''Handler'''
+
! Handler
 
| Interrupt handler function to register
 
| Interrupt handler function to register
 
|-
 
|-
! '''HandlerEx'''
+
! HandlerEx
 
| Extended Interrupt handler function to register
 
| Extended Interrupt handler function to register
 
|-
 
|-
! '''Note'''
+
! Note
 
| Only one of Handler or HandlerEx can be specified
 
| Only one of Handler or HandlerEx can be specified
 
|-
 
|-
Line 839: Line 839:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''CPUID'''
+
! CPUID
 
| CPU to route FIQ to
 
| CPU to route FIQ to
 
|-
 
|-
! '''Number'''
+
! Number
 
| FIQ number to deregister
 
| FIQ number to deregister
 
|-
 
|-
! '''Handler'''
+
! Handler
 
| Interrupt handler function to deregister
 
| Interrupt handler function to deregister
 
|-
 
|-
! '''HandlerEx'''
+
! HandlerEx
 
| Extended Interrupt handler function to deregister
 
| Extended Interrupt handler function to deregister
 
|-
 
|-
! '''Note'''
+
! Note
 
| Only one of Handler or HandlerEx can be specified
 
| Only one of Handler or HandlerEx can be specified
 
|-
 
|-
Line 863: Line 863:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''CPUID'''
+
! CPUID
 
| The CPU Id to register the System Call against (Ignored on QEMUVPB)
 
| The CPU Id to register the System Call against (Ignored on QEMUVPB)
 
|-
 
|-
! '''Number'''
+
! Number
 
| The System Call number to be registered
 
| The System Call number to be registered
 
|-
 
|-
! '''Handler'''
+
! Handler
 
| The handler function to be registered
 
| The handler function to be registered
 
|-
 
|-
! '''HandlerEx'''
+
! HandlerEx
 
| The extended handler function to be registered
 
| The extended handler function to be registered
 
|-
 
|-
! '''Note'''
+
! Note
 
| Only one of Handler or HandlerEx can be specified
 
| Only one of Handler or HandlerEx can be specified
 
|-
 
|-
Line 887: Line 887:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''CPUID'''
+
! CPUID
 
| The CPU Id to deregister the System Call from (Ignored on QEMUVPB)
 
| The CPU Id to deregister the System Call from (Ignored on QEMUVPB)
 
|-
 
|-
! '''Number'''
+
! Number
 
| The System Call number to be deregistered
 
| The System Call number to be deregistered
 
|-
 
|-
! '''Handler'''
+
! Handler
 
| The handler function to be deregistered
 
| The handler function to be deregistered
 
|-
 
|-
! '''HandlerEx'''
+
! HandlerEx
 
| The extended handler function to be deregistered
 
| The extended handler function to be deregistered
 
|-
 
|-
! '''Note'''
+
! Note
 
| Only one of Handler or HandlerEx can be specified
 
| Only one of Handler or HandlerEx can be specified
 
|-
 
|-
Line 911: Line 911:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Get the interrupt entry for the specified interrupt number
 
| Get the interrupt entry for the specified interrupt number
 
|-
 
|-
Line 923: Line 923:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 935: Line 935:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 947: Line 947:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 959: Line 959:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| On the VersatilePB this comes from the 24MHz counter which will overflow every 178 seconds and increment the rollover value. Because we return the lower 32 bits then the value returned by this function will rollover to zero every 4295 seconds or about every 71 minutes.
 
| On the VersatilePB this comes from the 24MHz counter which will overflow every 178 seconds and increment the rollover value. Because we return the lower 32 bits then the value returned by this function will rollover to zero every 4295 seconds or about every 71 minutes.
 
|-
 
|-
Line 971: Line 971:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| On the VersatilePB this comes from the 24MHz counter which will overflow every 178 seconds and increment the rollover value. This is only accurate if either ClockGetCount or ClockGetTotal is called at least once per 178 seconds in order to increment the rollover.
 
| On the VersatilePB this comes from the 24MHz counter which will overflow every 178 seconds and increment the rollover value. This is only accurate if either ClockGetCount or ClockGetTotal is called at least once per 178 seconds in order to increment the rollover.
 
|-
 
|-
Line 983: Line 983:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Not intended to be called directly by applications
 
| Not intended to be called directly by applications
 
|-
 
|-
Line 998: Line 998:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,013: Line 1,013:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Called by ARMv7/8IRQHandler in PlatformARMv7/8
 
| Called by ARMv7/8IRQHandler in PlatformARMv7/8
 
A DataMemoryBarrier is executed before and after calling this function
 
A DataMemoryBarrier is executed before and after calling this function
Line 1,026: Line 1,026:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,041: Line 1,041:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Called by ARMv7/8FIQHandler in PlatformARMv7/8
 
| Called by ARMv7/8FIQHandler in PlatformARMv7/8
 
A DataMemoryBarrier is executed before and after calling this function
 
A DataMemoryBarrier is executed before and after calling this function
Line 1,054: Line 1,054:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,069: Line 1,069:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Called by ARMv7/8SoftwareInterruptHandler in PlatformARMv7/8
 
| Called by ARMv7/8SoftwareInterruptHandler in PlatformARMv7/8
 
A DataMemoryBarrier is executed before and after calling this function
 
A DataMemoryBarrier is executed before and after calling this function
Line 1,085: Line 1,085:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This schedules another clock interrupt to occur CLOCK_CYCLES_PER_TICK in the future, then updates ClockTicks and ClockSeconds and checks for timers to trigger.
 
| This schedules another clock interrupt to occur CLOCK_CYCLES_PER_TICK in the future, then updates ClockTicks and ClockSeconds and checks for timers to trigger.
 
|-
 
|-
Line 1,097: Line 1,097:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Cycles'''
+
! Cycles
 
| Number of cycles after which the timer interrupt is to be triggered
 
| Number of cycles after which the timer interrupt is to be triggered
 
|-
 
|-
! '''Note'''
+
! Note
 
| This refers to native clock cycles as specified by CLOCK_FREQUENCY
 
| This refers to native clock cycles as specified by CLOCK_FREQUENCY
 
|-
 
|-
Line 1,115: Line 1,115:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This schedules another scheduler interrupt to occur SCHEDULER_CLOCKS_PER_INTERRUPT in the future, then checks for threads to wakeup or timeout and the next thread to schedule.
 
| This schedules another scheduler interrupt to occur SCHEDULER_CLOCKS_PER_INTERRUPT in the future, then checks for threads to wakeup or timeout and the next thread to schedule.
 
|-
 
|-
Line 1,127: Line 1,127:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Cycles'''
+
! Cycles
 
| Number of cycles after which the scheduler interrupt is to be triggered
 
| Number of cycles after which the scheduler interrupt is to be triggered
 
|-
 
|-
! '''Note'''
+
! Note
 
| This refers to native clock cycles as specified by VERSATILEPB_TIMER_FREQUENCY
 
| This refers to native clock cycles as specified by VERSATILEPB_TIMER_FREQUENCY
 
|-
 
|-
Line 1,142: Line 1,142:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This is registered to receive requests for the SYSTEM_CALL_CONTEXT_SWITCH and will perform a context switch from within an SWI
 
| This is registered to receive requests for the SYSTEM_CALL_CONTEXT_SWITCH and will perform a context switch from within an SWI
 
|-
 
|-
Line 1,157: Line 1,157:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use FramebufferDeviceAllocate instead
+
| Not intended to be called directly by applications, use FramebufferDeviceAllocate instead.
 
|-
 
|-
 
|}
 
|}
Line 1,169: Line 1,169:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use FramebufferDeviceRelease instead
+
| Not intended to be called directly by applications, use FramebufferDeviceRelease instead.
 
|-
 
|-
 
|}
 
|}
Line 1,181: Line 1,181:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use FramebufferDevicBlank instead
+
| Not intended to be called directly by applications, use FramebufferDevicBlank instead.
 
|-
 
|-
 
|}
 
|}
Line 1,193: Line 1,193:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use FramebufferDeviceCommit instead
+
| Not intended to be called directly by applications, use FramebufferDeviceCommit instead.
 
|-
 
|-
 
|}
 
|}
Line 1,205: Line 1,205:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use FramebufferDeviceSetProperties instead
+
| Not intended to be called directly by applications, use FramebufferDeviceSetProperties instead.
 
|-
 
|-
 
|}
 
|}
Line 1,220: Line 1,220:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,232: Line 1,232:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Based on hexstrings() function by dwelch67 (https://github.com/dwelch67)
 
| Based on hexstrings() function by dwelch67 (https://github.com/dwelch67)
 
|-
 
|-

Revision as of 04:10, 25 April 2018

Return to Unit Reference


Description


Ultibo Platform interface unit for QEMU VersatilePB

To be documented

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 TInterruptEntry;

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:LongWord; The single IRQ number to Enable as FIQ instead (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 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:LongWord):TInterruptEntry;
Description: To be documented


[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 IRQ functions

[Expand]
function QEMUVPBDispatchIRQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Description: Process any pending IRQ requests


[Expand]
function QEMUVPBHandleIRQ(Number,CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Description: Call the handler function for an IRQ that was received, or halt if it doesn't exist


QEMUVPB FIQ functions

[Expand]
function QEMUVPBDispatchFIQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Description: Process any pending FIQ requests


[Expand]
function QEMUVPBHandleFIQ(Number,CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Description: Call the handler function for an FIQ that was received, or halt if it doesn't exist


QEMUVPB SWI functions

[Expand]
function QEMUVPBDispatchSWI(CPUID:LongWord; Thread:TThreadHandle; Request:PSystemCallRequest):TThreadHandle;
Description: Process an SWI request


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,Size,Flags:LongWord):LongWord;
Description: Implementation of FramebufferDeviceCommit API for PL110 Framebuffer


[Expand]
function QEMUVPBFramebufferDeviceSetProperties(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: Implementation of FramebufferDeviceSetProperties 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


Return to Unit Reference