From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:45173) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R0JJf-0000Ls-Sy for qemu-devel@nongnu.org; Sun, 04 Sep 2011 16:29:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R0JJe-0001bU-Fu for qemu-devel@nongnu.org; Sun, 04 Sep 2011 16:29:19 -0400 Received: from smtp5-g21.free.fr ([212.27.42.5]:56136) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R0JJd-0001bD-TQ for qemu-devel@nongnu.org; Sun, 04 Sep 2011 16:29:18 -0400 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 4 Sep 2011 22:29:26 +0200 Message-Id: <1315168167-10654-1-git-send-email-hpoussin@reactos.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 1/2] mipsnet: convert to qdev List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Move mipsnet_init() function to mipssim machine Signed-off-by: Herv=C3=A9 Poussineau --- hw/mips.h | 3 -- hw/mips_mipssim.c | 18 ++++++++++++ hw/mipsnet.c | 80 +++++++++++++++++++++++++++++++----------------= ------ 3 files changed, 65 insertions(+), 36 deletions(-) diff --git a/hw/mips.h b/hw/mips.h index 472cfb0..4d4d503 100644 --- a/hw/mips.h +++ b/hw/mips.h @@ -8,9 +8,6 @@ PCIBus *gt64120_register(qemu_irq *pic); /* bonito.c */ PCIBus *bonito_init(qemu_irq *pic); =20 -/* mipsnet.c */ -void mipsnet_init(int base, qemu_irq irq, NICInfo *nd); - /* rc4030.c */ typedef struct rc4030DMAState *rc4030_dma; void rc4030_dma_memory_rw(void *opaque, target_phys_addr_t addr, uint8_t= *buf, int len, int is_write); diff --git a/hw/mips_mipssim.c b/hw/mips_mipssim.c index 0d46cc4..ac65555 100644 --- a/hw/mips_mipssim.c +++ b/hw/mips_mipssim.c @@ -35,6 +35,8 @@ #include "mips-bios.h" #include "loader.h" #include "elf.h" +#include "sysbus.h" +#include "exec-memory.h" =20 static struct _loaderparams { int ram_size; @@ -112,6 +114,22 @@ static void main_cpu_reset(void *opaque) } } =20 +static void mipsnet_init(int base, qemu_irq irq, NICInfo *nd) +{ + DeviceState *dev; + SysBusDevice *s; + + dev =3D qdev_create(NULL, "mipsnet"); + qdev_set_nic_properties(dev, nd); + qdev_init_nofail(dev); + + s =3D sysbus_from_qdev(dev); + sysbus_connect_irq(s, 0, irq); + memory_region_add_subregion(get_system_io(), + base, + sysbus_mmio_get_region(s, 0)); +} + static void mips_mipssim_init (ram_addr_t ram_size, const char *boot_device, diff --git a/hw/mipsnet.c b/hw/mipsnet.c index b889ee0..9a29ffe 100644 --- a/hw/mipsnet.c +++ b/hw/mipsnet.c @@ -1,7 +1,6 @@ #include "hw.h" -#include "mips.h" #include "net.h" -#include "isa.h" +#include "sysbus.h" =20 //#define DEBUG_MIPSNET_SEND //#define DEBUG_MIPSNET_RECEIVE @@ -25,6 +24,8 @@ #define MAX_ETH_FRAME_SIZE 1514 =20 typedef struct MIPSnetState { + SysBusDevice busdev; + uint32_t busy; uint32_t rx_count; uint32_t rx_read; @@ -33,7 +34,7 @@ typedef struct MIPSnetState { uint32_t intctl; uint8_t rx_buffer[MAX_ETH_FRAME_SIZE]; uint8_t tx_buffer[MAX_ETH_FRAME_SIZE]; - int io_base; + MemoryRegion io; qemu_irq irq; NICState *nic; NICConf conf; @@ -103,7 +104,8 @@ static ssize_t mipsnet_receive(VLANClientState *nc, c= onst uint8_t *buf, size_t s return size; } =20 -static uint32_t mipsnet_ioport_read(void *opaque, uint32_t addr) +static uint64_t mipsnet_ioport_read(void *opaque, target_phys_addr_t add= r, + unsigned int size) { MIPSnetState *s =3D opaque; int ret =3D 0; @@ -150,7 +152,8 @@ static uint32_t mipsnet_ioport_read(void *opaque, uin= t32_t addr) return ret; } =20 -static void mipsnet_ioport_write(void *opaque, uint32_t addr, uint32_t v= al) +static void mipsnet_ioport_write(void *opaque, target_phys_addr_t addr, + uint64_t val, unsigned int size) { MIPSnetState *s =3D opaque; =20 @@ -224,11 +227,7 @@ static void mipsnet_cleanup(VLANClientState *nc) { MIPSnetState *s =3D DO_UPCAST(NICState, nc, nc)->opaque; =20 - vmstate_unregister(NULL, &vmstate_mipsnet, s); - - isa_unassign_ioport(s->io_base, 36); - - g_free(s); + s->nic =3D NULL; } =20 static NetClientInfo net_mipsnet_info =3D { @@ -239,35 +238,50 @@ static NetClientInfo net_mipsnet_info =3D { .cleanup =3D mipsnet_cleanup, }; =20 -void mipsnet_init (int base, qemu_irq irq, NICInfo *nd) -{ - MIPSnetState *s; - - qemu_check_nic_model(nd, "mipsnet"); +static MemoryRegionOps mipsnet_ioport_ops =3D { + .read =3D mipsnet_ioport_read, + .write =3D mipsnet_ioport_write, + .impl.min_access_size =3D 1, + .impl.max_access_size =3D 4, +}; =20 - s =3D g_malloc0(sizeof(MIPSnetState)); +static int mipsnet_sysbus_init(SysBusDevice *dev) +{ + MIPSnetState *s =3D DO_UPCAST(MIPSnetState, busdev, dev); =20 - register_ioport_write(base, 36, 1, mipsnet_ioport_write, s); - register_ioport_read(base, 36, 1, mipsnet_ioport_read, s); - register_ioport_write(base, 36, 2, mipsnet_ioport_write, s); - register_ioport_read(base, 36, 2, mipsnet_ioport_read, s); - register_ioport_write(base, 36, 4, mipsnet_ioport_write, s); - register_ioport_read(base, 36, 4, mipsnet_ioport_read, s); + memory_region_init_io(&s->io, &mipsnet_ioport_ops, s, "mipsnet-io", = 36); + sysbus_init_mmio_region(dev, &s->io); + sysbus_init_irq(dev, &s->irq); =20 - s->io_base =3D base; - s->irq =3D irq; + s->nic =3D qemu_new_nic(&net_mipsnet_info, &s->conf, + dev->qdev.info->name, dev->qdev.id, s); + qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a); =20 - if (nd) { - s->conf.macaddr =3D nd->macaddr; - s->conf.vlan =3D nd->vlan; - s->conf.peer =3D nd->netdev; + return 0; +} =20 - s->nic =3D qemu_new_nic(&net_mipsnet_info, &s->conf, - nd->model, nd->name, s); +static void mipsnet_sysbus_reset(DeviceState *dev) +{ + MIPSnetState *s =3D DO_UPCAST(MIPSnetState, busdev.qdev, dev); + mipsnet_reset(s); +} =20 - qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a); +static SysBusDeviceInfo mipsnet_info =3D { + .init =3D mipsnet_sysbus_init, + .qdev.name =3D "mipsnet", + .qdev.desc =3D "MIPS Simulator network device", + .qdev.size =3D sizeof(MIPSnetState), + .qdev.vmsd =3D &vmstate_mipsnet, + .qdev.reset =3D mipsnet_sysbus_reset, + .qdev.props =3D (Property[]) { + DEFINE_NIC_PROPERTIES(MIPSnetState, conf), + DEFINE_PROP_END_OF_LIST(), } +}; =20 - mipsnet_reset(s); - vmstate_register(NULL, 0, &vmstate_mipsnet, s); +static void mipsnet_register_devices(void) +{ + sysbus_register_withprop(&mipsnet_info); } + +device_init(mipsnet_register_devices) --=20 1.7.5.4