DPDK patches and discussions
 help / color / mirror / Atom feed
From: Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>
To: dev@dpdk.org, thomas@monjalon.net, haramakr@linux.microsoft.com,
	ocardona@microsoft.com, pallavi.kadam@intel.com,
	dmitry.kozliuk@gmail.com
Cc: ranjit.menon@intel.com, dmitrym@microsoft.com,
	Harini Ramakrishnan <haramakr@microsoft.com>
Subject: [dpdk-dev] [PATCH 09/22] doc: remove embedded buffer from Windows UIO ioctl
Date: Thu, 13 Aug 2020 16:21:32 -0700	[thread overview]
Message-ID: <1597360905-74106-10-git-send-email-navasile@linux.microsoft.com> (raw)
In-Reply-To: <1597360905-74106-1-git-send-email-navasile@linux.microsoft.com>

From: Harini Ramakrishnan <haramakr@microsoft.com>

---
 kernel/windows/netuio/netuio_interface.h |  9 ++++-
 kernel/windows/netuio/netuio_queue.c     | 43 ++++++++++++++++++------
 2 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/kernel/windows/netuio/netuio_interface.h b/kernel/windows/netuio/netuio_interface.h
index b86bf5d3f..f84ee895c 100644
--- a/kernel/windows/netuio/netuio_interface.h
+++ b/kernel/windows/netuio/netuio_interface.h
@@ -59,9 +59,16 @@ struct dpdk_private_info
 struct dpdk_pci_config_io
 {
     struct dev_addr     dev_addr;
-    PVOID               buf;
     UINT32              offset;
     enum pci_io         op;
+    UINT32              access_size; // 1, 2, 4, or 8 bytes
+
+    union dpdk_pci_config_io_data {
+        UINT8			u8;
+        UINT16			u16;
+        UINT32			u32;
+        UINT64			u64;
+    } data;
 };
 
 #pragma pack(pop)
diff --git a/kernel/windows/netuio/netuio_queue.c b/kernel/windows/netuio/netuio_queue.c
index 312d4b682..929192880 100644
--- a/kernel/windows/netuio/netuio_queue.c
+++ b/kernel/windows/netuio/netuio_queue.c
@@ -11,22 +11,23 @@
 #pragma alloc_text (PAGE, netuio_queue_initialize)
 #endif
 
-VOID netuio_read_PCI_config(PNETUIO_CONTEXT_DATA netuio_contextdata, ULONG offset, PVOID buffer)
+VOID netuio_read_PCI_config(PNETUIO_CONTEXT_DATA netuio_contextdata, ULONG offset, UINT32 access_size, _Out_ UINT64 *output)
 {
+    *output = 0;
     netuio_contextdata->bus_interface.GetBusData(netuio_contextdata->bus_interface.Context,
                                                  PCI_WHICHSPACE_CONFIG,
-                                                 buffer,
+                                                 output,
                                                  offset,
-                                                 sizeof(UINT32));
+                                                 access_size);
 }
 
-VOID netuio_write_PCI_config(PNETUIO_CONTEXT_DATA netuio_contextdata, ULONG offset, PVOID buffer)
+VOID netuio_write_PCI_config(PNETUIO_CONTEXT_DATA netuio_contextdata, ULONG offset, UINT32 access_size, union dpdk_pci_config_io_data const *input)
 {
     netuio_contextdata->bus_interface.SetBusData(netuio_contextdata->bus_interface.Context,
                                                  PCI_WHICHSPACE_CONFIG,
-                                                 buffer,
+                                                 (PVOID)input,
                                                  offset,
-                                                 sizeof(UINT32));
+                                                 access_size);
 }
 
 static NTSTATUS
@@ -180,6 +181,15 @@ netuio_evt_IO_device_control(_In_ WDFQUEUE Queue, _In_ WDFREQUEST Request,
         }
 
         struct dpdk_pci_config_io *dpdk_pci_io_input = (struct dpdk_pci_config_io *)input_buf;
+
+        if (dpdk_pci_io_input->access_size != 1 &&
+            dpdk_pci_io_input->access_size != 2 &&
+            dpdk_pci_io_input->access_size != 4 &&
+            dpdk_pci_io_input->access_size != 8) {
+            status = STATUS_INVALID_PARAMETER;
+            break;
+        }
+
         // Ensure that the B:D:F match - otherwise, fail the IOCTL
         if ((netuio_contextdata->addr.bus_num != dpdk_pci_io_input->dev_addr.bus_num) ||
             (netuio_contextdata->addr.dev_num != dpdk_pci_io_input->dev_addr.dev_num) ||
@@ -188,7 +198,7 @@ netuio_evt_IO_device_control(_In_ WDFQUEUE Queue, _In_ WDFREQUEST Request,
             break;
         }
         // Retrieve output buffer
-        status = WdfRequestRetrieveOutputBuffer(Request, sizeof(UINT32), &output_buf, &output_buf_size);
+        status = WdfRequestRetrieveOutputBuffer(Request, sizeof(UINT64), &output_buf, &output_buf_size);
         if (!NT_SUCCESS(status)) {
             status = STATUS_INVALID_BUFFER_SIZE;
             break;
@@ -196,13 +206,24 @@ netuio_evt_IO_device_control(_In_ WDFQUEUE Queue, _In_ WDFREQUEST Request,
         ASSERT(output_buf_size == OutputBufferLength);
 
         if (dpdk_pci_io_input->op == PCI_IO_READ) {
-            netuio_read_PCI_config(netuio_contextdata, dpdk_pci_io_input->offset, output_buf);
-            bytes_returned = output_buf_size;
+            netuio_read_PCI_config(netuio_contextdata,
+                                   dpdk_pci_io_input->offset,
+                                   dpdk_pci_io_input->access_size,
+                                   (UINT64*)output_buf);
+            
+            bytes_returned = sizeof(UINT64);
         }
-        else {
-            netuio_write_PCI_config(netuio_contextdata, dpdk_pci_io_input->offset, dpdk_pci_io_input->buf);
+        else if (dpdk_pci_io_input->op == PCI_IO_WRITE) {
+            netuio_write_PCI_config(netuio_contextdata,
+                                    dpdk_pci_io_input->offset,
+                                    dpdk_pci_io_input->access_size,
+                                    &dpdk_pci_io_input->data);
             bytes_returned = 0;
         }
+        else {
+            status = STATUS_INVALID_PARAMETER;
+            break;
+        }
 
         break;
 
-- 
2.23.0.vfs.1.1.63.g5a5ad7f


  parent reply	other threads:[~2020-08-13 23:24 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-13 23:21 [dpdk-dev] [PATCH 00/22] windows/netuio: add netuio driver for Windows Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 01/22] init DPDK repository Narcisa Ana Maria Vasile
2020-08-14 20:02   ` Dmitry Kozlyuk
2020-08-13 23:21 ` [dpdk-dev] [PATCH 02/22] Initial commit of UIO driver for Windows Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 03/22] Added new core libraries " Narcisa Ana Maria Vasile
2020-08-14 20:02   ` Dmitry Kozlyuk
2020-08-13 23:21 ` [dpdk-dev] [PATCH 04/22] Windows DPDK libraries and applications have now been updated to the latest public release v18.08, of the main DPDK source Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 05/22] doc: remove embedded buffer from Windows UIO ioctl Narcisa Ana Maria Vasile
2020-08-14 20:02   ` Dmitry Kozlyuk
2020-08-13 23:21 ` [dpdk-dev] [PATCH 06/22] Windows DPDK libraries and applications have now been updated to the latest public release v18.08, of the main DPDK source Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 07/22] doc: change the Windows UIO driver's default security descriptor to admin only Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 08/22] doc: remove lower bound on mapped address from Windows UIO driver Narcisa Ana Maria Vasile
2020-08-13 23:21 ` Narcisa Ana Maria Vasile [this message]
2020-08-13 23:21 ` [dpdk-dev] [PATCH 10/22] uio: move SDDL string to INF on Windows Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 11/22] Updated Source and Project files to use Clang toolset Narcisa Ana Maria Vasile
2020-08-14 20:02   ` Dmitry Kozlyuk
2020-08-13 23:21 ` [dpdk-dev] [PATCH 12/22] uio: Fix 64 bit BARs mapping Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 13/22] Update .gitignore and create .gitattributes Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 14/22] uio: Use local time when verifying INF DriverVer Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 15/22] uio: Remove co-installers section from inf Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 16/22] uio: Wrap call into try/except block Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 17/22] uio: Use request handler that guarantees execution in correct context Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 18/22] uio: Change the device setup class to a custom one Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 19/22] Enable DMA remapping through INF directive Narcisa Ana Maria Vasile
2020-08-13 23:21 ` [dpdk-dev] [PATCH 20/22] license: update headers with BSD 3-clause license: Narcisa Ana Maria Vasile
2020-08-14 20:02   ` Dmitry Kozlyuk
2020-08-13 23:21 ` [dpdk-dev] [PATCH 21/22] doc: updating REAME for NetUIO driver Narcisa Ana Maria Vasile
2020-08-14 20:11   ` Dmitry Kozlyuk
2020-08-13 23:21 ` [dpdk-dev] [PATCH 22/22] Move all files under windows folder Narcisa Ana Maria Vasile
2020-08-14 14:56 ` [dpdk-dev] [PATCH 00/22] windows/netuio: add netuio driver for Windows Harini Ramakrishnan
2020-08-14 20:01 ` Dmitry Kozlyuk
2020-08-14 20:26   ` Narcisa Ana Maria Vasile
2020-08-14 20:45     ` Omar Cardona
2020-08-14 20:57     ` Dmitry Kozlyuk
2020-08-14 22:51       ` Ranjit Menon

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=1597360905-74106-10-git-send-email-navasile@linux.microsoft.com \
    --to=navasile@linux.microsoft.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    --cc=dmitrym@microsoft.com \
    --cc=haramakr@linux.microsoft.com \
    --cc=haramakr@microsoft.com \
    --cc=ocardona@microsoft.com \
    --cc=pallavi.kadam@intel.com \
    --cc=ranjit.menon@intel.com \
    --cc=thomas@monjalon.net \
    /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).