[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 24/37] etraxfs: remove PROP_PTR usage
From: |
Marc-André Lureau |
Subject: |
[PULL 24/37] etraxfs: remove PROP_PTR usage |
Date: |
Tue, 7 Jan 2020 19:04:29 +0400 |
etraxfs_dma_client are not Object, so can't be exposed to user with
QOM path. Let's remove property usage and move the constructor to the
.c unit, simplifying some code on the way.
Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Peter Maydell <address@hidden>
---
include/hw/cris/etraxfs.h | 20 +++---------------
hw/net/etraxfs_eth.c | 44 +++++++++++++++++++++++++++++----------
2 files changed, 36 insertions(+), 28 deletions(-)
diff --git a/include/hw/cris/etraxfs.h b/include/hw/cris/etraxfs.h
index aa146a2cd8..403e7f95e6 100644
--- a/include/hw/cris/etraxfs.h
+++ b/include/hw/cris/etraxfs.h
@@ -30,23 +30,9 @@
#include "hw/qdev-properties.h"
#include "hw/sysbus.h"
-/* Instantiate an ETRAXFS Ethernet MAC. */
-static inline DeviceState *
-etraxfs_eth_init(NICInfo *nd, hwaddr base, int phyaddr,
- void *dma_out, void *dma_in)
-{
- DeviceState *dev;
- qemu_check_nic_model(nd, "fseth");
-
- dev = qdev_create(NULL, "etraxfs-eth");
- qdev_set_nic_properties(dev, nd);
- qdev_prop_set_uint32(dev, "phyaddr", phyaddr);
- qdev_prop_set_ptr(dev, "dma_out", dma_out);
- qdev_prop_set_ptr(dev, "dma_in", dma_in);
- qdev_init_nofail(dev);
- sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
- return dev;
-}
+DeviceState *etraxfs_eth_init(NICInfo *nd, hwaddr base, int phyaddr,
+ struct etraxfs_dma_client *dma_out,
+ struct etraxfs_dma_client *dma_in);
static inline DeviceState *etraxfs_ser_create(hwaddr addr,
qemu_irq irq,
diff --git a/hw/net/etraxfs_eth.c b/hw/net/etraxfs_eth.c
index 4cfbf1135a..f30d963487 100644
--- a/hw/net/etraxfs_eth.c
+++ b/hw/net/etraxfs_eth.c
@@ -338,14 +338,8 @@ typedef struct ETRAXFSEthState
uint8_t macaddr[2][6];
uint32_t regs[FS_ETH_MAX_REGS];
- union {
- void *vdma_out;
- struct etraxfs_dma_client *dma_out;
- };
- union {
- void *vdma_in;
- struct etraxfs_dma_client *dma_in;
- };
+ struct etraxfs_dma_client *dma_out;
+ struct etraxfs_dma_client *dma_in;
/* MDIO bus. */
struct qemu_mdio mdio_bus;
@@ -635,8 +629,6 @@ static void etraxfs_eth_realize(DeviceState *dev, Error
**errp)
static Property etraxfs_eth_properties[] = {
DEFINE_PROP_UINT32("phyaddr", ETRAXFSEthState, phyaddr, 1),
- DEFINE_PROP_PTR("dma_out", ETRAXFSEthState, vdma_out),
- DEFINE_PROP_PTR("dma_in", ETRAXFSEthState, vdma_in),
DEFINE_NIC_PROPERTIES(ETRAXFSEthState, conf),
DEFINE_PROP_END_OF_LIST(),
};
@@ -648,10 +640,40 @@ static void etraxfs_eth_class_init(ObjectClass *klass,
void *data)
dc->realize = etraxfs_eth_realize;
dc->reset = etraxfs_eth_reset;
dc->props = etraxfs_eth_properties;
- /* Reason: pointer properties "dma_out", "dma_in" */
+ /* Reason: dma_out, dma_in are not user settable */
dc->user_creatable = false;
}
+
+/* Instantiate an ETRAXFS Ethernet MAC. */
+DeviceState *
+etraxfs_eth_init(NICInfo *nd, hwaddr base, int phyaddr,
+ struct etraxfs_dma_client *dma_out,
+ struct etraxfs_dma_client *dma_in)
+{
+ DeviceState *dev;
+ qemu_check_nic_model(nd, "fseth");
+
+ dev = qdev_create(NULL, "etraxfs-eth");
+ qdev_set_nic_properties(dev, nd);
+ qdev_prop_set_uint32(dev, "phyaddr", phyaddr);
+
+ /*
+ * TODO: QOM design, define a QOM interface for "I am an etraxfs
+ * DMA client" (which replaces the current 'struct
+ * etraxfs_dma_client' ad-hoc interface), implement it on the
+ * ethernet device, and then have QOM link properties on the DMA
+ * controller device so that you can pass the interface
+ * implementations to it.
+ */
+ ETRAX_FS_ETH(dev)->dma_out = dma_out;
+ ETRAX_FS_ETH(dev)->dma_in = dma_in;
+ qdev_init_nofail(dev);
+ sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
+
+ return dev;
+}
+
static const TypeInfo etraxfs_eth_info = {
.name = TYPE_ETRAX_FS_ETH,
.parent = TYPE_SYS_BUS_DEVICE,
--
2.25.0.rc1.20.g2443f3f80d
- [PULL 13/37] serial-mm: add "regshift" property, (continued)
- [PULL 13/37] serial-mm: add "regshift" property, Marc-André Lureau, 2020/01/07
- [PULL 14/37] serial-mm: add endianness property, Marc-André Lureau, 2020/01/07
- [PULL 15/37] serial-mm: use sysbus facilities, Marc-André Lureau, 2020/01/07
- [PULL 17/37] mips: inline serial_init(), Marc-André Lureau, 2020/01/07
- [PULL 16/37] serial: make SerialIO a sysbus device, Marc-André Lureau, 2020/01/07
- [PULL 18/37] mips: baudbase is 115200 by default, Marc-André Lureau, 2020/01/07
- [PULL 19/37] mips: use sysbus_add_io(), Marc-André Lureau, 2020/01/07
- [PULL 20/37] mips: use sysbus_mmio_get_region() instead of internal fields, Marc-André Lureau, 2020/01/07
- [PULL 21/37] sm501: make SerialMM a child, export chardev property, Marc-André Lureau, 2020/01/07
- [PULL 22/37] vmmouse: replace PROP_PTR with PROP_LINK, Marc-André Lureau, 2020/01/07
- [PULL 24/37] etraxfs: remove PROP_PTR usage,
Marc-André Lureau <=
- [PULL 23/37] lance: replace PROP_PTR with PROP_LINK, Marc-André Lureau, 2020/01/07
- [PULL 25/37] dp8393x: replace PROP_PTR with PROP_LINK, Marc-André Lureau, 2020/01/07
- [PULL 26/37] leon3: use qemu_irq framework instead of callback as property, Marc-André Lureau, 2020/01/07
- [PULL 27/37] leon3: use qdev gpio facilities for the PIL, Marc-André Lureau, 2020/01/07
- [PULL 28/37] qdev: use g_strcmp0() instead of open-coding it, Marc-André Lureau, 2020/01/07
- [PULL 29/37] mips/cps: fix setting saar property, Marc-André Lureau, 2020/01/07
- [PULL 30/37] cris: improve passing PIC interrupt vector to the CPU, Marc-André Lureau, 2020/01/07
- [PULL 31/37] smbus-eeprom: remove PROP_PTR, Marc-André Lureau, 2020/01/07
- [PULL 32/37] omap-intc: remove PROP_PTR, Marc-André Lureau, 2020/01/07
- [PULL 33/37] omap-i2c: remove PROP_PTR, Marc-André Lureau, 2020/01/07