view rathaxes_samples_e1000_add_alloc_sequences_in_socket.patch @ 120:cbd9b9a49b63

wip, alloc_rx_skbuff actually an abstraction for netdev_allock_skb
author Louis Opter <louis@lse.epita.fr>
date Fri, 26 Jul 2013 21:06:45 -0700
parents d84bc9a46771
children
line wrap: on
line source

# HG changeset patch
# Parent e06ebc5e25f35ad135ab454c3f157698e00e69ac
rathaxes: add an alloc_rx_skbuff method to Ethernet::Device in e1000

This will help to hide platform dependent code from
e1000::set_up_device.

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
@@ -752,8 +752,10 @@
              */
             for (i = 0; i != ${config.rx_ring_size}; ++i)
             {
+                /* XXX #46: */
+                // hw_ctx->rx_ring.skbuffs[i].skbuff = ${rtx_ether_ctx.net_device.alloc_rx_skb(${config.rx_buffer_len})}; 
                 hw_ctx->rx_ring.skbuffs[i].skbuff = (${Socket::AbstractSKBuff}*)netdev_alloc_skb(
-                        ${rtx_ether_ctx.net_device.k_net_dev}, /* XXX: .k_net_dev isn't expanded here */
+                        ${rtx_ether_ctx.net_device.k_net_dev},
                         ${config.rx_buffer_len});
                 if (!hw_ctx->rx_ring.skbuffs[i].skbuff)
                 {
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
@@ -107,6 +107,13 @@
             ${self}->net_dev = ${rtx_net_dev};
         }
 
+        /*
+        method alloc_rx_skbuff(Builtin::number size)
+        {
+            ($(Socket::Skbuff.ref})netdev_alloc_skb(${self}, ${size});
+        }
+        */
+
         map
         {
             /*
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
@@ -30,8 +30,10 @@
     {
         chunk       LKM::includes();
         decl        data_types();
+        pointcut    Ethernet::HardwareContext();
+
         method      init(Ethernet::AbstractDevice, PCI::AbstractDevice);
-        pointcut    Ethernet::HardwareContext();
+        //method      alloc_rx_skbuff(Builtin::number); /* -> Socket::Skbuff.ref */
 
         attribute   Device::AbstractDevice.ref      device;
         attribute   PCI::AbstractDevice.ref         pci_device;
diff --git a/rathaxes/samples/e1000/socket.rti b/rathaxes/samples/e1000/socket.rti
--- a/rathaxes/samples/e1000/socket.rti
+++ b/rathaxes/samples/e1000/socket.rti
@@ -1,4 +1,4 @@
-interface Socket : LKM, Device, DMA
+interface Socket : LKM, Device, DMA, Builtin
 {
     /* The SKBuff type from the kernel */
     provided type   AbstractSKBuff
@@ -10,15 +10,15 @@
 
     provided type   SKBuff
     {
-        chunk       LKM::prototypes();
-        chunk       LKM::code();
-        decl        data_types();
-        method      init(Socket::AbstractSKBuff);
-        method      dump_infos();
-        method      map_to(Device::AbstractDevice);
-        method      map_from(Device::AbstractDevice);
-        method      unmap_to_and_free(Device::AbstractDevice);
-        method      unmap_from_and_free(Device::AbstractDevice);
+        chunk   LKM::prototypes();
+        chunk   LKM::code();
+        decl    data_types();
+        method  init(Socket::AbstractSKBuff);
+        method  dump_infos();
+        method  map_to(Device::AbstractDevice);
+        method  map_from(Device::AbstractDevice);
+        method  unmap_to_and_free(Device::AbstractDevice);
+        method  unmap_from_and_free(Device::AbstractDevice);
 
         attribute   Socket::AbstractSKBuff.ref      sk_buff;
         attribute   DMA::AbstractDMAHandle.scalar   dma_handle;