mirror of
https://github.com/qemu/qemu.git
synced 2024-12-23 12:13:32 +08:00
d8b1ae4237
For ARM we have a little minimalist bootloader in hw/arm/boot.c which takes the place of firmware if we're directly booting a Linux kernel. Unfortunately a few devices need special case handling in this situation to do the initialization which on real hardware would be done by firmware. (In particular if we're booting a kernel in NonSecure state then we need to make a TZ-aware GIC put all its interrupts into Group 1, or the guest will be unable to use them.) Create a new QOM interface which can be implemented by devices which need to do something different from their default reset behaviour. The callback will be called after machine initialization and before first reset. Suggested-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Tested-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Message-id: 1441383782-24378-3-git-send-email-peter.maydell@linaro.org
44 lines
1.4 KiB
C
44 lines
1.4 KiB
C
/*
|
|
* hw/arm/linux-boot-if.h : interface for devices which need to behave
|
|
* specially for direct boot of an ARM Linux kernel
|
|
*/
|
|
|
|
#ifndef HW_ARM_LINUX_BOOT_IF_H
|
|
#define HW_ARM_LINUX_BOOT_IF_H
|
|
|
|
#include "qom/object.h"
|
|
|
|
#define TYPE_ARM_LINUX_BOOT_IF "arm-linux-boot-if"
|
|
#define ARM_LINUX_BOOT_IF_CLASS(klass) \
|
|
OBJECT_CLASS_CHECK(ARMLinuxBootIfClass, (klass), TYPE_ARM_LINUX_BOOT_IF)
|
|
#define ARM_LINUX_BOOT_IF_GET_CLASS(obj) \
|
|
OBJECT_GET_CLASS(ARMLinuxBootIfClass, (obj), TYPE_ARM_LINUX_BOOT_IF)
|
|
#define ARM_LINUX_BOOT_IF(obj) \
|
|
INTERFACE_CHECK(ARMLinuxBootIf, (obj), TYPE_ARM_LINUX_BOOT_IF)
|
|
|
|
typedef struct ARMLinuxBootIf {
|
|
/*< private >*/
|
|
Object parent_obj;
|
|
} ARMLinuxBootIf;
|
|
|
|
typedef struct ARMLinuxBootIfClass {
|
|
/*< private >*/
|
|
InterfaceClass parent_class;
|
|
|
|
/*< public >*/
|
|
/** arm_linux_init: configure the device for a direct boot
|
|
* of an ARM Linux kernel (so that device reset puts it into
|
|
* the state the kernel expects after firmware initialization,
|
|
* rather than the true hardware reset state). This callback is
|
|
* called once after machine construction is complete (before the
|
|
* first system reset).
|
|
*
|
|
* @obj: the object implementing this interface
|
|
* @secure_boot: true if we are booting Secure, false for NonSecure
|
|
* (or for a CPU which doesn't support TrustZone)
|
|
*/
|
|
void (*arm_linux_init)(ARMLinuxBootIf *obj, bool secure_boot);
|
|
} ARMLinuxBootIfClass;
|
|
|
|
#endif
|