root/drivers/crypto/caam/sg_sw_qm.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. __dma_to_qm_sg
  2. dma_to_qm_sg_one
  3. dma_to_qm_sg_one_last
  4. dma_to_qm_sg_one_ext
  5. dma_to_qm_sg_one_last_ext
  6. sg_to_qm_sg
  7. sg_to_qm_sg_last

   1 /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
   2 /*
   3  * Copyright 2013-2016 Freescale Semiconductor, Inc.
   4  * Copyright 2016-2017 NXP
   5  */
   6 
   7 #ifndef __SG_SW_QM_H
   8 #define __SG_SW_QM_H
   9 
  10 #include <soc/fsl/qman.h>
  11 #include "regs.h"
  12 
  13 static inline void __dma_to_qm_sg(struct qm_sg_entry *qm_sg_ptr, dma_addr_t dma,
  14                                   u16 offset)
  15 {
  16         qm_sg_entry_set64(qm_sg_ptr, dma);
  17         qm_sg_ptr->__reserved2 = 0;
  18         qm_sg_ptr->bpid = 0;
  19         qm_sg_ptr->offset = cpu_to_be16(offset & QM_SG_OFF_MASK);
  20 }
  21 
  22 static inline void dma_to_qm_sg_one(struct qm_sg_entry *qm_sg_ptr,
  23                                     dma_addr_t dma, u32 len, u16 offset)
  24 {
  25         __dma_to_qm_sg(qm_sg_ptr, dma, offset);
  26         qm_sg_entry_set_len(qm_sg_ptr, len);
  27 }
  28 
  29 static inline void dma_to_qm_sg_one_last(struct qm_sg_entry *qm_sg_ptr,
  30                                          dma_addr_t dma, u32 len, u16 offset)
  31 {
  32         __dma_to_qm_sg(qm_sg_ptr, dma, offset);
  33         qm_sg_entry_set_f(qm_sg_ptr, len);
  34 }
  35 
  36 static inline void dma_to_qm_sg_one_ext(struct qm_sg_entry *qm_sg_ptr,
  37                                         dma_addr_t dma, u32 len, u16 offset)
  38 {
  39         __dma_to_qm_sg(qm_sg_ptr, dma, offset);
  40         qm_sg_ptr->cfg = cpu_to_be32(QM_SG_EXT | (len & QM_SG_LEN_MASK));
  41 }
  42 
  43 static inline void dma_to_qm_sg_one_last_ext(struct qm_sg_entry *qm_sg_ptr,
  44                                              dma_addr_t dma, u32 len,
  45                                              u16 offset)
  46 {
  47         __dma_to_qm_sg(qm_sg_ptr, dma, offset);
  48         qm_sg_ptr->cfg = cpu_to_be32(QM_SG_EXT | QM_SG_FIN |
  49                                      (len & QM_SG_LEN_MASK));
  50 }
  51 
  52 /*
  53  * convert scatterlist to h/w link table format
  54  * but does not have final bit; instead, returns last entry
  55  */
  56 static inline struct qm_sg_entry *
  57 sg_to_qm_sg(struct scatterlist *sg, int len,
  58             struct qm_sg_entry *qm_sg_ptr, u16 offset)
  59 {
  60         int ent_len;
  61 
  62         while (len) {
  63                 ent_len = min_t(int, sg_dma_len(sg), len);
  64 
  65                 dma_to_qm_sg_one(qm_sg_ptr, sg_dma_address(sg), ent_len,
  66                                  offset);
  67                 qm_sg_ptr++;
  68                 sg = sg_next(sg);
  69                 len -= ent_len;
  70         }
  71         return qm_sg_ptr - 1;
  72 }
  73 
  74 /*
  75  * convert scatterlist to h/w link table format
  76  * scatterlist must have been previously dma mapped
  77  */
  78 static inline void sg_to_qm_sg_last(struct scatterlist *sg, int len,
  79                                     struct qm_sg_entry *qm_sg_ptr, u16 offset)
  80 {
  81         qm_sg_ptr = sg_to_qm_sg(sg, len, qm_sg_ptr, offset);
  82         qm_sg_entry_set_f(qm_sg_ptr, qm_sg_entry_get_len(qm_sg_ptr));
  83 }
  84 
  85 #endif /* __SG_SW_QM_H */

/* [<][>][^][v][top][bottom][index][help] */