changeset 28:ed3247946305

Merge
author lionel auroux <lionel.auroux@gmail.com>
date Sat, 07 Jan 2012 20:56:06 +0100
parents 7f879b938ead (current diff) 8eac832f763d (diff)
children 1b7399e39afd
files
diffstat 3 files changed, 230 insertions(+), 93 deletions(-) [+]
line wrap: on
line diff
--- a/rathaxes_start_to_implement_pci_stuff_in_the_lkm.patch	Sat Jan 07 20:46:46 2012 +0100
+++ b/rathaxes_start_to_implement_pci_stuff_in_the_lkm.patch	Sat Jan 07 20:56:06 2012 +0100
@@ -1,10 +1,10 @@
 # HG changeset patch
-# Parent 873b66890128280637d97a24221258bb297a1ac8
+# Parent 6e00628ccba9fd82577a8a30fe4e730bc982e987
 rathaxes: start to implement the PCI registration part in the LKM sample
 
-diff --git a/rathaxes/samples/lkm/CMakeLists.txt b/rathaxes/samples/lkm/CMakeLists.txt
---- a/rathaxes/samples/lkm/CMakeLists.txt
-+++ b/rathaxes/samples/lkm/CMakeLists.txt
+diff -r 6e00628ccba9 rathaxes/samples/lkm/CMakeLists.txt
+--- a/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 19:07:39 2012 +0100
++++ b/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 19:10:21 2012 +0100
 @@ -1,3 +1,7 @@
  ADD_RATHAXES_SOURCES(lkm lkm.rtx
 -                     RTI log.rti lkm.rti
@@ -15,9 +15,9 @@
 +# We can't name lkm since it's already used as the target name to generate the
 +# source (with ADD_RATHAXES_SOURCES).
 +ADD_RATHAXES_LKM(lkm_hello lkm)
-diff --git a/rathaxes/samples/lkm/lkm.blt b/rathaxes/samples/lkm/lkm.blt
---- a/rathaxes/samples/lkm/lkm.blt
-+++ b/rathaxes/samples/lkm/lkm.blt
+diff -r 6e00628ccba9 rathaxes/samples/lkm/lkm.blt
+--- a/rathaxes/samples/lkm/lkm.blt	Sat Jan 07 19:07:39 2012 +0100
++++ b/rathaxes/samples/lkm/lkm.blt	Sat Jan 07 19:10:21 2012 +0100
 @@ -1,8 +1,10 @@
  with LKM
  {
@@ -82,9 +82,9 @@
          }
      }
  }
-diff --git a/rathaxes/samples/lkm/lkm.rti b/rathaxes/samples/lkm/lkm.rti
---- a/rathaxes/samples/lkm/lkm.rti
-+++ b/rathaxes/samples/lkm/lkm.rti
+diff -r 6e00628ccba9 rathaxes/samples/lkm/lkm.rti
+--- a/rathaxes/samples/lkm/lkm.rti	Sat Jan 07 19:07:39 2012 +0100
++++ b/rathaxes/samples/lkm/lkm.rti	Sat Jan 07 19:10:21 2012 +0100
 @@ -1,8 +1,10 @@
  interface LKM
  {
@@ -112,9 +112,9 @@
 +        provided chunk  LKM::code;
      }
  }
-diff --git a/rathaxes/samples/lkm/lkm.rtx b/rathaxes/samples/lkm/lkm.rtx
---- a/rathaxes/samples/lkm/lkm.rtx
-+++ b/rathaxes/samples/lkm/lkm.rtx
+diff -r 6e00628ccba9 rathaxes/samples/lkm/lkm.rtx
+--- a/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 19:07:39 2012 +0100
++++ b/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 19:10:21 2012 +0100
 @@ -1,19 +1,35 @@
 -device LKM use LKM, Log
 +device LKM use LKM, PCI, Log
@@ -152,11 +152,10 @@
 +    PCI::vendor_id = 0x8086;
 +    PCI::product_id = 0x100f;
  }
-diff --git a/rathaxes/samples/lkm/pci.blt b/rathaxes/samples/lkm/pci.blt
-new file mode 100644
---- /dev/null
-+++ b/rathaxes/samples/lkm/pci.blt
-@@ -0,0 +1,129 @@
+diff -r 6e00628ccba9 rathaxes/samples/lkm/pci.blt
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/rathaxes/samples/lkm/pci.blt	Sat Jan 07 19:10:21 2012 +0100
+@@ -0,0 +1,127 @@
 +with PCI, LKM, Log
 +{
 +    template type   PCI::Device()
@@ -206,8 +205,8 @@
 +                ${PCI::Device}  *dev = NULL;
 +
 +                err = pci_enable_device(pdev);
-+//              if (err < 0) /* `if' doesn't work */
-+//                  goto fail;
++                if (err < 0)
++                    goto fail;
 +
 +                ${pointcut ::IMPLEMENTATION};
 +
@@ -247,7 +246,7 @@
 +             * CNorm doesn't seem to like "dynamic" arrays (i.e: you always
 +             * have to specify the exact size).
 +             */
-+            static struct pci_device_id	rtx_pci_device_table[2] = {
++            static struct pci_device_id rtx_pci_device_table[2] = {
 +                { ${config.vendor_id}, ${config.product_id}, 0, PCI_ANY_ID, PCI_ANY_ID },
 +                { 0, }
 +            };
@@ -265,16 +264,14 @@
 +            /*
 +             * So how do we use the return value in the parent context?
 +             */
-+            pci_register_driver(&rtx_pci_driver);
-+            /*
-+             * if (pci_register_driver(&rtx_pci_driver))
-+             * {
-+             *     `if' still doesn't work.
-+             *
-+             *      Also, can I call the Log interface from here?
-+             *      ${Log::info("Message")}; doesn't seem to work.
-+             * }
-+             */
++            int error;
++            if ((error = pci_register_driver(&rtx_pci_driver)))
++            {
++                 ${Log::info("Cannot register pci driver")};
++                 // should we return here.
++                 // error managmement procedure has to be determined ASAP.
++                 return error;
++            }
 +        }
 +    }
 +
@@ -286,10 +283,9 @@
 +        }
 +    }
 +}
-diff --git a/rathaxes/samples/lkm/pci.rti b/rathaxes/samples/lkm/pci.rti
-new file mode 100644
---- /dev/null
-+++ b/rathaxes/samples/lkm/pci.rti
+diff -r 6e00628ccba9 rathaxes/samples/lkm/pci.rti
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/rathaxes/samples/lkm/pci.rti	Sat Jan 07 19:10:21 2012 +0100
 @@ -0,0 +1,30 @@
 +interface PCI : LKM
 +{
--- a/rathaxes_start_to_implement_sk_buff_in_the_lkm.patch	Sat Jan 07 20:46:46 2012 +0100
+++ b/rathaxes_start_to_implement_sk_buff_in_the_lkm.patch	Sat Jan 07 20:56:06 2012 +0100
@@ -1,29 +1,132 @@
 # HG changeset patch
-# Parent c979b95fd7fbc4c38849cf42a458a50d8d2d6901
+# Parent 606e807b8bc7a3a7ea6f1b895bfe909cd7875c2e
 rathaxes: add sk_buff abstraction and add the implementation of the xmit function for the ethernet system. We have a fully (empty) functionnal ethernet driver
 
-diff -r c979b95fd7fb rathaxes/samples/lkm/CMakeLists.txt
---- a/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 12:15:32 2012 +0100
-+++ b/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 12:46:06 2012 +0100
+diff -r 606e807b8bc7 rathaxes/samples/lkm/CMakeLists.txt
+--- a/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 20:02:55 2012 +0100
++++ b/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 20:48:23 2012 +0100
 @@ -1,6 +1,6 @@
  ADD_RATHAXES_SOURCES(lkm lkm.rtx
 -                     RTI log.rti lkm.rti pci.rti ethernet.rti
 -                     BLT log.blt lkm.blt pci.blt ethernet.blt)
-+                     RTI log.rti lkm.rti pci.rti socket.rti ethernet.rti
-+                     BLT log.blt lkm.blt pci.blt socket.blt ethernet.blt)
++                     RTI log.rti lkm.rti pci.rti socket.rti ethernet.rti e1000.rti
++                     BLT log.blt lkm.blt pci.blt socket.blt ethernet.blt e1000.blt)
  
  # We can't name lkm since it's already used as the target name to generate the
  # source (with ADD_RATHAXES_SOURCES).
-diff -r c979b95fd7fb rathaxes/samples/lkm/ethernet.blt
---- a/rathaxes/samples/lkm/ethernet.blt	Sat Jan 07 12:15:32 2012 +0100
-+++ b/rathaxes/samples/lkm/ethernet.blt	Sat Jan 07 12:46:06 2012 +0100
-@@ -1,4 +1,4 @@
--with Ethernet, PCI, LKM
-+with Ethernet, Socket, PCI, LKM
- {
-     template type   Ethernet::Device()
-     {
-@@ -51,6 +51,24 @@
+diff -r 606e807b8bc7 rathaxes/samples/lkm/e1000.blt
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/rathaxes/samples/lkm/e1000.blt	Sat Jan 07 20:48:23 2012 +0100
+@@ -0,0 +1,72 @@
++with e1000, Ethernet, Socket, PCI, LKM, Log
++{
++    template type   e1000::Context()
++    {
++        chunk   LKM::includes()
++        {
++            /*
++             * Force the generation of the structure in the "headers part, we
++             * have to do this since we do not use the structure in this blt
++             * (we hacked a bit and used it in ethernet.blt directly).
++             */
++            typedef int ${e1000::Context}; /* CNorm __std__ workaround */
++            ${e1000::Context} force_declaration_in_includes;
++        }
++
++        chunk   ::decl()
++        {
++            struct rtx_e1000_ctx
++            {
++                int                             bars;
++                unsigned char /* __iomem */     *ioaddr;
++            };
++        }
++
++        map
++        {
++        }
++    }
++
++    template sequence   e1000::create()
++    {
++        chunk ::CALL
++        {
++            rtx_ether_ctx->hw_ctx.bars = pci_select_bars(pdev, IORESOURCE_MEM);
++            if (pci_enable_device_mem(pdev))
++            {
++                ${Log::info("e1000::create: pci_enable_device_mem failed")};
++            }
++
++            if (pci_request_selected_regions(pdev, rtx_ether_ctx->hw_ctx.bars, ${config.name}))
++            {
++                ${Log::info("e1000::create: pci_request_selected_regions failed")};
++            }
++
++            if (${config.set_master})
++            {
++                pci_set_master(pdev);
++            }
++
++            /* 0 here is for BAR_0: */
++            rtx_ether_ctx->hw_ctx.ioaddr = pci_ioremap_bar(pdev, 0);
++            if (!rtx_ether_ctx->hw_ctx.ioaddr)
++            {
++                ${Log::info("e1000::create: pci_ioremap_bar failed")};
++            }
++        }
++    }
++
++    template sequence   e1000::destroy()
++    {
++        chunk ::CALL
++        {
++            // XXX: add a check in order to avoid freeing none allocated
++            // resources.
++            struct net_device *net_dev = pci_get_drvdata(pdev);
++            struct rtx_ethernet_dev* rtx_ether_ctx = netdev_priv(net_dev);
++            iounmap(rtx_ether_ctx->hw_ctx.ioaddr);
++            pci_release_selected_regions(pdev, rtx_ether_ctx->hw_ctx.bars);
++            pci_release_region(pdev, 0);
++        }
++    }
++}
+diff -r 606e807b8bc7 rathaxes/samples/lkm/e1000.rti
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/rathaxes/samples/lkm/e1000.rti	Sat Jan 07 20:48:23 2012 +0100
+@@ -0,0 +1,15 @@
++interface e1000 : Socket, Ethernet, PCI, LKM
++{
++    provided type   e1000::Context;
++
++    /* Not sure if we need the argument */
++    provided sequence   e1000::create()
++    {
++        provided chunk  ::CALL;
++    }
++
++    provided sequence   e1000::destroy()
++    {
++        provided chunk  ::CALL;
++    }
++}
+diff -r 606e807b8bc7 rathaxes/samples/lkm/ethernet.blt
+--- a/rathaxes/samples/lkm/ethernet.blt	Sat Jan 07 20:02:55 2012 +0100
++++ b/rathaxes/samples/lkm/ethernet.blt	Sat Jan 07 20:48:23 2012 +0100
+@@ -18,8 +18,11 @@
+                  * I think it's useless to use the ${PCI::Device} "abstraction"
+                  * here, since we are already in a Linux specific context here.
+                  */
+-                struct pci_dev      *pci_dev;
+-                struct net_device   *net_dev;
++                struct pci_dev          *pci_dev;
++                struct net_device       *net_dev;
++
++                /* while waiting on issue #8 */
++                struct rtx_e1000_ctx    hw_ctx;
+             };
+         }
+ 
+@@ -51,6 +54,24 @@
          }
      }
  
@@ -48,7 +151,7 @@
      template sequence   Ethernet::close(Ethernet::Device dev)
      {
          chunk LKM::prototypes()
-@@ -100,7 +118,7 @@
+@@ -100,7 +121,7 @@
              {
                  .ndo_open = rtx_ethernet_open,
                  .ndo_stop = rtx_ethernet_close,
@@ -57,9 +160,19 @@
              };
          }
  
-diff -r c979b95fd7fb rathaxes/samples/lkm/ethernet.rti
---- a/rathaxes/samples/lkm/ethernet.rti	Sat Jan 07 12:15:32 2012 +0100
-+++ b/rathaxes/samples/lkm/ethernet.rti	Sat Jan 07 12:46:06 2012 +0100
+@@ -159,9 +180,6 @@
+     {
+         chunk ::CALL
+         {
+-            struct net_device   *net_dev;
+-
+-            net_dev = pci_get_drvdata(pdev); // should be ${pdev}, see above
+             unregister_netdev(net_dev);
+             /*
+              * If we had some cleanup todo with struct rtx_ether_ctx we would
+diff -r 606e807b8bc7 rathaxes/samples/lkm/ethernet.rti
+--- a/rathaxes/samples/lkm/ethernet.rti	Sat Jan 07 20:02:55 2012 +0100
++++ b/rathaxes/samples/lkm/ethernet.rti	Sat Jan 07 20:48:23 2012 +0100
 @@ -1,4 +1,4 @@
 -interface Ethernet : PCI, LKM
 +interface Ethernet : Socket, PCI, LKM
@@ -79,10 +192,10 @@
      required sequence   Ethernet::close(Ethernet::Device)
      {
          provided chunk  LKM::prototypes;
-diff -r c979b95fd7fb rathaxes/samples/lkm/lkm.rtx
---- a/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 12:15:32 2012 +0100
-+++ b/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 12:46:06 2012 +0100
-@@ -15,6 +15,11 @@
+diff -r 606e807b8bc7 rathaxes/samples/lkm/lkm.rtx
+--- a/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 20:02:55 2012 +0100
++++ b/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 20:48:23 2012 +0100
+@@ -15,15 +15,22 @@
          Log::info("Got an interruption");
      }
  
@@ -94,9 +207,33 @@
      PCI::probe(PCI::Device dev)
      {
          Log::info("Probe the device");
-diff -r c979b95fd7fb rathaxes/samples/lkm/socket.blt
+         Ethernet::init(dev);
++        e1000::create();
+     }
+ 
+     PCI::remove(PCI::Device dev)
+     {
+         Log::info("Remove the pci device");
++        e1000::destroy();
+         Ethernet::exit(dev);
+     }
+ 
+@@ -45,10 +52,11 @@
+     LKM::name = "hello";
+     LKM::author = "Rathaxes";
+     LKM::description = "Hello World Loadable Kernel Module (LKM)";
+-    LKM::license = "BSD";
++    LKM::license = "GPL";
+ 
+     PCI::vendor_id = 0x8086;
+     PCI::product_id = 0x100f;
++    PCI::set_master = true;
+ 
+     Ethernet::ifname = "rtx%d";
+ }
+diff -r 606e807b8bc7 rathaxes/samples/lkm/socket.blt
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/rathaxes/samples/lkm/socket.blt	Sat Jan 07 12:46:06 2012 +0100
++++ b/rathaxes/samples/lkm/socket.blt	Sat Jan 07 20:48:23 2012 +0100
 @@ -0,0 +1,27 @@
 +with Socket, LKM
 +{
@@ -125,9 +262,9 @@
 +        }
 +    }
 +}
-diff -r c979b95fd7fb rathaxes/samples/lkm/socket.rti
+diff -r 606e807b8bc7 rathaxes/samples/lkm/socket.rti
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/rathaxes/samples/lkm/socket.rti	Sat Jan 07 12:46:06 2012 +0100
++++ b/rathaxes/samples/lkm/socket.rti	Sat Jan 07 20:48:23 2012 +0100
 @@ -0,0 +1,4 @@
 +interface Socket : LKM
 +{
--- a/rathaxes_start_to_implement_the_ethernet_subsystem_in_the_lkm.patch	Sat Jan 07 20:46:46 2012 +0100
+++ b/rathaxes_start_to_implement_the_ethernet_subsystem_in_the_lkm.patch	Sat Jan 07 20:56:06 2012 +0100
@@ -1,10 +1,10 @@
 # HG changeset patch
-# Parent 5c8a128a8804aa592e3ccc74e86e109d0b577896
+# Parent 53c073d05449cc4cd6130bd79eb02c07239dd8d8
 rathaxes: start to implement the Ethernet subsystem in linux LKM sample
 
-diff -r 5c8a128a8804 rathaxes/samples/lkm/CMakeLists.txt
---- a/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 11:23:27 2012 +0100
-+++ b/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 12:15:32 2012 +0100
+diff -r 53c073d05449 rathaxes/samples/lkm/CMakeLists.txt
+--- a/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 19:10:21 2012 +0100
++++ b/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 19:18:24 2012 +0100
 @@ -1,6 +1,6 @@
  ADD_RATHAXES_SOURCES(lkm lkm.rtx
 -                     RTI log.rti lkm.rti pci.rti
@@ -14,11 +14,11 @@
  
  # We can't name lkm since it's already used as the target name to generate the
  # source (with ADD_RATHAXES_SOURCES).
-diff -r 5c8a128a8804 rathaxes/samples/lkm/ethernet.blt
+diff -r 53c073d05449 rathaxes/samples/lkm/ethernet.blt
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/rathaxes/samples/lkm/ethernet.blt	Sat Jan 07 12:15:32 2012 +0100
-@@ -0,0 +1,164 @@
-+with Ethernet, PCI, LKM
++++ b/rathaxes/samples/lkm/ethernet.blt	Sat Jan 07 19:18:24 2012 +0100
+@@ -0,0 +1,173 @@
++with Ethernet, PCI, LKM, Log
 +{
 +    template type   Ethernet::Device()
 +    {
@@ -133,10 +133,16 @@
 +            typedef int ${Ethernet::Device};
 +            ${Ethernet::Device} *rtx_ether_ctx;
 +            struct net_device   *net_dev;
++            int error;
 +
++            error = 0;
 +            net_dev = alloc_etherdev(sizeof(*rtx_ether_ctx));
-+            //if (net_dev == NULL)
-+                // How should we raise the error in the parent context?
++            if (net_dev == 0)
++            {
++                ${Log::info("Cannot allocate memory")};
++                // is it the thing to do?
++                return -ENOMEM;
++            }
 +            strlcpy(net_dev->name, ${config.ifname}, sizeof(net_dev->name));
 +            net_dev->irq = pdev->irq;
 +            // Maybe we should try ${rtx_ether_ctx.init()} here:
@@ -156,9 +162,12 @@
 +            //SET_NETDEV_DEV(net_dev, &${pdev}->dev);
 +            SET_NETDEV_DEV(net_dev, &pdev->dev);
 +            net_dev->netdev_ops = &rtx_ether_ops;
-+
-+            /* if (*/register_netdev(net_dev);/*)*/
-+                // Handle the error
++            if ((error = register_netdev(net_dev)))
++            {
++                ${Log::info("Cannot register the driver")};
++                // is it the thing to do?
++                return error;
++            }
 +
 +            /* same problem as above with ${pdev} */
 +            //pci_set_drvdata(${pdev}, net_dev);
@@ -182,9 +191,9 @@
 +        }
 +    }
 +}
-diff -r 5c8a128a8804 rathaxes/samples/lkm/ethernet.rti
+diff -r 53c073d05449 rathaxes/samples/lkm/ethernet.rti
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/rathaxes/samples/lkm/ethernet.rti	Sat Jan 07 12:15:32 2012 +0100
++++ b/rathaxes/samples/lkm/ethernet.rti	Sat Jan 07 19:18:24 2012 +0100
 @@ -0,0 +1,37 @@
 +interface Ethernet : PCI, LKM
 +{
@@ -223,9 +232,9 @@
 +        provided chunk  ::CALL;
 +    }
 +}
-diff -r 5c8a128a8804 rathaxes/samples/lkm/lkm.rtx
---- a/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 11:23:27 2012 +0100
-+++ b/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 12:15:32 2012 +0100
+diff -r 53c073d05449 rathaxes/samples/lkm/lkm.rtx
+--- a/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 19:10:21 2012 +0100
++++ b/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 19:18:24 2012 +0100
 @@ -1,13 +1,30 @@
  device LKM use LKM, PCI, Log
  {
@@ -266,9 +275,9 @@
 +
 +    Ethernet::ifname = "rtx%d";
  }
-diff -r 5c8a128a8804 rathaxes/samples/lkm/pci.blt
---- a/rathaxes/samples/lkm/pci.blt	Sat Jan 07 11:23:27 2012 +0100
-+++ b/rathaxes/samples/lkm/pci.blt	Sat Jan 07 12:15:32 2012 +0100
+diff -r 53c073d05449 rathaxes/samples/lkm/pci.blt
+--- a/rathaxes/samples/lkm/pci.blt	Sat Jan 07 19:10:21 2012 +0100
++++ b/rathaxes/samples/lkm/pci.blt	Sat Jan 07 19:18:24 2012 +0100
 @@ -11,15 +11,12 @@
  
          chunk   ::decl()
@@ -317,7 +326,7 @@
 -                ${PCI::Device}  *dev = NULL;
  
                  err = pci_enable_device(pdev);
- //              if (err < 0) /* `if' doesn't work */
+                 if (err < 0)
 @@ -52,8 +55,6 @@
  
                  ${pointcut ::IMPLEMENTATION};
@@ -348,17 +357,12 @@
              }
          }
      }
-@@ -88,9 +89,10 @@
-              * CNorm doesn't seem to like "dynamic" arrays (i.e: you always
+@@ -89,7 +90,7 @@
               * have to specify the exact size).
               */
--            static struct pci_device_id	rtx_pci_device_table[2] = {
+             static struct pci_device_id rtx_pci_device_table[2] = {
 -                { ${config.vendor_id}, ${config.product_id}, 0, PCI_ANY_ID, PCI_ANY_ID },
--                { 0, }
-+            static struct pci_device_id	rtx_pci_device_table[2] =
-+            {
 +                { ${config.vendor_id}, ${config.product_id}, PCI_ANY_ID, PCI_ANY_ID },
-+                { 0, } /* Doesn't work with just { } */
+                 { 0, }
              };
  
-             static struct pci_driver rtx_pci_driver = {