startup-apic, startup-apic-32

Startup for Intel Advanced Programmable Interrupt Controller (APIC) systems (QNX Neutrino)

Syntax:

startup-apic [-ABb] [-D channel[.channel_opts]] 
    [-F [~]value]
    [-f [cpu_freq][,[cycles_freq][,timer_freq]]]
    [-I flag] [-i ifs2_size[,flags][,paddr_src][,paddr_dst]]
    [-j addr] [-K channel[.channel_opts]] 
    [-N hostname] [-P max_cpus] 
    [-R size[,align]] [-r addr,size[,flag]]
    [-S [~]section] [-s size] [-T] [-v[v]...] [-x] [-z]

startup-apic-32 [-ABb] [-D channel[.channel_opts]] 
    [-F [~]value]
    [-f [cpu_freq][,[cycles_freq][,timer_freq]]]
    [-I flag] [-i ifs2_size[,flags][,paddr_src][,paddr_dst]]
    [-j addr] [-K channel[.channel_opts]] 
    [-N hostname] [-P max_cpus] 
    [-R size[,align]] [-r addr,size[,flag]]
    [-S [~]section] [-s size] [-T] [-v[v]...] [-x] [-z]

Runs on:

QNX Neutrino

Targets:

x86

Options:

In addition to the generic startup-* and x86-specific options, startup-apic and startup-apic-32 support the following options:

-b
Don't reserve the bottom 4 KB of memory for virtual 8086 mode. This provides an extra 4 KB of memory for system use.
-s size
Copy the given amount of video card ROM into RAM, and set the x86 page tables to refer to the RAM copy rather than the ROM. The size is in bytes, unless followed by one of K (kilobytes), M (megabytes), or G (gigabytes). Specifying the -s option causes the following call:
x86_pcbios_shadow_rom( 0xc0000, size );

For more information, see "The startup library" in the Customizing Image Startup Programs chapter of Building Embedded Systems.

-z
Use the 8254 as system clock instead of the High Precision Event Timer (HPET), which is the default on Intel-based platforms. For more information, see below.

Debug channels

The debug channel specified with the -D and -K options can be:

8250[.port[^shift][.baud[.clock[.divisor]]]]
Use a generic 8250-compatible serial chip, with:
port
Specify the I/O port base address for the 8250, in hexadecimal. The default is 3f8.
shift
Specify the spacing between the I/O registers, in 2shift bytes. The default is 0.
baud
Specify the baud rate for the debug channel. The default is 57600.
clock
Specify the clock rate (in Hz) input to the chip. The default is 1843200.
divisor
Specify the divisor used on the clock rate by the chip. The default is 16.
console
Use the PC console.

You can skip options by leaving out the data associated with that part. For example, if you want to send the debugging output to an 8250 chip using 9600 baud, use:

-D 8250..9600

The default -D and -K settings are:

-D console
-K 8250.3f8^0.57600.1843200.16

Description:

The startup-apic and startup-apic-32 programs are the startup for boards that support Intel Advanced Programmable Interrupt Controllers (APIC). They support Message Signaled Interrupts (MSI) and Extended MSI (MSI-X). They're similar, except that startup-apic uses 64-bit physical addresses, and startup-apic-32 uses 32-bit ones.

Note: If you're running startup-apic or startup-apic-32, you must use pci-bios-v2 instead of pci-bios, but it must still be called pci-bios in order for the enumerators to work correctly. In your buildfile, add pci-bios-v2 like this:
pci-bios=pci-bios-v2

To assign MSI or MSI-X interrupts in a driver, use the PCI_USE_MSI or PCI_USE_MSIX flag when you call pci_attach_device(). For more information, see its entry in the QNX Neutrino C Library Reference.

By default on Intel-based platforms, startup-apic and startup-apic-32 use High Precision Event Timer 0 (instead of the 8254) for the system clock. You can tell they're doing so in a couple of ways:

Note: In order to prevent the sharing of the HPET0 interrupt with PCI devices, it's configured in legacy interrupt mode and so uses IRQ 2. This configuration also configures HPET1 in legacy interrupt mode on IRQ8, which eliminates the use of the RTC interrupts. The QNX Neutrino RTOS doesn't use RTC interrupts; if you need to use them, use the -z option to startup-apic or startup-apic-32 to revert to the 8254 as system clock. Other HPET timers (if the system supports them) aren't affected by the legacy interrupt routing of HPET0 and HPET1.

Examples:

Direct debug output to the console:

startup-apic -Nnode120 -vvvv -Dconsole

Direct debug output to the first serial port (making sure the baud rate was set to 115200 on the receiving side):

startup-apic -Nnode120 -vvvv -D8250..115200

Direct debug output to the serial port at 2f8:

startup-apic -Nnode120 -vvvv -D8250.2f8.115200