Mercurial > archived > louis > epitech > mq > rathaxes
diff rathaxes_samples_e1000_use_the_dma_abstraction_in_socket.patch @ 115:5a663f8f0e54
WIP, fix another small bug in rathaxes sequence calls
author | Louis Opter <louis@lse.epita.fr> |
---|---|
date | Mon, 22 Jul 2013 13:52:00 -0700 |
parents | 8eac160e5f1c |
children | f3c7e9b0c5cf |
line wrap: on
line diff
--- a/rathaxes_samples_e1000_use_the_dma_abstraction_in_socket.patch Mon Jul 22 00:35:20 2013 -0700 +++ b/rathaxes_samples_e1000_use_the_dma_abstraction_in_socket.patch Mon Jul 22 13:52:00 2013 -0700 @@ -1,98 +1,7 @@ # HG changeset patch -# Parent 5a53813ed1306484aa98dd95fe1d284ed24111ab +# Parent 22cdd951a10d1b8b06daf6448da73e738f21d2e3 Replace Linux specific code in Socket by DMA calls -diff --git a/rathaxes/samples/e1000/dma.blt b/rathaxes/samples/e1000/dma.blt ---- a/rathaxes/samples/e1000/dma.blt -+++ b/rathaxes/samples/e1000/dma.blt -@@ -1,6 +1,6 @@ - with DMA, Builtin, LKM, Device - { -- template type AbstractDMAHandle() -+ template type DMA::AbstractDMAHandle() - { - chunk LKM::includes() - { -@@ -14,11 +14,11 @@ - - map - { -- k_dma_handle: ((dma_addr_t *)${self}); -+ k_dma_handle: ((dma_addr_t)${self}); - } - } - -- template type AbstractDMADirection() -+ template type DMA::AbstractDMADirection() - { - decl data_types() - { -@@ -42,7 +42,7 @@ - - map - { -- /* XXX: we should use ${AbstractDMADirection} here: */ -+ /* XXX: we should use ${DMA::AbstractDMADirection} here: */ - dma_direction: ((enum dma_data_direction)${self}); - } - } -@@ -51,11 +51,11 @@ - { - chunk ::CALL() - { -- dma_map_single(${dev.k_device}, ${buf}, ${size}, ${dir.dma_direction}); -+ ((${DMA::DMA::AbstractDMAHandle})dma_map_single(${dev.k_device}, ${buf}, ${size}, ${dir.dma_direction})); - } - } - -- template sequence unmap(Device::AbstractDevice dev, AbstractDMAHandle handle, Builtin::number size, DMADirection dir) -+ template sequence unmap(Device::AbstractDevice dev, DMA::AbstractDMAHandle handle, Builtin::number size, DMADirection dir) - { - chunk ::CALL() - { -@@ -63,15 +63,23 @@ - } - } - -- template sequence alloc_coherent(Device::AbstractDevice dev, Builtin::number size, AbstractDMAHandle handle) -+ template sequence mapping_error(Device::AbstractDevice dev, DMA::AbstractDMAHandle handle) -+ { -+ chunk ::CALL() -+ { -+ dma_mapping_error(${dev.k_device}, ${handle.k_dma_handle}); -+ } -+ } -+ -+ template sequence alloc_coherent(Device::AbstractDevice dev, Builtin::number size, DMA::AbstractDMAHandle handle) - { - chunk ::CALL() - { -- dma_alloc_coherent(${dev.k_device}, ${size}, ${handle.k_dma_handle}, GFP_KERNEL); -+ dma_alloc_coherent(${dev.k_device}, ${size}, &${handle.k_dma_handle}, GFP_KERNEL); - } - } - -- template sequence free_coherent(Device::AbstractDevice dev, Builtin::number size, Builtin::symbol addr, AbstractDMAHandle handle) -+ template sequence free_coherent(Device::AbstractDevice dev, Builtin::number size, Builtin::symbol addr, DMA::AbstractDMAHandle handle) - { - chunk ::CALL() - { -diff --git a/rathaxes/samples/e1000/dma.rti b/rathaxes/samples/e1000/dma.rti ---- a/rathaxes/samples/e1000/dma.rti -+++ b/rathaxes/samples/e1000/dma.rti -@@ -29,6 +29,12 @@ - provided chunk ::CALL(); - } - -+ /* XXX: Until we have a real error handling mechanism: */ -+ provided sequence mapping_error(Device::AbstractDevice, AbstractDMAHandle) -+ { -+ provided chunk ::CALL(); /* -> != 0 if the mapping failed */ -+ } -+ - provided sequence alloc_coherent(Device::AbstractDevice, Builtin::number, AbstractDMAHandle) - { - /* return the addr and the handle via the AbstractDMAHandle ptr: */ diff --git a/rathaxes/samples/e1000/socket.blt b/rathaxes/samples/e1000/socket.blt --- a/rathaxes/samples/e1000/socket.blt +++ b/rathaxes/samples/e1000/socket.blt @@ -102,7 +11,7 @@ { template type Socket::AbstractSKBuff() { -@@ -22,15 +22,15 @@ +@@ -22,35 +22,34 @@ { decl data_types() { @@ -118,11 +27,47 @@ - static int rtx_socket_skbuff_map(${Socket::SKBuff.ref}, struct device *, enum dma_data_direction); - static void rtx_socket_skbuff_unmap_and_free(${Socket::SKBuff.ref}, struct device *, enum dma_data_direction); + static int rtx_socket_skbuff_map(${Socket::SKBuff.ref}, ${Device::AbstractDevice.ref}, ${DMA::DMADirection.scalar}); -+ static void rtx_socket_skbuff_unmap_and_free(${Socket::SKBuff.ref}, struct device *, ${DMA::DMADirection.scalar}); ++ static void rtx_socket_skbuff_unmap_and_free(${Socket::SKBuff.ref}, ${Device::AbstractDevice.ref}, ${DMA::DMADirection.scalar}); } chunk LKM::code() -@@ -65,23 +65,21 @@ + { + static void rtx_socket_skbuff_dump_infos(${Socket::SKBuff.ref} self) + { +- WARN_ON(!self->skbuff); ++ WARN_ON(!${local.self.k_sk_buff}); ++ ++ ${Ethernet::ProtocolId} ethernet_proto = { .id = be16_to_cpu(${local.self.k_sk_buff}->protocol) }; ++ static const char * const ip_summed_values[] = { ++ "none", "unnecessary", "complete", "partial" ++ }; ++ struct skb_shared_info *shinfo = skb_shinfo(${local.self.k_sk_buff}); + + /* + * We should use a Rathaxes log abstraction instead of pr_info here, + * but Rathaxes doesn't support functions with a variable number of + * arguments yet. + */ +- ${Socket::AbstractSKBuff.ref} skb = self->skbuff; +- ${Ethernet::ProtocolId} ethernet_proto = { .id = be16_to_cpu(${local.skb.k_sk_buff}->protocol) }; +- static const char * const ip_summed_values[] = { +- "none", "unnecessary", "complete", "partial" +- }; +- struct skb_shared_info *shinfo = skb_shinfo(${local.skb.k_sk_buff}); +- + pr_info( + "\t protocol = %#-5x (%s) ip_summed = %d (%s)\n" + "\t len = %-5u data_len = %-5u head_len = %-5u\n" +@@ -58,30 +57,26 @@ + "\t gso_size = %-5u gso_segs = %-5u gso_type = %-5u", + /* XXX: can't use ${local.ethernet_proto.id} here (issue #52): */ + ethernet_proto.id, ${local.ethernet_proto.str}, +- ${local.skb.k_sk_buff}->ip_summed, ip_summed_values[${local.skb.k_sk_buff}->ip_summed], +- ${local.skb.k_sk_buff}->len, ${local.skb.k_sk_buff}->data_len, skb_headlen(${local.skb.k_sk_buff}), ++ ${local.self.k_sk_buff}->ip_summed, ip_summed_values[${local.self.k_sk_buff}->ip_summed], ++ ${local.self.k_sk_buff}->len, ${local.self.k_sk_buff}->data_len, skb_headlen(${local.self.k_sk_buff}), + shinfo->nr_frags, shinfo->gso_size, shinfo->gso_segs, shinfo->gso_type + ); } static int rtx_socket_skbuff_map(${Socket::SKBuff.ref} self, @@ -132,20 +77,21 @@ + ${DMA::DMADirection.scalar} direction) { - ${Socket::AbstractSKBuff.ref} skb = self->skbuff; -- -- WARN_ON(!${local.skb.k_sk_buff}); -- WARN_ON(self->dma_handle); + WARN_ON(!${local.self.k_sk_buff}); + WARN_ON(${local.self.k_dma_handle}); - self->dma_handle = dma_map_single( +- WARN_ON(!${local.skb.k_sk_buff}); +- WARN_ON(self->dma_handle); +- +- self->dma_handle = dma_map_single( - dev, -+ ${dev.k_device}, - ${local.skb.k_sk_buff}, - skb_headlen(${local.skb.k_sk_buff}), +- ${local.skb.k_sk_buff}, +- skb_headlen(${local.skb.k_sk_buff}), - direction); - int err = dma_mapping_error(dev, self->dma_handle); -+ ${local.direction.dma_direction}); ++ unsigned int len = skb_headlen(${local.skb.k_sk_buff}); ++ ${cast local.len as Builtin::number}; ++ ${local.self.k_dma_handle} = ${DMA::map(local.dev, local.skb.k_sk_buff, local.len, local.direction)}; + int err = ${DMA::mapping_error(local.dev, local.self.k_dma_handle)}; if (err) { @@ -154,7 +100,7 @@ return err; } return 0; -@@ -89,7 +87,7 @@ +@@ -89,7 +84,7 @@ static void rtx_socket_skbuff_unmap_and_free(${Socket::SKBuff.ref} self, struct device *dev, @@ -163,7 +109,7 @@ { ${Socket::AbstractSKBuff.ref} skb = self->skbuff; -@@ -100,7 +98,7 @@ +@@ -100,7 +95,7 @@ dma_unmap_single(dev, self->dma_handle, skb_headlen(${local.skb.k_sk_buff}), @@ -172,7 +118,7 @@ self->dma_handle = 0; } dev_kfree_skb_any(${local.skb.k_sk_buff}); -@@ -126,30 +124,32 @@ +@@ -126,30 +121,32 @@ method map_to(Device::AbstractDevice dev) {