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_qm.h (2221B)


      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
     13static 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
     22static 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
     29static 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
     36static 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
     43static 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 */
     56static inline struct qm_sg_entry *
     57sg_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 */
     78static 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 */