Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/6271/?format=api
https://patches.dpdk.org/api/patches/6271/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/1436466256-17442-2-git-send-email-stephen@networplumber.org/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1436466256-17442-2-git-send-email-stephen@networplumber.org>", "list_archive_url": "https://inbox.dpdk.org/dev/1436466256-17442-2-git-send-email-stephen@networplumber.org", "date": "2015-07-09T18:24:09", "name": "[dpdk-dev,1/8] vmxnet3: enable VLAN filtering", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "1008a5bb1e8b9edaea7c5b5b30279e2d78458a55", "submitter": { "id": 27, "url": "https://patches.dpdk.org/api/people/27/?format=api", "name": "Stephen Hemminger", "email": "stephen@networkplumber.org" }, "delegate": null, "mbox": "https://patches.dpdk.org/project/dpdk/patch/1436466256-17442-2-git-send-email-stephen@networplumber.org/mbox/", "series": [], "comments": "https://patches.dpdk.org/api/patches/6271/comments/", "check": "pending", "checks": "https://patches.dpdk.org/api/patches/6271/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@dpdk.org", "Delivered-To": "patchwork@dpdk.org", "Received": [ "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 80B7D5A99;\n\tThu, 9 Jul 2015 20:24:11 +0200 (CEST)", "from mail-pa0-f52.google.com (mail-pa0-f52.google.com\n\t[209.85.220.52]) by dpdk.org (Postfix) with ESMTP id 192945A44\n\tfor <dev@dpdk.org>; Thu, 9 Jul 2015 20:24:09 +0200 (CEST)", "by pacgz10 with SMTP id gz10so81056923pac.3\n\tfor <dev@dpdk.org>; Thu, 09 Jul 2015 11:24:08 -0700 (PDT)", "from urahara.home.lan (static-50-53-82-155.bvtn.or.frontiernet.net.\n\t[50.53.82.155]) by smtp.gmail.com with ESMTPSA id\n\tff10sm6741567pab.13.2015.07.09.11.24.07\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tThu, 09 Jul 2015 11:24:07 -0700 (PDT)" ], "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=44fp3YXS+NGGMBwSyVNOAHhaWHAOf4rBUNvl79yyaag=;\n\tb=Yl98eoJ8aPwaWA/bbvn4AC/SSfE4jta8hfWmTUqazkoQMW6atfifw6euPAafAeHGLd\n\tFuwbD2cSWzr2/U5lRbex6pik9iynoyKVVi9C4mDHWxhfxbJ3kF2YqUgluOp/Gh2rdNLo\n\tfd40Vn/uvWLt6OHbzV9MxIq71UhRy2i+mDqKPNwtbeEzIECgq/FKVPFf16JlytxDruXn\n\tNiV1pvCcP83hB9Z1qEKDzni1u+hACZnhXk5KgGfYAHZ/pEsLDYHJor2sZ5N8Ti4kgDP9\n\tQUvax4vOyYvg9FRFbDZ7+0A6xHHAPSvqLaxa2q282geFCvTCplw35NfpF9kS5XEAKH+c\n\tTYqw==", "X-Gm-Message-State": "ALoCoQk5XFv7GahmSM7y9FvVQDKX2MgF9wgX8BYf14vo1uTHUX9btxBM2Is0gU5Ume0tL0td1I29", "X-Received": "by 10.70.53.1 with SMTP id x1mr33946693pdo.114.1436466248445;\n\tThu, 09 Jul 2015 11:24:08 -0700 (PDT)", "From": "stephen@networkplumber.org", "X-Google-Original-From": "stephen@networplumber.org", "To": "dev@dpdk.org", "Date": "Thu, 9 Jul 2015 11:24:09 -0700", "Message-Id": "<1436466256-17442-2-git-send-email-stephen@networplumber.org>", "X-Mailer": "git-send-email 2.1.4", "In-Reply-To": "<1436466256-17442-1-git-send-email-stephen@networplumber.org>", "References": "<1436466256-17442-1-git-send-email-stephen@networplumber.org>", "Subject": "[dpdk-dev] [PATCH 1/8] vmxnet3: enable VLAN filtering", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "patches and discussions about DPDK <dev.dpdk.org>", "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://dpdk.org/ml/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "From: Stephen Hemminger <stephen@networkplumber.org>\n\nSupport the VLAN filter functionality of the VMXNET3 interface.\n\nSigned-off-by: Stephen Hemminger <stephen@networkplumber.org>\n---\n drivers/net/vmxnet3/vmxnet3_ethdev.c | 105 ++++++++++++++++++++++++++++++++---\n drivers/net/vmxnet3/vmxnet3_ethdev.h | 3 +-\n drivers/net/vmxnet3/vmxnet3_rxtx.c | 31 +----------\n 3 files changed, 101 insertions(+), 38 deletions(-)", "diff": "diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c\nindex 59e3122..3caa4c0 100644\n--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c\n+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c\n@@ -85,6 +85,12 @@ static void vmxnet3_dev_stats_get(struct rte_eth_dev *dev,\n \t\t\t\tstruct rte_eth_stats *stats);\n static void vmxnet3_dev_info_get(struct rte_eth_dev *dev,\n \t\t\t\tstruct rte_eth_dev_info *dev_info);\n+static int vmxnet3_dev_vlan_filter_set(struct rte_eth_dev *dev,\n+\t\t\t\t uint16_t vid, int on);\n+static void vmxnet3_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask);\n+static void vmxnet3_dev_vlan_offload_set_clear(struct rte_eth_dev *dev,\n+\t\t\t\t\t\tint mask, int clear);\n+\n #if PROCESS_SYS_EVENTS == 1\n static void vmxnet3_process_events(struct vmxnet3_hw *);\n #endif\n@@ -111,6 +117,8 @@ static const struct eth_dev_ops vmxnet3_eth_dev_ops = {\n \t.link_update = vmxnet3_dev_link_update,\n \t.stats_get = vmxnet3_dev_stats_get,\n \t.dev_infos_get = vmxnet3_dev_info_get,\n+\t.vlan_filter_set = vmxnet3_dev_vlan_filter_set,\n+\t.vlan_offload_set = vmxnet3_dev_vlan_offload_set,\n \t.rx_queue_setup = vmxnet3_dev_rx_queue_setup,\n \t.rx_queue_release = vmxnet3_dev_rx_queue_release,\n \t.tx_queue_setup = vmxnet3_dev_tx_queue_setup,\n@@ -368,7 +376,7 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)\n \tVmxnet3_DSDevRead *devRead = &shared->devRead;\n \tuint32_t *mac_ptr;\n \tuint32_t val, i;\n-\tint ret;\n+\tint ret, mask;\n \n \tshared->magic = VMXNET3_REV1_MAGIC;\n \tdevRead->misc.driverInfo.version = VMXNET3_DRIVER_VERSION_NUM;\n@@ -439,9 +447,6 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)\n \tif (dev->data->dev_conf.rxmode.hw_ip_checksum)\n \t\tdevRead->misc.uptFeatures |= VMXNET3_F_RXCSUM;\n \n-\tif (dev->data->dev_conf.rxmode.hw_vlan_strip)\n-\t\tdevRead->misc.uptFeatures |= VMXNET3_F_RXVLAN;\n-\n \tif (port_conf.rxmode.mq_mode == ETH_MQ_RX_RSS) {\n \t\tret = vmxnet3_rss_configure(dev);\n \t\tif (ret != VMXNET3_SUCCESS)\n@@ -453,11 +458,14 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)\n \t\tdevRead->rssConfDesc.confPA = hw->rss_confPA;\n \t}\n \n-\tif (dev->data->dev_conf.rxmode.hw_vlan_filter) {\n-\t\tret = vmxnet3_vlan_configure(dev);\n-\t\tif (ret != VMXNET3_SUCCESS)\n-\t\t\treturn ret;\n-\t}\n+\tmask = 0;\n+\tif (dev->data->dev_conf.rxmode.hw_vlan_strip)\n+\t\tmask |= ETH_VLAN_STRIP_MASK;\n+\n+\tif (dev->data->dev_conf.rxmode.hw_vlan_filter)\n+\t\tmask |= ETH_VLAN_FILTER_MASK;\n+\n+\tvmxnet3_dev_vlan_offload_set_clear(dev, mask, 1);\n \n \tPMD_INIT_LOG(DEBUG,\n \t\t \"Writing MAC Address : %02x:%02x:%02x:%02x:%02x:%02x\",\n@@ -693,8 +701,13 @@ static void\n vmxnet3_dev_promiscuous_enable(struct rte_eth_dev *dev)\n {\n \tstruct vmxnet3_hw *hw = dev->data->dev_private;\n+\tuint32_t *vf_table = hw->shared->devRead.rxFilterConf.vfTable;\n \n+\tmemset(vf_table, 0, VMXNET3_VFT_TABLE_SIZE);\n \tvmxnet3_dev_set_rxmode(hw, VMXNET3_RXM_PROMISC, 1);\n+\n+\tVMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD,\n+\t\t\t VMXNET3_CMD_UPDATE_VLAN_FILTERS);\n }\n \n /* Promiscuous supported only if Vmxnet3_DriverShared is initialized in adapter */\n@@ -702,8 +715,12 @@ static void\n vmxnet3_dev_promiscuous_disable(struct rte_eth_dev *dev)\n {\n \tstruct vmxnet3_hw *hw = dev->data->dev_private;\n+\tuint32_t *vf_table = hw->shared->devRead.rxFilterConf.vfTable;\n \n+\tmemcpy(vf_table, hw->shadow_vfta, VMXNET3_VFT_TABLE_SIZE);\n \tvmxnet3_dev_set_rxmode(hw, VMXNET3_RXM_PROMISC, 0);\n+\tVMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD,\n+\t\t\t VMXNET3_CMD_UPDATE_VLAN_FILTERS);\n }\n \n /* Allmulticast supported only if Vmxnet3_DriverShared is initialized in adapter */\n@@ -724,6 +741,76 @@ vmxnet3_dev_allmulticast_disable(struct rte_eth_dev *dev)\n \tvmxnet3_dev_set_rxmode(hw, VMXNET3_RXM_ALL_MULTI, 0);\n }\n \n+/* Enable/disable filter on vlan */\n+static int\n+vmxnet3_dev_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vid, int on)\n+{\n+\tstruct vmxnet3_hw *hw = dev->data->dev_private;\n+\tstruct Vmxnet3_RxFilterConf *rxConf = &hw->shared->devRead.rxFilterConf;\n+\tuint32_t *vf_table = rxConf->vfTable;\n+\n+\t/* save state for restore */\n+\tif (on)\n+\t\tVMXNET3_SET_VFTABLE_ENTRY(hw->shadow_vfta, vid);\n+\telse\n+\t\tVMXNET3_CLEAR_VFTABLE_ENTRY(hw->shadow_vfta, vid);\n+\n+\t/* don't change active filter if in promiscious mode */\n+\tif (rxConf->rxMode & VMXNET3_RXM_PROMISC)\n+\t\treturn 0;\n+\n+\t/* set in hardware */\n+\tif (on)\n+\t\tVMXNET3_SET_VFTABLE_ENTRY(vf_table, vid);\n+\telse\n+\t\tVMXNET3_CLEAR_VFTABLE_ENTRY(vf_table, vid);\n+\n+\tVMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD,\n+\t\t\t VMXNET3_CMD_UPDATE_VLAN_FILTERS);\n+\treturn 0;\n+}\n+\n+static void\n+vmxnet3_dev_vlan_offload_set_clear(struct rte_eth_dev *dev,\n+\t\t\t\t int mask, int clear)\n+{\n+\tstruct vmxnet3_hw *hw = dev->data->dev_private;\n+\tVmxnet3_DSDevRead *devRead = &hw->shared->devRead;\n+\tuint32_t *vf_table = devRead->rxFilterConf.vfTable;\n+\n+\tif (mask & ETH_VLAN_STRIP_MASK)\n+\t\tdevRead->misc.uptFeatures |= UPT1_F_RXVLAN;\n+\telse\n+\t\tdevRead->misc.uptFeatures &= ~UPT1_F_RXVLAN;\n+\n+\tVMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD,\n+\t\t\t VMXNET3_CMD_UPDATE_FEATURE);\n+\n+\tif (mask & ETH_VLAN_FILTER_MASK) {\n+\t\tif (clear) {\n+\t\t\tmemset(hw->shadow_vfta, 0,\n+\t\t\t VMXNET3_VFT_TABLE_SIZE);\n+\t\t\t/* allow untagged pkts */\n+\t\t\tVMXNET3_SET_VFTABLE_ENTRY(hw->shadow_vfta, 0);\n+\t\t}\n+\t\tmemcpy(vf_table, hw->shadow_vfta, VMXNET3_VFT_TABLE_SIZE);\n+\t} else {\n+\t\t/* allow any pkts -- no filtering */\n+\t\tif (clear)\n+\t\t\tmemset(hw->shadow_vfta, 0xff, VMXNET3_VFT_TABLE_SIZE);\n+\t\tmemset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);\n+\t}\n+\n+\tVMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD,\n+\t\t\t VMXNET3_CMD_UPDATE_VLAN_FILTERS);\n+}\n+\n+static void\n+vmxnet3_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)\n+{\n+\tvmxnet3_dev_vlan_offload_set_clear(dev, mask, 0);\n+}\n+\n #if PROCESS_SYS_EVENTS == 1\n static void\n vmxnet3_process_events(struct vmxnet3_hw *hw)\ndiff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.h b/drivers/net/vmxnet3/vmxnet3_ethdev.h\nindex 09993cf..e97e3ca 100644\n--- a/drivers/net/vmxnet3/vmxnet3_ethdev.h\n+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.h\n@@ -121,6 +121,8 @@ struct vmxnet3_hw {\n \tVMXNET3_RSSConf\t\t *rss_conf;\n \tuint64_t\t\t\t rss_confPA;\n \tvmxnet3_mf_table_t *mf_table;\n+\tuint32_t\t shadow_vfta[VMXNET3_VFT_SIZE];\n+#define VMXNET3_VFT_TABLE_SIZE \t (VMXNET3_VFT_SIZE * sizeof(uint32_t))\n };\n \n #define VMXNET3_GET_ADDR_LO(reg) ((uint32_t)(reg))\n@@ -173,7 +175,6 @@ int vmxnet3_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,\n int vmxnet3_dev_rxtx_init(struct rte_eth_dev *dev);\n \n int vmxnet3_rss_configure(struct rte_eth_dev *dev);\n-int vmxnet3_vlan_configure(struct rte_eth_dev *dev);\n \n uint16_t vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\tuint16_t nb_pkts);\ndiff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c\nindex a1eac45..14f6c1d 100644\n--- a/drivers/net/vmxnet3/vmxnet3_rxtx.c\n+++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c\n@@ -737,9 +737,9 @@ vmxnet3_dev_tx_queue_setup(struct rte_eth_dev *dev,\n \t\treturn -EINVAL;\n \t}\n \n-\tif ((tx_conf->txq_flags & ETH_TXQ_FLAGS_NOOFFLOADS) !=\n-\t ETH_TXQ_FLAGS_NOOFFLOADS) {\n-\t\tPMD_INIT_LOG(ERR, \"TX not support offload function yet\");\n+\tif ((tx_conf->txq_flags & ETH_TXQ_FLAGS_NOXSUMS) !=\n+\t ETH_TXQ_FLAGS_NOXSUMS) {\n+\t\tPMD_INIT_LOG(ERR, \"TX no support for checksum offload yet\");\n \t\treturn -EINVAL;\n \t}\n \n@@ -1041,28 +1041,3 @@ vmxnet3_rss_configure(struct rte_eth_dev *dev)\n \n \treturn VMXNET3_SUCCESS;\n }\n-\n-/*\n- * Configure VLAN Filter feature\n- */\n-int\n-vmxnet3_vlan_configure(struct rte_eth_dev *dev)\n-{\n-\tuint8_t i;\n-\tstruct vmxnet3_hw *hw = dev->data->dev_private;\n-\tuint32_t *vf_table = hw->shared->devRead.rxFilterConf.vfTable;\n-\n-\tPMD_INIT_FUNC_TRACE();\n-\n-\t/* Verify if this tag is already set */\n-\tfor (i = 0; i < VMXNET3_VFT_SIZE; i++) {\n-\t\t/* Filter all vlan tags out by default */\n-\t\tvf_table[i] = 0;\n-\t\t/* To-Do: Provide another routine in dev_ops for user config */\n-\n-\t\tPMD_INIT_LOG(DEBUG, \"Registering VLAN portid: %\"PRIu8\" tag %u\",\n-\t\t\t\t\tdev->data->port_id, vf_table[i]);\n-\t}\n-\n-\treturn VMXNET3_SUCCESS;\n-}\n", "prefixes": [ "dpdk-dev", "1/8" ] }{ "id": 6271, "url": "