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