pci, pc, acpi fixes, enhancements
This includes some pretty big changes: - pci master abort support by Marcel - pci IRQ API rework by Marcel - acpi generation support by myself Everything has gone through several revisions, latest versions have been on list for a while without any more comments, tested by several people. Please pull for 1.7. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.15 (GNU/Linux) iQEcBAABAgAGBQJSXNO8AAoJECgfDbjSjVRp7VAH/0B73mCOiyVACGx7fazK3SGK X8TxZWVtG5A77ISqKyrtjLAhK9DCQjEzQTbMNhXHM3Ar6crwo7nJZnQvH2Gh1X2p 34BOQSVc4rtXz5pwDIr48dBLrxeslwXub79chUs+IK1/4RSn3h3nuS3k6JVkmLJN rcHMj4ljJmi4Hd9vOpmS1jo/a61usi36hhU7CMgcrsXzStZycBBzCozOB3VW8p1X /iwyf91YjmNPkn9gA3/aViGjszu8jE91dkA0C+ljwvcGbs2yEl3LCWEJfsMvoh5P 2M+k0XXbHwq/P9PFMa/2/lWOo4EO4Oxa+G/6QvovJrteYnktr+E9DqjU8pCT7yI= =CVfs -----END PGP SIGNATURE----- Merge remote-tracking branch 'mst/tags/for_anthony' into staging pci, pc, acpi fixes, enhancements This includes some pretty big changes: - pci master abort support by Marcel - pci IRQ API rework by Marcel - acpi generation support by myself Everything has gone through several revisions, latest versions have been on list for a while without any more comments, tested by several people. Please pull for 1.7. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Tue 15 Oct 2013 07:33:48 AM CEST using RSA key ID D28D5469 # gpg: Can't check signature: public key not found * mst/tags/for_anthony: (39 commits) ssdt-proc: update generated file ssdt: fix PBLK length i386: ACPI table generation code from seabios pc: use new api to add builtin tables acpi: add interface to access user-installed tables hpet: add API to find it pvpanic: add API to access io port ich9: APIs for pc guest info piix: APIs for pc guest info acpi/piix: add macros for acpi property names i386: define pc guest info loader: allow adding ROMs in done callbacks i386: add bios linker/loader loader: use file path size from fw_cfg.h acpi: ssdt pcihp: updat generated file acpi: pre-compiled ASL files acpi: add rules to compile ASL source i386: add ACPI table files from seabios q35: expose mmcfg size as a property q35: use macro for MCFG property name ... Message-id: 1381818560-18367-1-git-send-email-mst@redhat.com Signed-off-by: Anthony Liguori <anthony@codemonkey.ws>
This commit is contained in:
commit
b0eb759fb2
95 changed files with 16666 additions and 172 deletions
|
|
@ -153,7 +153,7 @@ struct MemoryRegion {
|
|||
bool flush_coalesced_mmio;
|
||||
MemoryRegion *alias;
|
||||
hwaddr alias_offset;
|
||||
unsigned priority;
|
||||
int priority;
|
||||
bool may_overlap;
|
||||
QTAILQ_HEAD(subregions, MemoryRegion) subregions;
|
||||
QTAILQ_ENTRY(MemoryRegion) subregions_link;
|
||||
|
|
@ -779,7 +779,7 @@ void memory_region_add_subregion(MemoryRegion *mr,
|
|||
void memory_region_add_subregion_overlap(MemoryRegion *mr,
|
||||
hwaddr offset,
|
||||
MemoryRegion *subregion,
|
||||
unsigned priority);
|
||||
int priority);
|
||||
|
||||
/**
|
||||
* memory_region_get_ram_addr: Get the ram address associated with a memory
|
||||
|
|
|
|||
|
|
@ -165,6 +165,10 @@ extern int acpi_enabled;
|
|||
extern char unsigned *acpi_tables;
|
||||
extern size_t acpi_tables_len;
|
||||
|
||||
uint8_t *acpi_table_first(void);
|
||||
uint8_t *acpi_table_next(uint8_t *current);
|
||||
unsigned acpi_table_len(void *current);
|
||||
void acpi_table_add(const QemuOpts *opts, Error **errp);
|
||||
void acpi_table_add_builtin(const QemuOpts *opts, Error **errp);
|
||||
|
||||
#endif /* !QEMU_HW_ACPI_H */
|
||||
|
|
|
|||
|
|
@ -49,4 +49,6 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm,
|
|||
void ich9_pm_iospace_update(ICH9LPCPMRegs *pm, uint32_t pm_io_base);
|
||||
extern const VMStateDescription vmstate_ich9_pm;
|
||||
|
||||
void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp);
|
||||
|
||||
#endif /* HW_ACPI_ICH9_H */
|
||||
|
|
|
|||
8
include/hw/acpi/piix4.h
Normal file
8
include/hw/acpi/piix4.h
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef HW_ACPI_PIIX4_H
|
||||
#define HW_ACPI_PIIX4_H
|
||||
|
||||
#include "qemu/typedefs.h"
|
||||
|
||||
Object *piix4_pm_find(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -66,6 +66,8 @@ typedef struct ICH9LPCState {
|
|||
qemu_irq *ioapic;
|
||||
} ICH9LPCState;
|
||||
|
||||
Object *ich9_lpc_find(void);
|
||||
|
||||
#define Q35_MASK(bit, ms_bit, ls_bit) \
|
||||
((uint##bit##_t)(((1ULL << ((ms_bit) + 1)) - 1) & ~((1ULL << ls_bit) - 1)))
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,9 @@
|
|||
#include "hw/i386/ioapic.h"
|
||||
|
||||
#include "qemu/range.h"
|
||||
#include "qemu/bitmap.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "hw/pci/pci.h"
|
||||
|
||||
/* PC-style peripherals (also used by other machines). */
|
||||
|
||||
|
|
@ -17,10 +20,27 @@ typedef struct PcPciInfo {
|
|||
Range w64;
|
||||
} PcPciInfo;
|
||||
|
||||
#define ACPI_PM_PROP_S3_DISABLED "disable_s3"
|
||||
#define ACPI_PM_PROP_S4_DISABLED "disable_s4"
|
||||
#define ACPI_PM_PROP_S4_VAL "s4_val"
|
||||
#define ACPI_PM_PROP_SCI_INT "sci_int"
|
||||
#define ACPI_PM_PROP_ACPI_ENABLE_CMD "acpi_enable_cmd"
|
||||
#define ACPI_PM_PROP_ACPI_DISABLE_CMD "acpi_disable_cmd"
|
||||
#define ACPI_PM_PROP_PM_IO_BASE "pm_io_base"
|
||||
#define ACPI_PM_PROP_GPE0_BLK "gpe0_blk"
|
||||
#define ACPI_PM_PROP_GPE0_BLK_LEN "gpe0_blk_len"
|
||||
|
||||
struct PcGuestInfo {
|
||||
bool has_pci_info;
|
||||
bool isapc_ram_fw;
|
||||
hwaddr ram_size;
|
||||
unsigned apic_id_limit;
|
||||
bool apic_xrupt_override;
|
||||
uint64_t numa_nodes;
|
||||
uint64_t *node_mem;
|
||||
uint64_t *node_cpu;
|
||||
FWCfgState *fw_cfg;
|
||||
bool has_acpi_build;
|
||||
};
|
||||
|
||||
/* parallel.c */
|
||||
|
|
@ -173,6 +193,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn,
|
|||
MemoryRegion *pci_memory,
|
||||
MemoryRegion *ram_memory);
|
||||
|
||||
PCIBus *find_i440fx(void);
|
||||
/* piix4.c */
|
||||
extern PCIDevice *piix4_dev;
|
||||
int piix4_init(PCIBus *bus, ISABus **isa_bus, int devfn);
|
||||
|
|
@ -215,6 +236,7 @@ void pc_system_firmware_init(MemoryRegion *rom_memory,
|
|||
|
||||
/* pvpanic.c */
|
||||
void pvpanic_init(ISABus *bus);
|
||||
uint16_t pvpanic_port(void);
|
||||
|
||||
/* e820 types */
|
||||
#define E820_RAM 1
|
||||
|
|
|
|||
|
|
@ -30,6 +30,12 @@ static inline void qemu_irq_pulse(qemu_irq irq)
|
|||
*/
|
||||
qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
|
||||
|
||||
/*
|
||||
* Allocates a single IRQ. The irq is assigned with a handler, an opaque
|
||||
* data and the interrupt number.
|
||||
*/
|
||||
qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n);
|
||||
|
||||
/* Extends an Array of IRQs. Old IRQs have their handlers and opaque data
|
||||
* preserved. New IRQs are assigned the argument handler and opaque data.
|
||||
*/
|
||||
|
|
@ -37,6 +43,7 @@ qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
|
|||
void *opaque, int n);
|
||||
|
||||
void qemu_free_irqs(qemu_irq *s);
|
||||
void qemu_free_irq(qemu_irq irq);
|
||||
|
||||
/* Returns a new IRQ with opposite polarity. */
|
||||
qemu_irq qemu_irq_invert(qemu_irq irq);
|
||||
|
|
|
|||
|
|
@ -40,11 +40,13 @@ extern bool rom_file_in_ram;
|
|||
|
||||
int rom_add_file(const char *file, const char *fw_dir,
|
||||
hwaddr addr, int32_t bootindex);
|
||||
int rom_add_blob(const char *name, const void *blob, size_t len,
|
||||
hwaddr addr);
|
||||
void *rom_add_blob(const char *name, const void *blob, size_t len,
|
||||
hwaddr addr, const char *fw_file_name,
|
||||
FWCfgReadCallback fw_callback, void *callback_opaque);
|
||||
int rom_add_elf_program(const char *name, void *data, size_t datasize,
|
||||
size_t romsize, hwaddr addr);
|
||||
int rom_load_all(void);
|
||||
void rom_load_done(void);
|
||||
void rom_set_fw(FWCfgState *f);
|
||||
int rom_copy(uint8_t *dest, hwaddr addr, size_t size);
|
||||
void *rom_ptr(hwaddr addr);
|
||||
|
|
@ -53,7 +55,7 @@ void do_info_roms(Monitor *mon, const QDict *qdict);
|
|||
#define rom_add_file_fixed(_f, _a, _i) \
|
||||
rom_add_file(_f, NULL, _a, _i)
|
||||
#define rom_add_blob_fixed(_f, _b, _l, _a) \
|
||||
rom_add_blob(_f, _b, _l, _a)
|
||||
(rom_add_blob(_f, _b, _l, _a, NULL, NULL, NULL) ? 0 : -1)
|
||||
|
||||
#define PC_ROM_MIN_VGA 0xc0000
|
||||
#define PC_ROM_MIN_OPTION 0xc8000
|
||||
|
|
|
|||
|
|
@ -46,12 +46,14 @@
|
|||
|
||||
#define FW_CFG_INVALID 0xffff
|
||||
|
||||
#define FW_CFG_MAX_FILE_PATH 56
|
||||
|
||||
#ifndef NO_QEMU_PROTOS
|
||||
typedef struct FWCfgFile {
|
||||
uint32_t size; /* file size */
|
||||
uint16_t select; /* write this to 0x510 to read it */
|
||||
uint16_t reserved;
|
||||
char name[56];
|
||||
char name[FW_CFG_MAX_FILE_PATH];
|
||||
} FWCfgFile;
|
||||
|
||||
typedef struct FWCfgFiles {
|
||||
|
|
@ -60,6 +62,7 @@ typedef struct FWCfgFiles {
|
|||
} FWCfgFiles;
|
||||
|
||||
typedef void (*FWCfgCallback)(void *opaque, uint8_t *data);
|
||||
typedef void (*FWCfgReadCallback)(void *opaque, uint32_t offset);
|
||||
|
||||
void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len);
|
||||
void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value);
|
||||
|
|
@ -70,6 +73,9 @@ void fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback,
|
|||
void *callback_opaque, void *data, size_t len);
|
||||
void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data,
|
||||
size_t len);
|
||||
void fw_cfg_add_file_callback(FWCfgState *s, const char *filename,
|
||||
FWCfgReadCallback callback, void *callback_opaque,
|
||||
void *data, size_t len);
|
||||
FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
|
||||
hwaddr crl_addr, hwaddr data_addr);
|
||||
|
||||
|
|
|
|||
|
|
@ -156,4 +156,6 @@ typedef struct Q35PCIHost {
|
|||
#define MCH_PCIE_DEV 1
|
||||
#define MCH_PCIE_FUNC 0
|
||||
|
||||
uint64_t mch_mcfg_base(void);
|
||||
|
||||
#endif /* HW_Q35_H */
|
||||
|
|
|
|||
|
|
@ -247,9 +247,6 @@ struct PCIDevice {
|
|||
PCIConfigReadFunc *config_read;
|
||||
PCIConfigWriteFunc *config_write;
|
||||
|
||||
/* IRQ objects for the INTA-INTD pins. */
|
||||
qemu_irq *irq;
|
||||
|
||||
/* Legacy PCI VGA regions */
|
||||
MemoryRegion *vga_regions[QEMU_PCI_VGA_NUM_REGIONS];
|
||||
bool has_vga;
|
||||
|
|
@ -632,6 +629,29 @@ PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn,
|
|||
PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name);
|
||||
PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name);
|
||||
|
||||
qemu_irq pci_allocate_irq(PCIDevice *pci_dev);
|
||||
void pci_set_irq(PCIDevice *pci_dev, int level);
|
||||
|
||||
static inline void pci_irq_assert(PCIDevice *pci_dev)
|
||||
{
|
||||
pci_set_irq(pci_dev, 1);
|
||||
}
|
||||
|
||||
static inline void pci_irq_deassert(PCIDevice *pci_dev)
|
||||
{
|
||||
pci_set_irq(pci_dev, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: PCI does not work this way.
|
||||
* All the callers to this method should be fixed.
|
||||
*/
|
||||
static inline void pci_irq_pulse(PCIDevice *pci_dev)
|
||||
{
|
||||
pci_irq_assert(pci_dev);
|
||||
pci_irq_deassert(pci_dev);
|
||||
}
|
||||
|
||||
static inline int pci_is_express(const PCIDevice *d)
|
||||
{
|
||||
return d->cap_present & QEMU_PCI_CAP_EXPRESS;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ struct PCIBus {
|
|||
PCIDevice *parent_dev;
|
||||
MemoryRegion *address_space_mem;
|
||||
MemoryRegion *address_space_io;
|
||||
MemoryRegion master_abort_mem;
|
||||
|
||||
QLIST_HEAD(, PCIBus) child; /* this will be replaced by qdev later */
|
||||
QLIST_ENTRY(PCIBus) sibling;/* this will be replaced by qdev later */
|
||||
|
|
|
|||
|
|
@ -64,15 +64,6 @@ struct PCIExpressDevice {
|
|||
uint8_t exp_cap;
|
||||
|
||||
/* SLOT */
|
||||
unsigned int hpev_intx; /* INTx for hot plug event (0-3:INT[A-D]#)
|
||||
* default is 0 = INTA#
|
||||
* If the chip wants to use other interrupt
|
||||
* line, initialize this member with the
|
||||
* desired number.
|
||||
* If the chip dynamically changes this member,
|
||||
* also initialize it when loaded as
|
||||
* appropreately.
|
||||
*/
|
||||
bool hpev_notified; /* Logical AND of conditions for hot plug event.
|
||||
Following 6.7.3.4:
|
||||
Software Notification of Hot-Plug Events, an interrupt
|
||||
|
|
@ -82,15 +73,6 @@ struct PCIExpressDevice {
|
|||
/* AER */
|
||||
uint16_t aer_cap;
|
||||
PCIEAERLog aer_log;
|
||||
unsigned int aer_intx; /* INTx for error reporting
|
||||
* default is 0 = INTA#
|
||||
* If the chip wants to use other interrupt
|
||||
* line, initialize this member with the
|
||||
* desired number.
|
||||
* If the chip dynamically changes this member,
|
||||
* also initialize it when loaded as
|
||||
* appropreately.
|
||||
*/
|
||||
};
|
||||
|
||||
/* PCI express capability helper functions */
|
||||
|
|
|
|||
|
|
@ -28,6 +28,12 @@
|
|||
#define PCIE_HOST_BRIDGE(obj) \
|
||||
OBJECT_CHECK(PCIExpressHost, (obj), TYPE_PCIE_HOST_BRIDGE)
|
||||
|
||||
#define PCIE_HOST_MCFG_BASE "MCFG"
|
||||
#define PCIE_HOST_MCFG_SIZE "mcfg_size"
|
||||
|
||||
/* pcie_host::base_addr == PCIE_BASE_ADDR_UNMAPPED when it isn't mapped. */
|
||||
#define PCIE_BASE_ADDR_UNMAPPED ((hwaddr)-1ULL)
|
||||
|
||||
struct PCIExpressHost {
|
||||
PCIHostState pci;
|
||||
|
||||
|
|
@ -51,4 +57,25 @@ void pcie_host_mmcfg_update(PCIExpressHost *e,
|
|||
hwaddr addr,
|
||||
uint32_t size);
|
||||
|
||||
/*
|
||||
* PCI express ECAM (Enhanced Configuration Address Mapping) format.
|
||||
* AKA mmcfg address
|
||||
* bit 20 - 28: bus number
|
||||
* bit 15 - 19: device number
|
||||
* bit 12 - 14: function number
|
||||
* bit 0 - 11: offset in configuration space of a given device
|
||||
*/
|
||||
#define PCIE_MMCFG_SIZE_MAX (1ULL << 28)
|
||||
#define PCIE_MMCFG_SIZE_MIN (1ULL << 20)
|
||||
#define PCIE_MMCFG_BUS_BIT 20
|
||||
#define PCIE_MMCFG_BUS_MASK 0x1ff
|
||||
#define PCIE_MMCFG_DEVFN_BIT 12
|
||||
#define PCIE_MMCFG_DEVFN_MASK 0xff
|
||||
#define PCIE_MMCFG_CONFOFFSET_MASK 0xfff
|
||||
#define PCIE_MMCFG_BUS(addr) (((addr) >> PCIE_MMCFG_BUS_BIT) & \
|
||||
PCIE_MMCFG_BUS_MASK)
|
||||
#define PCIE_MMCFG_DEVFN(addr) (((addr) >> PCIE_MMCFG_DEVFN_BIT) & \
|
||||
PCIE_MMCFG_DEVFN_MASK)
|
||||
#define PCIE_MMCFG_CONFOFFSET(addr) ((addr) & PCIE_MMCFG_CONFOFFSET_MASK)
|
||||
|
||||
#endif /* PCIE_HOST_H */
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ void sysbus_init_ioports(SysBusDevice *dev, pio_addr_t ioport, pio_addr_t size);
|
|||
void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq irq);
|
||||
void sysbus_mmio_map(SysBusDevice *dev, int n, hwaddr addr);
|
||||
void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr,
|
||||
unsigned priority);
|
||||
int priority);
|
||||
void sysbus_add_io(SysBusDevice *dev, hwaddr addr,
|
||||
MemoryRegion *mem);
|
||||
void sysbus_del_io(SysBusDevice *dev, MemoryRegion *mem);
|
||||
|
|
|
|||
|
|
@ -71,4 +71,6 @@ struct hpet_fw_config
|
|||
} QEMU_PACKED;
|
||||
|
||||
extern struct hpet_fw_config hpet_cfg;
|
||||
|
||||
bool hpet_find(void);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@
|
|||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "qemu/queue.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
struct Visitor;
|
||||
struct Error;
|
||||
|
||||
struct TypeImpl;
|
||||
typedef struct TypeImpl *Type;
|
||||
|
|
@ -301,7 +301,7 @@ typedef void (ObjectPropertyAccessor)(Object *obj,
|
|||
struct Visitor *v,
|
||||
void *opaque,
|
||||
const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* ObjectPropertyRelease:
|
||||
|
|
@ -790,9 +790,30 @@ void object_property_add(Object *obj, const char *name, const char *type,
|
|||
ObjectPropertyAccessor *get,
|
||||
ObjectPropertyAccessor *set,
|
||||
ObjectPropertyRelease *release,
|
||||
void *opaque, struct Error **errp);
|
||||
void *opaque, Error **errp);
|
||||
|
||||
void object_property_del(Object *obj, const char *name, struct Error **errp);
|
||||
void object_property_del(Object *obj, const char *name, Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_add_uint8_ptr:
|
||||
* object_property_add_uint16_ptr:
|
||||
* object_property_add_uint32_ptr:
|
||||
* object_property_add_uint64_ptr:
|
||||
* @obj: the object to add a property to
|
||||
* @name: the name of the property
|
||||
* @v: pointer to value
|
||||
*
|
||||
* Add an integer property in memory. This function will add a
|
||||
* property of the appropriate type.
|
||||
*/
|
||||
void object_property_add_uint8_ptr(Object *obj, const char *name,
|
||||
const uint8_t *v, Error **errp);
|
||||
void object_property_add_uint16_ptr(Object *obj, const char *name,
|
||||
const uint16_t *v, Error **errp);
|
||||
void object_property_add_uint32_ptr(Object *obj, const char *name,
|
||||
const uint32_t *v, Error **errp);
|
||||
void object_property_add_uint64_ptr(Object *obj, const char *name,
|
||||
const uint64_t *v, Error **Errp);
|
||||
|
||||
/**
|
||||
* object_property_find:
|
||||
|
|
@ -803,7 +824,7 @@ void object_property_del(Object *obj, const char *name, struct Error **errp);
|
|||
* Look up a property for an object and return its #ObjectProperty if found.
|
||||
*/
|
||||
ObjectProperty *object_property_find(Object *obj, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
void object_unparent(Object *obj);
|
||||
|
||||
|
|
@ -818,7 +839,7 @@ void object_unparent(Object *obj);
|
|||
* Reads a property from a object.
|
||||
*/
|
||||
void object_property_get(Object *obj, struct Visitor *v, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_set_str:
|
||||
|
|
@ -829,7 +850,7 @@ void object_property_get(Object *obj, struct Visitor *v, const char *name,
|
|||
* Writes a string value to a property.
|
||||
*/
|
||||
void object_property_set_str(Object *obj, const char *value,
|
||||
const char *name, struct Error **errp);
|
||||
const char *name, Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_get_str:
|
||||
|
|
@ -842,7 +863,7 @@ void object_property_set_str(Object *obj, const char *value,
|
|||
* The caller should free the string.
|
||||
*/
|
||||
char *object_property_get_str(Object *obj, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_set_link:
|
||||
|
|
@ -853,7 +874,7 @@ char *object_property_get_str(Object *obj, const char *name,
|
|||
* Writes an object's canonical path to a property.
|
||||
*/
|
||||
void object_property_set_link(Object *obj, Object *value,
|
||||
const char *name, struct Error **errp);
|
||||
const char *name, Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_get_link:
|
||||
|
|
@ -866,7 +887,7 @@ void object_property_set_link(Object *obj, Object *value,
|
|||
* string or not a valid object path).
|
||||
*/
|
||||
Object *object_property_get_link(Object *obj, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_set_bool:
|
||||
|
|
@ -877,7 +898,7 @@ Object *object_property_get_link(Object *obj, const char *name,
|
|||
* Writes a bool value to a property.
|
||||
*/
|
||||
void object_property_set_bool(Object *obj, bool value,
|
||||
const char *name, struct Error **errp);
|
||||
const char *name, Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_get_bool:
|
||||
|
|
@ -889,7 +910,7 @@ void object_property_set_bool(Object *obj, bool value,
|
|||
* an error occurs (including when the property value is not a bool).
|
||||
*/
|
||||
bool object_property_get_bool(Object *obj, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_set_int:
|
||||
|
|
@ -900,7 +921,7 @@ bool object_property_get_bool(Object *obj, const char *name,
|
|||
* Writes an integer value to a property.
|
||||
*/
|
||||
void object_property_set_int(Object *obj, int64_t value,
|
||||
const char *name, struct Error **errp);
|
||||
const char *name, Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_get_int:
|
||||
|
|
@ -912,7 +933,7 @@ void object_property_set_int(Object *obj, int64_t value,
|
|||
* an error occurs (including when the property value is not an integer).
|
||||
*/
|
||||
int64_t object_property_get_int(Object *obj, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_set:
|
||||
|
|
@ -926,7 +947,7 @@ int64_t object_property_get_int(Object *obj, const char *name,
|
|||
* Writes a property to a object.
|
||||
*/
|
||||
void object_property_set(Object *obj, struct Visitor *v, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_parse:
|
||||
|
|
@ -938,7 +959,7 @@ void object_property_set(Object *obj, struct Visitor *v, const char *name,
|
|||
* Parses a string and writes the result into a property of an object.
|
||||
*/
|
||||
void object_property_parse(Object *obj, const char *string,
|
||||
const char *name, struct Error **errp);
|
||||
const char *name, Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_print:
|
||||
|
|
@ -950,7 +971,7 @@ void object_property_parse(Object *obj, const char *string,
|
|||
* caller shall free the string.
|
||||
*/
|
||||
char *object_property_print(Object *obj, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_get_type:
|
||||
|
|
@ -961,7 +982,7 @@ char *object_property_print(Object *obj, const char *name,
|
|||
* Returns: The type name of the property.
|
||||
*/
|
||||
const char *object_property_get_type(Object *obj, const char *name,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_get_root:
|
||||
|
|
@ -1054,7 +1075,7 @@ Object *object_resolve_path_component(Object *parent, const gchar *part);
|
|||
* The child object itself can be retrieved using object_property_get_link().
|
||||
*/
|
||||
void object_property_add_child(Object *obj, const char *name,
|
||||
Object *child, struct Error **errp);
|
||||
Object *child, Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_add_link:
|
||||
|
|
@ -1077,7 +1098,7 @@ void object_property_add_child(Object *obj, const char *name,
|
|||
*/
|
||||
void object_property_add_link(Object *obj, const char *name,
|
||||
const char *type, Object **child,
|
||||
struct Error **errp);
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_add_str:
|
||||
|
|
@ -1092,9 +1113,9 @@ void object_property_add_link(Object *obj, const char *name,
|
|||
* property of type 'string'.
|
||||
*/
|
||||
void object_property_add_str(Object *obj, const char *name,
|
||||
char *(*get)(Object *, struct Error **),
|
||||
void (*set)(Object *, const char *, struct Error **),
|
||||
struct Error **errp);
|
||||
char *(*get)(Object *, Error **),
|
||||
void (*set)(Object *, const char *, Error **),
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_add_bool:
|
||||
|
|
@ -1108,9 +1129,9 @@ void object_property_add_str(Object *obj, const char *name,
|
|||
* property of type 'bool'.
|
||||
*/
|
||||
void object_property_add_bool(Object *obj, const char *name,
|
||||
bool (*get)(Object *, struct Error **),
|
||||
void (*set)(Object *, bool, struct Error **),
|
||||
struct Error **errp);
|
||||
bool (*get)(Object *, Error **),
|
||||
void (*set)(Object *, bool, Error **),
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_child_foreach:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue