cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sg_sw_qm2.h (1416B)


      1/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
      2/*
      3 * Copyright 2015-2016 Freescale Semiconductor, Inc.
      4 * Copyright 2017 NXP
      5 */
      6
      7#ifndef _SG_SW_QM2_H_
      8#define _SG_SW_QM2_H_
      9
     10#include <soc/fsl/dpaa2-fd.h>
     11
     12static inline void dma_to_qm_sg_one(struct dpaa2_sg_entry *qm_sg_ptr,
     13				    dma_addr_t dma, u32 len, u16 offset)
     14{
     15	dpaa2_sg_set_addr(qm_sg_ptr, dma);
     16	dpaa2_sg_set_format(qm_sg_ptr, dpaa2_sg_single);
     17	dpaa2_sg_set_final(qm_sg_ptr, false);
     18	dpaa2_sg_set_len(qm_sg_ptr, len);
     19	dpaa2_sg_set_bpid(qm_sg_ptr, 0);
     20	dpaa2_sg_set_offset(qm_sg_ptr, offset);
     21}
     22
     23/*
     24 * convert scatterlist to h/w link table format
     25 * but does not have final bit; instead, returns last entry
     26 */
     27static inline struct dpaa2_sg_entry *
     28sg_to_qm_sg(struct scatterlist *sg, int len,
     29	    struct dpaa2_sg_entry *qm_sg_ptr, u16 offset)
     30{
     31	int ent_len;
     32
     33	while (len) {
     34		ent_len = min_t(int, sg_dma_len(sg), len);
     35
     36		dma_to_qm_sg_one(qm_sg_ptr, sg_dma_address(sg), ent_len,
     37				 offset);
     38		qm_sg_ptr++;
     39		sg = sg_next(sg);
     40		len -= ent_len;
     41	}
     42	return qm_sg_ptr - 1;
     43}
     44
     45/*
     46 * convert scatterlist to h/w link table format
     47 * scatterlist must have been previously dma mapped
     48 */
     49static inline void sg_to_qm_sg_last(struct scatterlist *sg, int len,
     50				    struct dpaa2_sg_entry *qm_sg_ptr,
     51				    u16 offset)
     52{
     53	qm_sg_ptr = sg_to_qm_sg(sg, len, qm_sg_ptr, offset);
     54	dpaa2_sg_set_final(qm_sg_ptr, true);
     55}
     56
     57#endif /* _SG_SW_QM2_H_ */