This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit a12fdd88762a034610684755aaef548ada1fc31f
Author: raiden00pl <raide...@railab.me>
AuthorDate: Mon Jan 22 11:12:09 2024 +0100

    cosmetic changes after pci code rebase
---
 arch/x86_64/src/intel64/intel64_lowsetup.c        |   9 +-
 arch/x86_64/src/intel64/intel64_mbfb.c            | 195 ++++++++++++--------
 boards/x86_64/intel64/qemu-intel64/src/qemu_pci.c |  54 +++---
 drivers/pci/Make.defs                             |   8 +-
 drivers/pci/pci.c                                 | 214 +++++++++++++---------
 drivers/virt/Make.defs                            |  10 +-
 drivers/virt/qemu_edu.c                           | 137 ++++++++------
 drivers/virt/qemu_pci_test.c                      | 120 ++++++------
 include/nuttx/pci/pci.h                           |  60 +++---
 include/nuttx/virt/qemu_pci.h                     |  16 +-
 10 files changed, 477 insertions(+), 346 deletions(-)

diff --git a/arch/x86_64/src/intel64/intel64_lowsetup.c 
b/arch/x86_64/src/intel64/intel64_lowsetup.c
index d28d7f6dcc..c61864f6cb 100644
--- a/arch/x86_64/src/intel64/intel64_lowsetup.c
+++ b/arch/x86_64/src/intel64/intel64_lowsetup.c
@@ -78,11 +78,14 @@ static void x86_64_mb2_config(void)
   /* Check that we were actually booted by a mulitboot2 bootloader */
 
   if (mb_magic != MULTIBOOT2_BOOTLOADER_MAGIC)
-    return;
+    {
+      return;
+    }
 
   for (tag = (struct multiboot_tag *)(uintptr_t)(mb_info_struct + 8);
-    tag->type != MULTIBOOT_TAG_TYPE_END;
-    tag = (struct multiboot_tag *)((uint8_t *)tag + ((tag->size + 7) & ~7)))
+       tag->type != MULTIBOOT_TAG_TYPE_END;
+       tag = (struct multiboot_tag *)((uint8_t *)tag +
+                                      ((tag->size + 7) & ~7)))
     {
       switch (tag->type)
         {
diff --git a/arch/x86_64/src/intel64/intel64_mbfb.c 
b/arch/x86_64/src/intel64/intel64_mbfb.c
index 0aacba8be2..665e79a57a 100644
--- a/arch/x86_64/src/intel64/intel64_mbfb.c
+++ b/arch/x86_64/src/intel64/intel64_mbfb.c
@@ -1,5 +1,5 @@
 /****************************************************************************
- *  arch/x86_64/src/intel64/intel64_lowsetup.c
+ * arch/x86_64/src/intel64/intel64_mbfb.c
  *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -37,44 +37,50 @@
 #include "x86_64_internal.h"
 
 /****************************************************************************
- * Pre-processor Definitions
+ * Private Types
  ****************************************************************************/
 
 struct multiboot_fb_s
 {
-  void *baseaddr;
-  uint32_t height;
-  uint32_t width;
-  uint32_t pitch;
-  uint8_t bpp;
-  uint8_t type;
+  void     *baseaddr;
+  uint32_t  height;
+  uint32_t  width;
+  uint32_t  pitch;
+  uint8_t   bpp;
+  uint8_t   type;
 };
 
 #ifdef CONFIG_MULTBOOT2_FB_TERM
 struct fb_term_s
 {
   const struct nx_fontpackage_s *font;
-  uint32_t cursor_x;
-  uint32_t cursor_y;
+  uint32_t                       cursor_x;
+  uint32_t                       cursor_y;
 };
+#endif
 
-void fb_term_initialize(void);
-#endif  /* CONFIG_MULTBOOT2_FB_TERM */
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
 
-void fb_clear(void);
+#ifdef CONFIG_MULTBOOT2_FB_TERM
+static void fb_term_initialize(void);
+static void fb_scroll(void);
+#endif
+static void fb_clear(void);
 
 /****************************************************************************
  * Private Data
  ****************************************************************************/
 
-struct multiboot_fb_s fb =
+static struct multiboot_fb_s g_fb =
 {
   .baseaddr = NULL
 };
 
 #ifdef CONFIG_MULTBOOT2_FB_TERM
-struct fb_term_s fb_term;
-#endif  /* CONFIG_MULTBOOT2_FB_TERM */
+static struct fb_term_s g_fb_term;
+#endif
 
 /****************************************************************************
  * Public Data
@@ -85,7 +91,7 @@ struct fb_term_s fb_term;
  ****************************************************************************/
 
 /****************************************************************************
- * Function:  fb_draw_pixel
+ * Name: fb_draw_pixel
  *
  * Description:
  *   Draw a pixel on the framebuffer.  Note that the color paramter must
@@ -97,20 +103,24 @@ static void fb_draw_pixel(uint32_t color, uint32_t x, 
uint32_t y)
 {
   /* Check if we support this type of framebuffer */
 
-  if (fb.type != MULTIBOOT_FRAMEBUFFER_TYPE_RGB)
-    return;
+  if (g_fb.type != MULTIBOOT_FRAMEBUFFER_TYPE_RGB)
+    {
+      return;
+    }
 
   /* Make sure we are within the bounds */
 
-  if (x >= fb.width || y >= fb.height)
-    return;
+  if (x >= g_fb.width || y >= g_fb.height)
+    {
+      return;
+    }
 
-  switch (fb.bpp)
+  switch (g_fb.bpp)
     {
       case 8:
         {
           uint8_t *pixel = (uint8_t *)(
-              (uintptr_t)fb.baseaddr + (fb.pitch * y) + x);
+            (uintptr_t)g_fb.baseaddr + (g_fb.pitch * y) + x);
           *pixel = (uint8_t)color;
           break;
         }
@@ -119,7 +129,7 @@ static void fb_draw_pixel(uint32_t color, uint32_t x, 
uint32_t y)
       case 16:
         {
           uint16_t *pixel = (uint16_t *)(
-            (uintptr_t)fb.baseaddr + (fb.pitch * y) + x * 2);
+            (uintptr_t)g_fb.baseaddr + (g_fb.pitch * y) + x * 2);
           *pixel = (uint16_t)color;
           break;
         }
@@ -131,7 +141,7 @@ static void fb_draw_pixel(uint32_t color, uint32_t x, 
uint32_t y)
             */
 
           uint32_t *pixel = (uint32_t *)(
-            (uintptr_t)fb.baseaddr + (fb.pitch * y) + x * 3);
+            (uintptr_t)g_fb.baseaddr + (g_fb.pitch * y) + x * 3);
           *pixel = (color & 0xffffff) | (*pixel & 0xff000000);
           break;
         }
@@ -139,7 +149,7 @@ static void fb_draw_pixel(uint32_t color, uint32_t x, 
uint32_t y)
       case 32:
         {
           uint32_t *pixel = (uint32_t *)(
-            (uintptr_t)fb.baseaddr + (fb.pitch * y) + x * 4);
+            (uintptr_t)g_fb.baseaddr + (g_fb.pitch * y) + x * 4);
           *pixel = color;
           break;
         }
@@ -148,7 +158,7 @@ static void fb_draw_pixel(uint32_t color, uint32_t x, 
uint32_t y)
 
 #if 0
 /****************************************************************************
- * Function:  fb_test_line
+ * Name: fb_test_line
  *
  * Description:
  *   This is a simple test function that can be used to draw a 45deg
@@ -158,7 +168,7 @@ static void fb_draw_pixel(uint32_t color, uint32_t x, 
uint32_t y)
 
 static void fb_test_line(void)
 {
-  size_t idx;
+  size_t   idx;
   uint32_t color;
 
   switch (fb.bpp)
@@ -188,88 +198,114 @@ static void fb_test_line(void)
 #endif
 
 #ifdef CONFIG_MULTBOOT2_FB_TERM
+/****************************************************************************
+ * Name: fb_term_initialize
+ ****************************************************************************/
+
+static void fb_term_initialize(void)
+{
+  g_fb_term.font = nxf_getfonthandle(FONTID_DEFAULT);
+  g_fb_term.cursor_x = 0;
+  g_fb_term.cursor_y = 0;
+}
+
+/****************************************************************************
+ * Name: fb_scroll
+ ****************************************************************************/
+
 static void fb_scroll(void)
 {
-  void *destp = fb.baseaddr;
-  uint32_t save_rows = ((fb.height / fb_term.font->metrics.mxheight) - 1);
-  size_t row_size = fb.pitch * fb_term.font->metrics.mxheight;
-  uint32_t pxl_row = 0;
+  void     *destp     = g_fb.baseaddr;
+  uint32_t  save_rows = 0;
+  size_t    row_size  = 0;
+  uint32_t  pxl_row   = 0;
+
+  save_rows = ((g_fb.height / g_fb_term.font->metrics.mxheight) - 1);
+  row_size  = g_fb.pitch * g_fb_term.font->metrics.mxheight;
 
-  for (; pxl_row < save_rows * fb_term.font->metrics.mxheight; pxl_row++)
+  for (; pxl_row < save_rows * g_fb_term.font->metrics.mxheight; pxl_row++)
     {
-      memcpy(destp, destp + row_size, fb.pitch);
-      destp += fb.pitch;
+      memcpy(destp, destp + row_size, g_fb.pitch);
+      destp += g_fb.pitch;
     }
 
-  memset(destp, 0, fb.pitch * (fb.height - pxl_row));
+  memset(destp, 0, g_fb.pitch * (g_fb.height - pxl_row));
 
-  fb_term.cursor_y -= fb_term.font->metrics.mxheight;
+  g_fb_term.cursor_y -= g_fb_term.font->metrics.mxheight;
 }
 #endif
 
+/****************************************************************************
+ * Name: fb_clear
+ ****************************************************************************/
+
+static void fb_clear(void)
+{
+  if (g_fb.baseaddr == NULL)
+    {
+      return;
+    }
+
+  memset(g_fb.baseaddr, 0, g_fb.pitch * g_fb.height);
+}
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
+/****************************************************************************
+ * Name: x86_64_mb2_fbinitialize
+ ****************************************************************************/
+
 void x86_64_mb2_fbinitialize(struct multiboot_tag_framebuffer *fbt)
 {
-  fb.baseaddr = (void *)(uintptr_t)fbt->common.framebuffer_addr;
-  fb.width = fbt->common.framebuffer_width;
-  fb.height = fbt->common.framebuffer_height;
-  fb.pitch = fbt->common.framebuffer_pitch;
-  fb.bpp = fbt->common.framebuffer_bpp;
-  fb.type = fbt->common.framebuffer_type;
-
-  up_map_region(fb.baseaddr, fb.pitch * fb.height,
+  g_fb.baseaddr = (void *)(uintptr_t)fbt->common.framebuffer_addr;
+  g_fb.width    = fbt->common.framebuffer_width;
+  g_fb.height   = fbt->common.framebuffer_height;
+  g_fb.pitch    = fbt->common.framebuffer_pitch;
+  g_fb.bpp      = fbt->common.framebuffer_bpp;
+  g_fb.type     = fbt->common.framebuffer_type;
+
+  up_map_region(g_fb.baseaddr, g_fb.pitch * g_fb.height,
     X86_PAGE_WR | X86_PAGE_PRESENT |
     X86_PAGE_NOCACHE | X86_PAGE_GLOBAL);
 
   fb_clear();
- 
+
 #ifdef CONFIG_MULTBOOT2_FB_TERM
   fb_term_initialize();
 #endif
-
-}
-
-void fb_clear(void)
-{
-  if (fb.baseaddr == NULL)
-    return;
-
-  memset(fb.baseaddr, 0, fb.pitch * fb.height);
 }
 
 #ifdef CONFIG_MULTBOOT2_FB_TERM
-void fb_term_initialize(void)
-{
-  fb_term.font = nxf_getfonthandle(FONTID_DEFAULT);
-  fb_term.cursor_x = 0;
-  fb_term.cursor_y = 0;
-}
+/****************************************************************************
+ * Name: fb_putc
+ ****************************************************************************/
 
 void fb_putc(char ch)
 {
-  uint8_t gly_x;
-  uint8_t gly_y;
   const struct nx_fontbitmap_s *fbm;
+  uint8_t                       gly_x;
+  uint8_t                       gly_y;
 
-  if (fb.baseaddr == NULL)
-    return;
+  if (g_fb.baseaddr == NULL)
+    {
+      return;
+    }
 
   if (ch == '\n')
     {
-      fb_term.cursor_y += fb_term.font->metrics.mxheight;
+      g_fb_term.cursor_y += g_fb_term.font->metrics.mxheight;
       return;
     }
 
   if (ch == '\r')
     {
-      fb_term.cursor_x = 0;
+      g_fb_term.cursor_x = 0;
       return;
     }
 
-  fbm = nxf_getbitmap((NXHANDLE)fb_term.font, ch);
+  fbm = nxf_getbitmap((NXHANDLE)g_fb_term.font, ch);
   if (fbm == NULL)
     {
       fb_putc('.');
@@ -278,7 +314,7 @@ void fb_putc(char ch)
 
   for (gly_y = 0; gly_y < fbm->metric.height; gly_y++)
     {
-      if (fb_term.cursor_y + gly_y >= fb.height)
+      if (g_fb_term.cursor_y + gly_y >= g_fb.height)
         {
           fb_scroll();
           fb_putc(ch);
@@ -287,23 +323,28 @@ void fb_putc(char ch)
 
       for (gly_x = 0; gly_x < fbm->metric.width; gly_x++)
         {
-          if (fb_term.cursor_x + gly_x >= fb.width)
+          if (g_fb_term.cursor_x + gly_x >= g_fb.width)
             {
               break;
             }
 
-          uint8_t stride = (fbm->metric.width + 7) >> 3;
-          uint8_t gly_byte = stride * gly_y + (gly_x >> 3);
-          uint8_t gly_bit = gly_x & 0x7;
-          uint32_t color = 0;  /* Black no matter the color depth */
+          uint8_t  stride   = (fbm->metric.width + 7) >> 3;
+          uint8_t  gly_byte = stride * gly_y + (gly_x >> 3);
+          uint8_t  gly_bit  = gly_x & 0x7;
+          uint32_t color    = 0;
+
           if ((fbm->bitmap[gly_byte] >> (7 - gly_bit)) & 0x01)
-            color = 0xffffffff;  /* Black no matter the color depth */
+            {
+              /* White no matter the color depth */
+
+              color = 0xffffffff;
+            }
 
           fb_draw_pixel(
-            color, fb_term.cursor_x + gly_x, fb_term.cursor_y + gly_y);
+            color, g_fb_term.cursor_x + gly_x, g_fb_term.cursor_y + gly_y);
         }
     }
 
-  fb_term.cursor_x += fbm->metric.width;
+  g_fb_term.cursor_x += fbm->metric.width;
 }
 #endif  /* CONFIG_MULTBOOT2_FB_TERM */
diff --git a/boards/x86_64/intel64/qemu-intel64/src/qemu_pci.c 
b/boards/x86_64/intel64/qemu-intel64/src/qemu_pci.c
index ed1873633a..3e946f01bc 100644
--- a/boards/x86_64/intel64/qemu-intel64/src/qemu_pci.c
+++ b/boards/x86_64/intel64/qemu-intel64/src/qemu_pci.c
@@ -43,35 +43,35 @@
  * Private Functions Definitions
  ****************************************************************************/
 
-static void qemu_pci_cfg_write(FAR struct pci_dev_s *dev, int reg,
-                              uint32_t val, int width);
+static void qemu_pci_cfg_write(struct pci_dev_s *dev, int reg,
+                               uint32_t val, int width);
 
-static uint32_t qemu_pci_cfg_read(FAR struct pci_dev_s *dev, int reg,
+static uint32_t qemu_pci_cfg_read(struct pci_dev_s *dev, int reg,
                                   int width);
 
 static int qemu_pci_map_bar(uint64_t addr, uint64_t len);
 
-static uint32_t qemu_pci_io_read(FAR const volatile void *addr, int width);
+static uint32_t qemu_pci_io_read(const volatile void *addr, int width);
 
-static void qemu_pci_io_write(FAR const volatile void *addr, uint32_t val,
+static void qemu_pci_io_write(const volatile void *addr, uint32_t val,
                               int width);
 
 /****************************************************************************
- * Public Data
+ * Private Data
  ****************************************************************************/
 
-struct pci_bus_ops_s qemu_pci_bus_ops =
+static const struct pci_bus_ops_s g_qemu_pci_bus_ops =
 {
-    .pci_cfg_write     =   qemu_pci_cfg_write,
-    .pci_cfg_read      =   qemu_pci_cfg_read,
-    .pci_map_bar       =   qemu_pci_map_bar,
-    .pci_io_read       =   qemu_pci_io_read,
-    .pci_io_write      =   qemu_pci_io_write,
+  .pci_cfg_write = qemu_pci_cfg_write,
+  .pci_cfg_read  = qemu_pci_cfg_read,
+  .pci_map_bar   = qemu_pci_map_bar,
+  .pci_io_read   = qemu_pci_io_read,
+  .pci_io_write  = qemu_pci_io_write,
 };
 
-struct pci_bus_s qemu_pci_bus =
+static struct pci_bus_s g_qemu_pci_bus =
 {
-    .ops = &qemu_pci_bus_ops,
+  .ops = &g_qemu_pci_bus_ops,
 };
 
 /****************************************************************************
@@ -86,19 +86,20 @@ struct pci_bus_s qemu_pci_bus =
  *  specified by dev
  *
  * Input Parameters:
- *   bdf    - Device private data
- *   reg - A pointer to the read-only buffer of data to be written
- *   size   - The number of bytes to send from the buffer
+ *   bdf  - Device private data
+ *   reg  - A pointer to the read-only buffer of data to be written
+ *   size - The number of bytes to send from the buffer
  *
  * Returned Value:
  *   0: success, <0: A negated errno
  *
  ****************************************************************************/
 
-static void qemu_pci_cfg_write(FAR struct pci_dev_s *dev, int reg,
+static void qemu_pci_cfg_write(struct pci_dev_s *dev, int reg,
                                uint32_t val, int width)
 {
   uint8_t offset_mask = (4 - width);
+
   outl(PCI_CFG_EN | (dev->bdf << 8) | reg, PCI_CFG_ADDR);
   switch (width)
     {
@@ -133,11 +134,12 @@ static void qemu_pci_cfg_write(FAR struct pci_dev_s *dev, 
int reg,
  *
  ****************************************************************************/
 
-static uint32_t qemu_pci_cfg_read(FAR struct pci_dev_s *dev, int reg,
+static uint32_t qemu_pci_cfg_read(struct pci_dev_s *dev, int reg,
                                   int width)
 {
   uint32_t ret;
-  uint8_t offset_mask = 4 - width;
+  uint8_t  offset_mask = 4 - width;
+
   outl(PCI_CFG_EN | (dev->bdf << 8) | reg, PCI_CFG_ADDR);
 
   switch (width)
@@ -159,9 +161,10 @@ static uint32_t qemu_pci_cfg_read(FAR struct pci_dev_s 
*dev, int reg,
   return 0;
 }
 
-static uint32_t qemu_pci_io_read(FAR const volatile void *addr, int width)
+static uint32_t qemu_pci_io_read(const volatile void *addr, int width)
 {
   uint16_t portaddr = (uint16_t)(intptr_t)addr;
+
   switch (width)
   {
     case 1:
@@ -178,20 +181,21 @@ static uint32_t qemu_pci_io_read(FAR const volatile void 
*addr, int width)
   return 0;
 }
 
-static void qemu_pci_io_write(FAR const volatile void *addr, uint32_t val,
+static void qemu_pci_io_write(const volatile void *addr, uint32_t val,
                               int width)
 {
   uint16_t portaddr = (uint16_t)(intptr_t)addr;
+
   switch (width)
   {
     case 1:
       outb((uint8_t)val, portaddr);
       return;
     case 2:
-      outw((uint8_t)val, portaddr);
+      outw((uint16_t)val, portaddr);
       return;
     case 4:
-      outl((uint8_t)val, portaddr);
+      outl((uint32_t)val, portaddr);
       return;
     default:
       pcierr("Invalid write width %d\n", width);
@@ -221,5 +225,5 @@ static int qemu_pci_map_bar(uint64_t addr, uint64_t len)
 void qemu_pci_init(void)
 {
   pciinfo("Initializing PCI Bus\n");
-  pci_initialize(&qemu_pci_bus);
+  pci_initialize(&g_qemu_pci_bus);
 }
diff --git a/drivers/pci/Make.defs b/drivers/pci/Make.defs
index d890993e62..2b0a4c4901 100644
--- a/drivers/pci/Make.defs
+++ b/drivers/pci/Make.defs
@@ -7,9 +7,9 @@
 # ASF licenses this file to you under the Apache License, Version 2.0 (the
 # "License"); you may not use this file except in compliance with the
 # License.  You may obtain a copy of the License at
-# 
+#
 #   http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
@@ -18,8 +18,6 @@
 #
 ############################################################################
 
-# Don't build anything if there is no CAN support
-
 ifeq ($(CONFIG_PCI),y)
 
 CSRCS += pci.c
@@ -28,5 +26,5 @@ CSRCS += pci.c
 
 DEPPATH += --dep-path pci
 VPATH += :pci
-CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" 
$(TOPDIR)$(DELIM)drivers$(DELIM)pci}
+CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)drivers$(DELIM)pci
 endif
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 0ae67a515d..9e9ba848a1 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1,5 +1,5 @@
 /****************************************************************************
- * nuttx/drivers/pci/pci.c
+ * drivers/pci/pci.c
  *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -51,7 +51,7 @@
 
 static void pci_probe_device(FAR struct pci_bus_s *root_bus,
                              uint8_t bus_idx, uint8_t slot_idx, uint8_t func,
-                             FAR struct pci_dev_type_s **types);
+                             FAR const struct pci_dev_type_s **types);
 
 static uint8_t pci_check_pci_bridge(FAR struct pci_bus_s *root_bus,
                                     uint8_t bus_idx, uint8_t slot_idx,
@@ -59,11 +59,11 @@ static uint8_t pci_check_pci_bridge(FAR struct pci_bus_s 
*root_bus,
 
 static void pci_scan_device(FAR struct pci_bus_s *root_bus,
                             uint8_t bus_idx, uint8_t slot_idx,
-                            FAR struct pci_dev_type_s **types);
+                            FAR const struct pci_dev_type_s **types);
 
 static void pci_scan_bus(FAR struct pci_bus_s *root_bus,
                          uint8_t bus_idx,
-                         FAR struct pci_dev_type_s **types);
+                         FAR const struct pci_dev_type_s **types);
 
 static void pci_set_cmd_bit(FAR struct pci_dev_s *dev, uint16_t bitmask);
 
@@ -73,14 +73,14 @@ static void pci_clear_cmd_bit(FAR struct pci_dev_s *dev, 
uint16_t bitmask);
  * Public Data
  ****************************************************************************/
 
-struct pci_dev_type_s *pci_device_types[] =
+const struct pci_dev_type_s *g_pci_device_types[] =
 {
 #ifdef CONFIG_VIRT_QEMU_PCI_TEST
-  &pci_type_qemu_pci_test,
-#endif /* CONFIG_VIRT_QEMU_PCI_TEST */
+  &g_pci_type_qemu_pci_test,
+#endif
 #ifdef CONFIG_VIRT_QEMU_EDU
-  &pci_type_qemu_edu,
-#endif /* CONFIG_VIRT_QEMU_EDU */
+  &g_pci_type_qemu_edu,
+#endif
   NULL,
 };
 
@@ -105,12 +105,13 @@ struct pci_dev_type_s *pci_device_types[] =
 
 static void pci_probe_device(FAR struct pci_bus_s *root_bus,
                              uint8_t bus_idx, uint8_t slot_idx, uint8_t func,
-                             FAR struct pci_dev_type_s **types)
+                             FAR const struct pci_dev_type_s **types)
 {
   struct pci_dev_s tmp_dev;
-  uint16_t vid;
-  uint16_t id;
-  uint32_t class_rev;
+  uint32_t         class_rev;
+  uint16_t         vid;
+  uint16_t         id;
+  int              i;
 
   tmp_dev.bus = root_bus;
   tmp_dev.bdf = PCI_BDF(bus_idx, slot_idx, func);
@@ -124,7 +125,7 @@ static void pci_probe_device(FAR struct pci_bus_s *root_bus,
 
   pci_dev_dump(&tmp_dev);
 
-  for (int i = 0; types[i] != NULL; i++)
+  for (i = 0; types[i] != NULL; i++)
     {
       if (types[i]->vendor == PCI_ID_ANY ||
           types[i]->vendor == vid)
@@ -144,10 +145,11 @@ static void pci_probe_device(FAR struct pci_bus_s 
*root_bus,
                     }
                   else
                     {
-                      pcierr("[%02x:%02x.%x] Error: Invalid \
-                              device probe function\n",
-                              bus_idx, slot_idx, func);
+                      pcierr("[%02x:%02x.%x] Error: Invalid"
+                             "device probe function\n",
+                             bus_idx, slot_idx, func);
                     }
+
                   break;
                 }
             }
@@ -175,9 +177,9 @@ static uint8_t pci_check_pci_bridge(FAR struct pci_bus_s 
*root_bus,
                                     uint8_t dev_func)
 {
   struct pci_dev_s tmp_dev;
-  uint8_t base_class;
-  uint8_t sub_class;
-  uint8_t secondary_bus;
+  uint8_t          base_class;
+  uint8_t          sub_class;
+  uint8_t          secondary_bus;
 
   tmp_dev.bus = root_bus;
   tmp_dev.bdf = PCI_BDF(bus_idx, slot_idx, dev_func);
@@ -187,18 +189,19 @@ static uint8_t pci_check_pci_bridge(FAR struct pci_bus_s 
*root_bus,
   base_class = root_bus->ops->pci_cfg_read(&tmp_dev, PCI_CONFIG_CLASS, 1);
   sub_class = root_bus->ops->pci_cfg_read(&tmp_dev, PCI_CONFIG_SUBCLASS, 1);
 
-  if ((base_class == PCI_CLASS_BASE_BRG_DEV) && \
-     (sub_class == PCI_CLASS_SUB_PCI_BRG))
+  if ((base_class == PCI_CLASS_BASE_BRG_DEV) &&
+      (sub_class == PCI_CLASS_SUB_PCI_BRG))
     {
-      /* This is a bridge device we need to determin the bus idx and
+      /* This is a bridge device we need to determine the bus idx and
        * enumerate it just like we do the root.
        */
 
       pciinfo("[%02x:%02x.%x] Found Bridge\n",
-        bus_idx, slot_idx, dev_func);
+              bus_idx, slot_idx, dev_func);
 
       secondary_bus = root_bus->ops->pci_cfg_read(
         &tmp_dev, PCI_CONFIG_SEC_BUS, 1);
+
       return secondary_bus;
     }
 
@@ -222,25 +225,21 @@ static uint8_t pci_check_pci_bridge(FAR struct pci_bus_s 
*root_bus,
 
 static void pci_scan_device(FAR struct pci_bus_s *root_bus,
                             uint8_t bus_idx, uint8_t slot_idx,
-                            FAR struct pci_dev_type_s **types)
+                            FAR const struct pci_dev_type_s **types)
 {
   struct pci_dev_s tmp_dev;
-  uint8_t dev_func = 0;
-  uint16_t vid;
-  uint8_t sec_bus;
-  uint8_t multi_function;
+  uint8_t          multi_function;
+  uint8_t          dev_func = 0;
+  uint16_t         vid;
+  uint8_t          sec_bus;
 
   tmp_dev.bus = root_bus;
   tmp_dev.bdf = PCI_BDF(bus_idx, slot_idx, dev_func);
   vid = root_bus->ops->pci_cfg_read(&tmp_dev, PCI_CONFIG_VENDOR, 2);
   if (vid == 0xffff)
+    {
       return;
-
-  /* Check if this is a PCI-PCI bridge device */
-
-  sec_bus = pci_check_pci_bridge(root_bus, bus_idx, slot_idx, dev_func);
-  if (sec_bus)
-    pci_scan_bus(root_bus, sec_bus, types);
+    }
 
   multi_function = root_bus->ops->pci_cfg_read(
     &tmp_dev, PCI_CONFIG_HEADER_TYPE, 1) & PCI_HEADER_MASK_MULTI;
@@ -258,10 +257,12 @@ static void pci_scan_device(FAR struct pci_bus_s 
*root_bus,
         {
           tmp_dev.bdf = PCI_BDF(bus_idx, slot_idx, dev_func);
           vid = root_bus->ops->pci_cfg_read(&tmp_dev, PCI_CONFIG_VENDOR, 2);
+
           if (vid != 0xffff)
             {
               sec_bus = pci_check_pci_bridge(
                 root_bus, bus_idx, slot_idx, dev_func);
+
               if (sec_bus)
                 {
                   pci_scan_bus(root_bus, sec_bus, types);
@@ -274,7 +275,17 @@ static void pci_scan_device(FAR struct pci_bus_s *root_bus,
     }
   else
     {
-      pci_probe_device(root_bus, bus_idx, slot_idx, dev_func, types);
+      /* Check if this is a PCI-PCI bridge device with MF=0 */
+
+      sec_bus = pci_check_pci_bridge(root_bus, bus_idx, slot_idx, dev_func);
+      if (sec_bus)
+        {
+          pci_scan_bus(root_bus, sec_bus, types);
+        }
+      else
+        {
+          pci_probe_device(root_bus, bus_idx, slot_idx, dev_func, types);
+        }
     }
 }
 
@@ -294,7 +305,7 @@ static void pci_scan_device(FAR struct pci_bus_s *root_bus,
 
 static void pci_scan_bus(FAR struct pci_bus_s *root_bus,
                          uint8_t bus_idx,
-                         FAR struct pci_dev_type_s **types)
+                         FAR const struct pci_dev_type_s **types)
 {
   uint8_t slot_idx;
 
@@ -302,8 +313,6 @@ static void pci_scan_bus(FAR struct pci_bus_s *root_bus,
     {
       pci_scan_device(root_bus, bus_idx, slot_idx, types);
     }
-
-  return;
 }
 
 /****************************************************************************
@@ -320,11 +329,11 @@ static void pci_scan_bus(FAR struct pci_bus_s *root_bus,
 
 static void pci_set_cmd_bit(FAR struct pci_dev_s *dev, uint16_t bitmask)
 {
-  uint16_t     cmd;
+  uint16_t cmd;
 
   cmd = dev->bus->ops->pci_cfg_read(dev, PCI_CONFIG_COMMAND, 2);
   dev->bus->ops->pci_cfg_write(dev, PCI_CONFIG_COMMAND,
-    (cmd | bitmask), 2);
+                               (cmd | bitmask), 2);
 }
 
 /****************************************************************************
@@ -341,11 +350,11 @@ static void pci_set_cmd_bit(FAR struct pci_dev_s *dev, 
uint16_t bitmask)
 
 static void pci_clear_cmd_bit(FAR struct pci_dev_s *dev, uint16_t bitmask)
 {
-  uint16_t     cmd;
+  uint16_t cmd;
 
   cmd = dev->bus->ops->pci_cfg_read(dev, PCI_CONFIG_COMMAND, 2);
   dev->bus->ops->pci_cfg_write(dev, PCI_CONFIG_COMMAND,
-    (cmd & ~bitmask), 2);
+                               (cmd & ~bitmask), 2);
 }
 
 /****************************************************************************
@@ -369,12 +378,17 @@ static void pci_clear_cmd_bit(FAR struct pci_dev_s *dev, 
uint16_t bitmask)
  ****************************************************************************/
 
 int pci_enumerate(FAR struct pci_bus_s *bus,
-                  FAR struct pci_dev_type_s **types)
+                  FAR const struct pci_dev_type_s **types)
 {
   if (!bus)
+    {
       return -EINVAL;
+    }
+
   if (!types)
+    {
       return -EINVAL;
+    }
 
   pci_scan_bus(bus, 0, types);
   return OK;
@@ -400,7 +414,7 @@ int pci_enumerate(FAR struct pci_bus_s *bus,
 
 int pci_initialize(FAR struct pci_bus_s *bus)
 {
-  return pci_enumerate(bus, pci_device_types);
+  return pci_enumerate(bus, g_pci_device_types);
 }
 
 /****************************************************************************
@@ -425,12 +439,17 @@ int pci_enable_io(FAR struct pci_dev_s *dev, int res)
 {
   switch (res)
     {
-    case PCI_SYS_RES_IOPORT:
-      pci_set_cmd_bit(dev, PCI_CMD_IO_SPACE);
-      return OK;
-    case PCI_SYS_RES_MEM:
-      pci_set_cmd_bit(dev, PCI_CMD_MEM_SPACE);
-      return OK;
+      case PCI_SYS_RES_IOPORT:
+        {
+          pci_set_cmd_bit(dev, PCI_CMD_IO_SPACE);
+          return OK;
+        }
+
+      case PCI_SYS_RES_MEM:
+        {
+          pci_set_cmd_bit(dev, PCI_CMD_MEM_SPACE);
+          return OK;
+        }
     }
 
   return -EINVAL;
@@ -458,12 +477,17 @@ int pci_disable_io(FAR struct pci_dev_s *dev, int res)
 {
   switch (res)
     {
-    case PCI_SYS_RES_IOPORT:
-      pci_clear_cmd_bit(dev, PCI_CMD_IO_SPACE);
-      return OK;
-    case PCI_SYS_RES_MEM:
-      pci_clear_cmd_bit(dev, PCI_CMD_MEM_SPACE);
-      return OK;
+      case PCI_SYS_RES_IOPORT:
+        {
+          pci_clear_cmd_bit(dev, PCI_CMD_IO_SPACE);
+          return OK;
+        }
+
+      case PCI_SYS_RES_MEM:
+        {
+          pci_clear_cmd_bit(dev, PCI_CMD_MEM_SPACE);
+          return OK;
+        }
     }
 
   return -EINVAL;
@@ -530,7 +554,7 @@ int pci_disable_bus_master(FAR struct pci_dev_s *dev)
 int pci_bar_valid(FAR struct pci_dev_s *dev, uint8_t bar_id)
 {
   uint32_t bar = dev->bus->ops->pci_cfg_read(dev,
-      PCI_HEADER_NORM_BAR0 + (bar_id * 4), 4);
+                    PCI_HEADER_NORM_BAR0 + (bar_id * 4), 4);
 
   if (bar == PCI_BAR_INVALID)
     {
@@ -559,12 +583,14 @@ int pci_bar_valid(FAR struct pci_dev_s *dev, uint8_t 
bar_id)
 bool pci_bar_is_64(FAR struct pci_dev_s *dev, uint8_t bar_id)
 {
   uint32_t bar = dev->bus->ops->pci_cfg_read(dev,
-      PCI_HEADER_NORM_BAR0 + (bar_id * 4), 4);
+                    PCI_HEADER_NORM_BAR0 + (bar_id * 4), 4);
 
   /* Check that it is memory and not io port */
 
   if ((bar & PCI_BAR_LAYOUT_MASK) != PCI_BAR_LAYOUT_MEM)
+    {
       return false;
+    }
 
   if (((bar & PCI_BAR_TYPE_MASK) >> PCI_BAR_TYPE_OFFSET) == PCI_BAR_TYPE_64)
     {
@@ -591,12 +617,13 @@ bool pci_bar_is_64(FAR struct pci_dev_s *dev, uint8_t 
bar_id)
 
 uint64_t pci_bar_size(FAR struct pci_dev_s *dev, uint8_t bar_id)
 {
-  uint32_t bar;
-  uint32_t size;
-  uint64_t full_size;
-  uint8_t bar_offset = PCI_HEADER_NORM_BAR0 + (bar_id * 4);
-  const struct pci_bus_ops_s *dev_ops = dev->bus->ops;
+  FAR const struct pci_bus_ops_s *dev_ops = dev->bus->ops;
+  uint32_t                        bar;
+  uint32_t                        size;
+  uint64_t                        full_size;
+  uint8_t                         bar_offset;
 
+  bar_offset = PCI_HEADER_NORM_BAR0 + (bar_id * 4);
   bar = dev_ops->pci_cfg_read(dev, bar_offset, 4);
 
   /* Write all 1 to the BAR.  We are looking for which bits will change */
@@ -660,10 +687,11 @@ uint64_t pci_bar_size(FAR struct pci_dev_s *dev, uint8_t 
bar_id)
 
 uint64_t pci_bar_addr(FAR struct pci_dev_s *dev, uint8_t bar_id)
 {
-  uint64_t addr;
-  uint8_t bar_offset = PCI_HEADER_NORM_BAR0 + (bar_id * 4);
-  const struct pci_bus_ops_s *dev_ops = dev->bus->ops;
+  FAR const struct pci_bus_ops_s *dev_ops = dev->bus->ops;
+  uint64_t                        addr;
+  uint8_t                         bar_offset;
 
+  bar_offset = PCI_HEADER_NORM_BAR0 + (bar_id * 4);
   addr = dev_ops->pci_cfg_read(dev, bar_offset, 4);
 
   if ((addr & PCI_BAR_LAYOUT_MASK) == PCI_BAR_LAYOUT_MEM)
@@ -699,25 +727,31 @@ uint64_t pci_bar_addr(FAR struct pci_dev_s *dev, uint8_t 
bar_id)
 
 void pci_dev_dump(FAR struct pci_dev_s *dev)
 {
-  uint8_t bar_id;
-  uint8_t bar_mem_type = 0;
-  uint32_t bar;
-  uint64_t bar_size;
-  uint64_t bar_addr;
-
-  uint8_t cap_id;
-  uint8_t cap_offset;
-
-  const struct pci_bus_ops_s *dev_ops = dev->bus->ops;
-  uint32_t bdf = dev->bdf;
-  uint16_t vid = dev_ops->pci_cfg_read(dev, PCI_CONFIG_VENDOR, 2);
-  uint16_t pid = dev_ops->pci_cfg_read(dev, PCI_CONFIG_DEVICE, 2);
-  uint8_t header = dev_ops->pci_cfg_read(dev, PCI_CONFIG_HEADER_TYPE, 1);
-  uint8_t progif = dev_ops->pci_cfg_read(dev, PCI_CONFIG_PROG_IF, 1);
-  uint8_t subclass = dev_ops->pci_cfg_read(dev, PCI_CONFIG_SUBCLASS, 1);
-  uint8_t class = dev_ops->pci_cfg_read(dev, PCI_CONFIG_CLASS, 1);
-  uint8_t int_pin;
-  uint8_t int_line;
+  FAR const struct pci_bus_ops_s *dev_ops      = dev->bus->ops;
+  uint8_t                         bar_mem_type = 0;
+  uint8_t                         bar_id;
+  uint32_t                        bar;
+  uint64_t                        bar_size;
+  uint64_t                        bar_addr;
+  uint8_t                         cap_id;
+  uint8_t                         cap_offset;
+  uint32_t                        bdf;
+  uint16_t                        vid;
+  uint16_t                        pid;
+  uint8_t                         header;
+  uint8_t                         progif;
+  uint8_t                         subclass;
+  uint8_t                         class;
+  uint8_t                         int_pin;
+  uint8_t                         int_line;
+
+  bdf      = dev->bdf;
+  vid      = dev_ops->pci_cfg_read(dev, PCI_CONFIG_VENDOR, 2);
+  pid      = dev_ops->pci_cfg_read(dev, PCI_CONFIG_DEVICE, 2);
+  header   = dev_ops->pci_cfg_read(dev, PCI_CONFIG_HEADER_TYPE, 1);
+  progif   = dev_ops->pci_cfg_read(dev, PCI_CONFIG_PROG_IF, 1);
+  subclass = dev_ops->pci_cfg_read(dev, PCI_CONFIG_SUBCLASS, 1);
+  class    = dev_ops->pci_cfg_read(dev, PCI_CONFIG_CLASS, 1);
 
   pciinfo("[%02x:%02x.%x] %04x:%04x\n",
           bdf >> 8, (bdf & 0xff) >> 3, bdf & 0x7, vid, pid);
@@ -740,7 +774,9 @@ void pci_dev_dump(FAR struct pci_dev_s *dev)
     }
 
   if ((header & PCI_HEADER_TYPE_MASK) != PCI_HEADER_NORMAL)
+    {
       return;
+    }
 
   int_pin = dev_ops->pci_cfg_read(dev, PCI_HEADER_NORM_INT_PIN, 1);
   int_line = dev_ops->pci_cfg_read(dev, PCI_HEADER_NORM_INT_LINE, 1);
@@ -749,7 +785,9 @@ void pci_dev_dump(FAR struct pci_dev_s *dev)
   for (bar_id = 0; bar_id < PCI_BAR_CNT; bar_id++)
     {
       if (pci_bar_valid(dev, bar_id) != OK)
-        continue;
+        {
+          continue;
+        }
 
       bar = dev_ops->pci_cfg_read(dev,
         PCI_HEADER_NORM_BAR0 + (bar_id * 4), 4);
@@ -787,6 +825,8 @@ void pci_dev_dump(FAR struct pci_dev_s *dev)
       /* Skip next bar if this one was 64bit */
 
       if (bar_mem_type == 64)
+        {
           bar_id++;
+        }
     }
 }
diff --git a/drivers/virt/Make.defs b/drivers/virt/Make.defs
index a65cce26f4..856a9db7cb 100644
--- a/drivers/virt/Make.defs
+++ b/drivers/virt/Make.defs
@@ -1,5 +1,5 @@
 ############################################################################
-# drivers/pci/Make.defs
+# drivers/virt/Make.defs
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
@@ -18,18 +18,12 @@
 #
 ############################################################################
 
-# Don't build anything if there is no CAN support
-
 ifeq ($(CONFIG_VIRT_QEMU_PCI_TEST),y)
-
 CSRCS += qemu_pci_test.c
-
 endif
 
 ifeq ($(CONFIG_VIRT_QEMU_EDU),y)
-
 CSRCS += qemu_edu.c
-
 endif
 
 # Include virt device driver build support
@@ -38,6 +32,6 @@ ifeq ($(CONFIG_VIRT),y)
 
 DEPPATH += --dep-path virt
 VPATH += :virt
-CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" 
$(TOPDIR)$(DELIM)drivers$(DELIM)virt}
+CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)drivers$(DELIM)virt
 
 endif
diff --git a/drivers/virt/qemu_edu.c b/drivers/virt/qemu_edu.c
index 4b71fd9485..0117d995eb 100644
--- a/drivers/virt/qemu_edu.c
+++ b/drivers/virt/qemu_edu.c
@@ -60,6 +60,12 @@
 #define EDU_CONTROL_BAR_ID      0
 #define EDU_CONTROL_BAR_OFFSET  PCI_HEADER_NORM_BAR0
 
+/* One 4096 bytes long buffer at offset 0x40000 is available in the
+ * EDU device
+ */
+
+#define QEMU_EDU_DMABUF_OFFSET 0x40000
+
 /*****************************************************************************
  * Private Types
  *****************************************************************************/
@@ -67,8 +73,8 @@
 struct qemu_edu_priv_s
 {
   uintptr_t base_addr;
-  sem_t isr_done;
-  uint32_t test_result;
+  sem_t     isr_done;
+  uint32_t  test_result;
 };
 
 /*****************************************************************************
@@ -89,10 +95,23 @@ static void qemu_edu_test_intx(FAR struct pci_dev_s *dev,
 
 static int qemu_edu_interrupt(int irq, void *context, FAR void *arg);
 
+static int qemu_edu_probe(FAR struct pci_bus_s *bus,
+                          FAR const struct pci_dev_type_s *type,
+                          uint16_t bdf);
+
 /*****************************************************************************
- * Private Data
+ * Public Data
  *****************************************************************************/
 
+const struct pci_dev_type_s g_pci_type_qemu_edu =
+{
+  .vendor    = 0x1234,
+  .device    = 0x11e8,
+  .class_rev = PCI_ID_ANY,
+  .name      = "Qemu PCI EDU device",
+  .probe     = qemu_edu_probe
+};
+
 /*****************************************************************************
  * Private Functions
  *****************************************************************************/
@@ -206,10 +225,10 @@ static void qemu_edu_test_poll(FAR struct pci_dev_s *dev, 
uintptr_t base_addr)
  *****************************************************************************/
 
 static void qemu_edu_test_intx(FAR struct pci_dev_s *dev,
-                               struct qemu_edu_priv_s *drv_priv)
+                               FAR struct qemu_edu_priv_s *drv_priv)
 {
   uintptr_t base_addr = drv_priv->base_addr;
-  uint32_t test_value;
+  uint32_t  test_value;
 
   pciinfo("Identification: 0x%08xu\n",
           qemu_edu_read_reg32(base_addr + EDU_REG_ID));
@@ -253,16 +272,16 @@ static void qemu_edu_test_intx(FAR struct pci_dev_s *dev,
  *****************************************************************************/
 
 static void qemu_edu_test_dma(FAR struct pci_dev_s *dev,
-                               struct qemu_edu_priv_s *drv_priv)
+                              FAR struct qemu_edu_priv_s *drv_priv)
 {
-  uintptr_t base_addr = drv_priv->base_addr;
-  void *test_block;
-  size_t block_size = 2048;
-  int i;
-  uint32_t psrand;
-  uint32_t tx_checksum;
-  uint32_t rx_checksum;
-  uint32_t dev_addr = 0x40000;
+  uintptr_t  base_addr  = drv_priv->base_addr;
+  FAR void  *test_block;
+  size_t     block_size = 2048;
+  int        i;
+  uint32_t   psrand;
+  uint32_t   tx_checksum;
+  uint32_t   rx_checksum;
+  uint32_t   dev_addr   = QEMU_EDU_DMABUF_OFFSET;
 
   pciinfo("Identification: 0x%08xu\n",
           qemu_edu_read_reg32(base_addr + EDU_REG_ID));
@@ -322,58 +341,73 @@ static void qemu_edu_test_dma(FAR struct pci_dev_s *dev,
  *
  *****************************************************************************/
 
-static int qemu_edu_interrupt(int irq, void *context, FAR void *arg)
+static int qemu_edu_interrupt(int irq, FAR void *context, FAR void *arg)
 {
-  struct qemu_edu_priv_s *drv_priv = (struct qemu_edu_priv_s *)arg;
-  uintptr_t base_addr = drv_priv->base_addr;
+  FAR struct qemu_edu_priv_s *drv_priv = (struct qemu_edu_priv_s *)arg;
+  uintptr_t                   base_addr;
+  uint32_t                    status;
 
-  uint32_t status = qemu_edu_read_reg32(base_addr + EDU_REG_INT_STATUS);
+  base_addr = drv_priv->base_addr;
+  status = qemu_edu_read_reg32(base_addr + EDU_REG_INT_STATUS);
 
   qemu_edu_write_reg32(base_addr + EDU_REG_INT_ACK, ~0U);
   switch (status)
     {
-    case 0x1:    /* Factorial triggered */
-      drv_priv->test_result = qemu_edu_read_reg32(base_addr + EDU_REG_FAC);
-      pciinfo("Computed factorial: %d\n",
-              drv_priv->test_result);
-      break;
-    case 0x100:  /* DMA triggered */
-      pciinfo("DMA transfer complete\n");
-      break;
-    default:     /* Generic write */
-      drv_priv->test_result = status;
-      pciinfo("Received value: 0x%08x\n", status);
+      /* Factorial triggered */
+
+      case 0x1:
+        {
+          drv_priv->test_result
+              = qemu_edu_read_reg32(base_addr + EDU_REG_FAC);
+          pciinfo("Computed factorial: %d\n", drv_priv->test_result);
+          break;
+        }
+
+      /* DMA triggered */
+
+      case 0x100:
+        {
+          pciinfo("DMA transfer complete\n");
+          break;
+        }
+
+      /* Generic write */
+
+      default:
+        {
+          drv_priv->test_result = status;
+          pciinfo("Received value: 0x%08x\n", status);
+          break;
+        }
     }
 
   sem_post(&drv_priv->isr_done);
   return OK;
 }
 
-/*****************************************************************************
- * Public Functions
- *****************************************************************************/
-
 /*****************************************************************************
  * Name: qemu_edu_probe
  *
  * Description:
  *   Initialize device
+ *
  *****************************************************************************/
 
-int qemu_edu_probe(FAR struct pci_bus_s *bus,
-                   FAR struct pci_dev_type_s *type, uint16_t bdf)
+static int qemu_edu_probe(FAR struct pci_bus_s *bus,
+                          FAR const struct pci_dev_type_s *type,
+                          uint16_t bdf)
 {
-  uint32_t bar;
-  uintptr_t bar_addr;
-  struct pci_dev_s dev =
-    {
-      .bus = bus,
-      .type = type,
-      .bdf = bdf,
-    };
-
-  uint8_t irq;
   struct qemu_edu_priv_s drv_priv;
+  struct pci_dev_s       dev;
+  uint32_t               bar;
+  uintptr_t              bar_addr;
+  uint8_t                irq;
+
+  /* Get dev */
+
+  dev.bus = bus;
+  dev.type = type;
+  dev.bdf = bdf;
 
   pci_enable_bus_master(&dev);
   pciinfo("Enabled bus mastering\n");
@@ -434,16 +468,3 @@ int qemu_edu_probe(FAR struct pci_bus_s *bus,
 
   return OK;
 }
-
-/*****************************************************************************
- * Public Data
- *****************************************************************************/
-
-struct pci_dev_type_s pci_type_qemu_edu =
-{
-    .vendor = 0x1234,
-    .device = 0x11e8,
-    .class_rev = PCI_ID_ANY,
-    .name = "Qemu PCI EDU device",
-    .probe = qemu_edu_probe
-};
diff --git a/drivers/virt/qemu_pci_test.c b/drivers/virt/qemu_pci_test.c
index 747ea2130a..9ab30569b4 100644
--- a/drivers/virt/qemu_pci_test.c
+++ b/drivers/virt/qemu_pci_test.c
@@ -49,19 +49,36 @@ static uint32_t mem_read(FAR const volatile void *addr, int 
width);
 
 static void mem_write(FAR const volatile void *addr, uint32_t val, int width);
 
+static int qemu_pci_test_probe(FAR struct pci_bus_s *bus,
+                               FAR const struct pci_dev_type_s *type,
+                               uint16_t bdf);
+
+/*****************************************************************************
+ * Public Data
+ *****************************************************************************/
+
+const struct pci_dev_type_s g_pci_type_qemu_pci_test =
+{
+  .vendor    = 0x1b36,
+  .device    = 0x0005,
+  .class_rev = PCI_ID_ANY,
+  .name      = "Qemu PCI test device",
+  .probe     = qemu_pci_test_probe
+};
+
 /*****************************************************************************
  * Private Types
  *****************************************************************************/
 
 struct pci_test_dev_hdr_s
 {
-    uint8_t test;       /* write-only, starts a given test number */
-    uint8_t width;      /* read-only, type and width of access for a test */
-    uint8_t pad0[2];
+    uint8_t  test;      /* write-only, starts a given test number */
+    uint8_t  width;     /* read-only, type and width of access for a test */
+    uint8_t  pad0[2];
     uint32_t offset;    /* read-only, offset in this BAR for a given test */
     uint32_t data;      /* read-only, data to use for a given test */
     uint32_t count;     /* for debugging. number of writes detected. */
-    uint8_t name[];     /* for debugging. 0-terminated ASCII string. */
+    uint8_t  name[];    /* for debugging. 0-terminated ASCII string. */
 };
 
 /* Structure the read and write helpers */
@@ -76,7 +93,7 @@ struct pci_test_dev_ops_s
  * Private Data
  *****************************************************************************/
 
-static struct pci_test_dev_ops_s mem_ops =
+static struct pci_test_dev_ops_s g_mem_ops =
 {
     .read = mem_read,
     .write = mem_write
@@ -100,14 +117,14 @@ static bool qemu_pci_test_bar(FAR struct 
pci_test_dev_ops_s *test_ops,
                              FAR struct pci_test_dev_hdr_s *test_hdr,
                              uint16_t test_num)
 {
-  uint32_t count;
-  uint32_t data;
-  uint32_t offset;
-  uint8_t width;
   const int write_limit = 8;
-  int write_cnt;
-  int i;
-  char testname[32];
+  uint32_t  count;
+  uint32_t  data;
+  uint32_t  offset;
+  uint8_t   width;
+  int       write_cnt;
+  int       i;
+  char      testname[32];
 
   pciinfo("WRITING Test# %d %p\n", test_num, &test_hdr->test);
   test_ops->write(&test_hdr->test, test_num, 1);
@@ -122,7 +139,9 @@ static bool qemu_pci_test_bar(FAR struct pci_test_dev_ops_s 
*test_ops,
     {
       testname[i] = (char)test_ops->read((void *)&test_hdr->name + i, 1);
       if (testname[i] == 0)
-        break;
+        {
+          break;
+        }
     }
 
   pciinfo("Running test: %s\n", testname);
@@ -130,13 +149,17 @@ static bool qemu_pci_test_bar(FAR struct 
pci_test_dev_ops_s *test_ops,
   count = test_ops->read(&test_hdr->count, 4);
   pciinfo("COUNT: %04x\n", count);
   if (count != 0)
+    {
       return false;
+    }
 
   width = test_ops->read(&test_hdr->width, 1);
   pciinfo("Width: %d\n", width);
 
   if (width == 0 || width > 4)
+    {
       return false;
+    }
 
   data = test_ops->read(&test_hdr->data, 4);
   pciinfo("Data: %04x\n", data);
@@ -156,45 +179,44 @@ static bool qemu_pci_test_bar(FAR struct 
pci_test_dev_ops_s *test_ops,
   pciinfo("COUNT: %04x\n", count);
 
   if (!count)
+    {
       return true;
+    }
 
   return (int)count == write_cnt;
 }
 
-/*****************************************************************************
- * Public Functions
- *****************************************************************************/
-
 /*****************************************************************************
  * Name: qemu_pci_test_probe
  *
  * Description:
  *   Initialize device
+ *
  *****************************************************************************/
 
-int qemu_pci_test_probe(FAR struct pci_bus_s *bus,
-                        FAR struct pci_dev_type_s *type, uint16_t bdf)
+static int qemu_pci_test_probe(FAR struct pci_bus_s *bus,
+                               FAR const struct pci_dev_type_s *type,
+                               uint16_t bdf)
 {
-  uint8_t bar_id;
-  uint32_t bar;
-  uint64_t bar_addr;
+  struct pci_dev_s           dev;
+  struct pci_test_dev_ops_s  io_ops;
+  struct pci_test_dev_ops_s *test_ops;
   struct pci_test_dev_hdr_s *test_hdr;
-  struct pci_dev_s dev =
-    {
-      .bus = bus,
-      .type = type,
-      .bdf = bdf,
-    };
+  uint8_t                    bar_id;
+  uint32_t                   bar;
+  uint64_t                   bar_addr;
+  uint16_t                   test_cnt;
 
-  struct pci_test_dev_ops_s io_ops =
-    {
-      .read = bus->ops->pci_io_read,
-      .write = bus->ops->pci_io_write
-    };
+  /* Get dev */
 
-  struct pci_test_dev_ops_s *test_ops;
+  dev.bus  = bus;
+  dev.type = type;
+  dev.bdf  = bdf;
 
-  uint16_t test_cnt;
+  /* Get io ops */
+
+  io_ops.read  = bus->ops->pci_io_read;
+  io_ops.write = bus->ops->pci_io_write;
 
   pci_enable_bus_master(&dev);
   pciinfo("Enabled bus mastering\n");
@@ -209,7 +231,9 @@ int qemu_pci_test_probe(FAR struct pci_bus_s *bus,
        */
 
       if (pci_bar_valid(&dev, bar_id) != OK)
-        continue;
+        {
+          continue;
+        }
 
       bar = bus->ops->pci_cfg_read(&dev,
           PCI_HEADER_NORM_BAR0 + (bar_id * 4), 4);
@@ -219,7 +243,7 @@ int qemu_pci_test_probe(FAR struct pci_bus_s *bus,
 
       if ((bar & PCI_BAR_LAYOUT_MASK) == PCI_BAR_LAYOUT_MEM)
         {
-          test_ops = &mem_ops;
+          test_ops = &g_mem_ops;
 
           /* If the BAR is MMIO the it must be mapped */
 
@@ -233,26 +257,18 @@ int qemu_pci_test_probe(FAR struct pci_bus_s *bus,
       for (test_cnt = 0; test_cnt < 0xffff; test_cnt++)
         {
           if (!qemu_pci_test_bar(test_ops, test_hdr, test_cnt))
-            break;
+            {
+              break;
+            }
+
           pciinfo("Test Completed BAR [%d] TEST [%d]\n", bar_id, test_cnt);
         }
 
       if (pci_bar_is_64(&dev, bar_id))
-        bar_id++;
+        {
+          bar_id++;
+        }
     }
 
   return OK;
 }
-
-/*****************************************************************************
- * Public Data
- *****************************************************************************/
-
-struct pci_dev_type_s pci_type_qemu_pci_test =
-{
-    .vendor = 0x1b36,
-    .device = 0x0005,
-    .class_rev = PCI_ID_ANY,
-    .name = "Qemu PCI test device",
-    .probe = qemu_pci_test_probe
-};
diff --git a/include/nuttx/pci/pci.h b/include/nuttx/pci/pci.h
index 0b420a04c0..72e88a73c0 100644
--- a/include/nuttx/pci/pci.h
+++ b/include/nuttx/pci/pci.h
@@ -40,17 +40,17 @@
 
 /* PCI config common registers */
 
-#define        PCI_CONFIG_VENDOR                 0x00
-#define        PCI_CONFIG_DEVICE                 0x02
-#define        PCI_CONFIG_COMMAND              0x04
-#define        PCI_CONFIG_REV_ID                 0x08
+#define        PCI_CONFIG_VENDOR           0x00
+#define        PCI_CONFIG_DEVICE           0x02
+#define        PCI_CONFIG_COMMAND          0x04
+#define        PCI_CONFIG_REV_ID           0x08
 #define        PCI_CONFIG_PROG_IF          0x09
-#define        PCI_CONFIG_SUBCLASS             0x0A
-#define        PCI_CONFIG_CLASS                  0x0B
-#define        PCI_CONFIG_CACHE_LINE_SIZE      0x0C
-#define        PCI_CONFIG_LATENCY_TIMER          0x0D
-#define        PCI_CONFIG_HEADER_TYPE      0x0E
-#define        PCI_CONFIG_BIST             0x0F
+#define        PCI_CONFIG_SUBCLASS         0x0A
+#define        PCI_CONFIG_CLASS            0x0B
+#define        PCI_CONFIG_CACHE_LINE_SIZE  0x0C
+#define        PCI_CONFIG_LATENCY_TIMER    0x0D
+#define        PCI_CONFIG_HEADER_TYPE      0x0E
+#define        PCI_CONFIG_BIST             0x0F
 
 /* PCI config header types */
 
@@ -109,7 +109,7 @@
 
 /* Reserved 0x14-0x3F */
 
-#define PCI_CLASS_BASE_CO_PROC           0x40   
+#define PCI_CLASS_BASE_CO_PROC           0x40
 
 /* Reserved 0x41-0xFE */
 
@@ -216,18 +216,32 @@ struct pci_dev_s;
 
 struct pci_bus_ops_s
 {
-    CODE void (*pci_cfg_write)(FAR struct pci_dev_s *dev, int reg,
-                               uint32_t val, int width);
+  /* Write 8, 16, 32, 64 bits data to PCI-E configuration space of device
+   * specified by dev.
+   */
 
-    CODE uint32_t (*pci_cfg_read)(FAR struct pci_dev_s *dev, int reg,
-                                  int width);
+  CODE void (*pci_cfg_write)(FAR struct pci_dev_s *dev, int reg,
+                             uint32_t val, int width);
 
-    CODE int (*pci_map_bar)(uint64_t addr, uint64_t len);
+  /* Read 8, 16, 32, 64 bits data to PCI-E configuration space of device
+   * specified by dev.
+   */
 
-    CODE uint32_t (*pci_io_read)(FAR const volatile void *addr, int width);
+  CODE uint32_t (*pci_cfg_read)(FAR struct pci_dev_s *dev, int reg,
+                                int width);
 
-    CODE void (*pci_io_write)(FAR const volatile void *addr, uint32_t val,
-                              int width);
+  /* Map address in a 32 bits bar in the memory address space */
+
+  CODE int (*pci_map_bar)(uint64_t addr, uint64_t len);
+
+  /* Read from IO port */
+
+  CODE uint32_t (*pci_io_read)(FAR const volatile void *addr, int width);
+
+  /* Write to IO port */
+
+  CODE void (*pci_io_write)(FAR const volatile void *addr, uint32_t val,
+                            int width);
 };
 
 /* PCI bus private data. */
@@ -249,16 +263,16 @@ struct pci_dev_type_s
   /* Call back function when a device is probed */
 
   CODE int (*probe)(FAR struct pci_bus_s *bus,
-                    FAR struct pci_dev_type_s *type, uint16_t bdf);
+                    FAR const struct pci_dev_type_s *type, uint16_t bdf);
 };
 
 /* PCI device private data. */
 
 struct pci_dev_s
 {
-    FAR struct pci_bus_s       *bus;
-    FAR struct pci_dev_type_s  *type;
-    uint32_t                    bdf;
+  FAR struct pci_bus_s            *bus;
+  FAR const struct pci_dev_type_s *type;
+  uint32_t                         bdf;
 };
 
 /****************************************************************************
diff --git a/include/nuttx/virt/qemu_pci.h b/include/nuttx/virt/qemu_pci.h
index 3c3379ed00..6d5568d463 100644
--- a/include/nuttx/virt/qemu_pci.h
+++ b/include/nuttx/virt/qemu_pci.h
@@ -1,5 +1,5 @@
 /****************************************************************************
- * include/nuttx/serial/uart_mcs99xx.h
+ * include/nuttx/virt/qemu_pci.h
  *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -18,8 +18,8 @@
  *
  ****************************************************************************/
 
-#ifndef __INCLUDE_NUTTX_VIRT_QEMU_PCI_TEST_H
-#define __INCLUDE_NUTTX_VIRT_QEMU_PCI_TEST_H
+#ifndef __INCLUDE_NUTTX_VIRT_QEMU_PCI_H
+#define __INCLUDE_NUTTX_VIRT_QEMU_PCI_H
 
 /****************************************************************************
  * Included Files
@@ -42,16 +42,16 @@ extern "C"
 #endif
 
 #ifdef CONFIG_VIRT_QEMU_PCI_TEST
-extern struct pci_dev_type_s pci_type_qemu_pci_test;
-#endif /* CONFIG_VIRT_QEMU_PCI_TEST */
+extern const struct pci_dev_type_s g_pci_type_qemu_pci_test;
+#endif
 
 #ifdef CONFIG_VIRT_QEMU_EDU
-extern struct pci_dev_type_s pci_type_qemu_edu;
-#endif /* CONFIG_VIRT_QEMU_EDU */
+extern const struct pci_dev_type_s g_pci_type_qemu_edu;
+#endif
 
 #undef EXTERN
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* __INCLUDE_NUTTX_VIRT_QEMU_PCI_TEST_H */
+#endif /* __INCLUDE_NUTTX_VIRT_QEMU_PCI_H */

Reply via email to