[v2] net/e1000: build on Windows
Checks
Commit Message
This patch enables building the e1000 driver for Windows.
I tested using two Windows VM on top of VMware Fusion,
creating two e1000 devices with device ID 0x10D3,
verifying rx/tx works correctly using dpdk-testpmd.exe
rxonly and txonly mode.
Signed-off-by: William Tu <u9012063@gmail.com>
Cc: Haiyue Wang <haiyue.wang@intel.com>
---
A short demo:
https://youtu.be/UZ9hm2jQa2Y
Example when running:
PS C:\dpdk> .\build\app\dpdk-testpmd.exe
EAL: Detected CPU lcores: 4
EAL: Detected NUMA nodes: 1
EAL: Multi-process support is requested, but not available.
EAL: WARNING: TSC frequency estimated roughly - clock timings may be less accurate.
EAL: Probe PCI driver: net_e1000_em (8086:10d3) device: 0000:03:00.0 (socket 0)
EAL: Requested device 0000:1b:00.0 cannot be used
testpmd: create a new mbuf pool <mb_pool_0>: n=171456, size=2176, socket=0
testpmd: preferred mempool ops selected: ring_mp_mc
Warning! port-topology=paired and odd forward ports number, the last port will p
air with itself.
Configuring Port 0 (socket 0)
Port 0: 00:50:56:3A:4D:A6
Checking link statuses...
Done
No commandline core given, start packet forwarding
allocation mode: native
Logical Core 1 (socket 0) forwards packets on 1 streams:
RX P=0/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
io packet forwarding packets/burst=32
nb forwarding cores=1 - nb forwarding ports=1
port 0: RX queue number: 1 Tx queue number: 1
Rx offloads=0x0 Tx offloads=0x0
RX queue: 0
RX desc=256 - RX free threshold=0
TX desc=256 - TX free threshold=32
TX offloads=0x0 - TX RS bit threshold=32
Press enter to exit
Telling cores to stop...
Waiting for lcores to finish...
---------------------- Forward statistics for port 0 ------------------
RX-packets: 40361 RX-dropped: 0 RX-total: 40361
TX-packets: 40616 TX-dropped: 0 TX-total: 40616
------------------------------------------------------------------------
+++++++++++++++ Accumulated forward statistics for all ports+++++++++++
RX-packets: 40361 RX-dropped: 0 RX-total: 40361
TX-packets: 40616 TX-dropped: 0 TX-total: 40616
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
doc/guides/nics/e1000em.rst | 13 +++++++++++++
doc/guides/nics/features/e1000.ini | 1 +
doc/guides/rel_notes/release_21_11.rst | 4 ++++
drivers/net/e1000/base/e1000_osdep.h | 2 ++
drivers/net/e1000/e1000_ethdev.h | 1 +
drivers/net/e1000/meson.build | 6 ------
6 files changed, 21 insertions(+), 6 deletions(-)
Comments
> -----Original Message-----
> From: William Tu <u9012063@gmail.com>
> Sent: Friday, October 8, 2021 21:54
> To: dev@dpdk.org
> Cc: Kadam, Pallavi <pallavi.kadam@intel.com>; david.marchand@redhat.com; Wang, Haiyue
> <haiyue.wang@intel.com>
> Subject: [PATCH v2] net/e1000: build on Windows
>
> This patch enables building the e1000 driver for Windows.
> I tested using two Windows VM on top of VMware Fusion,
> creating two e1000 devices with device ID 0x10D3,
> verifying rx/tx works correctly using dpdk-testpmd.exe
> rxonly and txonly mode.
>
> Signed-off-by: William Tu <u9012063@gmail.com>
> Cc: Haiyue Wang <haiyue.wang@intel.com>
> ---
> A short demo:
> https://youtu.be/UZ9hm2jQa2Y
>
> Example when running:
> PS C:\dpdk> .\build\app\dpdk-testpmd.exe
> EAL: Detected CPU lcores: 4
> EAL: Detected NUMA nodes: 1
> EAL: Multi-process support is requested, but not available.
> EAL: WARNING: TSC frequency estimated roughly - clock timings may be less accurate.
> EAL: Probe PCI driver: net_e1000_em (8086:10d3) device: 0000:03:00.0 (socket 0)
> EAL: Requested device 0000:1b:00.0 cannot be used
> testpmd: create a new mbuf pool <mb_pool_0>: n=171456, size=2176, socket=0
> testpmd: preferred mempool ops selected: ring_mp_mc
>
> Warning! port-topology=paired and odd forward ports number, the last port will p
> air with itself.
> Configuring Port 0 (socket 0)
> Port 0: 00:50:56:3A:4D:A6
> Checking link statuses...
> Done
> No commandline core given, start packet forwarding
> allocation mode: native
> Logical Core 1 (socket 0) forwards packets on 1 streams:
> RX P=0/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
>
> io packet forwarding packets/burst=32
> nb forwarding cores=1 - nb forwarding ports=1
> port 0: RX queue number: 1 Tx queue number: 1
> Rx offloads=0x0 Tx offloads=0x0
> RX queue: 0
> RX desc=256 - RX free threshold=0
> TX desc=256 - TX free threshold=32
> TX offloads=0x0 - TX RS bit threshold=32
> Press enter to exit
>
> Telling cores to stop...
> Waiting for lcores to finish...
>
> ---------------------- Forward statistics for port 0 ------------------
> RX-packets: 40361 RX-dropped: 0 RX-total: 40361
> TX-packets: 40616 TX-dropped: 0 TX-total: 40616
> ------------------------------------------------------------------------
>
> +++++++++++++++ Accumulated forward statistics for all ports+++++++++++
> RX-packets: 40361 RX-dropped: 0 RX-total: 40361
> TX-packets: 40616 TX-dropped: 0 TX-total: 40616
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> ---
> doc/guides/nics/e1000em.rst | 13 +++++++++++++
> doc/guides/nics/features/e1000.ini | 1 +
> doc/guides/rel_notes/release_21_11.rst | 4 ++++
> drivers/net/e1000/base/e1000_osdep.h | 2 ++
> drivers/net/e1000/e1000_ethdev.h | 1 +
> drivers/net/e1000/meson.build | 6 ------
> 6 files changed, 21 insertions(+), 6 deletions(-)
>
LGTM, thanks!
Acked-by: Haiyue Wang <haiyue.wang@intel.com>
Hi @ Pallavi, What do you think about the patch ?
Your one more ACK will be nice. ;-)
>
> --
> 2.33.0.windows.2
2021-10-08 06:53 (UTC-0700), William Tu:
> This patch enables building the e1000 driver for Windows.
> I tested using two Windows VM on top of VMware Fusion,
> creating two e1000 devices with device ID 0x10D3,
> verifying rx/tx works correctly using dpdk-testpmd.exe
> rxonly and txonly mode.
>
> Signed-off-by: William Tu <u9012063@gmail.com>
> Cc: Haiyue Wang <haiyue.wang@intel.com>
Will there be an accompanying kmods patch to add the device ID to .inf?
With device ID added to netuio, in QEMU with -device e1000e,
Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> diff --git a/doc/guides/nics/e1000em.rst b/doc/guides/nics/e1000em.rst
> index 041c9a09a3a5..03ae23838bfa 100644
> --- a/doc/guides/nics/e1000em.rst
> +++ b/doc/guides/nics/e1000em.rst
> @@ -1,6 +1,8 @@
> .. SPDX-License-Identifier: BSD-3-Clause
> Copyright(c) 2010-2014 Intel Corporation.
>
> +.. include:: <isonum.txt>
> +
> Driver for VM Emulated Devices
> ==============================
>
> @@ -153,3 +155,14 @@ The following are known limitations:
> #. Qemu e1000 only supports one interrupt source, so link and Rx interrupt should be exclusive.
>
> #. Qemu e1000 does not support interrupt auto-clear, application should disable interrupt immediately when woken up.
> +
> +Windows Configuration
> +---------------------
> +
> +- Follow the :doc:`guide for Windows <../windows_gsg/run_apps>`
> + to setup the basic DPDK environment.
> +
> +- Identify the Intel\ |reg| Ethernet adapter.
> +
> +- To load NetUIO driver, follow the steps mentioned in `dpdk-kmods repository
> + <https://git.dpdk.org/dpdk-kmods/tree/windows/netuio/README.rst>`_.
There is nothing special about setting up this device on Windows.
I think we don't need this part.
On 10/8/2021 9:08 AM, Wang, Haiyue wrote:
>> -----Original Message-----
>> From: William Tu <u9012063@gmail.com>
>> Sent: Friday, October 8, 2021 21:54
>> To: dev@dpdk.org
>> Cc: Kadam, Pallavi <pallavi.kadam@intel.com>; david.marchand@redhat.com; Wang, Haiyue
>> <haiyue.wang@intel.com>
>> Subject: [PATCH v2] net/e1000: build on Windows
>>
>> This patch enables building the e1000 driver for Windows.
>> I tested using two Windows VM on top of VMware Fusion,
>> creating two e1000 devices with device ID 0x10D3,
>> verifying rx/tx works correctly using dpdk-testpmd.exe
>> rxonly and txonly mode.
>>
>> Signed-off-by: William Tu <u9012063@gmail.com>
>> Cc: Haiyue Wang <haiyue.wang@intel.com>
>> ---
>> A short demo:
>> https://youtu.be/UZ9hm2jQa2Y
>>
>> Example when running:
>> PS C:\dpdk> .\build\app\dpdk-testpmd.exe
>> EAL: Detected CPU lcores: 4
>> EAL: Detected NUMA nodes: 1
>> EAL: Multi-process support is requested, but not available.
>> EAL: WARNING: TSC frequency estimated roughly - clock timings may be less accurate.
>> EAL: Probe PCI driver: net_e1000_em (8086:10d3) device: 0000:03:00.0 (socket 0)
>> EAL: Requested device 0000:1b:00.0 cannot be used
>> testpmd: create a new mbuf pool <mb_pool_0>: n=171456, size=2176, socket=0
>> testpmd: preferred mempool ops selected: ring_mp_mc
>>
>> Warning! port-topology=paired and odd forward ports number, the last port will p
>> air with itself.
>> Configuring Port 0 (socket 0)
>> Port 0: 00:50:56:3A:4D:A6
>> Checking link statuses...
>> Done
>> No commandline core given, start packet forwarding
>> allocation mode: native
>> Logical Core 1 (socket 0) forwards packets on 1 streams:
>> RX P=0/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
>>
>> io packet forwarding packets/burst=32
>> nb forwarding cores=1 - nb forwarding ports=1
>> port 0: RX queue number: 1 Tx queue number: 1
>> Rx offloads=0x0 Tx offloads=0x0
>> RX queue: 0
>> RX desc=256 - RX free threshold=0
>> TX desc=256 - TX free threshold=32
>> TX offloads=0x0 - TX RS bit threshold=32
>> Press enter to exit
>>
>> Telling cores to stop...
>> Waiting for lcores to finish...
>>
>> ---------------------- Forward statistics for port 0 ------------------
>> RX-packets: 40361 RX-dropped: 0 RX-total: 40361
>> TX-packets: 40616 TX-dropped: 0 TX-total: 40616
>> ------------------------------------------------------------------------
>>
>> +++++++++++++++ Accumulated forward statistics for all ports+++++++++++
>> RX-packets: 40361 RX-dropped: 0 RX-total: 40361
>> TX-packets: 40616 TX-dropped: 0 TX-total: 40616
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>
>> ---
>> doc/guides/nics/e1000em.rst | 13 +++++++++++++
>> doc/guides/nics/features/e1000.ini | 1 +
>> doc/guides/rel_notes/release_21_11.rst | 4 ++++
>> drivers/net/e1000/base/e1000_osdep.h | 2 ++
>> drivers/net/e1000/e1000_ethdev.h | 1 +
>> drivers/net/e1000/meson.build | 6 ------
>> 6 files changed, 21 insertions(+), 6 deletions(-)
>>
> LGTM, thanks!
>
> Acked-by: Haiyue Wang <haiyue.wang@intel.com>
>
> Hi @ Pallavi, What do you think about the patch ?
> Your one more ACK will be nice. ;-)
Yes, code looks good to me. I actually don't have the exact same 1GbE
device William is using.
We are trying to figure out some issues with the current 1GbE device
that is installed.
So, will acknowledge as soon as we test it on Windows. Thanks,
>
>> --
>> 2.33.0.windows.2
On Fri, Oct 8, 2021 at 1:35 PM Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> wrote:
>
> 2021-10-08 06:53 (UTC-0700), William Tu:
> > This patch enables building the e1000 driver for Windows.
> > I tested using two Windows VM on top of VMware Fusion,
> > creating two e1000 devices with device ID 0x10D3,
> > verifying rx/tx works correctly using dpdk-testpmd.exe
> > rxonly and txonly mode.
> >
> > Signed-off-by: William Tu <u9012063@gmail.com>
> > Cc: Haiyue Wang <haiyue.wang@intel.com>
>
> Will there be an accompanying kmods patch to add the device ID to .inf?
>
> With device ID added to netuio, in QEMU with -device e1000e,
> Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
>
> > diff --git a/doc/guides/nics/e1000em.rst b/doc/guides/nics/e1000em.rst
> > index 041c9a09a3a5..03ae23838bfa 100644
> > --- a/doc/guides/nics/e1000em.rst
> > +++ b/doc/guides/nics/e1000em.rst
> > @@ -1,6 +1,8 @@
> > .. SPDX-License-Identifier: BSD-3-Clause
> > Copyright(c) 2010-2014 Intel Corporation.
> >
> > +.. include:: <isonum.txt>
> > +
> > Driver for VM Emulated Devices
> > ==============================
> >
> > @@ -153,3 +155,14 @@ The following are known limitations:
> > #. Qemu e1000 only supports one interrupt source, so link and Rx interrupt should be exclusive.
> >
> > #. Qemu e1000 does not support interrupt auto-clear, application should disable interrupt immediately when woken up.
> > +
> > +Windows Configuration
> > +---------------------
> > +
> > +- Follow the :doc:`guide for Windows <../windows_gsg/run_apps>`
> > + to setup the basic DPDK environment.
> > +
> > +- Identify the Intel\ |reg| Ethernet adapter.
> > +
> > +- To load NetUIO driver, follow the steps mentioned in `dpdk-kmods repository
> > + <https://git.dpdk.org/dpdk-kmods/tree/windows/netuio/README.rst>`_.
>
> There is nothing special about setting up this device on Windows.
> I think we don't need this part.
Thank you. I will add the Device ID to netuio.inf file
and remove the above part.
Will wait for Pallavi's test and resend the patch.
Thanks
William
On 10/8/2021 6:53 AM, William Tu wrote:
> This patch enables building the e1000 driver for Windows.
> I tested using two Windows VM on top of VMware Fusion,
> creating two e1000 devices with device ID 0x10D3,
> verifying rx/tx works correctly using dpdk-testpmd.exe
> rxonly and txonly mode.
>
> Signed-off-by: William Tu <u9012063@gmail.com>
> Cc: Haiyue Wang <haiyue.wang@intel.com>
> ---
Tested-by: Pallavi Kadam <pallavi.kadam@intel.com>
Acked-by: Pallavi Kadam <pallavi.kadam@intel.com>
On Fri, Oct 8, 2021 at 5:02 PM Kadam, Pallavi <pallavi.kadam@intel.com> wrote:
>
>
> On 10/8/2021 6:53 AM, William Tu wrote:
> > This patch enables building the e1000 driver for Windows.
> > I tested using two Windows VM on top of VMware Fusion,
> > creating two e1000 devices with device ID 0x10D3,
> > verifying rx/tx works correctly using dpdk-testpmd.exe
> > rxonly and txonly mode.
> >
> > Signed-off-by: William Tu <u9012063@gmail.com>
> > Cc: Haiyue Wang <haiyue.wang@intel.com>
> > ---
>
> Tested-by: Pallavi Kadam <pallavi.kadam@intel.com>
>
> Acked-by: Pallavi Kadam <pallavi.kadam@intel.com>
Thanks!
I'm curious, what device ID are you testing so I can also add it to
the netuio.inf.
William
> > +Windows Configuration
> > +---------------------
> > +
> > +- Follow the :doc:`guide for Windows <../windows_gsg/run_apps>`
> > + to setup the basic DPDK environment.
> > +
> > +- Identify the Intel\ |reg| Ethernet adapter.
> > +
> > +- To load NetUIO driver, follow the steps mentioned in `dpdk-kmods repository
> > + <https://git.dpdk.org/dpdk-kmods/tree/windows/netuio/README.rst>`_.
>
> There is nothing special about setting up this device on Windows.
> I think we don't need this part.
Hi Dmitry,
I keep this part in my v3 patch.
However, I think we should move or copy the netuio configuration
guide to DPDK repo
https://doc.dpdk.org/guides/windows_gsg/run_apps.html
maybe
4.2: Load the virt2phys driver
4.3: Load the NetUIO driver
4.4: Run helloworld example
Thanks
William
On 10/8/2021 5:14 PM, William Tu wrote:
> On Fri, Oct 8, 2021 at 5:02 PM Kadam, Pallavi <pallavi.kadam@intel.com> wrote:
>>
>> On 10/8/2021 6:53 AM, William Tu wrote:
>>> This patch enables building the e1000 driver for Windows.
>>> I tested using two Windows VM on top of VMware Fusion,
>>> creating two e1000 devices with device ID 0x10D3,
>>> verifying rx/tx works correctly using dpdk-testpmd.exe
>>> rxonly and txonly mode.
>>>
>>> Signed-off-by: William Tu <u9012063@gmail.com>
>>> Cc: Haiyue Wang <haiyue.wang@intel.com>
>>> ---
>> Tested-by: Pallavi Kadam <pallavi.kadam@intel.com>
>>
>> Acked-by: Pallavi Kadam <pallavi.kadam@intel.com>
> Thanks!
> I'm curious, what device ID are you testing so I can also add it to
> the netuio.inf.
> William
The Device ID is: 1521
Used the following string:
Intel.E1521NC.Description = "Intel(R) I350 Gigabit Network Connection"
Thanks,
Pallavi
@@ -1,6 +1,8 @@
.. SPDX-License-Identifier: BSD-3-Clause
Copyright(c) 2010-2014 Intel Corporation.
+.. include:: <isonum.txt>
+
Driver for VM Emulated Devices
==============================
@@ -153,3 +155,14 @@ The following are known limitations:
#. Qemu e1000 only supports one interrupt source, so link and Rx interrupt should be exclusive.
#. Qemu e1000 does not support interrupt auto-clear, application should disable interrupt immediately when woken up.
+
+Windows Configuration
+---------------------
+
+- Follow the :doc:`guide for Windows <../windows_gsg/run_apps>`
+ to setup the basic DPDK environment.
+
+- Identify the Intel\ |reg| Ethernet adapter.
+
+- To load NetUIO driver, follow the steps mentioned in `dpdk-kmods repository
+ <https://git.dpdk.org/dpdk-kmods/tree/windows/netuio/README.rst>`_.
@@ -27,6 +27,7 @@ Tx descriptor status = Y
Basic stats = Y
FreeBSD = Y
Linux = Y
+Windows = Y
x86-32 = Y
x86-64 = Y
@@ -73,6 +73,10 @@ New Features
* Implement support for tunnel offload.
* Updated HWRM API to version 1.10.2.44
+* **Updated Intel e1000 emulated driver.**
+
+ * Added Intel e1000 support on Windows.
+
* **Updated Intel iavf driver.**
* Added Intel iavf support on Windows.
@@ -34,7 +34,9 @@
#define DEBUGOUT6(S, args...) DEBUGOUT(S, ##args)
#define DEBUGOUT7(S, args...) DEBUGOUT(S, ##args)
+#ifndef UNREFERENCED_PARAMETER
#define UNREFERENCED_PARAMETER(_p)
+#endif
#define UNREFERENCED_1PARAMETER(_p)
#define UNREFERENCED_2PARAMETER(_p, _q)
#define UNREFERENCED_3PARAMETER(_p, _q, _r)
@@ -6,6 +6,7 @@
#define _E1000_ETHDEV_H_
#include <stdint.h>
+#include <sys/queue.h>
#include <rte_flow.h>
#include <rte_time.h>
@@ -1,12 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation
-if is_windows
- build = false
- reason = 'not supported on Windows'
- subdir_done()
-endif
-
subdir('base')
objs = [base_objs]