qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 10/31] ftgmac100: add IEEE 802.1Q VLAN support
Date: Fri,  8 Jun 2018 13:44:56 +0100	[thread overview]
Message-ID: <20180608124517.29475-11-peter.maydell@linaro.org> (raw)
In-Reply-To: <20180608124517.29475-1-peter.maydell@linaro.org>

From: Cédric Le Goater <clg@kaod.org>

The ftgmac100 NIC supports VLAN tag insertion and the MAC engine also
has a control to remove VLAN tags from received packets.

The VLAN control bits and VLAN tag information are contained in the
second word of the transmit and receive descriptors. The Insert VLAN
bit and the VLAN Tag available bit are only valid in the first segment
of the packet.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20180530061711.23673-3-clg@kaod.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 hw/net/ftgmac100.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/hw/net/ftgmac100.c b/hw/net/ftgmac100.c
index 425ac36cff8..abf80655f28 100644
--- a/hw/net/ftgmac100.c
+++ b/hw/net/ftgmac100.c
@@ -443,6 +443,22 @@ static void ftgmac100_do_tx(FTGMAC100State *s, uint32_t tx_ring,
             break;
         }
 
+        /* Check for VLAN */
+        if (bd.des0 & FTGMAC100_TXDES0_FTS &&
+            bd.des1 & FTGMAC100_TXDES1_INS_VLANTAG &&
+            be16_to_cpu(PKT_GET_ETH_HDR(ptr)->h_proto) != ETH_P_VLAN) {
+            if (frame_size + len + 4 > sizeof(s->frame)) {
+                qemu_log_mask(LOG_GUEST_ERROR, "%s: frame too big : %d bytes\n",
+                              __func__, len);
+                s->isr |= FTGMAC100_INT_XPKT_LOST;
+                len =  sizeof(s->frame) - frame_size - 4;
+            }
+            memmove(ptr + 16, ptr + 12, len - 12);
+            stw_be_p(ptr + 12, ETH_P_VLAN);
+            stw_be_p(ptr + 14, bd.des1);
+            len += 4;
+        }
+
         ptr += len;
         frame_size += len;
         if (bd.des0 & FTGMAC100_TXDES0_LTS) {
@@ -864,7 +880,20 @@ static ssize_t ftgmac100_receive(NetClientState *nc, const uint8_t *buf,
             buf_len += size - 4;
         }
         buf_addr = bd.des3;
-        dma_memory_write(&address_space_memory, buf_addr, buf, buf_len);
+        if (first && proto == ETH_P_VLAN && buf_len >= 18) {
+            bd.des1 = lduw_be_p(buf + 14) | FTGMAC100_RXDES1_VLANTAG_AVAIL;
+
+            if (s->maccr & FTGMAC100_MACCR_RM_VLAN) {
+                dma_memory_write(&address_space_memory, buf_addr, buf, 12);
+                dma_memory_write(&address_space_memory, buf_addr + 12, buf + 16,
+                                 buf_len - 16);
+            } else {
+                dma_memory_write(&address_space_memory, buf_addr, buf, buf_len);
+            }
+        } else {
+            bd.des1 = 0;
+            dma_memory_write(&address_space_memory, buf_addr, buf, buf_len);
+        }
         buf += buf_len;
         if (size < 4) {
             dma_memory_write(&address_space_memory, buf_addr + buf_len,
-- 
2.17.1

  parent reply	other threads:[~2018-06-08 12:45 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-08 12:44 [Qemu-devel] [PULL 00/31] target-arm queue Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 01/31] arm_gicv3_kvm: kvm_dist_get/put: skip the registers banked by GICR Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 02/31] aspeed: remove ignore_memory_transaction_failures on all boards Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 03/31] aspeed: add support for the witherspoon-bmc board Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 04/31] aspeed: add an I2C RTC device to all machines Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 05/31] smbus: add a smbus_eeprom_init_one() routine Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 06/31] aspeed: Add EEPROM I2C devices Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 07/31] misc: add pca9552 LED blinker model Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 08/31] aspeed: add the pc9552 chips to the witherspoon machine Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 09/31] ftgmac100: compute maximum frame size depending on the protocol Peter Maydell
2018-06-08 12:44 ` Peter Maydell [this message]
2018-06-08 12:44 ` [Qemu-devel] [PULL 11/31] ftgmac100: fix multicast hash routine Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 12/31] ftgmac100: remove check on runt messages Peter Maydell
2018-06-08 12:44 ` [Qemu-devel] [PULL 13/31] hw/arm: Remove the deprecated xlnx-ep108 machine Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 14/31] hw/i2c: Add trace events Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 15/31] hw/sd/milkymist-memcard: Add trailing '\n' to qemu_log() call Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 16/31] hw/digic: Add trailing '\n' to qemu_log() calls Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 17/31] xilinx-dp: Add trailing '\n' to qemu_log() call Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 18/31] ppc/pnv: Add trailing '\n' to qemu_log() calls Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 19/31] hw/core/register: Add trailing '\n' to qemu_log() call Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 20/31] hw/mips/boston: Add trailing '\n' to qemu_log() calls Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 21/31] stellaris: " Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 22/31] target/arm: " Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 23/31] target/m68k: Add trailing '\n' to qemu_log() call Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 24/31] RISC-V: Add trailing '\n' to qemu_log() calls Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 25/31] target/xtensa: " Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 26/31] sdcard: Update the Configuration Register (SCR) to Spec Version 1.10 Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 27/31] sdcard: Allow commands valid in SPI mode Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 28/31] sdcard: Add a 'spec_version' property, default to Spec v2.00 Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 29/31] sdcard: Disable SEND_IF_COND (CMD8) for Spec v1 Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 30/31] sdcard: Reflect when the Spec v3 is supported in the Config Register (SCR) Peter Maydell
2018-06-08 12:45 ` [Qemu-devel] [PULL 31/31] sdcard: Disable CMD19/CMD23 for Spec v2 Peter Maydell
2018-06-11 10:12 ` [Qemu-devel] [PULL 00/31] target-arm queue Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180608124517.29475-11-peter.maydell@linaro.org \
    --to=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).