From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC] dmaengine: Add metadat_ops for dma_async_tx_descriptor From: Peter Ujfalusi Message-Id: <20180601102429.16429-1-peter.ujfalusi@ti.com> Date: Fri, 1 Jun 2018 13:24:29 +0300 To: radheys@xilinx.com, vinod.koul@intel.com Cc: lars@metafoo.de, michal.simek@xilinx.com, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, dan.j.williams@intel.com, appanad@xilinx.com, linux-arm-kernel@lists.infradead.org List-ID: SWYgdGhlIERNQSBzdXBwb3J0cyBwZXIgZGVzY3JpcHRvciBtZXRhZGF0YSBpdCBjYW4gaW1wbGVt ZW50IHRoZSBhdHRhY2gsCmdldF9wdHIvc2V0X2xlbiBjYWxsYmFja3MuCgpDbGllbnQgZHJpdmVy cyBtdXN0IG9ubHkgdXNlIGVpdGhlciBhdHRhY2ggb3IgZ2V0X3B0ci9zZXRfbGVuIHRvIGF2b2lk Cm1pc3MgY29uZmlndXJhdGlvbi4KCldyYXBwZXJzIGFyZSBhbHNvIGFkZGVkIGZvciB0aGUgbWV0 YWRhdGFfb3BzOgpkbWFlbmdpbmVfZGVzY19hdHRhY2hfbWV0YWRhdGEoKQpkbWFlbmdpbmVfZGVz Y19nZXRfbWV0YWRhdGFfcHRyKCkKZG1hZW5naW5lX2Rlc2Nfc2V0X21ldGFkYXRhX2xlbigpCgpT aWduZWQtb2ZmLWJ5OiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgotLS0K SGksCgpzaW5jZSBhdHRhY2htZW50cyBhcmUgYm91bmNpbmcgYmFjaywgSSBzZW5kIHRoZSBwYXRj aCBzZXBhcmF0ZWx5CgpSZWdhcmRzLApQZXRlcgoKIGluY2x1ZGUvbGludXgvZG1hZW5naW5lLmgg fCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFu Z2VkLCA1MCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFlbmdp bmUuaCBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKaW5kZXggNTFmYmI4NjFlODRiLi5hYzQy YWNlMzZhYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKKysrIGIvaW5j bHVkZS9saW51eC9kbWFlbmdpbmUuaApAQCAtNDkxLDYgKzQ5MSwxOCBAQCBzdHJ1Y3QgZG1hZW5n aW5lX3VubWFwX2RhdGEgewogCWRtYV9hZGRyX3QgYWRkclswXTsKIH07CiAKK3N0cnVjdCBkbWFf YXN5bmNfdHhfZGVzY3JpcHRvcjsKKworc3RydWN0IGRtYV9kZXNjcmlwdG9yX21ldGFkYXRhX29w cyB7CisJaW50ICgqYXR0YWNoKShzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2Ms IHZvaWQgKmRhdGEsCisJCSAgICAgIHNpemVfdCBsZW4pOworCisJdm9pZCAqKCpnZXRfcHRyKShz dHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkgc2l6ZV90ICpwYXlsb2Fk X2xlbiwgc2l6ZV90ICptYXhfbGVuKTsKKwlpbnQgKCpzZXRfbGVuKShzdHJ1Y3QgZG1hX2FzeW5j X3R4X2Rlc2NyaXB0b3IgKmRlc2MsCisJCSAgICAgICBzaXplX3QgcGF5bG9hZF9sZW4pOworfTsK KwogLyoqCiAgKiBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgLSBhc3luYyB0cmFuc2Fj dGlvbiBkZXNjcmlwdG9yCiAgKiAtLS1kbWEgZ2VuZXJpYyBvZmZsb2FkIGZpZWxkcy0tLQpAQCAt NTIwLDYgKzUzMiw3IEBAIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciB7CiAJZG1hX2Fz eW5jX3R4X2NhbGxiYWNrX3Jlc3VsdCBjYWxsYmFja19yZXN1bHQ7CiAJdm9pZCAqY2FsbGJhY2tf cGFyYW07CiAJc3RydWN0IGRtYWVuZ2luZV91bm1hcF9kYXRhICp1bm1hcDsKKwlzdHJ1Y3QgZG1h X2Rlc2NyaXB0b3JfbWV0YWRhdGFfb3BzICptZXRhZGF0YV9vcHM7CiAjaWZkZWYgQ09ORklHX0FT WU5DX1RYX0VOQUJMRV9DSEFOTkVMX1NXSVRDSAogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3Jp cHRvciAqbmV4dDsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnBhcmVudDsKQEAg LTkzMiw2ICs5NDUsNDMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2Ny aXB0b3IgKmRtYWVuZ2luZV9wcmVwX2RtYV9tZW1jcHkoCiAJCQkJCQkgICAgbGVuLCBmbGFncyk7 CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRtYWVuZ2luZV9kZXNjX2F0dGFjaF9tZXRhZGF0YSgK KwkJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjLCB2b2lkICpkYXRhLCBzaXpl X3QgbGVuKQoreworCWlmICghZGVzYykKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWRlc2MtPm1ldGFk YXRhX29wcyB8fCAhZGVzYy0+bWV0YWRhdGFfb3BzLT5hdHRhY2gpCisJCXJldHVybiAtRU5PVFNV UFA7CisKKwlyZXR1cm4gZGVzYy0+bWV0YWRhdGFfb3BzLT5hdHRhY2goZGVzYywgZGF0YSwgbGVu KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpkbWFlbmdpbmVfZGVzY19nZXRfbWV0YWRhdGFf cHRyKAorCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2MsIHNpemVfdCAqcGF5 bG9hZF9sZW4sCisJCXNpemVfdCAqbWF4X2xlbikKK3sKKwlpZiAoIWRlc2MpCisJCXJldHVybiBO VUxMOworCisJaWYgKCFkZXNjLT5tZXRhZGF0YV9vcHMgfHwgIWRlc2MtPm1ldGFkYXRhX29wcy0+ Z2V0X3B0cikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTsKKworCXJldHVybiBkZXNjLT5t ZXRhZGF0YV9vcHMtPmdldF9wdHIoZGVzYywgcGF5bG9hZF9sZW4sIG1heF9sZW4pOworfQorCitz dGF0aWMgaW5saW5lIGludCBkbWFlbmdpbmVfZGVzY19zZXRfbWV0YWRhdGFfbGVuKAorCQlzdHJ1 Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2MsIHNpemVfdCBwYXlsb2FkX2xlbikKK3sK KwlpZiAoIWRlc2MpCisJCXJldHVybiAwOworCisJaWYgKCFkZXNjLT5tZXRhZGF0YV9vcHMgfHwg IWRlc2MtPm1ldGFkYXRhX29wcy0+c2V0X2xlbikKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJl dHVybiBkZXNjLT5tZXRhZGF0YV9vcHMtPnNldF9sZW4oZGVzYywgcGF5bG9hZF9sZW4pOworfQor CiAvKioKICAqIGRtYWVuZ2luZV90ZXJtaW5hdGVfYWxsKCkgLSBUZXJtaW5hdGUgYWxsIGFjdGl2 ZSBETUEgdHJhbnNmZXJzCiAgKiBAY2hhbjogVGhlIGNoYW5uZWwgZm9yIHdoaWNoIHRvIHRlcm1p bmF0ZSB0aGUgdHJhbnNmZXJzCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751638AbeFAKYH (ORCPT ); Fri, 1 Jun 2018 06:24:07 -0400 Received: from fllnx210.ext.ti.com ([198.47.19.17]:40982 "EHLO fllnx210.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750793AbeFAKYG (ORCPT ); Fri, 1 Jun 2018 06:24:06 -0400 From: Peter Ujfalusi To: , CC: , , , , , , Subject: [RFC] dmaengine: Add metadat_ops for dma_async_tx_descriptor Date: Fri, 1 Jun 2018 13:24:29 +0300 Message-ID: <20180601102429.16429-1-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <32208a9c-2b15-d345-1432-f1e387531f9b@ti.com> References: <32208a9c-2b15-d345-1432-f1e387531f9b@ti.com> MIME-Version: 1.0 Content-Type: text/plain X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If the DMA supports per descriptor metadata it can implement the attach, get_ptr/set_len callbacks. Client drivers must only use either attach or get_ptr/set_len to avoid miss configuration. Wrappers are also added for the metadata_ops: dmaengine_desc_attach_metadata() dmaengine_desc_get_metadata_ptr() dmaengine_desc_set_metadata_len() Signed-off-by: Peter Ujfalusi --- Hi, since attachments are bouncing back, I send the patch separately Regards, Peter include/linux/dmaengine.h | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 51fbb861e84b..ac42ace36aa3 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -491,6 +491,18 @@ struct dmaengine_unmap_data { dma_addr_t addr[0]; }; +struct dma_async_tx_descriptor; + +struct dma_descriptor_metadata_ops { + int (*attach)(struct dma_async_tx_descriptor *desc, void *data, + size_t len); + + void *(*get_ptr)(struct dma_async_tx_descriptor *desc, + size_t *payload_len, size_t *max_len); + int (*set_len)(struct dma_async_tx_descriptor *desc, + size_t payload_len); +}; + /** * struct dma_async_tx_descriptor - async transaction descriptor * ---dma generic offload fields--- @@ -520,6 +532,7 @@ struct dma_async_tx_descriptor { dma_async_tx_callback_result callback_result; void *callback_param; struct dmaengine_unmap_data *unmap; + struct dma_descriptor_metadata_ops *metadata_ops; #ifdef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH struct dma_async_tx_descriptor *next; struct dma_async_tx_descriptor *parent; @@ -932,6 +945,43 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_memcpy( len, flags); } +static inline int dmaengine_desc_attach_metadata( + struct dma_async_tx_descriptor *desc, void *data, size_t len) +{ + if (!desc) + return 0; + + if (!desc->metadata_ops || !desc->metadata_ops->attach) + return -ENOTSUPP; + + return desc->metadata_ops->attach(desc, data, len); +} + +static inline void *dmaengine_desc_get_metadata_ptr( + struct dma_async_tx_descriptor *desc, size_t *payload_len, + size_t *max_len) +{ + if (!desc) + return NULL; + + if (!desc->metadata_ops || !desc->metadata_ops->get_ptr) + return ERR_PTR(-ENOTSUPP); + + return desc->metadata_ops->get_ptr(desc, payload_len, max_len); +} + +static inline int dmaengine_desc_set_metadata_len( + struct dma_async_tx_descriptor *desc, size_t payload_len) +{ + if (!desc) + return 0; + + if (!desc->metadata_ops || !desc->metadata_ops->set_len) + return -ENOTSUPP; + + return desc->metadata_ops->set_len(desc, payload_len); +} + /** * dmaengine_terminate_all() - Terminate all active DMA transfers * @chan: The channel for which to terminate the transfers -- Peter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki From mboxrd@z Thu Jan 1 00:00:00 1970 From: peter.ujfalusi@ti.com (Peter Ujfalusi) Date: Fri, 1 Jun 2018 13:24:29 +0300 Subject: [RFC] dmaengine: Add metadat_ops for dma_async_tx_descriptor In-Reply-To: <32208a9c-2b15-d345-1432-f1e387531f9b@ti.com> References: <32208a9c-2b15-d345-1432-f1e387531f9b@ti.com> Message-ID: <20180601102429.16429-1-peter.ujfalusi@ti.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org If the DMA supports per descriptor metadata it can implement the attach, get_ptr/set_len callbacks. Client drivers must only use either attach or get_ptr/set_len to avoid miss configuration. Wrappers are also added for the metadata_ops: dmaengine_desc_attach_metadata() dmaengine_desc_get_metadata_ptr() dmaengine_desc_set_metadata_len() Signed-off-by: Peter Ujfalusi --- Hi, since attachments are bouncing back, I send the patch separately Regards, Peter include/linux/dmaengine.h | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 51fbb861e84b..ac42ace36aa3 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -491,6 +491,18 @@ struct dmaengine_unmap_data { dma_addr_t addr[0]; }; +struct dma_async_tx_descriptor; + +struct dma_descriptor_metadata_ops { + int (*attach)(struct dma_async_tx_descriptor *desc, void *data, + size_t len); + + void *(*get_ptr)(struct dma_async_tx_descriptor *desc, + size_t *payload_len, size_t *max_len); + int (*set_len)(struct dma_async_tx_descriptor *desc, + size_t payload_len); +}; + /** * struct dma_async_tx_descriptor - async transaction descriptor * ---dma generic offload fields--- @@ -520,6 +532,7 @@ struct dma_async_tx_descriptor { dma_async_tx_callback_result callback_result; void *callback_param; struct dmaengine_unmap_data *unmap; + struct dma_descriptor_metadata_ops *metadata_ops; #ifdef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH struct dma_async_tx_descriptor *next; struct dma_async_tx_descriptor *parent; @@ -932,6 +945,43 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_memcpy( len, flags); } +static inline int dmaengine_desc_attach_metadata( + struct dma_async_tx_descriptor *desc, void *data, size_t len) +{ + if (!desc) + return 0; + + if (!desc->metadata_ops || !desc->metadata_ops->attach) + return -ENOTSUPP; + + return desc->metadata_ops->attach(desc, data, len); +} + +static inline void *dmaengine_desc_get_metadata_ptr( + struct dma_async_tx_descriptor *desc, size_t *payload_len, + size_t *max_len) +{ + if (!desc) + return NULL; + + if (!desc->metadata_ops || !desc->metadata_ops->get_ptr) + return ERR_PTR(-ENOTSUPP); + + return desc->metadata_ops->get_ptr(desc, payload_len, max_len); +} + +static inline int dmaengine_desc_set_metadata_len( + struct dma_async_tx_descriptor *desc, size_t payload_len) +{ + if (!desc) + return 0; + + if (!desc->metadata_ops || !desc->metadata_ops->set_len) + return -ENOTSUPP; + + return desc->metadata_ops->set_len(desc, payload_len); +} + /** * dmaengine_terminate_all() - Terminate all active DMA transfers * @chan: The channel for which to terminate the transfers -- Peter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki