Commit 418dcf5b7da0efefea33ad4e96434feff57524d5
1 parent
6a824ec3
smc91c111 qdev conversion
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
1 changed file
with
31 additions
and
10 deletions
hw/smc91c111.c
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 | * This code is licenced under the GPL |
8 | 8 | */ |
9 | 9 | |
10 | -#include "hw.h" | |
10 | +#include "sysbus.h" | |
11 | 11 | #include "net.h" |
12 | 12 | #include "devices.h" |
13 | 13 | /* For crc32 */ |
... | ... | @@ -17,6 +17,7 @@ |
17 | 17 | #define NUM_PACKETS 4 |
18 | 18 | |
19 | 19 | typedef struct { |
20 | + SysBusDevice busdev; | |
20 | 21 | VLANClientState *vc; |
21 | 22 | uint16_t tcr; |
22 | 23 | uint16_t rcr; |
... | ... | @@ -697,24 +698,44 @@ static void smc91c111_cleanup(VLANClientState *vc) |
697 | 698 | qemu_free(s); |
698 | 699 | } |
699 | 700 | |
700 | -void smc91c111_init(NICInfo *nd, uint32_t base, qemu_irq irq) | |
701 | +static void smc91c111_init1(SysBusDevice *dev) | |
701 | 702 | { |
702 | - smc91c111_state *s; | |
703 | - | |
704 | - qemu_check_nic_model(nd, "smc91c111"); | |
703 | + smc91c111_state *s = FROM_SYSBUS(smc91c111_state, dev); | |
705 | 704 | |
706 | - s = (smc91c111_state *)qemu_mallocz(sizeof(smc91c111_state)); | |
707 | 705 | s->mmio_index = cpu_register_io_memory(0, smc91c111_readfn, |
708 | 706 | smc91c111_writefn, s); |
709 | - cpu_register_physical_memory(base, 16, s->mmio_index); | |
710 | - s->irq = irq; | |
711 | - memcpy(s->macaddr, nd->macaddr, 6); | |
707 | + sysbus_init_mmio(dev, 16, s->mmio_index); | |
708 | + sysbus_init_irq(dev, &s->irq); | |
709 | + qdev_get_macaddr(&dev->qdev, s->macaddr); | |
712 | 710 | |
713 | 711 | smc91c111_reset(s); |
714 | 712 | |
715 | - s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name, | |
713 | + s->vc = qdev_get_vlan_client(&dev->qdev, | |
716 | 714 | smc91c111_receive, smc91c111_can_receive, |
717 | 715 | smc91c111_cleanup, s); |
718 | 716 | qemu_format_nic_info_str(s->vc, s->macaddr); |
719 | 717 | /* ??? Save/restore. */ |
720 | 718 | } |
719 | + | |
720 | +static void smc91c111_register_devices(void) | |
721 | +{ | |
722 | + sysbus_register_dev("smc91c111", sizeof(smc91c111_state), smc91c111_init1); | |
723 | +} | |
724 | + | |
725 | +/* Legacy helper function. Should go away when machine config files are | |
726 | + implemented. */ | |
727 | +void smc91c111_init(NICInfo *nd, uint32_t base, qemu_irq irq) | |
728 | +{ | |
729 | + DeviceState *dev; | |
730 | + SysBusDevice *s; | |
731 | + | |
732 | + qemu_check_nic_model(nd, "smc91c111"); | |
733 | + dev = qdev_create(NULL, "smc91c111"); | |
734 | + qdev_set_netdev(dev, nd); | |
735 | + qdev_init(dev); | |
736 | + s = sysbus_from_qdev(dev); | |
737 | + sysbus_mmio_map(s, 0, base); | |
738 | + sysbus_connect_irq(s, 0, irq); | |
739 | +} | |
740 | + | |
741 | +device_init(smc91c111_register_devices) | ... | ... |