mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
hw/mips/jazz: move PROM and checksum calculation from dp8393x device to board
This is in preparation for each board to have its own separate bit storage format and checksum for storing the MAC address. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Tested-by: Finn Thain <fthain@linux-m68k.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20210625065401.30170-4-mark.cave-ayland@ilande.co.uk> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
parent
c0af04a436
commit
5d53baf3f5
1 changed files with 22 additions and 1 deletions
|
@ -119,6 +119,8 @@ static const MemoryRegionOps dma_dummy_ops = {
|
|||
#define MAGNUM_BIOS_SIZE \
|
||||
(BIOS_SIZE < MAGNUM_BIOS_SIZE_MAX ? BIOS_SIZE : MAGNUM_BIOS_SIZE_MAX)
|
||||
|
||||
#define SONIC_PROM_SIZE 0x1000
|
||||
|
||||
static void mips_jazz_init(MachineState *machine,
|
||||
enum jazz_model_e jazz_model)
|
||||
{
|
||||
|
@ -137,6 +139,7 @@ static void mips_jazz_init(MachineState *machine,
|
|||
MemoryRegion *rtc = g_new(MemoryRegion, 1);
|
||||
MemoryRegion *i8042 = g_new(MemoryRegion, 1);
|
||||
MemoryRegion *dma_dummy = g_new(MemoryRegion, 1);
|
||||
MemoryRegion *dp8393x_prom = g_new(MemoryRegion, 1);
|
||||
NICInfo *nd;
|
||||
DeviceState *dev, *rc4030;
|
||||
SysBusDevice *sysbus;
|
||||
|
@ -228,6 +231,10 @@ static void mips_jazz_init(MachineState *machine,
|
|||
NULL, "dummy_dma", 0x1000);
|
||||
memory_region_add_subregion(address_space, 0x8000d000, dma_dummy);
|
||||
|
||||
memory_region_init_rom(dp8393x_prom, NULL, "dp8393x-jazz.prom",
|
||||
SONIC_PROM_SIZE, &error_fatal);
|
||||
memory_region_add_subregion(address_space, 0x8000b000, dp8393x_prom);
|
||||
|
||||
/* ISA bus: IO space at 0x90000000, mem space at 0x91000000 */
|
||||
memory_region_init(isa_io, NULL, "isa-io", 0x00010000);
|
||||
memory_region_init(isa_mem, NULL, "isa-mem", 0x01000000);
|
||||
|
@ -275,6 +282,9 @@ static void mips_jazz_init(MachineState *machine,
|
|||
nd->model = g_strdup("dp83932");
|
||||
}
|
||||
if (strcmp(nd->model, "dp83932") == 0) {
|
||||
int checksum, i;
|
||||
uint8_t *prom;
|
||||
|
||||
qemu_check_nic_model(nd, "dp83932");
|
||||
|
||||
dev = qdev_new("dp8393x");
|
||||
|
@ -285,8 +295,19 @@ static void mips_jazz_init(MachineState *machine,
|
|||
sysbus = SYS_BUS_DEVICE(dev);
|
||||
sysbus_realize_and_unref(sysbus, &error_fatal);
|
||||
sysbus_mmio_map(sysbus, 0, 0x80001000);
|
||||
sysbus_mmio_map(sysbus, 1, 0x8000b000);
|
||||
sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(rc4030, 4));
|
||||
|
||||
/* Add MAC address with valid checksum to PROM */
|
||||
prom = memory_region_get_ram_ptr(dp8393x_prom);
|
||||
checksum = 0;
|
||||
for (i = 0; i < 6; i++) {
|
||||
prom[i] = nd->macaddr.a[i];
|
||||
checksum += prom[i];
|
||||
if (checksum > 0xff) {
|
||||
checksum = (checksum + 1) & 0xff;
|
||||
}
|
||||
}
|
||||
prom[7] = 0xff - checksum;
|
||||
break;
|
||||
} else if (is_help_option(nd->model)) {
|
||||
error_report("Supported NICs: dp83932");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue