Mercurial > archived > louis > epitech > mq > rathaxes
diff rathaxes_samples_e1000_add_a_dma_abstraction.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 | bfe10def90e3 |
children | f3c7e9b0c5cf |
line wrap: on
line diff
--- a/rathaxes_samples_e1000_add_a_dma_abstraction.patch Mon Jul 22 00:35:20 2013 -0700 +++ b/rathaxes_samples_e1000_add_a_dma_abstraction.patch Mon Jul 22 13:52:00 2013 -0700 @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 0f12e80e810de1a9927db1f25dbea49acd73ae3c +# Parent af7a1f8589d632497e2f2574570f5153cae59b91 e1000: start a DMA allocation/mapping abstraction It currently matches a lot the Linux DMA API but it should be usable by @@ -35,10 +35,10 @@ new file mode 100644 --- /dev/null +++ b/rathaxes/samples/e1000/dma.blt -@@ -0,0 +1,81 @@ +@@ -0,0 +1,89 @@ +with DMA, Builtin, LKM, Device +{ -+ template type AbstractDMAHandle() ++ template type DMA::AbstractDMAHandle() + { + chunk LKM::includes() + { @@ -52,11 +52,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() + { @@ -69,7 +69,7 @@ + } + } + -+ template type DMADirection() ++ template type DMA::DMADirection() + { + decl data_types() + { @@ -80,20 +80,20 @@ + + map + { -+ /* XXX: we should use ${AbstractDMADirection} here: */ ++ /* XXX: we should use ${DMA::AbstractDMADirection} here: */ + dma_direction: ((enum dma_data_direction)${self}); + } + } + -+ template sequence map(Device::AbstractDevice dev, Builtin::symbol buf, Builtin::number size, DMADirection dir) ++ template sequence map(Device::AbstractDevice dev, Builtin::symbol buf, Builtin::number size, DMA::DMADirection dir) + { + 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, DMA::DMADirection dir) + { + chunk ::CALL() + { @@ -101,15 +101,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() + { @@ -121,7 +129,7 @@ new file mode 100644 --- /dev/null +++ b/rathaxes/samples/e1000/dma.rti -@@ -0,0 +1,42 @@ +@@ -0,0 +1,48 @@ +interface DMA : Builtin, LKM, Device +{ + provided type AbstractDMAHandle @@ -153,6 +161,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: */