1*d8b1ae42SPeter Maydell /* 2*d8b1ae42SPeter Maydell * hw/arm/linux-boot-if.h : interface for devices which need to behave 3*d8b1ae42SPeter Maydell * specially for direct boot of an ARM Linux kernel 4*d8b1ae42SPeter Maydell */ 5*d8b1ae42SPeter Maydell 6*d8b1ae42SPeter Maydell #ifndef HW_ARM_LINUX_BOOT_IF_H 7*d8b1ae42SPeter Maydell #define HW_ARM_LINUX_BOOT_IF_H 8*d8b1ae42SPeter Maydell 9*d8b1ae42SPeter Maydell #include "qom/object.h" 10*d8b1ae42SPeter Maydell 11*d8b1ae42SPeter Maydell #define TYPE_ARM_LINUX_BOOT_IF "arm-linux-boot-if" 12*d8b1ae42SPeter Maydell #define ARM_LINUX_BOOT_IF_CLASS(klass) \ 13*d8b1ae42SPeter Maydell OBJECT_CLASS_CHECK(ARMLinuxBootIfClass, (klass), TYPE_ARM_LINUX_BOOT_IF) 14*d8b1ae42SPeter Maydell #define ARM_LINUX_BOOT_IF_GET_CLASS(obj) \ 15*d8b1ae42SPeter Maydell OBJECT_GET_CLASS(ARMLinuxBootIfClass, (obj), TYPE_ARM_LINUX_BOOT_IF) 16*d8b1ae42SPeter Maydell #define ARM_LINUX_BOOT_IF(obj) \ 17*d8b1ae42SPeter Maydell INTERFACE_CHECK(ARMLinuxBootIf, (obj), TYPE_ARM_LINUX_BOOT_IF) 18*d8b1ae42SPeter Maydell 19*d8b1ae42SPeter Maydell typedef struct ARMLinuxBootIf { 20*d8b1ae42SPeter Maydell /*< private >*/ 21*d8b1ae42SPeter Maydell Object parent_obj; 22*d8b1ae42SPeter Maydell } ARMLinuxBootIf; 23*d8b1ae42SPeter Maydell 24*d8b1ae42SPeter Maydell typedef struct ARMLinuxBootIfClass { 25*d8b1ae42SPeter Maydell /*< private >*/ 26*d8b1ae42SPeter Maydell InterfaceClass parent_class; 27*d8b1ae42SPeter Maydell 28*d8b1ae42SPeter Maydell /*< public >*/ 29*d8b1ae42SPeter Maydell /** arm_linux_init: configure the device for a direct boot 30*d8b1ae42SPeter Maydell * of an ARM Linux kernel (so that device reset puts it into 31*d8b1ae42SPeter Maydell * the state the kernel expects after firmware initialization, 32*d8b1ae42SPeter Maydell * rather than the true hardware reset state). This callback is 33*d8b1ae42SPeter Maydell * called once after machine construction is complete (before the 34*d8b1ae42SPeter Maydell * first system reset). 35*d8b1ae42SPeter Maydell * 36*d8b1ae42SPeter Maydell * @obj: the object implementing this interface 37*d8b1ae42SPeter Maydell * @secure_boot: true if we are booting Secure, false for NonSecure 38*d8b1ae42SPeter Maydell * (or for a CPU which doesn't support TrustZone) 39*d8b1ae42SPeter Maydell */ 40*d8b1ae42SPeter Maydell void (*arm_linux_init)(ARMLinuxBootIf *obj, bool secure_boot); 41*d8b1ae42SPeter Maydell } ARMLinuxBootIfClass; 42*d8b1ae42SPeter Maydell 43*d8b1ae42SPeter Maydell #endif 44