Module Name:    src
Committed By:   riastradh
Date:           Mon Dec  9 14:55:52 UTC 2019

Modified Files:
        src/sys/arch/arm/sunxi: sun8i_crypto.c

Log Message:
Reduce some duplicated bus_dma clutter.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/sunxi/sun8i_crypto.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/sunxi/sun8i_crypto.c
diff -u src/sys/arch/arm/sunxi/sun8i_crypto.c:1.1 src/sys/arch/arm/sunxi/sun8i_crypto.c:1.2
--- src/sys/arch/arm/sunxi/sun8i_crypto.c:1.1	Mon Dec  9 04:51:03 2019
+++ src/sys/arch/arm/sunxi/sun8i_crypto.c	Mon Dec  9 14:55:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sun8i_crypto.c,v 1.1 2019/12/09 04:51:03 riastradh Exp $	*/
+/*	$NetBSD: sun8i_crypto.c,v 1.2 2019/12/09 14:55:52 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: sun8i_crypto.c,v 1.1 2019/12/09 04:51:03 riastradh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: sun8i_crypto.c,v 1.2 2019/12/09 14:55:52 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -115,10 +115,7 @@ struct sun8i_crypto_softc {
 };
 
 struct sun8i_crypto_task {
-	bus_dma_segment_t	ct_desc_seg[1];
-	int			ct_desc_nseg;
-	bus_dmamap_t		ct_desc_map;
-	void			*ct_desc_kva;
+	struct sun8i_crypto_buf	ct_buf;
 	struct sun8i_crypto_taskdesc *ct_desc;
 	void			(*ct_callback)(struct sun8i_crypto_softc *,
 				    struct sun8i_crypto_task *, void *, int);
@@ -329,48 +326,25 @@ sun8i_crypto_task_get(struct sun8i_crypt
     void *cookie)
 {
 	struct sun8i_crypto_task *task;
-	const size_t desc_size = sizeof(*task->ct_desc);
 	int error;
 
+	/* Allocate a task.  */
 	task = kmem_zalloc(sizeof(*task), KM_SLEEP);
 
-	/* Allocate DMA-safe memory for the descriptor.  */
-	error = bus_dmamem_alloc(sc->sc_dmat, desc_size, 0, 0,
-	    task->ct_desc_seg, __arraycount(task->ct_desc_seg),
-	    &task->ct_desc_nseg, BUS_DMA_NOWAIT);
+	/* Allocate a buffer for the descriptor.  */
+	error = sun8i_crypto_allocbuf(sc, sizeof(*task->ct_desc),
+	    &task->ct_buf);
 	if (error)
 		goto fail0;
 
-	/* Map the descriptor into kernel virtual address space.  */
-	error = bus_dmamem_map(sc->sc_dmat, task->ct_desc_seg,
-	    task->ct_desc_nseg, desc_size, &task->ct_desc_kva, BUS_DMA_NOWAIT);
-	if (error)
-		goto fail1;
-	task->ct_desc = task->ct_desc_kva;
-
-	/* Create a map for exposing the descriptor to DMA.  */
-	error = bus_dmamap_create(sc->sc_dmat, desc_size, 1, desc_size, 0,
-	    BUS_DMA_NOWAIT, &task->ct_desc_map);
-	if (error)
-		goto fail2;
-
-	/* Load the descriptor into the DMA map.  */
-	error = bus_dmamap_load(sc->sc_dmat, task->ct_desc_map,
-	    task->ct_desc_kva, desc_size, NULL, BUS_DMA_NOWAIT);
-	if (error)
-		goto fail3;
-
+	/* Initialize the task object and return it.  */
+	task->ct_desc = task->ct_buf.cb_kva;
 	task->ct_callback = callback;
 	task->ct_cookie = cookie;
-
 	return task;
 
-fail4: __unused
-	bus_dmamap_unload(sc->sc_dmat, task->ct_desc_map);
-fail3:	bus_dmamap_destroy(sc->sc_dmat, task->ct_desc_map);
-fail2:	bus_dmamem_unmap(sc->sc_dmat, task->ct_desc_kva,
-	    sizeof(*task->ct_desc));
-fail1:	bus_dmamem_free(sc->sc_dmat, task->ct_desc_seg, task->ct_desc_nseg);
+fail1: __unused
+	sun8i_crypto_freebuf(sc, sizeof(*task->ct_desc), &task->ct_buf);
 fail0:	kmem_free(task, sizeof(*task));
 	return NULL;
 }
@@ -380,11 +354,7 @@ sun8i_crypto_task_put(struct sun8i_crypt
     struct sun8i_crypto_task *task)
 {
 
-	bus_dmamap_unload(sc->sc_dmat, task->ct_desc_map);
-	bus_dmamap_destroy(sc->sc_dmat, task->ct_desc_map);
-	bus_dmamem_unmap(sc->sc_dmat, task->ct_desc_kva,
-	    sizeof(*task->ct_desc));
-	bus_dmamem_free(sc->sc_dmat, task->ct_desc_seg, task->ct_desc_nseg);
+	sun8i_crypto_freebuf(sc, sizeof(*task->ct_desc), &task->ct_buf);
 	kmem_free(task, sizeof(*task));
 }
 
@@ -604,7 +574,7 @@ sun8i_crypto_submit(struct sun8i_crypto_
 	task->ct_desc->td_cid = htole32(i);
 
 	/* Prepare to send the descriptor to the device by DMA.  */
-	bus_dmamap_sync(sc->sc_dmat, task->ct_desc_map, 0,
+	bus_dmamap_sync(sc->sc_dmat, task->ct_buf.cb_map, 0,
 	    sizeof(*task->ct_desc), BUS_DMASYNC_PREWRITE);
 
 	/* Confirm we're ready to go.  */
@@ -622,7 +592,7 @@ sun8i_crypto_submit(struct sun8i_crypto_
 
 	/* Set the task descriptor queue address.  */
 	sun8i_crypto_write(sc, SUN8I_CRYPTO_TDQ,
-	    task->ct_desc_map->dm_segs[0].ds_addr);
+	    task->ct_buf.cb_map->dm_segs[0].ds_addr);
 
 	/* Notify the engine to load it, and wait for acknowledgement.  */
 	sun8i_crypto_write(sc, SUN8I_CRYPTO_TLR, SUN8I_CRYPTO_TLR_LOAD);
@@ -819,7 +789,7 @@ sun8i_crypto_chan_done(struct sun8i_cryp
 	sun8i_crypto_write(sc, SUN8I_CRYPTO_ICR, icr);
 
 	/* Finished sending the descriptor to the device by DMA.  */
-	bus_dmamap_sync(sc->sc_dmat, task->ct_desc_map, 0,
+	bus_dmamap_sync(sc->sc_dmat, task->ct_buf.cb_map, 0,
 	    sizeof(*task->ct_desc), BUS_DMASYNC_POSTWRITE);
 
 	/* Temporarily release the lock to invoke the callback.  */

Reply via email to