From patchwork Fri Dec 28 10:31:55 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Wang X-Patchwork-Id: 1914881 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 3C02C402E1 for ; Fri, 28 Dec 2012 10:41:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753413Ab2L1Klb (ORCPT ); Fri, 28 Dec 2012 05:41:31 -0500 Received: from mx1.redhat.com ([209.132.183.28]:25798 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753405Ab2L1Kl2 (ORCPT ); Fri, 28 Dec 2012 05:41:28 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id qBSAfB3N014710 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 28 Dec 2012 05:41:11 -0500 Received: from amd-6168-8-1.englab.nay.redhat.com (amd-6168-8-1.englab.nay.redhat.com [10.66.104.52]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id qBSAeCRM012168; Fri, 28 Dec 2012 05:41:05 -0500 From: Jason Wang To: mst@redhat.com, aliguori@us.ibm.com, stefanha@redhat.com, qemu-devel@nongnu.org Cc: rusty@rustcorp.com.au, kvm@vger.kernel.org, mprivozn@redhat.com, shiyer@redhat.com, krkumar2@in.ibm.com, jwhan@filewood.snu.ac.kr, Jason Wang Subject: [PATCH 03/12] net: introduce qemu_get_nic() Date: Fri, 28 Dec 2012 18:31:55 +0800 Message-Id: <1356690724-37891-4-git-send-email-jasowang@redhat.com> In-Reply-To: <1356690724-37891-1-git-send-email-jasowang@redhat.com> References: <1356690724-37891-1-git-send-email-jasowang@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org To support multiqueue , the patch introduce a helper qemu_get_nic() to get the NICState from a NetClientState. The following patches would refactor this helper to support multiqueue. Signed-off-by: Jason Wang --- hw/cadence_gem.c | 8 ++++---- hw/dp8393x.c | 6 +++--- hw/e1000.c | 8 ++++---- hw/eepro100.c | 6 +++--- hw/etraxfs_eth.c | 6 +++--- hw/lan9118.c | 6 +++--- hw/lance.c | 2 +- hw/mcf_fec.c | 6 +++--- hw/milkymist-minimac2.c | 6 +++--- hw/mipsnet.c | 6 +++--- hw/musicpal.c | 4 ++-- hw/ne2000-isa.c | 2 +- hw/ne2000.c | 6 +++--- hw/opencores_eth.c | 6 +++--- hw/pcnet-pci.c | 2 +- hw/pcnet.c | 6 +++--- hw/rtl8139.c | 8 ++++---- hw/smc91c111.c | 6 +++--- hw/spapr_llan.c | 4 ++-- hw/stellaris_enet.c | 6 +++--- hw/usb/dev-network.c | 6 +++--- hw/virtio-net.c | 10 +++++----- hw/xen_nic.c | 4 ++-- hw/xgmac.c | 6 +++--- hw/xilinx_axienet.c | 6 +++--- hw/xilinx_ethlite.c | 6 +++--- net.c | 20 ++++++++++++++++---- net.h | 2 ++ 28 files changed, 92 insertions(+), 78 deletions(-) diff --git a/hw/cadence_gem.c b/hw/cadence_gem.c index 9d27ecb..6874de9 100644 --- a/hw/cadence_gem.c +++ b/hw/cadence_gem.c @@ -409,7 +409,7 @@ static int gem_can_receive(NetClientState *nc) { GemState *s; - s = DO_UPCAST(NICState, nc, nc)->opaque; + s = qemu_get_nic_opaque(nc); DB_PRINT("\n"); @@ -612,7 +612,7 @@ static ssize_t gem_receive(NetClientState *nc, const uint8_t *buf, size_t size) uint8_t rxbuf[2048]; uint8_t *rxbuf_ptr; - s = DO_UPCAST(NICState, nc, nc)->opaque; + s = qemu_get_nic_opaque(nc); /* Do nothing if receive is not enabled. */ if (!(s->regs[GEM_NWCTRL] & GEM_NWCTRL_RXENA)) { @@ -1148,7 +1148,7 @@ static const MemoryRegionOps gem_ops = { static void gem_cleanup(NetClientState *nc) { - GemState *s = DO_UPCAST(NICState, nc, nc)->opaque; + GemState *s = qemu_get_nic_opaque(nc); DB_PRINT("\n"); s->nic = NULL; @@ -1157,7 +1157,7 @@ static void gem_cleanup(NetClientState *nc) static void gem_set_link(NetClientState *nc) { DB_PRINT("\n"); - phy_update_link(DO_UPCAST(NICState, nc, nc)->opaque); + phy_update_link(qemu_get_nic_opaque(nc)); } static NetClientInfo net_gem_info = { diff --git a/hw/dp8393x.c b/hw/dp8393x.c index db50cc6..8f20a4a 100644 --- a/hw/dp8393x.c +++ b/hw/dp8393x.c @@ -675,7 +675,7 @@ static const MemoryRegionOps dp8393x_ops = { static int nic_can_receive(NetClientState *nc) { - dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque; + dp8393xState *s = qemu_get_nic_opaque(nc); if (!(s->regs[SONIC_CR] & SONIC_CR_RXEN)) return 0; @@ -724,7 +724,7 @@ static int receive_filter(dp8393xState *s, const uint8_t * buf, int size) static ssize_t nic_receive(NetClientState *nc, const uint8_t * buf, size_t size) { - dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque; + dp8393xState *s = qemu_get_nic_opaque(nc); uint16_t data[10]; int packet_type; uint32_t available, address; @@ -860,7 +860,7 @@ static void nic_reset(void *opaque) static void nic_cleanup(NetClientState *nc) { - dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque; + dp8393xState *s = qemu_get_nic_opaque(nc); memory_region_del_subregion(s->address_space, &s->mmio); memory_region_destroy(&s->mmio); diff --git a/hw/e1000.c b/hw/e1000.c index aaa4f88..004f057 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -735,7 +735,7 @@ receive_filter(E1000State *s, const uint8_t *buf, int size) static void e1000_set_link_status(NetClientState *nc) { - E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque; + E1000State *s = qemu_get_nic_opaque(nc); uint32_t old_status = s->mac_reg[STATUS]; if (nc->link_down) { @@ -769,7 +769,7 @@ static bool e1000_has_rxbufs(E1000State *s, size_t total_size) static int e1000_can_receive(NetClientState *nc) { - E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque; + E1000State *s = qemu_get_nic_opaque(nc); return (s->mac_reg[RCTL] & E1000_RCTL_EN) && e1000_has_rxbufs(s, 1); } @@ -785,7 +785,7 @@ static uint64_t rx_desc_base(E1000State *s) static ssize_t e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque; + E1000State *s = qemu_get_nic_opaque(nc); struct e1000_rx_desc desc; dma_addr_t base; unsigned int n, rdt; @@ -1220,7 +1220,7 @@ e1000_mmio_setup(E1000State *d) static void e1000_cleanup(NetClientState *nc) { - E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque; + E1000State *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/eepro100.c b/hw/eepro100.c index c6e91c7..c09a315 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -1619,7 +1619,7 @@ static const MemoryRegionOps eepro100_ops = { static int nic_can_receive(NetClientState *nc) { - EEPRO100State *s = DO_UPCAST(NICState, nc, nc)->opaque; + EEPRO100State *s = qemu_get_nic_opaque(nc); TRACE(RXTX, logout("%p\n", s)); return get_ru_state(s) == ru_ready; #if 0 @@ -1633,7 +1633,7 @@ static ssize_t nic_receive(NetClientState *nc, const uint8_t * buf, size_t size) * - Magic packets should set bit 30 in power management driver register. * - Interesting packets should set bit 29 in power management driver register. */ - EEPRO100State *s = DO_UPCAST(NICState, nc, nc)->opaque; + EEPRO100State *s = qemu_get_nic_opaque(nc); uint16_t rfd_status = 0xa000; #if defined(CONFIG_PAD_RECEIVED_FRAMES) uint8_t min_buf[60]; @@ -1835,7 +1835,7 @@ static const VMStateDescription vmstate_eepro100 = { static void nic_cleanup(NetClientState *nc) { - EEPRO100State *s = DO_UPCAST(NICState, nc, nc)->opaque; + EEPRO100State *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/etraxfs_eth.c b/hw/etraxfs_eth.c index dbafb55..ee6d1ad 100644 --- a/hw/etraxfs_eth.c +++ b/hw/etraxfs_eth.c @@ -515,7 +515,7 @@ static int eth_can_receive(NetClientState *nc) static ssize_t eth_receive(NetClientState *nc, const uint8_t *buf, size_t size) { unsigned char sa_bcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque; + struct fs_eth *eth = qemu_get_nic_opaque(nc); int use_ma0 = eth->regs[RW_REC_CTRL] & 1; int use_ma1 = eth->regs[RW_REC_CTRL] & 2; int r_bcast = eth->regs[RW_REC_CTRL] & 8; @@ -551,7 +551,7 @@ static int eth_tx_push(void *opaque, unsigned char *buf, int len, bool eop) static void eth_set_link(NetClientState *nc) { - struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque; + struct fs_eth *eth = qemu_get_nic_opaque(nc); D(printf("%s %d\n", __func__, nc->link_down)); eth->phy.link = !nc->link_down; } @@ -568,7 +568,7 @@ static const MemoryRegionOps eth_ops = { static void eth_cleanup(NetClientState *nc) { - struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque; + struct fs_eth *eth = qemu_get_nic_opaque(nc); /* Disconnect the client. */ eth->dma_out->client.push = NULL; diff --git a/hw/lan9118.c b/hw/lan9118.c index 8f340a5..d1f40d5 100644 --- a/hw/lan9118.c +++ b/hw/lan9118.c @@ -386,7 +386,7 @@ static void phy_update_link(lan9118_state *s) static void lan9118_set_link(NetClientState *nc) { - phy_update_link(DO_UPCAST(NICState, nc, nc)->opaque); + phy_update_link(qemu_get_nic_opaque(nc)); } static void phy_reset(lan9118_state *s) @@ -512,7 +512,7 @@ static int lan9118_filter(lan9118_state *s, const uint8_t *addr) static ssize_t lan9118_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - lan9118_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + lan9118_state *s = qemu_get_nic_opaque(nc); int fifo_len; int offset; int src_pos; @@ -1306,7 +1306,7 @@ static const MemoryRegionOps lan9118_16bit_mem_ops = { static void lan9118_cleanup(NetClientState *nc) { - lan9118_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + lan9118_state *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/lance.c b/hw/lance.c index a3e6dd9..dc27078 100644 --- a/hw/lance.c +++ b/hw/lance.c @@ -87,7 +87,7 @@ static const MemoryRegionOps lance_mem_ops = { static void lance_cleanup(NetClientState *nc) { - PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque; + PCNetState *d = qemu_get_nic_opaque(nc); pcnet_common_cleanup(d); } diff --git a/hw/mcf_fec.c b/hw/mcf_fec.c index d7532b1..7fc89b5 100644 --- a/hw/mcf_fec.c +++ b/hw/mcf_fec.c @@ -353,13 +353,13 @@ static void mcf_fec_write(void *opaque, hwaddr addr, static int mcf_fec_can_receive(NetClientState *nc) { - mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + mcf_fec_state *s = qemu_get_nic_opaque(nc); return s->rx_enabled; } static ssize_t mcf_fec_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + mcf_fec_state *s = qemu_get_nic_opaque(nc); mcf_fec_bd bd; uint32_t flags = 0; uint32_t addr; @@ -441,7 +441,7 @@ static const MemoryRegionOps mcf_fec_ops = { static void mcf_fec_cleanup(NetClientState *nc) { - mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + mcf_fec_state *s = qemu_get_nic_opaque(nc); memory_region_del_subregion(s->sysmem, &s->iomem); memory_region_destroy(&s->iomem); diff --git a/hw/milkymist-minimac2.c b/hw/milkymist-minimac2.c index 8a5cc40..9723628 100644 --- a/hw/milkymist-minimac2.c +++ b/hw/milkymist-minimac2.c @@ -280,7 +280,7 @@ static void update_rx_interrupt(MilkymistMinimac2State *s) static ssize_t minimac2_rx(NetClientState *nc, const uint8_t *buf, size_t size) { - MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque; + MilkymistMinimac2State *s = qemu_get_nic_opaque(nc); uint32_t r_count; uint32_t r_state; @@ -410,7 +410,7 @@ static const MemoryRegionOps minimac2_ops = { static int minimac2_can_rx(NetClientState *nc) { - MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque; + MilkymistMinimac2State *s = qemu_get_nic_opaque(nc); if (s->regs[R_STATE0] == STATE_LOADED) { return 1; @@ -424,7 +424,7 @@ static int minimac2_can_rx(NetClientState *nc) static void minimac2_cleanup(NetClientState *nc) { - MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque; + MilkymistMinimac2State *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/mipsnet.c b/hw/mipsnet.c index 5d1ab5a..c411bd5 100644 --- a/hw/mipsnet.c +++ b/hw/mipsnet.c @@ -64,7 +64,7 @@ static int mipsnet_buffer_full(MIPSnetState *s) static int mipsnet_can_receive(NetClientState *nc) { - MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque; + MIPSnetState *s = qemu_get_nic_opaque(nc); if (s->busy) return 0; @@ -73,7 +73,7 @@ static int mipsnet_can_receive(NetClientState *nc) static ssize_t mipsnet_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque; + MIPSnetState *s = qemu_get_nic_opaque(nc); trace_mipsnet_receive(size); if (!mipsnet_can_receive(nc)) @@ -211,7 +211,7 @@ static const VMStateDescription vmstate_mipsnet = { static void mipsnet_cleanup(NetClientState *nc) { - MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque; + MIPSnetState *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/musicpal.c b/hw/musicpal.c index 2b62264..29ece8b 100644 --- a/hw/musicpal.c +++ b/hw/musicpal.c @@ -189,7 +189,7 @@ static int eth_can_receive(NetClientState *nc) static ssize_t eth_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - mv88w8618_eth_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + mv88w8618_eth_state *s = qemu_get_nic_opaque(nc); uint32_t desc_addr; mv88w8618_rx_desc desc; int i; @@ -368,7 +368,7 @@ static const MemoryRegionOps mv88w8618_eth_ops = { static void eth_cleanup(NetClientState *nc) { - mv88w8618_eth_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + mv88w8618_eth_state *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/ne2000-isa.c b/hw/ne2000-isa.c index 4a6105e..1f168ec 100644 --- a/hw/ne2000-isa.c +++ b/hw/ne2000-isa.c @@ -38,7 +38,7 @@ typedef struct ISANE2000State { static void isa_ne2000_cleanup(NetClientState *nc) { - NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque; + NE2000State *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/ne2000.c b/hw/ne2000.c index 21d9ace..64b73fe 100644 --- a/hw/ne2000.c +++ b/hw/ne2000.c @@ -167,7 +167,7 @@ static int ne2000_buffer_full(NE2000State *s) int ne2000_can_receive(NetClientState *nc) { - NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque; + NE2000State *s = qemu_get_nic_opaque(nc); if (s->cmd & E8390_STOP) return 1; @@ -178,7 +178,7 @@ int ne2000_can_receive(NetClientState *nc) ssize_t ne2000_receive(NetClientState *nc, const uint8_t *buf, size_t size_) { - NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque; + NE2000State *s = qemu_get_nic_opaque(nc); int size = size_; uint8_t *p; unsigned int total_len, next, avail, len, index, mcast_idx; @@ -705,7 +705,7 @@ void ne2000_setup_io(NE2000State *s, unsigned size) static void ne2000_cleanup(NetClientState *nc) { - NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque; + NE2000State *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/opencores_eth.c b/hw/opencores_eth.c index 821e54f..e91d3f6 100644 --- a/hw/opencores_eth.c +++ b/hw/opencores_eth.c @@ -313,7 +313,7 @@ static void open_eth_int_source_write(OpenEthState *s, static void open_eth_set_link_status(NetClientState *nc) { - OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque; + OpenEthState *s = qemu_get_nic_opaque(nc); if (GET_REGBIT(s, MIICOMMAND, SCANSTAT)) { SET_REGFIELD(s, MIISTATUS, LINKFAIL, nc->link_down); @@ -344,7 +344,7 @@ static void open_eth_reset(void *opaque) static int open_eth_can_receive(NetClientState *nc) { - OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque; + OpenEthState *s = qemu_get_nic_opaque(nc); return GET_REGBIT(s, MODER, RXEN) && (s->regs[TX_BD_NUM] < 0x80) && @@ -354,7 +354,7 @@ static int open_eth_can_receive(NetClientState *nc) static ssize_t open_eth_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque; + OpenEthState *s = qemu_get_nic_opaque(nc); size_t maxfl = GET_REGFIELD(s, PACKETLEN, MAXFL); size_t minfl = GET_REGFIELD(s, PACKETLEN, MINFL); size_t fcsl = 4; diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c index d9fb591..f4a03eb 100644 --- a/hw/pcnet-pci.c +++ b/hw/pcnet-pci.c @@ -266,7 +266,7 @@ static void pci_physical_memory_read(void *dma_opaque, hwaddr addr, static void pci_pcnet_cleanup(NetClientState *nc) { - PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque; + PCNetState *d = qemu_get_nic_opaque(nc); pcnet_common_cleanup(d); } diff --git a/hw/pcnet.c b/hw/pcnet.c index b3dc309..4ad4bcb 100644 --- a/hw/pcnet.c +++ b/hw/pcnet.c @@ -1006,7 +1006,7 @@ static int pcnet_tdte_poll(PCNetState *s) int pcnet_can_receive(NetClientState *nc) { - PCNetState *s = DO_UPCAST(NICState, nc, nc)->opaque; + PCNetState *s = qemu_get_nic_opaque(nc); if (CSR_STOP(s) || CSR_SPND(s)) return 0; @@ -1017,7 +1017,7 @@ int pcnet_can_receive(NetClientState *nc) ssize_t pcnet_receive(NetClientState *nc, const uint8_t *buf, size_t size_) { - PCNetState *s = DO_UPCAST(NICState, nc, nc)->opaque; + PCNetState *s = qemu_get_nic_opaque(nc); int is_padr = 0, is_bcast = 0, is_ladr = 0; uint8_t buf1[60]; int remaining; @@ -1199,7 +1199,7 @@ ssize_t pcnet_receive(NetClientState *nc, const uint8_t *buf, size_t size_) void pcnet_set_link_status(NetClientState *nc) { - PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque; + PCNetState *d = qemu_get_nic_opaque(nc); d->lnkst = nc->link_down ? 0 : 0x40; } diff --git a/hw/rtl8139.c b/hw/rtl8139.c index cb975b2..b6cb90e 100644 --- a/hw/rtl8139.c +++ b/hw/rtl8139.c @@ -786,7 +786,7 @@ static bool rtl8139_cp_rx_valid(RTL8139State *s) static int rtl8139_can_receive(NetClientState *nc) { - RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque; + RTL8139State *s = qemu_get_nic_opaque(nc); int avail; /* Receive (drop) packets if card is disabled. */ @@ -808,7 +808,7 @@ static int rtl8139_can_receive(NetClientState *nc) static ssize_t rtl8139_do_receive(NetClientState *nc, const uint8_t *buf, size_t size_, int do_interrupt) { - RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque; + RTL8139State *s = qemu_get_nic_opaque(nc); /* size is the length of the buffer passed to the driver */ int size = size_; const uint8_t *dot1q_buf = NULL; @@ -3428,7 +3428,7 @@ static void rtl8139_timer(void *opaque) static void rtl8139_cleanup(NetClientState *nc) { - RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque; + RTL8139State *s = qemu_get_nic_opaque(nc); s->nic = NULL; } @@ -3450,7 +3450,7 @@ static void pci_rtl8139_uninit(PCIDevice *dev) static void rtl8139_set_link_status(NetClientState *nc) { - RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque; + RTL8139State *s = qemu_get_nic_opaque(nc); if (nc->link_down) { s->BasicModeStatus &= ~0x04; diff --git a/hw/smc91c111.c b/hw/smc91c111.c index b466d66..b00d338 100644 --- a/hw/smc91c111.c +++ b/hw/smc91c111.c @@ -630,7 +630,7 @@ static uint32_t smc91c111_readl(void *opaque, hwaddr offset) static int smc91c111_can_receive(NetClientState *nc) { - smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + smc91c111_state *s = qemu_get_nic_opaque(nc); if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST)) return 1; @@ -641,7 +641,7 @@ static int smc91c111_can_receive(NetClientState *nc) static ssize_t smc91c111_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + smc91c111_state *s = qemu_get_nic_opaque(nc); int status; int packetsize; uint32_t crc; @@ -730,7 +730,7 @@ static const MemoryRegionOps smc91c111_mem_ops = { static void smc91c111_cleanup(NetClientState *nc) { - smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + smc91c111_state *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/spapr_llan.c b/hw/spapr_llan.c index 5232852..899831b 100644 --- a/hw/spapr_llan.c +++ b/hw/spapr_llan.c @@ -85,7 +85,7 @@ typedef struct VIOsPAPRVLANDevice { static int spapr_vlan_can_receive(NetClientState *nc) { - VIOsPAPRVLANDevice *dev = DO_UPCAST(NICState, nc, nc)->opaque; + VIOsPAPRVLANDevice *dev = qemu_get_nic_opaque(nc); return (dev->isopen && dev->rx_bufs > 0); } @@ -93,7 +93,7 @@ static int spapr_vlan_can_receive(NetClientState *nc) static ssize_t spapr_vlan_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - VIOsPAPRDevice *sdev = DO_UPCAST(NICState, nc, nc)->opaque; + VIOsPAPRDevice *sdev = qemu_get_nic_opaque(nc); VIOsPAPRVLANDevice *dev = (VIOsPAPRVLANDevice *)sdev; vlan_bd_t rxq_bd = vio_ldq(sdev, dev->buf_list + VLAN_RXQ_BD_OFF); vlan_bd_t bd; diff --git a/hw/stellaris_enet.c b/hw/stellaris_enet.c index 65d73a0..1332c11 100644 --- a/hw/stellaris_enet.c +++ b/hw/stellaris_enet.c @@ -80,7 +80,7 @@ static void stellaris_enet_update(stellaris_enet_state *s) /* TODO: Implement MAC address filtering. */ static ssize_t stellaris_enet_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + stellaris_enet_state *s = qemu_get_nic_opaque(nc); int n; uint8_t *p; uint32_t crc; @@ -122,7 +122,7 @@ static ssize_t stellaris_enet_receive(NetClientState *nc, const uint8_t *buf, si static int stellaris_enet_can_receive(NetClientState *nc) { - stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + stellaris_enet_state *s = qemu_get_nic_opaque(nc); if ((s->rctl & SE_RCTL_RXEN) == 0) return 1; @@ -383,7 +383,7 @@ static int stellaris_enet_load(QEMUFile *f, void *opaque, int version_id) static void stellaris_enet_cleanup(NetClientState *nc) { - stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque; + stellaris_enet_state *s = qemu_get_nic_opaque(nc); unregister_savevm(&s->busdev.qdev, "stellaris_enet", s); diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c index ab7e7a7..3de6218 100644 --- a/hw/usb/dev-network.c +++ b/hw/usb/dev-network.c @@ -1260,7 +1260,7 @@ static void usb_net_handle_data(USBDevice *dev, USBPacket *p) static ssize_t usbnet_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque; + USBNetState *s = qemu_get_nic_opaque(nc); uint8_t *in_buf = s->in_buf; size_t total_size = size; @@ -1307,7 +1307,7 @@ static ssize_t usbnet_receive(NetClientState *nc, const uint8_t *buf, size_t siz static int usbnet_can_receive(NetClientState *nc) { - USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque; + USBNetState *s = qemu_get_nic_opaque(nc); if (is_rndis(s) && s->rndis_state != RNDIS_DATA_INITIALIZED) { return 1; @@ -1318,7 +1318,7 @@ static int usbnet_can_receive(NetClientState *nc) static void usbnet_cleanup(NetClientState *nc) { - USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque; + USBNetState *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/virtio-net.c b/hw/virtio-net.c index 1c59db1..bf6414b 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -167,7 +167,7 @@ static void virtio_net_set_status(struct VirtIODevice *vdev, uint8_t status) static void virtio_net_set_link_status(NetClientState *nc) { - VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque; + VirtIONet *n = qemu_get_nic_opaque(nc); uint16_t old_status = n->status; if (nc->link_down) @@ -468,7 +468,7 @@ static void virtio_net_handle_rx(VirtIODevice *vdev, VirtQueue *vq) static int virtio_net_can_receive(NetClientState *nc) { - VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque; + VirtIONet *n = qemu_get_nic_opaque(nc); if (!n->vdev.vm_running) { return 0; } @@ -599,7 +599,7 @@ static int receive_filter(VirtIONet *n, const uint8_t *buf, int size) static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t size) { - VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque; + VirtIONet *n = qemu_get_nic_opaque(nc); struct iovec mhdr_sg[VIRTQUEUE_MAX_SIZE]; struct virtio_net_hdr_mrg_rxbuf mhdr; unsigned mhdr_cnt = 0; @@ -697,7 +697,7 @@ static int32_t virtio_net_flush_tx(VirtIONet *n, VirtQueue *vq); static void virtio_net_tx_complete(NetClientState *nc, ssize_t len) { - VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque; + VirtIONet *n = qemu_get_nic_opaque(nc); virtqueue_push(n->tx_vq, &n->async_tx.elem, 0); virtio_notify(&n->vdev, n->tx_vq); @@ -996,7 +996,7 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) static void virtio_net_cleanup(NetClientState *nc) { - VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque; + VirtIONet *n = qemu_get_nic_opaque(nc); n->nic = NULL; } diff --git a/hw/xen_nic.c b/hw/xen_nic.c index cfd6def..055adf4 100644 --- a/hw/xen_nic.c +++ b/hw/xen_nic.c @@ -235,7 +235,7 @@ static void net_rx_response(struct XenNetDev *netdev, static int net_rx_ok(NetClientState *nc) { - struct XenNetDev *netdev = DO_UPCAST(NICState, nc, nc)->opaque; + struct XenNetDev *netdev = qemu_get_nic_opaque(nc); RING_IDX rc, rp; if (netdev->xendev.be_state != XenbusStateConnected) { @@ -256,7 +256,7 @@ static int net_rx_ok(NetClientState *nc) static ssize_t net_rx_packet(NetClientState *nc, const uint8_t *buf, size_t size) { - struct XenNetDev *netdev = DO_UPCAST(NICState, nc, nc)->opaque; + struct XenNetDev *netdev = qemu_get_nic_opaque(nc); netif_rx_request_t rxreq; RING_IDX rc, rp; void *page; diff --git a/hw/xgmac.c b/hw/xgmac.c index 0ec3c85..bbb0433 100644 --- a/hw/xgmac.c +++ b/hw/xgmac.c @@ -310,7 +310,7 @@ static const MemoryRegionOps enet_mem_ops = { static int eth_can_rx(NetClientState *nc) { - struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct XgmacState *s = qemu_get_nic_opaque(nc); /* RX enabled? */ return s->regs[DMA_CONTROL] & DMA_CONTROL_SR; @@ -318,7 +318,7 @@ static int eth_can_rx(NetClientState *nc) static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size) { - struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct XgmacState *s = qemu_get_nic_opaque(nc); static const unsigned char sa_bcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; int unicast, broadcast, multicast; @@ -366,7 +366,7 @@ out: static void eth_cleanup(NetClientState *nc) { - struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct XgmacState *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/hw/xilinx_axienet.c b/hw/xilinx_axienet.c index 254fe72..370f16e 100644 --- a/hw/xilinx_axienet.c +++ b/hw/xilinx_axienet.c @@ -618,7 +618,7 @@ static const MemoryRegionOps enet_ops = { static int eth_can_rx(NetClientState *nc) { - struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct XilinxAXIEnet *s = qemu_get_nic_opaque(nc); /* RX enabled? */ return !axienet_rx_resetting(s) && axienet_rx_enabled(s); @@ -641,7 +641,7 @@ static int enet_match_addr(const uint8_t *buf, uint32_t f0, uint32_t f1) static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size) { - struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct XilinxAXIEnet *s = qemu_get_nic_opaque(nc); static const unsigned char sa_bcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; static const unsigned char sa_ipmcast[3] = {0x01, 0x00, 0x52}; @@ -786,7 +786,7 @@ static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size) static void eth_cleanup(NetClientState *nc) { /* FIXME. */ - struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct XilinxAXIEnet *s = qemu_get_nic_opaque(nc); g_free(s->rxmem); g_free(s); } diff --git a/hw/xilinx_ethlite.c b/hw/xilinx_ethlite.c index aa19c97..b2ace04 100644 --- a/hw/xilinx_ethlite.c +++ b/hw/xilinx_ethlite.c @@ -162,7 +162,7 @@ static const MemoryRegionOps eth_ops = { static int eth_can_rx(NetClientState *nc) { - struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct xlx_ethlite *s = qemu_get_nic_opaque(nc); int r; r = !(s->regs[R_RX_CTRL0] & CTRL_S); return r; @@ -170,7 +170,7 @@ static int eth_can_rx(NetClientState *nc) static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size) { - struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct xlx_ethlite *s = qemu_get_nic_opaque(nc); unsigned int rxbase = s->rxbuf * (0x800 / 4); /* DA filter. */ @@ -196,7 +196,7 @@ static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size) static void eth_cleanup(NetClientState *nc) { - struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque; + struct xlx_ethlite *s = qemu_get_nic_opaque(nc); s->nic = NULL; } diff --git a/net.c b/net.c index 23fcbce..ef5b8c9 100644 --- a/net.c +++ b/net.c @@ -226,7 +226,7 @@ NICState *qemu_new_nic(NetClientInfo *info, nc = qemu_new_net_client(info, conf->peer, model, name); - nic = DO_UPCAST(NICState, nc, nc); + nic = qemu_get_nic(nc); nic->conf = conf; nic->opaque = opaque; @@ -238,6 +238,18 @@ NetClientState *qemu_get_queue(NICState *nic) return &nic->nc; } +NICState *qemu_get_nic(NetClientState *nc) +{ + return DO_UPCAST(NICState, nc, nc); +} + +void *qemu_get_nic_opaque(NetClientState *nc) +{ + NICState *nic = qemu_get_nic(nc); + + return nic->opaque; +} + static void qemu_cleanup_net_client(NetClientState *nc) { QTAILQ_REMOVE(&net_clients, nc, next); @@ -264,7 +276,7 @@ void qemu_del_net_client(NetClientState *nc) { /* If there is a peer NIC, delete and cleanup client, but do not free. */ if (nc->peer && nc->peer->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { - NICState *nic = DO_UPCAST(NICState, nc, nc->peer); + NICState *nic = qemu_get_nic(nc->peer); if (nic->peer_deleted) { return; } @@ -280,7 +292,7 @@ void qemu_del_net_client(NetClientState *nc) /* If this is a peer NIC and peer has already been deleted, free it now. */ if (nc->peer && nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { - NICState *nic = DO_UPCAST(NICState, nc, nc); + NICState *nic = qemu_get_nic(nc); if (nic->peer_deleted) { qemu_free_net_client(nc->peer); } @@ -296,7 +308,7 @@ void qemu_foreach_nic(qemu_nic_foreach func, void *opaque) QTAILQ_FOREACH(nc, &net_clients, next) { if (nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { - func(DO_UPCAST(NICState, nc, nc), opaque); + func(qemu_get_nic(nc), opaque); } } } diff --git a/net.h b/net.h index fe44cb8..56b79fb 100644 --- a/net.h +++ b/net.h @@ -78,6 +78,8 @@ NICState *qemu_new_nic(NetClientInfo *info, const char *name, void *opaque); NetClientState *qemu_get_queue(NICState *nic); +NICState *qemu_get_nic(NetClientState *nc); +void *qemu_get_nic_opaque(NetClientState *nc); void qemu_del_net_client(NetClientState *nc); NetClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id, const char *client_str);