1 /* 2 * Virtual Open Firmware 3 * 4 * SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 #ifndef HW_VOF_H 7 #define HW_VOF_H 8 9 #include "qom/object.h" 10 #include "exec/address-spaces.h" 11 #include "exec/memory.h" 12 #include "cpu.h" 13 14 typedef struct Vof { 15 uint64_t top_addr; /* copied from rma_size */ 16 GArray *claimed; /* array of SpaprOfClaimed */ 17 uint64_t claimed_base; 18 GHashTable *of_instances; /* ihandle -> SpaprOfInstance */ 19 uint32_t of_instance_last; 20 char *bootargs; 21 long fw_size; 22 } Vof; 23 24 int vof_client_call(MachineState *ms, Vof *vof, void *fdt, 25 target_ulong args_real); 26 uint64_t vof_claim(Vof *vof, uint64_t virt, uint64_t size, uint64_t align); 27 void vof_init(Vof *vof, uint64_t top_addr, Error **errp); 28 void vof_cleanup(Vof *vof); 29 void vof_build_dt(void *fdt, Vof *vof); 30 uint32_t vof_client_open_store(void *fdt, Vof *vof, const char *nodename, 31 const char *prop, const char *path); 32 33 #define TYPE_VOF_MACHINE_IF "vof-machine-if" 34 35 typedef struct VofMachineIfClass VofMachineIfClass; 36 DECLARE_CLASS_CHECKERS(VofMachineIfClass, VOF_MACHINE, TYPE_VOF_MACHINE_IF) 37 38 struct VofMachineIfClass { 39 InterfaceClass parent; 40 target_ulong (*client_architecture_support)(MachineState *ms, CPUState *cs, 41 target_ulong vec); 42 void (*quiesce)(MachineState *ms); 43 bool (*setprop)(MachineState *ms, const char *path, const char *propname, 44 void *val, int vallen); 45 }; 46 47 /* 48 * Initial stack size is from 49 * https://www.devicetree.org/open-firmware/bindings/ppc/release/ppc-2_1.html#REF27292 50 * 51 * "Client programs shall be invoked with a valid stack pointer (r1) with 52 * at least 32K bytes of memory available for stack growth". 53 */ 54 #define VOF_STACK_SIZE 0x8000 55 56 #define VOF_MEM_READ(pa, buf, size) \ 57 address_space_read(&address_space_memory, \ 58 (pa), MEMTXATTRS_UNSPECIFIED, (buf), (size)) 59 #define VOF_MEM_WRITE(pa, buf, size) \ 60 address_space_write(&address_space_memory, \ 61 (pa), MEMTXATTRS_UNSPECIFIED, (buf), (size)) 62 63 #define PROM_ERROR (~0U) 64 65 #endif /* HW_VOF_H */ 66