mirror of https://github.com/xemu-project/xemu.git
net/dp8393x: add PROM to store MAC address
Signed-off-by: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org> Reviewed-by: Aurelien Jarno <aurelien@aurel32.net> Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
This commit is contained in:
parent
104655a5c8
commit
89ae0ff9b7
|
@ -282,6 +282,7 @@ static void mips_jazz_init(MachineState *machine,
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
sysbus = SYS_BUS_DEVICE(dev);
|
sysbus = SYS_BUS_DEVICE(dev);
|
||||||
sysbus_mmio_map(sysbus, 0, 0x80001000);
|
sysbus_mmio_map(sysbus, 0, 0x80001000);
|
||||||
|
sysbus_mmio_map(sysbus, 1, 0x8000b000);
|
||||||
sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(rc4030, 4));
|
sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(rc4030, 4));
|
||||||
break;
|
break;
|
||||||
} else if (is_help_option(nd->model)) {
|
} else if (is_help_option(nd->model)) {
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
//#define DEBUG_SONIC
|
//#define DEBUG_SONIC
|
||||||
|
|
||||||
|
#define SONIC_PROM_SIZE 0x1000
|
||||||
|
|
||||||
#ifdef DEBUG_SONIC
|
#ifdef DEBUG_SONIC
|
||||||
#define DPRINTF(fmt, ...) \
|
#define DPRINTF(fmt, ...) \
|
||||||
|
@ -156,6 +157,7 @@ typedef struct dp8393xState {
|
||||||
NICConf conf;
|
NICConf conf;
|
||||||
NICState *nic;
|
NICState *nic;
|
||||||
MemoryRegion mmio;
|
MemoryRegion mmio;
|
||||||
|
MemoryRegion prom;
|
||||||
|
|
||||||
/* Registers */
|
/* Registers */
|
||||||
uint8_t cam[16][6];
|
uint8_t cam[16][6];
|
||||||
|
@ -816,12 +818,15 @@ static void dp8393x_instance_init(Object *obj)
|
||||||
dp8393xState *s = DP8393X(obj);
|
dp8393xState *s = DP8393X(obj);
|
||||||
|
|
||||||
sysbus_init_mmio(sbd, &s->mmio);
|
sysbus_init_mmio(sbd, &s->mmio);
|
||||||
|
sysbus_init_mmio(sbd, &s->prom);
|
||||||
sysbus_init_irq(sbd, &s->irq);
|
sysbus_init_irq(sbd, &s->irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dp8393x_realize(DeviceState *dev, Error **errp)
|
static void dp8393x_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
dp8393xState *s = DP8393X(dev);
|
dp8393xState *s = DP8393X(dev);
|
||||||
|
int i, checksum;
|
||||||
|
uint8_t *prom;
|
||||||
|
|
||||||
address_space_init(&s->as, s->dma_mr, "dp8393x");
|
address_space_init(&s->as, s->dma_mr, "dp8393x");
|
||||||
memory_region_init_io(&s->mmio, OBJECT(dev), &dp8393x_ops, s,
|
memory_region_init_io(&s->mmio, OBJECT(dev), &dp8393x_ops, s,
|
||||||
|
@ -833,6 +838,19 @@ static void dp8393x_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
s->watchdog = timer_new_ns(QEMU_CLOCK_VIRTUAL, dp8393x_watchdog, s);
|
s->watchdog = timer_new_ns(QEMU_CLOCK_VIRTUAL, dp8393x_watchdog, s);
|
||||||
s->regs[SONIC_SR] = 0x0004; /* only revision recognized by Linux */
|
s->regs[SONIC_SR] = 0x0004; /* only revision recognized by Linux */
|
||||||
|
|
||||||
|
memory_region_init_rom_device(&s->prom, OBJECT(dev), NULL, NULL,
|
||||||
|
"dp8393x-prom", SONIC_PROM_SIZE, NULL);
|
||||||
|
prom = memory_region_get_ram_ptr(&s->prom);
|
||||||
|
checksum = 0;
|
||||||
|
for (i = 0; i < 6; i++) {
|
||||||
|
prom[i] = s->conf.macaddr.a[i];
|
||||||
|
checksum += prom[i];
|
||||||
|
if (checksum > 0xff) {
|
||||||
|
checksum = (checksum + 1) & 0xff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prom[7] = 0xff - checksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Property dp8393x_properties[] = {
|
static Property dp8393x_properties[] = {
|
||||||
|
|
Loading…
Reference in New Issue