qemu/hw/arm-misc.h
<<
>>
Prefs
   1/*
   2 * Misc ARM declarations
   3 *
   4 * Copyright (c) 2006 CodeSourcery.
   5 * Written by Paul Brook
   6 *
   7 * This code is licensed under the LGPL.
   8 *
   9 */
  10
  11#ifndef ARM_MISC_H
  12#define ARM_MISC_H 1
  13
  14#include "memory.h"
  15
  16/* The CPU is also modeled as an interrupt controller.  */
  17#define ARM_PIC_CPU_IRQ 0
  18#define ARM_PIC_CPU_FIQ 1
  19qemu_irq *arm_pic_init_cpu(ARMCPU *cpu);
  20
  21/* armv7m.c */
  22qemu_irq *armv7m_init(MemoryRegion *address_space_mem,
  23                      int flash_size, int sram_size,
  24                      const char *kernel_filename, const char *cpu_model);
  25
  26/* arm_boot.c */
  27struct arm_boot_info {
  28    uint64_t ram_size;
  29    const char *kernel_filename;
  30    const char *kernel_cmdline;
  31    const char *initrd_filename;
  32    const char *dtb_filename;
  33    target_phys_addr_t loader_start;
  34    /* multicore boards that use the default secondary core boot functions
  35     * need to put the address of the secondary boot code, the boot reg,
  36     * and the GIC address in the next 3 values, respectively. boards that
  37     * have their own boot functions can use these values as they want.
  38     */
  39    target_phys_addr_t smp_loader_start;
  40    target_phys_addr_t smp_bootreg_addr;
  41    target_phys_addr_t gic_cpu_if_addr;
  42    int nb_cpus;
  43    int board_id;
  44    int (*atag_board)(const struct arm_boot_info *info, void *p);
  45    /* multicore boards that use the default secondary core boot functions
  46     * can ignore these two function calls. If the default functions won't
  47     * work, then write_secondary_boot() should write a suitable blob of
  48     * code mimicking the secondary CPU startup process used by the board's
  49     * boot loader/boot ROM code, and secondary_cpu_reset_hook() should
  50     * perform any necessary CPU reset handling and set the PC for the
  51     * secondary CPUs to point at this boot blob.
  52     */
  53    void (*write_secondary_boot)(ARMCPU *cpu,
  54                                 const struct arm_boot_info *info);
  55    void (*secondary_cpu_reset_hook)(ARMCPU *cpu,
  56                                     const struct arm_boot_info *info);
  57    /* Used internally by arm_boot.c */
  58    int is_linux;
  59    target_phys_addr_t initrd_size;
  60    target_phys_addr_t entry;
  61};
  62void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info);
  63
  64/* Multiplication factor to convert from system clock ticks to qemu timer
  65   ticks.  */
  66extern int system_clock_scale;
  67
  68#endif /* !ARM_MISC_H */
  69