changeset 93:2cc8fda4c4e3

Add a patch with some wip on the ethernet part of the e1000 sample
author Louis Opter <louis@lse.epita.fr>
date Mon, 22 Oct 2012 00:56:41 +0200
parents 5eb746474f0f
children c908de343118
files rathaxes_cleanups_in_ethernet_rti_blt.patch series
diffstat 2 files changed, 120 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rathaxes_cleanups_in_ethernet_rti_blt.patch	Mon Oct 22 00:56:41 2012 +0200
@@ -0,0 +1,119 @@
+# HG changeset patch
+# Parent 72057981213815c2bc5f34f50a997ea2e28f2fdc
+rathaxes: tidy up ethernet.{rti,blt} in the e1000 sample
+
+- Remove typedefs;
+- Rename Ethernet::SubContext in Ethernet::HardwareContext: I think this
+  is more clear. This pointcut is here to allow the underlying real
+  device to store its private data structure within the context of the
+  Ethernet subsystem.
+
+
+diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt
+--- a/rathaxes/samples/e1000/e1000.blt
++++ b/rathaxes/samples/e1000/e1000.blt
+@@ -268,7 +268,7 @@
+ 
+     template type   e1000::Context()
+     {
+-        chunk   Ethernet::SubContext()
++        chunk   Ethernet::HardwareContext()
+         {
+             /*
+              * Force the generation of the structure in the "headers" part, we
+diff --git a/rathaxes/samples/e1000/e1000.rti b/rathaxes/samples/e1000/e1000.rti
+--- a/rathaxes/samples/e1000/e1000.rti
++++ b/rathaxes/samples/e1000/e1000.rti
+@@ -10,7 +10,7 @@
+ 
+     provided type   Context
+     {
+-        chunk       Ethernet::SubContext();
++        chunk       Ethernet::HardwareContext();
+         method      decl();
+         method      init();
+     }
+diff --git a/rathaxes/samples/e1000/ethernet.blt b/rathaxes/samples/e1000/ethernet.blt
+--- a/rathaxes/samples/e1000/ethernet.blt
++++ b/rathaxes/samples/e1000/ethernet.blt
+@@ -59,7 +59,7 @@
+ 
+         chunk ::decl()
+         {
+-            typedef struct net_device *net_devp;
++            struct net_device;
+         }
+ 
+         map
+@@ -76,14 +76,7 @@
+ 
+         chunk ::decl()
+         {
+-            /*
+-             * So, at first sight, it sucks to typedef it as pointer but (for
+-             * now) it makes sense for two reasons:
+-             * - This structure will always be used through a pointer;
+-             * - This remove the ambiguity of pointer/not-pointer in the
+-             * ::init() chunk.
+-             */
+-            typedef struct rtx_ethernet_dev
++            struct rtx_ethernet_dev
+             {
+                 /*
+                  * I think it's useless to use the ${PCI::Device} "abstraction"
+@@ -96,8 +89,8 @@
+                  * In the long-term, this may disappear for a new concept allowing
+                  * to embbed a descriptor defined and manipulated by the front-end
+                  */
+-                ${pointcut Ethernet::SubContext()};
+-            } *rtx_ethernet_dev_p;
++                ${pointcut Ethernet::HardwareContext()};
++            };
+         }
+ 
+         chunk ::init(Ethernet::AbstractDevice net_dev, PCI::Device pci_dev)
+@@ -105,7 +98,7 @@
+             ${self} = netdev_priv(${net_dev});
+             /*
+              * We can use -> because we know that ${self} will be always a
+-             * pointer ("thanks" to the typedef)
++             * pointer, but the ambiguity sucks.
+              */
+             ${self}->pci_dev = ${pci_dev};
+             ${self}->net_dev = ${net_dev};
+@@ -213,12 +206,8 @@
+         /* For now the type is not handled, so we just omit it (see #17) */
+         chunk PCI::pci_probe_hook(PCI::Device pdev)
+         {
+-            /*
+-             * This typedef is needed to workaround a bug in CNorm __std__
+-             * dialect.
+-             */
+             ${Ethernet::Device} rtx_ether_ctx;
+-            struct net_device *net_dev;
++            ${Ethernet::AbstractDevice} net_dev;
+             int error;
+ 
+             /* Initialize the net_device structure */
+@@ -264,8 +253,7 @@
+     {
+         chunk   PCI::pci_remove_hook(PCI::Device pdev)
+         {
+-            /* workaround for cnorm unstrict */
+-            struct net_device *net_dev = pci_get_drvdata(${pdev});
++            ${Ethernet::AbstractDevice} net_dev = pci_get_drvdata(${pdev});
+             ${Ethernet::Device} rtx_ether_ctx = netdev_priv(net_dev);
+ 
+             ${pointcut Ethernet::destroy_device(pdev, local.rtx_ether_ctx)};
+diff --git a/rathaxes/samples/e1000/ethernet.rti b/rathaxes/samples/e1000/ethernet.rti
+--- a/rathaxes/samples/e1000/ethernet.rti
++++ b/rathaxes/samples/e1000/ethernet.rti
+@@ -27,7 +27,7 @@
+         chunk       LKM::includes();
+         method      decl();
+         method      init(Ethernet::AbstractDevice, PCI::Device);
+-        pointcut    Ethernet::SubContext();
++        pointcut    Ethernet::HardwareContext();
+     }
+ 
+     required sequence   open(Ethernet::Device)
--- a/series	Fri Oct 19 09:00:25 2012 +0200
+++ b/series	Mon Oct 22 00:56:41 2012 +0200
@@ -1,1 +1,2 @@
 rathaxes_add_a_test_to_reproduce_the_pointer_to_rathaxes_bug.patch
+rathaxes_cleanups_in_ethernet_rti_blt.patch