72 lines
2.0 KiB
C
72 lines
2.0 KiB
C
![]() |
// SPDX-License-Identifier: GPL-2.0-only
|
||
|
/*
|
||
|
* Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved
|
||
|
*/
|
||
|
|
||
|
#include "qemu/osdep.h"
|
||
|
#include "hw/acpi/acpi_generic_initiator.h"
|
||
|
#include "hw/boards.h"
|
||
|
#include "qemu/error-report.h"
|
||
|
|
||
|
typedef struct AcpiGenericInitiatorClass {
|
||
|
ObjectClass parent_class;
|
||
|
} AcpiGenericInitiatorClass;
|
||
|
|
||
|
OBJECT_DEFINE_TYPE_WITH_INTERFACES(AcpiGenericInitiator, acpi_generic_initiator,
|
||
|
ACPI_GENERIC_INITIATOR, OBJECT,
|
||
|
{ TYPE_USER_CREATABLE },
|
||
|
{ NULL })
|
||
|
|
||
|
OBJECT_DECLARE_SIMPLE_TYPE(AcpiGenericInitiator, ACPI_GENERIC_INITIATOR)
|
||
|
|
||
|
static void acpi_generic_initiator_init(Object *obj)
|
||
|
{
|
||
|
AcpiGenericInitiator *gi = ACPI_GENERIC_INITIATOR(obj);
|
||
|
|
||
|
gi->node = MAX_NODES;
|
||
|
gi->pci_dev = NULL;
|
||
|
}
|
||
|
|
||
|
static void acpi_generic_initiator_finalize(Object *obj)
|
||
|
{
|
||
|
AcpiGenericInitiator *gi = ACPI_GENERIC_INITIATOR(obj);
|
||
|
|
||
|
g_free(gi->pci_dev);
|
||
|
}
|
||
|
|
||
|
static void acpi_generic_initiator_set_pci_device(Object *obj, const char *val,
|
||
|
Error **errp)
|
||
|
{
|
||
|
AcpiGenericInitiator *gi = ACPI_GENERIC_INITIATOR(obj);
|
||
|
|
||
|
gi->pci_dev = g_strdup(val);
|
||
|
}
|
||
|
|
||
|
static void acpi_generic_initiator_set_node(Object *obj, Visitor *v,
|
||
|
const char *name, void *opaque,
|
||
|
Error **errp)
|
||
|
{
|
||
|
AcpiGenericInitiator *gi = ACPI_GENERIC_INITIATOR(obj);
|
||
|
uint32_t value;
|
||
|
|
||
|
if (!visit_type_uint32(v, name, &value, errp)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (value >= MAX_NODES) {
|
||
|
error_printf("%s: Invalid NUMA node specified\n",
|
||
|
TYPE_ACPI_GENERIC_INITIATOR);
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
gi->node = value;
|
||
|
}
|
||
|
|
||
|
static void acpi_generic_initiator_class_init(ObjectClass *oc, void *data)
|
||
|
{
|
||
|
object_class_property_add_str(oc, "pci-dev", NULL,
|
||
|
acpi_generic_initiator_set_pci_device);
|
||
|
object_class_property_add(oc, "node", "int", NULL,
|
||
|
acpi_generic_initiator_set_node, NULL, NULL);
|
||
|
}
|