Lines Matching refs:wa

67 static void ccp_sg_free(struct ccp_sg_workarea *wa)  in ccp_sg_free()  argument
69 if (wa->dma_count) in ccp_sg_free()
70 dma_unmap_sg(wa->dma_dev, wa->dma_sg, wa->nents, wa->dma_dir); in ccp_sg_free()
72 wa->dma_count = 0; in ccp_sg_free()
75 static int ccp_init_sg_workarea(struct ccp_sg_workarea *wa, struct device *dev, in ccp_init_sg_workarea() argument
79 memset(wa, 0, sizeof(*wa)); in ccp_init_sg_workarea()
81 wa->sg = sg; in ccp_init_sg_workarea()
85 wa->nents = sg_nents_for_len(sg, len); in ccp_init_sg_workarea()
86 if (wa->nents < 0) in ccp_init_sg_workarea()
87 return wa->nents; in ccp_init_sg_workarea()
89 wa->bytes_left = len; in ccp_init_sg_workarea()
90 wa->sg_used = 0; in ccp_init_sg_workarea()
98 wa->dma_sg = sg; in ccp_init_sg_workarea()
99 wa->dma_dev = dev; in ccp_init_sg_workarea()
100 wa->dma_dir = dma_dir; in ccp_init_sg_workarea()
101 wa->dma_count = dma_map_sg(dev, sg, wa->nents, dma_dir); in ccp_init_sg_workarea()
102 if (!wa->dma_count) in ccp_init_sg_workarea()
108 static void ccp_update_sg_workarea(struct ccp_sg_workarea *wa, unsigned int len) in ccp_update_sg_workarea() argument
110 unsigned int nbytes = min_t(u64, len, wa->bytes_left); in ccp_update_sg_workarea()
112 if (!wa->sg) in ccp_update_sg_workarea()
115 wa->sg_used += nbytes; in ccp_update_sg_workarea()
116 wa->bytes_left -= nbytes; in ccp_update_sg_workarea()
117 if (wa->sg_used == wa->sg->length) { in ccp_update_sg_workarea()
118 wa->sg = sg_next(wa->sg); in ccp_update_sg_workarea()
119 wa->sg_used = 0; in ccp_update_sg_workarea()
123 static void ccp_dm_free(struct ccp_dm_workarea *wa) in ccp_dm_free() argument
125 if (wa->length <= CCP_DMAPOOL_MAX_SIZE) { in ccp_dm_free()
126 if (wa->address) in ccp_dm_free()
127 dma_pool_free(wa->dma_pool, wa->address, in ccp_dm_free()
128 wa->dma.address); in ccp_dm_free()
130 if (wa->dma.address) in ccp_dm_free()
131 dma_unmap_single(wa->dev, wa->dma.address, wa->length, in ccp_dm_free()
132 wa->dma.dir); in ccp_dm_free()
133 kfree(wa->address); in ccp_dm_free()
136 wa->address = NULL; in ccp_dm_free()
137 wa->dma.address = 0; in ccp_dm_free()
140 static int ccp_init_dm_workarea(struct ccp_dm_workarea *wa, in ccp_init_dm_workarea() argument
145 memset(wa, 0, sizeof(*wa)); in ccp_init_dm_workarea()
150 wa->dev = cmd_q->ccp->dev; in ccp_init_dm_workarea()
151 wa->length = len; in ccp_init_dm_workarea()
154 wa->dma_pool = cmd_q->dma_pool; in ccp_init_dm_workarea()
156 wa->address = dma_pool_alloc(wa->dma_pool, GFP_KERNEL, in ccp_init_dm_workarea()
157 &wa->dma.address); in ccp_init_dm_workarea()
158 if (!wa->address) in ccp_init_dm_workarea()
161 wa->dma.length = CCP_DMAPOOL_MAX_SIZE; in ccp_init_dm_workarea()
163 memset(wa->address, 0, CCP_DMAPOOL_MAX_SIZE); in ccp_init_dm_workarea()
165 wa->address = kzalloc(len, GFP_KERNEL); in ccp_init_dm_workarea()
166 if (!wa->address) in ccp_init_dm_workarea()
169 wa->dma.address = dma_map_single(wa->dev, wa->address, len, in ccp_init_dm_workarea()
171 if (dma_mapping_error(wa->dev, wa->dma.address)) in ccp_init_dm_workarea()
174 wa->dma.length = len; in ccp_init_dm_workarea()
176 wa->dma.dir = dir; in ccp_init_dm_workarea()
181 static int ccp_set_dm_area(struct ccp_dm_workarea *wa, unsigned int wa_offset, in ccp_set_dm_area() argument
185 WARN_ON(!wa->address); in ccp_set_dm_area()
187 if (len > (wa->length - wa_offset)) in ccp_set_dm_area()
190 scatterwalk_map_and_copy(wa->address + wa_offset, sg, sg_offset, len, in ccp_set_dm_area()
195 static void ccp_get_dm_area(struct ccp_dm_workarea *wa, unsigned int wa_offset, in ccp_get_dm_area() argument
199 WARN_ON(!wa->address); in ccp_get_dm_area()
201 scatterwalk_map_and_copy(wa->address + wa_offset, sg, sg_offset, len, in ccp_get_dm_area()
205 static int ccp_reverse_set_dm_area(struct ccp_dm_workarea *wa, in ccp_reverse_set_dm_area() argument
214 rc = ccp_set_dm_area(wa, wa_offset, sg, sg_offset, len); in ccp_reverse_set_dm_area()
218 p = wa->address + wa_offset; in ccp_reverse_set_dm_area()
230 static void ccp_reverse_get_dm_area(struct ccp_dm_workarea *wa, in ccp_reverse_get_dm_area() argument
238 p = wa->address + wa_offset; in ccp_reverse_get_dm_area()
248 ccp_get_dm_area(wa, wa_offset, sg, sg_offset, len); in ccp_reverse_get_dm_area()
416 struct ccp_dm_workarea *wa, u32 jobid, u32 sb, in ccp_copy_to_from_sb() argument
432 op.dst.u.dma.address = wa->dma.address; in ccp_copy_to_from_sb()
433 op.dst.u.dma.length = wa->length; in ccp_copy_to_from_sb()
436 op.src.u.dma.address = wa->dma.address; in ccp_copy_to_from_sb()
437 op.src.u.dma.length = wa->length; in ccp_copy_to_from_sb()
448 struct ccp_dm_workarea *wa, u32 jobid, u32 sb, in ccp_copy_to_sb() argument
451 return ccp_copy_to_from_sb(cmd_q, wa, jobid, sb, byte_swap, false); in ccp_copy_to_sb()
455 struct ccp_dm_workarea *wa, u32 jobid, u32 sb, in ccp_copy_from_sb() argument
458 return ccp_copy_to_from_sb(cmd_q, wa, jobid, sb, byte_swap, true); in ccp_copy_from_sb()