Skip to content

Commit

Permalink
hw/sparc/sun4m: use qemu_find_nic_info()
Browse files Browse the repository at this point in the history
Obtain the MAC address from the NIC configuration if there is one, or
generate one explicitly so that it can be placed in the PROM.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Thomas Huth <thuth@redhat.com>
  • Loading branch information
dwmw2 committed Feb 1, 2024
1 parent 8826372 commit b46a06d
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions hw/sparc/sun4m.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,13 +299,15 @@ static void *iommu_init(hwaddr addr, uint32_t version, qemu_irq irq)

static void *sparc32_dma_init(hwaddr dma_base,
hwaddr esp_base, qemu_irq espdma_irq,
hwaddr le_base, qemu_irq ledma_irq, NICInfo *nd)
hwaddr le_base, qemu_irq ledma_irq,
MACAddr *mac)
{
DeviceState *dma;
ESPDMADeviceState *espdma;
LEDMADeviceState *ledma;
SysBusESPState *esp;
SysBusPCNetState *lance;
NICInfo *nd = qemu_find_nic_info("lance", true, NULL);

dma = qdev_new(TYPE_SPARC32_DMA);
espdma = SPARC32_ESPDMA_DEVICE(object_resolve_path_component(
Expand All @@ -320,7 +322,14 @@ static void *sparc32_dma_init(hwaddr dma_base,

lance = SYSBUS_PCNET(object_resolve_path_component(
OBJECT(ledma), "lance"));
qdev_set_nic_properties(DEVICE(lance), nd);

if (nd) {
qdev_set_nic_properties(DEVICE(lance), nd);
memcpy(mac->a, nd->macaddr.a, sizeof(mac->a));
} else {
qemu_macaddr_default_if_unset(mac);
qdev_prop_set_macaddr(DEVICE(lance), "mac", mac->a);
}

sysbus_realize_and_unref(SYS_BUS_DEVICE(dma), &error_fatal);
sysbus_mmio_map(SYS_BUS_DEVICE(dma), 0, dma_base);
Expand Down Expand Up @@ -823,7 +832,7 @@ static void sun4m_hw_init(MachineState *machine)
unsigned int smp_cpus = machine->smp.cpus;
unsigned int max_cpus = machine->smp.max_cpus;
HostMemoryBackend *ram_memdev = machine->memdev;
NICInfo *nd = &nd_table[0];
MACAddr hostid;

if (machine->ram_size > hwdef->max_mem) {
error_report("Too much memory for this machine: %" PRId64 ","
Expand Down Expand Up @@ -884,10 +893,9 @@ static void sun4m_hw_init(MachineState *machine)
hwdef->iommu_pad_base, hwdef->iommu_pad_len);
}

qemu_check_nic_model(nd, TYPE_LANCE);
sparc32_dma_init(hwdef->dma_base,
hwdef->esp_base, slavio_irq[18],
hwdef->le_base, slavio_irq[16], nd);
hwdef->le_base, slavio_irq[16], &hostid);

if (graphic_depth != 8 && graphic_depth != 24) {
error_report("Unsupported depth: %d", graphic_depth);
Expand Down Expand Up @@ -1039,7 +1047,7 @@ static void sun4m_hw_init(MachineState *machine)
machine->initrd_filename,
machine->ram_size, &initrd_size);

nvram_init(nvram, (uint8_t *)&nd->macaddr, machine->kernel_cmdline,
nvram_init(nvram, hostid.a, machine->kernel_cmdline,
machine->boot_config.order, machine->ram_size, kernel_size,
graphic_width, graphic_height, graphic_depth,
hwdef->nvram_machine_id, "Sun4m");
Expand Down

0 comments on commit b46a06d

Please sign in to comment.