Lines Matching refs:wa

481 static void ccp_sg_free(struct ccp_sg_workarea *wa)  in ccp_sg_free()  argument
483 if (wa->dma_count) in ccp_sg_free()
484 dma_unmap_sg(wa->dma_dev, wa->dma_sg, wa->nents, wa->dma_dir); in ccp_sg_free()
486 wa->dma_count = 0; in ccp_sg_free()
489 static int ccp_init_sg_workarea(struct ccp_sg_workarea *wa, struct device *dev, in ccp_init_sg_workarea() argument
493 memset(wa, 0, sizeof(*wa)); in ccp_init_sg_workarea()
495 wa->sg = sg; in ccp_init_sg_workarea()
499 wa->nents = sg_nents(sg); in ccp_init_sg_workarea()
500 wa->length = sg->length; in ccp_init_sg_workarea()
501 wa->bytes_left = len; in ccp_init_sg_workarea()
502 wa->sg_used = 0; in ccp_init_sg_workarea()
510 wa->dma_sg = sg; in ccp_init_sg_workarea()
511 wa->dma_dev = dev; in ccp_init_sg_workarea()
512 wa->dma_dir = dma_dir; in ccp_init_sg_workarea()
513 wa->dma_count = dma_map_sg(dev, sg, wa->nents, dma_dir); in ccp_init_sg_workarea()
514 if (!wa->dma_count) in ccp_init_sg_workarea()
520 static void ccp_update_sg_workarea(struct ccp_sg_workarea *wa, unsigned int len) in ccp_update_sg_workarea() argument
522 unsigned int nbytes = min_t(u64, len, wa->bytes_left); in ccp_update_sg_workarea()
524 if (!wa->sg) in ccp_update_sg_workarea()
527 wa->sg_used += nbytes; in ccp_update_sg_workarea()
528 wa->bytes_left -= nbytes; in ccp_update_sg_workarea()
529 if (wa->sg_used == wa->sg->length) { in ccp_update_sg_workarea()
530 wa->sg = sg_next(wa->sg); in ccp_update_sg_workarea()
531 wa->sg_used = 0; in ccp_update_sg_workarea()
535 static void ccp_dm_free(struct ccp_dm_workarea *wa) in ccp_dm_free() argument
537 if (wa->length <= CCP_DMAPOOL_MAX_SIZE) { in ccp_dm_free()
538 if (wa->address) in ccp_dm_free()
539 dma_pool_free(wa->dma_pool, wa->address, in ccp_dm_free()
540 wa->dma.address); in ccp_dm_free()
542 if (wa->dma.address) in ccp_dm_free()
543 dma_unmap_single(wa->dev, wa->dma.address, wa->length, in ccp_dm_free()
544 wa->dma.dir); in ccp_dm_free()
545 kfree(wa->address); in ccp_dm_free()
548 wa->address = NULL; in ccp_dm_free()
549 wa->dma.address = 0; in ccp_dm_free()
552 static int ccp_init_dm_workarea(struct ccp_dm_workarea *wa, in ccp_init_dm_workarea() argument
557 memset(wa, 0, sizeof(*wa)); in ccp_init_dm_workarea()
562 wa->dev = cmd_q->ccp->dev; in ccp_init_dm_workarea()
563 wa->length = len; in ccp_init_dm_workarea()
566 wa->dma_pool = cmd_q->dma_pool; in ccp_init_dm_workarea()
568 wa->address = dma_pool_alloc(wa->dma_pool, GFP_KERNEL, in ccp_init_dm_workarea()
569 &wa->dma.address); in ccp_init_dm_workarea()
570 if (!wa->address) in ccp_init_dm_workarea()
573 wa->dma.length = CCP_DMAPOOL_MAX_SIZE; in ccp_init_dm_workarea()
575 memset(wa->address, 0, CCP_DMAPOOL_MAX_SIZE); in ccp_init_dm_workarea()
577 wa->address = kzalloc(len, GFP_KERNEL); in ccp_init_dm_workarea()
578 if (!wa->address) in ccp_init_dm_workarea()
581 wa->dma.address = dma_map_single(wa->dev, wa->address, len, in ccp_init_dm_workarea()
583 if (!wa->dma.address) in ccp_init_dm_workarea()
586 wa->dma.length = len; in ccp_init_dm_workarea()
588 wa->dma.dir = dir; in ccp_init_dm_workarea()
593 static void ccp_set_dm_area(struct ccp_dm_workarea *wa, unsigned int wa_offset, in ccp_set_dm_area() argument
597 WARN_ON(!wa->address); in ccp_set_dm_area()
599 scatterwalk_map_and_copy(wa->address + wa_offset, sg, sg_offset, len, in ccp_set_dm_area()
603 static void ccp_get_dm_area(struct ccp_dm_workarea *wa, unsigned int wa_offset, in ccp_get_dm_area() argument
607 WARN_ON(!wa->address); in ccp_get_dm_area()
609 scatterwalk_map_and_copy(wa->address + wa_offset, sg, sg_offset, len, in ccp_get_dm_area()
613 static void ccp_reverse_set_dm_area(struct ccp_dm_workarea *wa, in ccp_reverse_set_dm_area() argument
632 wa->address[dm_offset + i] = buffer[ksb_len - i - 1]; in ccp_reverse_set_dm_area()
639 if (wa->address[dm_offset - 1] & 0x80) in ccp_reverse_set_dm_area()
640 memset(wa->address + dm_offset, 0xff, in ccp_reverse_set_dm_area()
646 static void ccp_reverse_get_dm_area(struct ccp_dm_workarea *wa, in ccp_reverse_get_dm_area() argument
661 buffer[ksb_len - i - 1] = wa->address[dm_offset + i]; in ccp_reverse_get_dm_area()
834 struct ccp_dm_workarea *wa, u32 jobid, u32 ksb, in ccp_copy_to_from_ksb() argument
850 op.dst.u.dma.address = wa->dma.address; in ccp_copy_to_from_ksb()
851 op.dst.u.dma.length = wa->length; in ccp_copy_to_from_ksb()
854 op.src.u.dma.address = wa->dma.address; in ccp_copy_to_from_ksb()
855 op.src.u.dma.length = wa->length; in ccp_copy_to_from_ksb()
866 struct ccp_dm_workarea *wa, u32 jobid, u32 ksb, in ccp_copy_to_ksb() argument
869 return ccp_copy_to_from_ksb(cmd_q, wa, jobid, ksb, byte_swap, false); in ccp_copy_to_ksb()
873 struct ccp_dm_workarea *wa, u32 jobid, u32 ksb, in ccp_copy_from_ksb() argument
876 return ccp_copy_to_from_ksb(cmd_q, wa, jobid, ksb, byte_swap, true); in ccp_copy_from_ksb()